Levenberg-Marquardt算法(LM)的前世今生

Levenberg-Marquardt算法(LM)的前世今生

本文将从优化算法当中的梯度下降法的发展,从最基本的最速下降法逐个介绍,最后介绍LM方法,顺序如下:

  1. 最速下降法
  2. 牛顿法
  3. 高斯牛顿法
  4. 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Δxk2

此处 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ΔXk2=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Δxk2μ

其中 ∣ ∣ D Δ x k ∣ ∣ 2 ≤ μ ||\mathrm{D}\Delta\mathrm{x}_\mathrm{k}||^2\leq\mu ∣∣DΔxk2μ为约束条件, 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Δxk2μ)

对上式求导,令导数为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)

  1. λ \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距极值点较远时效果更好。
  2. λ \lambda λ很小时, Δ x k ≈ − H − 1 g ( x k ) \Delta x_k \approx -\mathrm{H}^{-1}g(x_k) ΔxkH1g(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说明近似函数拟合得越好。
  1. ρ \rho ρ很大时,说明实际减小值远大于近似函数减小值,认为此时离极值点较远,因此可以放心大胆地选用较大的 λ \lambda λ值。
  2. ρ \rho ρ很小时,说明实际减小值远小于近似函数减小值,认为此时离极值点较近,因此应当谨慎选用较小的 λ \lambda λ值,用较小的步长逐步逼近极小值。

我们可以通过二次函数图像说明:
在这里插入图片描述

可以发现,越靠近极值点,二次函数的一阶导数的绝对值越小(绝对值递减)。此时发现在梯度下降的过程中,相同 Δ x k \Delta x_k Δxk的情况下,实际函数的减小值总是小于近似函数的减小值。因此这种情况认为 x k x_k xk离极值点较近。

问题:

  1. 神经网络的目标函数都是凸函数吗?为什么?
  2. Hessian计算量太大。故有些算法使用Fisher Information Matrix近似Hessian。为什么能这样做?两者的联系?
  3. 如何理解: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.

  1. 正定矩阵?奇异矩阵为什么会导致算法不收敛,增量不稳定?

参考链接:

  1. 高斯牛顿法详解 https://blog.csdn.net/qq_42138662/article/details/109289129?spm=1001.2014.3001.5506
  2. Levenberg-Marquardt 最小二乘优化 https://zhuanlan.zhihu.com/p/42415718
LM算法,全称为Levenberg-Marquard算法,它可用于解决非线性最小二乘问题,多用于曲线拟合等场合。 LM算法的实现并不算难,它的关键是用模型函数 f 对待估参数向量 p 在其邻域内做线性近似,忽略掉二阶以上的导数项,从而转化为线性最小二乘问题,它具有收敛速度快等优点。LM算法属于一种“信赖域法”——所谓的信赖域法,此处稍微解释一下:在最优化算法中,都是要求一个函数的极小值,每一步迭代中,都要求目标函数值是下降的,而信赖域法,顾名思义,就是从初始点开始,先假设一个可以信赖的最大位移 s ,然后在以当前点为中心,以 s 为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。 事实上,你从所有可以找到的资料里看到的LM算法的说明,都可以找到类似于“如果目标函数值增大,则调整某系数再继续求解;如果目标函数值减小,则调整某系数再继续求解”的迭代过程,这种过程与上面所说的信赖域法是非常相似的,所以说LM算法是一种信赖域法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值