牛顿方法
牛顿方法是现在用的比较广泛的最优化算法之一,其特点是收敛速度较快,上一节的梯度下降和随机梯度下降都是一阶收敛,而牛顿方法是二阶收敛。
回忆高等数学里面介绍的二阶泰勒展开有
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矩阵。具体的推导不介绍了,算法伪代码如下: