LM算法是一种可以用于求解最小二乘问题的迭代算法.它可以看成是最速下降法和Gauss-Newton法的结合(通过调节阻尼μ\muμ切换).当当前解距离最优解较远时,算法更接近最速下降法:慢却保证下降;当当前解接近最优解,算法接近GN,快速收敛.
fff为将参数向量p∈Rmp\in\Bbb R^mp∈Rm映射为估计观测向量x^=f(P),x^∈Rn\hat{x}=f(P),\hat{x}\in\Bbb R^nx^=f(P),x^∈Rn的函数.
输入: 初始的估计量P0P_0P0,观测向量xxx
寻找最优参数P+P^+P+
P+=argminpϵTϵ,ϵ=x−x^,x^=f(P)P^+=arg\min_{p} \epsilon^T\epsilon,\epsilon=x-\hat{x},\hat{x}=f(P)P+=argpminϵTϵ,ϵ=x−x^,x^=f(P)在邻域泰勒展开f(P+δP)≈f(P)+JδP
f(P+\delta_P)\approx f(P)+J\delta_Pf(P+δP)≈f(P)+JδP其中JJJ是雅克比矩阵∂f(P)∂P\frac{\partial f(P)}{\partial P}∂P∂f(P).
寻找迭代每一步的步长δP\delta_PδP使得最小化∣∣x−f(P+δP)∣∣≈∣∣x−f(P)−JδP∣∣=∣∣ϵ−JδP∣∣||x-f(P+\delta_P)||\approx||x-f(P)-J\delta_P||=||\epsilon-J\delta_P||∣∣x−f(P+δP)∣∣≈∣∣x−f(P)−JδP∣∣=∣∣ϵ−JδP∣∣,可以证明最小二乘的最优解存在于当JδP−ϵJ\delta_P-\epsilonJδP−ϵ正交于JJJ(展开使导数为零).
即JT(JδP−ϵ)=0J^T(J\delta_P-\epsilon)=0JT(JδP−ϵ)=0,得到:
JTJδP=JTϵJ^TJ\delta_P=J^T\epsilonJTJδP=JTϵ此即为GN方法的增量正规方程.
LM在此基础上引入了阻尼项μ\muμ,增量正规方程变为(JTJ+μI)δP=JTϵ(J^TJ+\mu I)\delta_P=J^T\epsilon(JTJ+μI)δP=JTϵ,若当前求得的δP\delta_PδP使得误差减小,则接受该更新且减小阻尼项μ\muμ;反之,若当前增量使得函数值增大,则增大阻尼项,重新求解正规方程直到一个能使函数值减小的增量被求得.
LM算法每一步都将调整阻尼项μ\muμ以确保误差下降.当μ\muμ很大时,算法接近最速下降法,并且,步长会变小(1μ\frac{1}{\mu}μ1),另外,还加强了JTJJ^TJJTJ的正定性;反之,接近GN.综上,LM是一种自适应的算法,当当前解远离最优解时慢速但下降,在最优解邻域快速收敛.
终止条件:
- 梯度大小,如JTϵJ^T\epsilonJTϵ低于阈值ε1\varepsilon_1ε1
- 步长的变化量δP\delta_PδP低于阈值ε2\varepsilon_2ε2
- 达到最大迭代次数kmaxk_{max}kmax
如果观测向量xxx的协方差矩阵Σx\Sigma_xΣx可以获得,问题修正为JTΣx−1JδP=JTΣX−1ϵ J^T\Sigma_x^{-1}J\delta_P=J^T\Sigma_X^{-1}\epsilonJTΣx−1JδP=JTΣX−1ϵ该式为加权正规方程.
算法
kmax=100;
eta1=eta2=1e-15;
tau=1e-3;
k:=0;v:=2;p:=p0;
A:=J.T*J;epsilon:=x-f(p);g:=J.T*epsilon;
stop:=(max(g)<eta1);
mu=tau*max(diag(A));
while ( !stop ) and ( k<kmax ):
k:=k+1;
while ( !stop ) and ( rho<0 ):
Solve (A+mu*I)*delta=g;
if(delta.norm()<=eta2*p.norm())
stop:=true;
else
pnew:=p+delta;
rho:=(epsilon.norm()-(x-f(pnew)).norm())/(delta.T*(mu*delta+g));
if rho>0
p:=pnew;
A:=J.T*J;epsilon:=x-f(p);g:=J.T*epsilon;
stop:=(max(g)<eta1);
mu:=mu*max(1/3,1-(2*rho-1)^3);v:=2;
else
mu:=mu*v;v:=2*v;
endif
endif
endwhile
endwhile