-
- 基础
- LM法
- mu的计算
- 收敛条件
- 算法流程
- 结论
- 信赖域法
注意到关于LM法网上大部份资料内容比较混乱,主要是因为LM法是可以从两个不同的视角看的。一种是看作介于高斯牛顿和梯度下降法之间的一种算法,另一种是作为一种信赖域的算法来看,而两种视角下虽然最后结论比较相似,但公式推导的思路差别会比较大。
从历史上讲,LM法最初作为高斯牛顿法的改良而被提出,随后才有了信赖域法上应用。这里先从高斯牛顿法/梯度下降法混合的视角下来进行推导。
基础
先来回顾一下高斯牛顿法的几个关键点(可参照非线性优化整理-2.高斯-牛顿法)
高斯牛顿法的迭代公式为
xn+1=xn−[JTfJf]−1JTff(xn) x n + 1 = x n − [ J f T J f ] − 1 J f T f ( x n )
这是根据目标函数
F(x) F ( x ) 按以下二阶近似所得到的:
F(x+h)≈F(x)+∇F(x)h+12hTHFh≈F(x)+JTffh+12hTJTfJfh F ( x + h ) ≈ F ( x ) + ∇ F ( x ) h + 1 2 h T H F h ≈ F ( x ) + J f T f h + 1 2 h T J f T J f h
我们可以定义以该种方式近似
F(x+h) F ( x + h ) 的结果为
L(h) L ( h )
L(h)≡F(x)+JTffh+12hTJTfJfh L ( h ) ≡ F ( x ) + J f T f h + 1 2 h T J f T J f h
LM法
高斯牛顿法具有收敛快速但对初始点位置敏感的特点,梯度下降法则相反。
而LM法,也称作阻尼最小二乘法(Damped Least-squares),则结合了二者的特点,引入了阻尼因子 μ μ 来调节算法的特性。
原始版LM法的迭代公式为
xn+1=xn−[JTfJf+μI]−1JTff(xn) x n + 1 = x n − [ J f T J f + μ I ] − 1 J f T f ( x n )
或写作
[JTfJf+μI]h=−JTff(xn) [ J f T J f + μ I ] h = − J f T f ( x n )
该因子的作用有
上面的版本中,当 μ μ 很大时矩阵 JTfJf J f T J f 几乎没有使用。而 JTfJf J f T J f 来自于反应梯度的Hessian矩阵的近似。我们可以利用这一特性,在梯度较小即较为平坦的方向让迭代进行较大的移动。这就是后来Marquardt提出的改进版LM法,将单位矩阵替换为Jacobian矩阵二乘的对角阵
xn+1=xn−[JTfJf+μdiag[H]]−1JTff(xn) x n + 1 = x n − [ J f T J f + μ d i a g [ H ] ] − 1 J f T f ( x n )
μ μ 的计算
μ μ 初始值 μ0 μ 0 的选取,应该与 J(x0)TJ(x0) J ( x 0 ) T J ( x 0 ) 矩阵的元素个数有关,例如
μ0=τ∗maxi{a(0)ii} μ 0 = τ ∗ m a x i { a i i ( 0 ) }
而
μ μ 的更新可以由系数
ϱ ϱ 来控制,这里
ϱ=F(x)−F(x+h)L(0)−L(h) ϱ = F ( x ) − F ( x + h ) L ( 0 ) − L ( h )
分子为目标函数在步长
h h 下的实际变化,分母为目标函数二阶近似的变化
L(0)−L(h)=(F(x))−(F(x)+hTJTf+12hTJTJh)=−hTJTf−12hTJTJh L ( 0 ) − L ( h ) = ( F ( x ) ) − ( F ( x ) + h T J T f + 1 2 h T J T J h ) = − h T J T f − 1 2 h T J T J h
可以看出
-
ϱ ϱ 越大,表明
L L 对
F F 的近似效果越好,所以可以缩小
μ μ 以使得LM法接近高斯牛顿法
- 相反,
ϱ ϱ 越小,表明
L L 的近似越差,所以应该增大
μ μ 以使得迭代公式接近梯度下降法并减少步长。
收敛条件
1.g过小
2.x的变化过小
3.达到最大迭代次数
算法流程
可以总结经典LM算法的迭代流程为
- 初始化参数
k=0;v=2;x=x0;A=JTJ;g=JTf; k = 0 ; v = 2 ; x = x 0 ; A = J T J ; g = J T f ;
- 根据迭代公式 (A+μI)h=−g ( A + μ I ) h = − g ,求解 h h
- if h<ϵ2(||x||+ϵ2) h < ϵ 2 ( | | x | | + ϵ 2 ) then 结束循环
- 计算
xnew=x+h x n e w = x + h
ϱ=F(x)−F(xnew)L(0)−L(h) ϱ = F ( x ) − F ( x n e w ) L ( 0 ) − L ( h )
- if ϱ>0 ϱ > 0 then
x=xnew x = x n e w
A=JTJ;g=JTf; A = J T J ; g = J T f ;
if g≤ϵ1 g ≤ ϵ 1 then 结束循环
μ=μ∗max{13,1−(2ϱ−1)3};v=2 μ = μ ∗ m a x { 1 3 , 1 − ( 2 ϱ − 1 ) 3 } ; v = 2
- if ϱ≤0 ϱ ≤ 0 then μ=μ∗v;v=2∗v μ = μ ∗ v ; v = 2 ∗ v
- goto 2
μ μ 的迭代策略最初在Marquardt(1963)中为
if(ϱ<0.25)μ=2∗μelseif(ϱ>0.75)μ=μ/3 i f ( ϱ < 0.25 ) μ = 2 ∗ μ e l s e i f ( ϱ > 0.75 ) μ = μ / 3
在阈值0.25和0.75的不连续变化会导致实际使用中的收敛减慢。
后来有了上面流程中所用的更为有效的Nielsen(1999)策略
ifϱ>0μ=μ∗max{13,1−(2ϱ−1)3}elseμ=μ∗v;v=2 i f ϱ > 0 μ = μ ∗ m a x { 1 3 , 1 − ( 2 ϱ − 1 ) 3 } e l s e μ = μ ∗ v ; v = 2
结论
- LM法是一种非常高效的迭代算法,能适用于大多数的case
- 该算法的许多变量决定了迭代的效率和结果的收敛性,而这些参数的理想值往往依目标函数不同而不同
- 因为存在矩阵求逆这一运算,所以对于大型数据求解需要用一些特殊技巧。
信赖域法
这里再补充一下信頼域法。
求解非线性优化的方法可以主要分为线性搜索和信赖域法(Trust Region Method)。
线性搜索核心思想是先确定搜索方向,然后确定步长进行迭代
信赖域法核心思想则是先确定最大距离,再确定方向。具体为每次迭代都会给出一个半径为 Δ Δ 的信赖域使得模型在该信頼域内足够精确。在该领域内求解问题得到一个步长 h h ,接着通过某一评价标准判断该步长的好坏来决定是否要接受该步长。如果接受则更新当前位置,否则则当前位置不变。而新信赖域的半径大小则依照判断预测的好坏,来增大或减小。
信赖域法的基本流程如下
- 设定初始点x x 和信赖域半径 μ μ
- 构造如下子问题求解
argminh12||J(x)h+F(x)||2 a r g m i n h 1 2 | | J ( x ) h + F ( x ) | | 2
并且
||D(x)h||2≤μ | | D ( x ) h | | 2 ≤ μ
-
ϱ=||F(x+h)||2−||F(x)||2||J(x)h+F(x)||2−||F(x)||2 ϱ = | | F ( x + h ) | | 2 − | | F ( x ) | | 2 | | J ( x ) h + F ( x ) | | 2 − | | F ( x ) | | 2
- if ϱ>ϵ ϱ > ϵ then
x=x+h x = x + h
- if ϱ>η1 ϱ > η 1 then
μ=2μ μ = 2 μ
- else if ϱ<η2 ϱ < η 2 then
μ=0.5μ μ = 0.5 μ
- goto 2
在该流程当中,我们通过 ϱ ϱ 来表征步长 h h 对下降预测的好坏,越接近1表明模型与目标函数的逼近程度越高。所以采取了如 4- 6的策略,即(1)ϱ ϱ 接近1则增大信赖域半径 μ μ (2) ϱ ϱ 介于0和1之间则 μ μ 保持不变(3) ϱ ϱ 接近0则缩小 μ μ
μ μ 也可以看作是信赖域法当中的信赖域半径,LM法可以说是采用了信赖域法的高斯牛顿法。
一些参考链接
- The Levenberg-Marquardt method for nonlinear least squares curve-fitting problems
- The Levenberg-Marquardt Algorithm
- Methods for Non-linear Least Squares Problems