牛顿法和拟牛顿法
牛顿法(Newton method)和拟牛顿法(quasi-Newton method)和梯度下降法一样也是求解最优化问题的常用方法,但是他们的收敛速度比梯度下降法快。牛顿法是迭代算法,每一步都需要求目标函数的海森矩阵的逆矩阵,计算复杂;拟牛顿法通过正定矩阵近似海森矩阵的逆矩阵,简化这个计算过程。
牛顿法详解
无约束最优化问题
对于一个约束问题
m
i
n
⏟
x
∈
R
n
f
(
x
)
\underbrace{min}_{x\in{R^n}}f(x)
x∈Rn
minf(x)
其中
x
∗
x^*
x∗为目标函数的极小点。
牛顿法迭代公式
假设
f
(
x
)
f(x)
f(x)具有二阶连续偏导数,如果第
k
k
k次迭代值为
x
(
k
)
x^{(k)}
x(k),则可以把
f
(
x
)
f(x)
f(x)在
x
(
k
)
x^{(k)}
x(k)附近使用二阶泰勒展开
f
(
x
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
−
x
(
k
)
)
+
1
2
(
x
−
x
(
k
)
)
T
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)})
f(x)=f(x(k))+gkT(x−x(k))+21(x−x(k))TH(x(k))(x−x(k))
其中
g
k
=
g
(
x
(
k
)
)
=
∇
f
(
x
(
k
)
)
g_k=g(x^{(k)})=\nabla{f(x^{(k)})}
gk=g(x(k))=∇f(x(k))是
f
(
x
)
f(x)
f(x)的梯度向量在点
x
(
k
)
x^{(k)}
x(k)的值,
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))是
f
(
x
)
f(x)
f(x)的海森矩阵
H
(
x
)
=
[
∂
2
f
∂
x
i
∂
x
j
]
m
∗
n
H(x)=[\frac{\partial^2f}{\partial{x_i}\partial{x_j}}]_{m*n}
H(x)=[∂xi∂xj∂2f]m∗n
在点
x
(
k
)
x^{(k)}
x(k)的值。函数
f
(
x
)
f(x)
f(x)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别是当
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))是正定矩阵的时候,函数
f
(
x
)
f(x)
f(x)的极值为极小值。
牛顿法利用极小点的必要条件
∇
f
(
x
)
=
0
\nabla{f(x)}=0
∇f(x)=0
每次迭代中从点
x
(
k
)
x^{(k)}
x(k)开始,求目标函数的极小点,作为第
k
+
1
k+1
k+1次迭代值
x
(
k
+
1
)
x^{(k+1)}
x(k+1),即假设
x
(
k
+
1
)
x^{(k+1)}
x(k+1)满足
∇
f
(
x
(
k
+
1
)
=
0
\nabla{f(x^{(k+1)}}=0
∇f(x(k+1)=0
通过泰勒二阶展开式即可得
∇
f
(
x
)
=
g
k
+
H
k
(
x
−
x
(
k
)
)
\nabla{f(x)}=g_k+H_k(x-x^{(k)})
∇f(x)=gk+Hk(x−x(k))
其中
H
k
=
H
(
x
(
k
)
)
H_k=H(x^{(k)})
Hk=H(x(k)),由此
∇
f
(
x
(
k
+
1
)
=
0
\nabla{f(x^{(k+1)}}=0
∇f(x(k+1)=0变成
g
k
+
H
k
(
x
(
k
+
1
)
−
x
(
k
)
)
=
0
g_k+H_k(x^{(k+1)}-x^{(k)}) = 0
gk+Hk(x(k+1)−x(k))=0
因此
x
(
k
+
1
)
=
x
(
k
)
−
H
k
−
1
g
k
x^{(k+1)}=x^{(k)}-H_k^{-1}g_k
x(k+1)=x(k)−Hk−1gk
或
x
(
k
+
1
)
=
x
(
k
)
+
p
k
x^{(k+1)}=x^{(k)}+p_k
x(k+1)=x(k)+pk
其中
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & x^{(k+1)}=x^…
使用
x
(
k
+
1
)
=
x
(
k
)
−
H
k
−
1
g
k
x^{(k+1)}=x^{(k)}-H_k^{-1}g_k
x(k+1)=x(k)−Hk−1gk作为迭代公式的算法就是牛顿法。
牛顿法和梯度下降法
从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
虽然牛顿法看起来比梯度下降法好很多,但是别忘记了牛顿法迭代过程中需要计算海森矩阵的逆矩阵,如果数据量较大的话,牛顿法的计算开销将远远大于梯度下降法。
牛顿法流程
输入
目标函数 f ( x ) f(x) f(x),梯度 g ( x ) = ∇ f ( x ) g(x)=\nabla{f(x)} g(x)=∇f(x),海森矩阵 H ( x ) H(x) H(x),精度要求 ϵ \epsilon ϵ
输出
f ( x ) f(x) f(x)的极小点 x ∗ x^* x∗
流程
- 取初始点 x ( 0 ) x^{(0)} x(0),并且让 k = 0 k=0 k=0
- 计算 g k = g ( x ( k ) ) g_k=g(x^{(k)}) gk=g(x(k))
- 如果 ∣ ∣ g k ∣ ∣ ≤ ϵ ||g_k||\leq\epsilon ∣∣gk∣∣≤ϵ,停止计算,得到近似解 x ∗ = x ( k ) x^*=x^{(k)} x∗=x(k)
- 计算
H
k
=
H
(
x
(
k
)
)
H_k=H(x^{(k)})
Hk=H(x(k)),并求出
p
k
p_k
pk
H k p k = − g k H_kp_k=-g_k Hkpk=−gk - 让 x ( k + 1 ) = x ( k ) + p k x^{(k+1)}=x^{(k)}+p_k x(k+1)=x(k)+pk
- 让 k = k + 1 k=k+1 k=k+1,转到第2步
在第4步求 p k p_k pk的时候, p k = − H k − 1 g k p_k=-H_k^{-1}g_k pk=−Hk−1gk,要求求海森矩阵的逆矩阵 H k − 1 H_k^{-1} Hk−1,计算会比较复杂。
拟牛顿法简介
在牛顿法的迭代中,需要计算海森矩阵的逆矩阵 H − 1 H^{-1} H−1,这个过程是比较复杂的,而拟牛顿法则使用了一个 n n n阶矩阵 G k = G ( x ( k ) ) G_k=G(x^{(k)}) Gk=G(x(k))近似替代 H k − 1 = H − 1 ( x ( k ) ) H_k^{-1}=H^{-1}(x^{(k)}) Hk−1=H−1(x(k)),此处不多赘述。