牛顿方法
牛顿方法是现在用的比较广泛的最优化算法之一,其特点是收敛速度较快,上一节的梯度下降和随机梯度下降都是一阶收敛,而牛顿方法是二阶收敛。
回忆高等数学里面介绍的二阶泰勒展开有
Q(x)=f(x0)+∇f(x0)(x−x0)+(x−x0)22!∇2f(x0)
而Q(x)取到极值的条件,也就是最优化条件是∇Q(x)=0,可得∇f(xk)+∇2f(xk)(x−xk)=0
xk+1=xk−(∇2f(xk))−1∇f(xk)
xk+1=xk−H−1kgk
其中Hk=∇2f(xk),gk=∇f(xk),可以看到牛顿方法在迭代中不但使用了梯度,而且使用了二阶的hessian矩阵。
收敛性分析
假设f(x)是二阶可导,强凸,并且Hessian的有界,并且在最优解附近的Lipschitz continuous常数是M,另外∥∥∇2f(x)−1∥∥≤N,最优解为x∗则
由于
∇f(xt)−∇f(x∗)=∫10∇2f(xt+t(x∗−xt))(xt−x∗)dx
而xt+1−x∗=xt−x∗−∇2f(xt)(xt−x∗)=∇2f(xt)−1[∇2f(xt)(xt−x∗)−(∇f(xt)−∇f(x∗))]
使用上面两式还有Lipschitz continuous可得
∥∥∇f(xt)−∇f(x∗)−∇2f(xt)(xt−x∗)∥∥=∥∥∥∫10[∇2f(xt+t(x∗−xt))−∇2f(xt)](xt−x∗)dx∥∥∥
=∫10∥∥∇2f(xt+t(x∗−xt))−∇2f(xt)∥∥∥∥xt−x∗∥∥dx≤∥∥xt−x∗∥∥∫10Mtdx=M2∥∥xt−x∗∥∥2
因此可得
∥∥xt+1−x∗∥∥≤MN2∥∥xt−x∗∥∥2
拟牛顿方法
牛顿方法中需要每一步去求解hessian矩阵的逆矩阵是一个计算复杂度较高的操作,所以就出现了拟牛顿方法。拟牛顿方法就是通过近似的方法来求解hessian矩阵或其逆矩阵。具体的由于当x=xk+1时
∇f(xk+1)−∇f(xk)=Hk(xk+1−xk)
其中Hk=∇2f(x)k,记yk=gk+1−gk,sk=xk+1−xk得:yk=Hksk
或H−1kyk=sk
以上称为拟牛顿条件
如果Hk是正定的话,可以保证牛顿方法的搜索方向pk是下降方向,因为hessian矩阵正定的话,由更新迭代的公式可以知道H−1kgk的方向和梯度gk的方向一致(当目标函数为凸时),并且x=xk−λH−1kgk
代入泰勒展开公式中得f(x)=f(xk)−λgTkH−1kgk
当λ为充分小时,可以保证目标函数递减。
拟牛顿方法用Gk作为H−1k的近似,要求矩阵Gk满足同样的条件,第一,Gk是正定的,第二,满足拟牛顿条件。并且每次迭代中选择更新矩阵Gk+1如下Gk+1=Gk+ΔGk
BFGS的方法是通过Bk去逼近hessian矩阵Hk相应的拟牛顿条件为Bk+1sk=yk
并且通过上面的Hessian矩阵更新公式Bk+1=Bk+Pk+Qk
Bk+1sk=Bksk+Pksk+Qksk
且Pk Qk满足如下条件:Pksk=yk
Qksk=−Bksk
找出适合条件的Pk和Qk,得到BFGS算法矩阵Bk+1的迭代公式:Bk+1=Bk+ykyTkyTksk−BksksTkBksTkBksk
可以证明初始矩阵B0为正定的时候,Bk也是正定矩阵。
L-BFGS
拟牛顿方法中减少求逆的时间复杂度,但是又面临另外的一个问题,就是当原问题是一个高维问题时,Hessian矩阵的存储成了一个大的问题,因此有了L-BFGS算法,L-BFGS算法的思想是通过最近的m次sk和yk来近似计算下降方向,并且不用去存储整个Hessian矩阵。具体的推导不介绍了,算法伪代码如下: