最优化上机报告(信赖域)

2019-12-23  本文已影响0人  苏格兰低地弟弟打滴滴

第三次上机作业

王秋皓

2015012101

本上机作业报告分成四个部分:一,信赖域方法概述;二,数值实验;三,总结/与线搜索比较

信赖与方法概述

函数在任意一点x_k处有二次泰勒展开的形式:f\left(x_{k}+p\right)=f_{k}+g_{k}^{T} p+\frac{1}{2} p^{T} \nabla^{2} f\left(x_{k}+t p\right) p,信赖域方法的思想就是每一步用一个对称矩阵B替代二阶项里的hessian矩阵:

m_{k}(p)=f_{k}+g_{k}^{T} p+\frac{1}{2} p^{T} B_{k} p

得到一个 f  局部的逼近。然后在一个小范围内求解下面的优化问题:

\min _{p \in R^{n}} m_{k}(p)=f_{k}+g_{k}^{T} p+\frac{1}{2} p^{T} B_{k} p \quad \text { s.t. }\|p\| \leq \Delta_{k}

求出来的p作为x的更新方向。

由于我们往往难以得到上面优化问题准确的解,但是一个近似的解往往就有很好的效果。

在求出p之后,我们用系数:\rho_{k}=\frac{f\left(x_{k}\right)-f\left(x_{k}+p_{k}\right)}{m_{k}(0)-m_{k}\left(p_{k}\right)}衡量近似的效果。如果rho很接近1,说明二次近似拟合的很好,而且f得到了足够的下降,所以这时候我们的信赖域半径是比较可靠的,可以稍微放大以期更快的下降。如果rho特别小,甚至小于0(那 f 反而增加了),说明拟合效果不好,所以我们应该缩小信赖域半径,让函数拟合更好点。

基于这样的思路,在不同的选择p的框架下,算法中信赖域大小选择遵循以下的算法:

有以下三种常用的方法求p:

Cauchy方法:最速下降法本身就有全局收敛性质,所以直接往负梯度方向下降,限制步长为delta,是一种方法。设范数为delta的方向:p_{k}^{s}=-\frac{\Delta_{k}}{\left\|g_{k}\right\|} g_{k},我们的下降的p取为p_{k}^{C}=-\tau_{k} \frac{\Delta_{k}}{\left\|g_{k}\right\|} g_{k},解二次函数极小值问题就很容易得到:

