Levenberg-Marquardt算法(LM)的前世今生
本文将从优化算法当中的梯度下降法的发展,从最基本的最速下降法逐个介绍,最后介绍LM方法,顺序如下:
问题引入
优化算法的目标就是求解目标函数的最大值或最小值。我们假设要求解函数
F
(
x
)
F(x)
F(x)的最小值:
min
x
F
(
x
)
\min\limits_x F(x)
xminF(x)
假设目标函数为凸函数(随后的几种方法也是利用了最小二乘法,假设目标函数为开口朝上的二次函数,属于凸优化问题)。
直观方法:由于是凸优化问题,直接求
F
′
(
x
)
=
0
F'(x) = 0
F′(x)=0的解,得到极小值。但是求解
d
F
d
x
=
0
\frac{dF}{dx} = 0
dxdF=0过于复杂,采用逐步逼近极值点的方法(梯度下降法)求解。
最速下降法(一阶梯度下降法)
对
F
(
x
)
F(x)
F(x)作一阶泰勒展开:
F
(
x
k
+
Δ
x
k
)
≈
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
F(x_k + \Delta x_k) \approx F(x_k) +J(x_k)^T\Delta x_k
F(xk+Δxk)≈F(xk)+J(xk)TΔxk
其中
J
(
x
k
)
T
J(x_k)^T
J(xk)T为
F
(
x
)
F(x)
F(x)的雅克布矩阵(梯度矩阵,即一阶导)。要逐步逼近最小值,实际上就是确定
Δ
x
k
\Delta x_k
Δxk的取值情况(
x
x
x应该朝哪个方向变化)。最速下降法直接令
Δ
x
k
\Delta x_k
Δxk取梯度的反向:
Δ
x
k
=
−
λ
J
(
x
k
)
\Delta x_k = -\lambda J(x_k)
Δxk=−λJ(xk)
上式即为增量方程,
λ
\lambda
λ为步长,对应模型训练当中的Learning rate。这就是反向传播当中最初的梯度下降方法,由此往后衍生出momentum,adagrad,adam等。
牛顿法(二阶梯度下降法)
对
F
(
x
)
F(x)
F(x)作二阶泰勒展开:
F
(
x
k
+
Δ
x
k
)
≈
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
+
1
2
Δ
x
k
T
H
(
x
k
)
Δ
x
k
F(x_k + \Delta x_k) \approx F(x_k) +J(x_k)^T\Delta x_k + \frac{1}{2}\Delta x_k^T H(x_k) \Delta x_k
F(xk+Δxk)≈F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk
其中
H
(
x
k
)
H(x_k)
H(xk)为
F
(
x
)
F(x)
F(x)的Hessian Matrix何塞矩阵。我们还是需要确定增量方程,把上式看成是以
Δ
x
k
\Delta x_k
Δxk为自变量的函数,则以
Δ
x
k
\Delta x_k
Δxk为变元对上式求导,导数为0时为极小值点:
∂
(
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
+
1
2
Δ
x
k
T
H
(
x
k
)
Δ
x
k
)
∂
Δ
x
k
=
0
\frac{\partial(F(x_k) +J(x_k)^T\Delta x_k + \frac{1}{2}\Delta x_k^T H(x_k) \Delta x_k)} {\partial \Delta x_k} = 0
∂Δxk∂(F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk)=0
解得:
Δ
x
k
=
−
H
(
x
k
)
−
1
J
(
x
k
)
\Delta x_k=-\mathrm{H(x_k)^{-1} J(x_k)}
Δxk=−H(xk)−1J(xk)
上式为牛顿法的增量方程。
缺点:Hessian计算量太大。
高斯牛顿法
针对最小二乘问题。假设
f
(
x
)
f(x)
f(x)为对数据拟合的函数(模型)。
F
(
x
)
F(x)
F(x)为目标函数:
min
x
F
(
x
)
=
∣
∣
f
(
x
)
∣
∣
2
\min_\mathrm{x}\mathrm{F}\left(\mathrm{x}\right)=||\mathrm{f}\left(\mathrm{x}\right)||^2
xminF(x)=∣∣f(x)∣∣2
不同于牛顿法直接对目标函数
F
(
x
)
\mathrm{F}\left(\mathrm{x}\right)
F(x)作泰勒展开,这里对
f
(
x
)
\mathrm{f}\left(\mathrm{x}\right)
f(x)作泰勒展开。
F
(
x
)
F(x)
F(x)在
x
k
x_k
xk处,具有增量
Δ
x
k
\Delta x_k
Δxk:(
x
k
x_k
xk为第
k
k
k次迭代的变量):
min
x
F
(
x
k
+
Δ
x
k
)
=
∣
∣
f
(
x
k
+
Δ
x
k
)
∣
∣
2
\min_\mathrm{x}\mathrm{F}\left(\mathrm{x}_\mathrm{k} +\Delta\mathrm{x}_\mathrm{k} \right)=||\mathrm{f}(\mathrm{x}_\mathrm{k} +\Delta\mathrm{x}_\mathrm{k} )||^2
xminF(xk+Δxk)=∣∣f(xk+Δxk)∣∣2
对
f
(
x
)
\mathrm{f}\left(\mathrm{x}\right)
f(x)作一阶泰勒展开:
F
(
x
k
+
Δ
x
k
)
≈
∣
∣
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
∣
∣
2
\mathrm{F}\left(\mathrm{x}_\mathrm{k} + \Delta\mathrm{x}_\mathrm{k} \right)\approx||\mathrm{f}\left(\mathrm{x}_\mathrm{k} \right)+\mathrm{J}\left(\mathrm{x}_\mathrm{k} \right)^\mathrm{T}\Delta\mathrm{x}_\mathrm{k} ||^2
F(xk+Δxk)≈∣∣f(xk)+J(xk)TΔxk∣∣2
此处 J ( x ) J(x) J(x)为 f ( x ) f(x) f(x)的雅克比矩阵。对上式以 Δ x k \Delta x_k Δxk求导,并令一阶导为0(采用分母布局):
∂ ∣ ∣ f ( X k ) + J ( X k ) T ⋅ Δ X k ∣ ∣ 2 ∂ Δ X k = 0 2 ( f ( X k ) + J ( X k ) T ⋅ Δ X k ) ⋅ J ( X k ) = 0 J ( X k ) ⋅ ( f ( X k ) + J ( X k ) T ⋅ Δ X k ) = 0 \begin{align*} \frac{\partial ||f(X_{k})+J(X_{k})^{T}\cdot \Delta X_{k}||^{2}}{\partial \Delta X_{k}} = 0 \\ 2(f(X_{k})+J(X_{k})^{T}\cdot\Delta X_{k})\cdot J(X_{k})=0 \\ J(X_{k})\cdot(f(X_{k})+J(X_{k})^{T}\cdot\Delta X_{k})=0 \end{align*} ∂ΔXk∂∣∣f(Xk)+J(Xk)T⋅ΔXk∣∣2=02(f(Xk)+J(Xk)T⋅ΔXk)⋅J(Xk)=0J(Xk)⋅(f(Xk)+J(Xk)T⋅ΔXk)=0
( f ( X k ) + J ( X k ) T ⋅ Δ X k ) (f(X_{k})+J(X_{k})^{T}\cdot\Delta X_{k}) (f(Xk)+J(Xk)T⋅ΔXk)为标量,交换位置:
( f ( X k ) + J ( X k ) T ⋅ Δ X k ) ⋅ J ( X k ) = 0 J ( x k ) J ( x k ) T Δ x k = − J ( x k ) f ( x k ) \begin{align*} (f(X_{k})+J(X_{k})^{T}\cdot\Delta X_{k}) \cdot J(X_{k})=0 \\ \mathrm{J\left(x_k\right)J\left(x_k\right)^T\Delta x_k=-J\left(x_k\right)f\left(x_k\right)} \end{align*} (f(Xk)+J(Xk)T⋅ΔXk)⋅J(Xk)=0J(xk)J(xk)TΔxk=−J(xk)f(xk)
令:
H
(
x
k
)
=
J
(
x
k
)
J
(
x
k
)
T
,
g
(
x
k
)
=
−
J
(
x
k
)
f
(
x
k
)
\mathrm{H(x_k)=J(x_k)J(x_k)^T,g(x_k)=-J(x_k)f(x_k)}
H(xk)=J(xk)J(xk)T,g(xk)=−J(xk)f(xk)
解得:
Δ
x
k
=
−
H
(
x
k
)
−
1
g
(
x
k
)
\Delta x_k=-\mathrm{H(x_k)^{-1} g(x_k)}
Δxk=−H(xk)−1g(xk)
这里的 H ( x k ) \mathrm{H(x_k)} H(xk)相当于对Hessian的近似。
病态矩阵:求解方程组时如果对数据进行较小的扰动,则得出的结果具有很大波动,这样的矩阵称为病态矩阵。
最小二乘法:又称最小平方法,通过最小化误差函数的平方和,寻找最优解。
- 泰勒展开的本质:使用以 Δ x \Delta x Δx为变元的多项式函数近似原函数。
- 高斯牛顿法的目标函数可以看成是一个开口朝上的抛物线。因为对 f ( x ) f(x) f(x)作一阶泰勒展开,相当于把 f ( x ) f(x) f(x)近似成一次函数,而 min x F ( x ) = ∣ ∣ f ( x ) ∣ ∣ 2 \min_\mathrm{x}\mathrm{F}\left(\mathrm{x}\right)=||\mathrm{f}\left(\mathrm{x}\right)||^2 minxF(x)=∣∣f(x)∣∣2,相当于 F ( x ) \mathrm{F}\left(\mathrm{x}\right) F(x)为开口朝上的二次函数,导数值为0时取最小值。
LM算法(阻尼高斯牛顿法)
又称为阻尼高斯牛顿法,阻尼可以理解为系数。具体做法是:在高斯牛顿法的基础上引入置信区间,从无约束的最小二乘问题变为带约束的最小二乘问题,从而可以使用拉格朗日乘数法求解:
min x F ( x k + Δ x k ) = ∣ ∣ f ( x k + Δ x k ) ∣ ∣ 2 , s . t . ∣ ∣ D Δ x k ∣ ∣ 2 ≤ μ \min\limits_{\mathrm{x}}\mathrm{F}\left(\mathrm{x}_{\mathrm{k}}+\Delta\mathrm{x}_{\mathrm{k}}\right)=||\mathrm{f}(\mathrm{x}_{\mathrm{k}}+\Delta\mathrm{x}_{\mathrm{k}})||^{2},\mathrm{s.t.}||\mathrm{D}\Delta\mathrm{x}_{\mathrm{k}}||^{2}\leq\mu xminF(xk+Δxk)=∣∣f(xk+Δxk)∣∣2,s.t.∣∣DΔxk∣∣2≤μ
其中
∣
∣
D
Δ
x
k
∣
∣
2
≤
μ
||\mathrm{D}\Delta\mathrm{x}_\mathrm{k}||^2\leq\mu
∣∣DΔxk∣∣2≤μ为约束条件,
D
\mathrm{D}
D为系数矩阵(n维向量,系数矩阵不同对应不同的LM算法),
μ
\mu
μ为置信半径。
使用拉格朗日乘数法求解:
L
(
Δ
x
k
,
λ
)
=
∣
∣
f
(
x
k
+
Δ
x
k
)
∣
∣
2
+
λ
(
∣
∣
D
Δ
x
k
∣
∣
2
−
μ
)
\mathrm{L(\Delta x_k,\lambda)=||f(x_k+\Delta x_k)||^2+\lambda(||D\Delta x_k||^2-\mu)}
L(Δxk,λ)=∣∣f(xk+Δxk)∣∣2+λ(∣∣DΔxk∣∣2−μ)
对上式求导,令导数为0,可得
Δ
x
k
\Delta x_k
Δxk的解(增量方程):
(
H
+
λ
D
T
D
)
Δ
x
k
=
g
(
x
k
)
\mathrm{(H+\lambda D^TD)\Delta x_k~=g(x_k)}
(H+λDTD)Δxk =g(xk)
- 当 λ \lambda λ很大时, Δ x k ≈ − 1 μ g ( x k ) \Delta x_k \approx -\frac{1}{\mu}g(x_k) Δxk≈−μ1g(xk),相当于一阶梯度法,当 x k x_k xk距极值点较远时效果更好。
- 当
λ
\lambda
λ很小时,
Δ
x
k
≈
−
H
−
1
g
(
x
k
)
\Delta x_k \approx -\mathrm{H}^{-1}g(x_k)
Δxk≈−H−1g(xk),相当于高斯牛顿法,当
x
k
x_k
xk距极值点较近时效果更好。
由此可知,对 λ \lambda λ的取值至关重要,需要根据当前 x k x_k xk距离极值点的远近来动态调整。
- 可以使用近似程度量化指标
ρ
\boldsymbol{\rho}
ρ动态控制
λ
\lambda
λ:
ρ = f ( x k + Δ x k ) − f ( x k ) J ( x k ) T ⋅ Δ x k \rho = \frac{f(x_{k} + \Delta x_{k})-f(x_{k})} {J(x_{k})^{T}\cdot \Delta x_{k}} ρ=J(xk)T⋅Δxkf(xk+Δxk)−f(xk)
上式中,分子为目标函数实际减少值,分母为近似函数(泰勒一阶展开,即一次函数)的减少值。 ρ \rho ρ约接近于1说明近似函数拟合得越好。
- ρ \rho ρ很大时,说明实际减小值远大于近似函数减小值,认为此时离极值点较远,因此可以放心大胆地选用较大的 λ \lambda λ值。
- ρ \rho ρ很小时,说明实际减小值远小于近似函数减小值,认为此时离极值点较近,因此应当谨慎选用较小的 λ \lambda λ值,用较小的步长逐步逼近极小值。
我们可以通过二次函数图像说明:
可以发现,越靠近极值点,二次函数的一阶导数的绝对值越小(绝对值递减)。此时发现在梯度下降的过程中,相同 Δ x k \Delta x_k Δxk的情况下,实际函数的减小值总是小于近似函数的减小值。因此这种情况认为 x k x_k xk离极值点较近。
问题:
- 神经网络的目标函数都是凸函数吗?为什么?
- Hessian计算量太大。故有些算法使用Fisher Information Matrix近似Hessian。为什么能这样做?两者的联系?
- 如何理解:Network Automatic Pruning: Start NAP and Take a Nap中的这句话:
The first approximation comes from the fact that if the training objective is the negative log-likelihood, the Hessian matrix and Fisher matrix are the expectations of second-order derivatives under the data distribution and model distribution respectively.
- 正定矩阵?奇异矩阵为什么会导致算法不收敛,增量不稳定?
参考链接:
- 高斯牛顿法详解 https://blog.csdn.net/qq_42138662/article/details/109289129?spm=1001.2014.3001.5506
- Levenberg-Marquardt 最小二乘优化 https://zhuanlan.zhihu.com/p/42415718