1. 概述
- LM算法,全称为Levenberg-Marquard算法,它可用于解决非线性最小二乘问题,多用于曲线拟合等场合
- 主要思想
- LM算法属于一种“信赖域法”——所谓的信赖域法,此处稍微解释一下:在最优化算法中,都是要求一个函数的极小值,每一步迭代中,都要求目标函数值是下降的,而信赖域法,顾名思义,就是从初始点开始,先假设一个可以信赖的最大位移s,然后在以当前点为中心,以s为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。
2. 算法原理
对于一个非线性最小二乘问题:
$x = \arg \min_x \frac{1}{2}||f(x)||^2$.
高斯牛顿的思想是把$f(x)$利用泰勒展开,取一阶线性项近似,即
$f(x + \Delta x) = f(x) + f’(x)\Delta x = f(x) + J(x)\Delta x$.
再将上述公式代入非线性最小二乘公式,得:
$\frac{1}{2}||f(x + \Delta x)||^2 = \frac{1}{2}[f(x)^Tf(x) + 2f(x)^TJ(x)\Delta x + \Delta x^TJ(x)^TJ(x)\Delta x]$.
阻尼法的的思想是再加入一个阻尼项$\frac{1}{2}\mu\Delta x^T\Delta x$,得到:
为了书写方便,将$\Delta x$记为h,
$h = \arg\min_hG(h) = \arg\min_h\frac{1}{2}f^Tf + h^TJ^Tf + \frac{1}{2}h^TJ^TJh + \frac{1}{2}\mu h^Th$.
对上式求偏导数,并令为0,得到:
$J^Tf + J^TJh + \mu h = 0$,
$(J^TJ + \mu I)h = -J^Tf$,
$(H + \mu I)h = -g$.
引入阻尼参数$\mu$由如下好处:
- 对于$\mu > 0$,$(H + \mu I)$正定,保证了h是梯度下降的方向
- 当$\mu$较大时,$h \approx -\frac{1}{\mu}g = -\frac{1}{\mu}F’(x)$,其实就是梯度、最速下降法,当离最终结果较远的时候,很好
- 当$\mu$较小时,方法接近与高斯牛顿,当离最终结果很近时,可以获得二次收敛速度,很好
$\mu$的设定策略如下:
- 初始时,取
$A_0 = J(x_0)^TJ(x_0)$,
$\mu_0 = \tau \cdot\max{a_{ii}^0}$.
- 迭代后,利用cost增益来确定
$\mu = \frac{F(x) - f(x + h)}{L(0) - L(h)}$.
迭代终止条件:
- 一阶导数为0:$F’(x) = g(x) = 0$,使用$||g(x)|| < \epsilon$,其中$\epsilon$是设定的终止条件
- x变化步距离足够小,$||h|| = ||x_{new} - x|| < \epsilon(||x|| + \epsilon)$
- 超过最大迭代次数
3. 例子
求解非线性方程$y = e^{ax^2 + bx + c}$,给定n组观测数据$(x, y)$,求解系数$X = [a, b, c]^T$。
解:由题可得:
令$f(X) = y - e^{ax^2 + bx + c}$,N组数据可以组成一个大的非线性方程组,通过构建最小二乘问题来进行系数求解,即
$x = \arg\min_x \frac{1}{2}||f(X)||^2$.
要求解这个问题,根据推导部分可知,需要求解雅克比,
实现代码如下:
1 |
|
(以上代码参考:https://zhuanlan.zhihu.com/p/42415718)