"HessPattern"在 matlab 中不起作用?



我有这个结构来为优化问题设置求解器:

option = optimoptions(@fminunc,...
'Display','iter','GradObj','on','MaxIter',30,...
'ObjectiveLimit',10e-10,'Algorithm','quasi-newton','HessPattern',sparseH);

这样的设置对我来说似乎很好,但是当我通过调用运行我的求解器时

[P, FVAL, INFO, OUTPUT, GRAD, HESS] = fminunc (@myFunc,X0(:),option);

(字面意思是下一个电话(,我收到错误

Requested 254016x254016 (480.7GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may
take a long time and cause MATLAB to become unresponsive. See array size limit or preference panel for more information.

但是我sparseH

>> whos sparseH
Name              Size                   Bytes  Class     Attributes
sparseH      254016x254016            87043112  double    sparse    

此外,如果我设置trust-regions而不是quasi-newton算法运行。尽管对于较小的输入,我实际上可以看到quasi-newton更快。

我设置错了什么吗?

为了更好地检查我做了

>> A = sparseH(1:100,1:100);
>> sum(A(:))
ans =
(1,1)      880
>> size(A)
ans =
100   100
>> 

所以我有一个不到 1000 个,在一个总共有 10000 个条目的子矩阵中。也总计

>> sum(sparseH(:))
ans =
(1,1)        5313186
>> prod(size(sparseH))
ans =
6.4524e+10
>> 

正如评论中所讨论的:准牛顿方法似乎需要整个Hessian矩阵,并且HessPattern仅适用于信任区域类型的算法。

事实上,准牛顿方法是一种更快的算法,但通常更快的算法需要更高的内存,并且通常非常大的问题只能通过更简单的优化来解决,通过等待更长的时间(例如,神经网络只是使用梯度下降型算法求解(

最新更新