\tau_{k}=\left\{\begin{array}{ll}{1} & {\text { if } g_{k}^{T} B_{k} g_{k} \leq 0} \\{\min \left(\left\|g_{k}\right\|^{3} /\left(\Delta_{k} g_{k}^{T} B_{k} g_{k}\right), 1\right)} & {\text { otherwise }}\end{array}\right.

Hebden 方法 :分析信赖域方法可知道,d*是最优的方向当且仅当\begin{array}{l}{(B+\lambda I) d^{*}=-g_{k}} \\{\lambda\left(\left\|d^{*}\right\|-\Delta\right)=0}\end{array}以及(B+\lambda I)是半正定成立。所以考虑正交分解:B=Q \Lambda Q^{T}

得到p(\lambda)=-(B+\lambda I)^{-1} g=-Q(\Lambda+\lambda I)^{-1} Q^{T} g=-\sum_{j=1}^{n} \frac{q_{j}^{T} g}{\lambda_{j}+\lambda} q_{j}

根据q的正交性得到:\|p(\lambda)\|^{2}=\sum_{j=1}^{n} \frac{\left(q_{j}^{T} g\right)^{2}}{\left(\lambda_{j}+\lambda\right)^{2}}

我们想要找lambda让上式等于delta^2,简单分析可知在\lambda \in\left(-\lambda_{1}, \infty\right)中刚好有一个lambda满足。

所以我们可以做一个子问题的迭代,去比较快找到这个lambda的近似。以下方法被证明是有效的:

考虑一个函数\phi_{2}(\lambda)=\frac{1}{\Delta}-\frac{1}{\|p(\lambda)\|},采用这样的迭代方式:\lambda^{(l+1)}=\lambda^{(l)}-\frac{\phi_{2}\left(\lambda^{(l)}\right)}{\phi_{2}^{\prime}\left(\lambda^{(l)}\right)}

这在代码中有体现。代码中参考Nocedal给了中基于Cholesky分解的更好计算的方法。

二维子空间方法

最速下降的方向是-g,牛顿迭代的方向是-B^{-1} g(如果B正定),所以在这个的二维子空间里找最好的p是比较合理的。

如果B是非正定,那么B有0特征的时候就简单用柯西点方法,如果B有负特征的时候用一步修正的正定矩阵。(在代码中有体现)

数值实验

对以下三种检验函数,分别考察三种信赖与方法的效果:

Extended Powell singular 函数

实验结果如上。在code中使用函数Fun2,Grad2,Hess2 并且用test_ExtPow.m检验(需要手动改下使用的函数)。迭代终止准则设置成梯度的norm小于1e-8,但是并没有收敛到这么小。所以我考虑增加迭代次数,让函数值量级上没有明显下降为止。

总体上看,这三种方法在时间上都很快,从结果上看,二维子空间方法对这个检验函数效果更好一点,因为能得到更小的函数值。但是从收敛速度上看,Hebden最快。下图是m=5时候Hebden的收敛情况(函数值),很快从几千降到1e-4左右,用了十几次迭代。

另外我发现Cauchy方法对delta的大小不敏感,但是Hebden对delta大小是敏感的。而且继续增加迭代次数应该能让二维子空间方法的函数值小到更小的量级,但是Cauchy并不会更好。

Powell Badly scaled function.

实验结果如上。在code中使用函数Fun1,Grad1,Hess1 并且用test_PBS.m检验(需要手动改下使用的函数)。迭代终止准则设置成梯度的norm小于1e-8,但是并没有收敛到这么小。所以我考虑增加迭代次数,让函数值量级上没有明显下降为止。

不知道为什么Hebden就不收敛了,函数值变化如下图

对于其他两种方法,也都没法收敛特别好,我列出了log10(y)的对比

Cauchy 2D

柯西点需要几百次收敛到e-2这个量级,然后也没法更好了。2D一开始收敛比较好,但后面也很缓慢。

Biggs EXP6 函数

实验结果如上。在code中使用函数Fun3,Grad3,Hess3 并且用test_EXP6 .m检验(需要手动改下使用的函数)。迭代终止准则设置成梯度的norm小于1e-8,但是并没有收敛到这么小。所以我考虑增加迭代次数,让函数值量级上没有明显下降为止。

这个函数呈现出比较有意思的现象:

Cauchy方法收敛,但是比较慢,最后函数值也没有很小,大概在1e-3左右。

2D方法会一开始收敛慢,但是接近最小值会快速收敛,下图给出log10(函数值)变化:

m=10,12

所以2D方法应该是在极值点附近的时候会快速收敛。

但是对Hebden方法,震荡很厉害,甚至不收敛。如图:(log10(函数值))

m=8,10,12

通过观察迭代次数和调用次数也可以发现,迭代次数多很多次(因为Hebden有个子问题,也有迭代)说明子问题里就没有收敛!我想这是这个方法没有收敛的原因。

而且可以看到第二个图里卖弄一开始量级都差不多突然发散了,说明如果初始取那个点就是会发散的。所以两个很相近的初始会带来很大的差别

总结

从这几个有限的例子里,感觉Hebden并不是很稳定,因为在两个检验函数中表现不好。但是Hebden对于extended power又能很快收敛。

相较而言2D方法好像稳定点,但是要更多的迭代次数。

Cauchy方法没有什么出彩的地方,我觉得应该是它本身和newton法就没多大区别。

和第一次作业线搜索比较来看,信赖域方法好像更依赖于初始一点,初始选的不好可能会发散(主要是没有好的二次拟合)但是信赖域比普通线搜索快一点。

上一篇 下一篇

猜你喜欢

热点阅读