1) 牛顿法
-
假设目标函数为 f ( x ) f(x) f(x)
-
牛顿法推导:
将 f ( x ) f(x) f(x)在 x k x^k xk用泰勒公式二阶展开,得
f ( x ) = f ( x ( k ) ) + g k T ( x − x ( k ) ) + 1 2 ( x − x ( k ) ) T H ( 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求导可得(注意 g k T g_{k}^{\mathrm{T}} gkT与 H ( x ( k ) ) H(x^{(k)}) H(x(k))都是常数项,自变量已经固定为 x ( k ) x^{(k)} x(k)),得到 x = x k x=x_k x=xk邻域内的 ∇ f ( x ) \nabla f(x) ∇f(x)的近似函数
∇ f ( x ) = g k + H k ( 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 ) − H k − 1 g k ( 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 ) = x 2 f(x)=x^2 f(x)=x2时,若 x 0 = 2 , g 0 = 4 , H 0 − 1 = 0.5 x^0 = 2,g_0=4,H^{-1}_0=0.5 x0=2,g0=4,H0−1=0.5,则 x 1 = 2 − 4 × 0.5 = 0 x_1 = 2-4\times 0.5=0 x1=2−4×0.5=0,直接就迭代到了最优解 x = 0 x=0 x=0。
-
更新方向正确性:如果 H k H_k Hk是正定的,那么可以保证当前的迭代方向(仅仅是方向,不是具体的迭代量) p k = − λ g k p_{k}=-\lambda g_{k} pk=−λgk是下降方向。 H k H_k Hk正定代表当前梯度的导数在任意基方向都是要增大的。由公式(3)可得
x = x ( k ) + λ p k = x ( k ) − λ H k − 1 g k ( 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 ) ) + g k T ( x − x ( k ) ) = f ( x ( k ) ) − λ g k T H k − 1 g k ( 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)
由于 H k H_k Hk正定因此 H k − 1 H_k^{-1} Hk−1也是正定的,若 g k ! = 0 g_{k}!=0 gk!=0可得 g k T H k − 1 g k > 0 g_{k}^{\mathrm{T}} H_{k}^{-1} g_{k}>0 gkTHk−1gk>0。当 λ \lambda λ为足够小的正数时 f ( x ) < f ( x ( k ) ) f(x)<f\left(x^{(k)}\right) f(x)<f(x(k))。
-
收敛性分析:与梯度下降比较,可以对梯度下降作类似的分析。梯度下降的更新公式为 x = x ( k ) − λ g k x=x^{(k)}-\lambda g_{k} x=x(k)−λgk,将其代入 f ( x ) f(x) f(x)的一阶泰勒展开公式
f ( x ) = f ( x ( k ) ) + g k T ( x − x ( k ) ) = f ( x ( k ) ) − λ g k T g k ( 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)只有一个地方有区别,就是牛顿法的迭代量是 λ g k T H k − 1 g k \lambda g_{k}^{\mathrm{T}} H_{k}^{-1} g_{k} λgkTHk−1gk,而梯度下降的迭代量是 λ g k T g k \lambda g_{k}^{\mathrm{T}} g_{k} λgkTgk,区别在于 H k − 1 H_{k}^{-1} Hk−1。
假设目标函数是一个凸函数。当曲线很平缓的时候, H k H_{k} Hk会比较小从而 H k − 1 H_{k}^{-1} Hk−1会较大导致加大牛顿法的迭代量。当 H k H_{k} Hk比较大而 H k − 1 H_{k}^{-1} Hk−1比较小的时候曲线比较陡峭,这个时候要走得小心一点慢一点, H k − 1 H_{k}^{-1} Hk−1比较小导致牛顿法的迭代量也变小了。这就比较好理解,为什么牛顿法会比梯度下降法收敛得更加快了!
2)拟牛顿法
- 牛顿法存在的问题:由牛顿法的更新公式(3)可知,每次迭代的时候都需要去算二阶导矩阵hessian矩阵的逆矩阵,这个操作非常复杂。
- 由公式(2)可以推出
g k + 1 − g k = H k ( 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)
令 y k = g k + 1 − g k y_{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),则
H k − 1 y k = δ k ( 8 ) H^{-1}_ky_k = \delta_k \ \ (8) Hk−1yk=δk (8)
公式(8)又称为拟牛顿条件。 - 拟牛顿法用一个n阶矩阵
G
k
G_k
Gk来代替
H
k
−
1
H_k^{-1}
Hk−1。拟牛顿法对于
G
k
G_k
Gk进行迭代运算
G k + 1 = G k + Δ G k ( 9 ) G_{k+1}=G_{k}+\Delta G_{k} \ \ (9) Gk+1=Gk+ΔGk (9)
1. DFP(Davidon-Fletcher-Powell)算法
- 算法:DFP选择用两个附加项来迭代更新
G k + 1 = G k + P k + Q k ( 10 ) G_{k+1} = G_k + P_k + Q_k \ \ (10) Gk+1=Gk+Pk+Qk (10)
因此可得, G k + 1 y k = G k y k + P k y k + Q k y k G_{k+1}y_k = G_ky_k + P_ky_k + Q_ky_k Gk+1yk=Gkyk+Pkyk+Qkyk。其中 P k , Q k P_k, Q_k Pk,Qk是待定矩阵。为了使 G k + 1 G_k+1 Gk+1满足拟牛顿条件,要满足
P k y k = δ k , Q k y k = − G k y k ( 11 ) P_ky_k=\delta_k, \ \ \ \ \ \ \ Q_ky_k=-G_ky_k \ \ (11) Pkyk=δk, Qkyk=−Gkyk (11) -
P
k
P_k
Pk与
Q
k
Q_k
Qk可以这样得到
P k = δ k δ k T δ k T y k , Q k = − G k y k y k T G k y k T G k y k ( 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) - 停止条件:一般为一阶导数小于某个阈值或者迭代次数达到一定代数
- 正定:如果初始矩阵 G 0 G_0 G0是正定的,则迭代过程中的每个 G k G_k Gk都是正定的
2. BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法
- 定义:与DFP算法不同,BFGS直接用
B
k
B_k
Bk逼近hessian矩阵
H
H
H(DFP用
G
k
G_k
Gk来逼近
H
k
−
1
H_k^{-1}
Hk−1)。BDGS对应的牛顿条件为
B k + 1 δ k = y k B_{k+1}\delta_k = y_k Bk+1δk=yk - 拟合方法:与DFP类似,使用
B
k
+
1
=
B
k
+
P
k
+
Q
k
B_{k+1} = B_k + P_k +Q_k
Bk+1=Bk+Pk+Qk,应满足
P
k
δ
k
=
y
k
,
Q
k
δ
k
=
−
B
k
δ
k
P_k\delta_k=y_k,Q_k\delta_k=-B_k\delta_k
Pkδk=yk,Qkδk=−Bkδk。
P
k
,
Q
k
P_k, Q_k
Pk,Qk可以这样得出
P k = y k y k T y k T δ k , Q k = − B k δ k δ k T B k δ k T B k δ 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) - 正定:如果初始矩阵 B 0 B_0 B0是正定的,则迭代过程中的每个 B k B_k Bk都是正定的