1) 牛顿法
-
假设目标函数为f(x)f(x)f(x)
-
牛顿法推导:
将f(x)f(x)f(x)在xkx^kxk用泰勒公式二阶展开,得
f(x)=f(x(k))+gkT(x−x(k))+12(x−x(k))TH(x(k))(x−x(k)) (1)f(x)=f\left(x^{(k)}\right)+g_{k}^{\mathrm{T}}\left(x-x^{(k)}\right)+\frac{1}{2}\left(x-x^{(k)}\right)^{\mathrm{T}} H\left(x^{(k)}\right)\left(x-x^{(k)}\right)\ \ \ \ \ \ \ \ (1)f(x)=f(x(k))+gkT(x−x(k))+21(x−x(k))TH(x(k))(x−x(k)) (1)
将上边公式对x求导可得(注意gkTg_{k}^{\mathrm{T}}gkT与H(x(k))H(x^{(k)})H(x(k))都是常数项,自变量已经固定为x(k)x^{(k)}x(k)),得到x=xkx=x_kx=xk邻域内的∇f(x)\nabla f(x)∇f(x)的近似函数
∇f(x)=gk+Hk(x−x(k)) (2) \nabla f(x)=g_{k}+H_{k}\left(x-x^{(k)}\right) \ \ \ \ \ \ \ \ (2) ∇f(x)=gk+Hk(x−x(k)) (2)
由于f(x)f(x)f(x) 在∇f(x)=0\nabla f(x)=0∇f(x)=0的地方得到极值点(假如为凸函数则为最优点),那么直接令∇f(x)\nabla f(x)∇f(x)的近似函数(2)等于0即可得到下一次迭代的x(k+1)x^{(k+1)}x(k+1)。
令公式(2)等于0,可得牛顿法的迭代公式x(k+1)=x(k)−Hk−1gk (3) x^{(k+1)}=x^{(k)}-H_{k}^{-1} g_{k} \ \ \ \ \ (3) x(k+1)=x(k)−Hk−1gk (3)
-
牛顿法的一步到位:当f(x)f(x)f(x)的二阶导是常数时,那么对于∇f(x)\nabla f(x)∇f(x)的泰勒展开式就完全没有误差,可以一步到位了!
如当f(x)=x2f(x)=x^2f(x)=x2时,若x0=2,g0=4,H0−1=0.5x^0 = 2,g_0=4,H^{-1}_0=0.5x0=2,g0=4,H0−1=0.5,则x1=2−4×0.5=0x_1 = 2-4\times 0.5=0x1=2−4×0.5=0,直接就迭代到了最优解x=0x=0x=0。
-
更新方向正确性:如果HkH_kHk是正定的,那么可以保证当前的迭代方向(仅仅是方向,不是具体的迭代量)pk=−λgkp_{k}=-\lambda g_{k}pk=−λgk是下降方向。HkH_kHk正定代表当前梯度的导数在任意基方向都是要增大的。由公式(3)可得
x=x(k)+λpk=x(k)−λHk−1gk (4)x=x^{(k)}+\lambda p_{k}=x^{(k)}-\lambda H_{k}^{-1} g_{k} \ \ \ \ \ (4)x=x(k)+λpk=x(k)−λHk−1gk (4)
将公式(4)代入f(x)f(x)f(x)的一阶泰勒展开公式,可得
f(x)=f(x(k))+gkT(x−x(k))=f(x(k))−λgkTHk−1gk (5) f(x)=f\left(x^{(k)}\right)+g_{k}^{\mathrm{T}}\left(x-x^{(k)}\right)=f\left(x^{(k)}\right)-\lambda g_{k}^{\mathrm{T}} H_{k}^{-1} g_{k} \ \ \ \ \ (5) f(x)=f(x(k))+gkT(x−x(k))=f(x(k))−λgkTHk−1gk (5)
由于HkH_kHk正定因此Hk−1H_k^{-1}Hk−1也是正定的,若gk!=0g_{k}!=0gk!=0可得gkTHk−1gk>0g_{k}^{\mathrm{T}} H_{k}^{-1} g_{k}>0gkTHk−1gk>0。当λ\lambdaλ为足够小的正数时f(x)<f(x(k))f(x)<f\left(x^{(k)}\right)f(x)<f(x(k))。
-
收敛性分析:与梯度下降比较,可以对梯度下降作类似的分析。梯度下降的更新公式为x=x(k)−λgkx=x^{(k)}-\lambda g_{k}x=x(k)−λgk,将其代入f(x)f(x)f(x)的一阶泰勒展开公式
f(x)=f(x(k))+gkT(x−x(k))=f(x(k))−λgkTgk (6) f(x)=f\left(x^{(k)}\right)+g_{k}^{\mathrm{T}}\left(x-x^{(k)}\right)=f\left(x^{(k)}\right)-\lambda g_{k}^{\mathrm{T}} g_{k} \ \ \ \ \ (6) f(x)=f(x(k))+gkT(x−x(k))=f(x(k))−λgkTgk (6)
然后我们发现公式(5)和公式(6)可以近似地表示了牛顿法与梯度下降法的区别。公式(5)和公式(6)只有一个地方有区别,就是牛顿法的迭代量是 λgkTHk−1gk\lambda g_{k}^{\mathrm{T}} H_{k}^{-1} g_{k}λgkTHk−1gk,而梯度下降的迭代量是 λgkTgk\lambda g_{k}^{\mathrm{T}} g_{k}λgkTgk,区别在于Hk−1H_{k}^{-1}Hk−1。
假设目标函数是一个凸函数。当曲线很平缓的时候,HkH_{k}Hk会比较小从而Hk−1H_{k}^{-1}Hk−1会较大导致加大牛顿法的迭代量。当HkH_{k}Hk比较大而Hk−1H_{k}^{-1}Hk−1比较小的时候曲线比较陡峭,这个时候要走得小心一点慢一点,Hk−1H_{k}^{-1}Hk−1比较小导致牛顿法的迭代量也变小了。这就比较好理解,为什么牛顿法会比梯度下降法收敛得更加快了!
2)拟牛顿法
- 牛顿法存在的问题:由牛顿法的更新公式(3)可知,每次迭代的时候都需要去算二阶导矩阵hessian矩阵的逆矩阵,这个操作非常复杂。
- 由公式(2)可以推出
gk+1−gk=Hk(x(k+1)−x(k)) (7) g_{k+1}-g_{k}=H_{k}\left(x^{(k+1)}-x^{(k)}\right) \ \ (7) gk+1−gk=Hk(x(k+1)−x(k)) (7)
令yk=gk+1−gky_{k}=g_{k+1}-g_{k}yk=gk+1−gk,δk=x(k+1)−x(k)\delta_{k}=x^{(k+1)}-x^{(k)}δk=x(k+1)−x(k),则
Hk−1yk=δk (8)H^{-1}_ky_k = \delta_k \ \ (8)Hk−1yk=δk (8)
公式(8)又称为拟牛顿条件。 - 拟牛顿法用一个n阶矩阵GkG_kGk来代替Hk−1H_k^{-1}Hk−1。拟牛顿法对于GkG_kGk进行迭代运算
Gk+1=Gk+ΔGk (9) G_{k+1}=G_{k}+\Delta G_{k} \ \ (9) Gk+1=Gk+ΔGk (9)
1. DFP(Davidon-Fletcher-Powell)算法
- 算法:DFP选择用两个附加项来迭代更新
Gk+1=Gk+Pk+Qk (10)G_{k+1} = G_k + P_k + Q_k \ \ (10)Gk+1=Gk+Pk+Qk (10)
因此可得,Gk+1yk=Gkyk+Pkyk+QkykG_{k+1}y_k = G_ky_k + P_ky_k + Q_ky_kGk+1yk=Gkyk+Pkyk+Qkyk。其中Pk,QkP_k, Q_kPk,Qk是待定矩阵。为了使Gk+1G_k+1Gk+1满足拟牛顿条件,要满足
Pkyk=δk, Qkyk=−Gkyk (11)P_ky_k=\delta_k, \ \ \ \ \ \ \ Q_ky_k=-G_ky_k \ \ (11)Pkyk=δk, Qkyk=−Gkyk (11) - PkP_kPk与QkQ_kQk可以这样得到
Pk=δkδkTδkTyk,Qk=−GkykykTGkykTGkyk (12) P_{k}=\frac{\delta_{k} \delta_{k}^{\mathrm{T}}}{\delta_{k}^{\mathrm{T}} y_{k}}, Q_{k}=-\frac{G_{k} y_{k} y_{k}^{\mathrm{T}} G_{k}}{y_{k}^{\mathrm{T}} G_{k} y_{k}} \ \ \ (12) Pk=δkTykδkδkT,Qk=−ykTGkykGkykykTGk (12) - 停止条件:一般为一阶导数小于某个阈值或者迭代次数达到一定代数
- 正定:如果初始矩阵G0G_0G0是正定的,则迭代过程中的每个GkG_kGk都是正定的
2. BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法
- 定义:与DFP算法不同,BFGS直接用BkB_kBk逼近hessian矩阵HHH(DFP用GkG_kGk来逼近Hk−1H_k^{-1}Hk−1)。BDGS对应的牛顿条件为
Bk+1δk=yk B_{k+1}\delta_k = y_k Bk+1δk=yk - 拟合方法:与DFP类似,使用Bk+1=Bk+Pk+QkB_{k+1} = B_k + P_k +Q_kBk+1=Bk+Pk+Qk,应满足Pkδk=yk,Qkδk=−BkδkP_k\delta_k=y_k,Q_k\delta_k=-B_k\delta_kPkδk=yk,Qkδk=−Bkδk。Pk,QkP_k, Q_kPk,Qk可以这样得出
Pk=ykykTykTδk,Qk=−BkδkδkTBkδkTBkδk (12) P_{k}=\frac{y_{k} y_{k}^{\mathrm{T}}}{y_{k}^{\mathrm{T}} \delta_{k}}, Q_{k}=-\frac{B_{k} \delta_{k} \delta_{k}^{\mathrm{T}} B_{k}}{\delta_{k}^{\mathrm{T}} B_{k} \delta_{k}} \ \ \ (12) Pk=ykTδkykykT,Qk=−δkTBkδkBkδkδkTBk (12) - 正定:如果初始矩阵B0B_0B0是正定的,则迭代过程中的每个BkB_kBk都是正定的