该方法的收敛速度比高斯牛顿法慢,也被称为阻尼牛顿法。高斯牛顿法中采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果,所以很自然地想到给 ∆x 添加一个范围,称为信赖区域(Trust Region)。这个范围定义了在什么情况下二阶近似是有效的,这类方法也称为信赖区域方法(Trust Region Method)。在信赖区域里边,我们认为近似是有效的;出了这个区域,近似可能会出问题。
那么如何确定这个信赖区域的范围呢?一个比较好的方法是根据我们的近似模型跟实际函数之间的差异来确定:如果差异小,说明近似效果好,我们扩大近似的范围;反之,如果差异大,就缩小近似的范围。我们定义一个指标 ρ 来刻画近似的好坏程度,
ρ 的分子是实际函数下降的值,分母是近似模型下降的值。如果 ρ 接近于 1,则近似是好的。如果 ρ太小,说明实际减小的值远少于近似减小的值,则认为近似比较差,需要缩小近似范围。反之,如果 ρ 比较大,则说明实际下降的比预计的更大,我们可以放大近似范围。因此新的步骤如下:
上图来自非线性最小二乘求解方法总结_非线性最小二乘法-优快云博客
这里近似范围µ扩大的倍数和阈值都是经验值。在式(6.35)中,把增量限定于一个半径为 µ 的球中,只在这个球内才是有效的。带上 D 之后,这个球可以看成一个椭球。在列文伯格提出的优化方法中,把 D 取成单位阵 I,相当于直接把 ∆xk 约束在一个球中。马夸尔特提出将 D 取成非负数对角阵——实际中通常用的对角元素平方根,使得在梯度小的维度上约束范围更大一些。
梯度的获得需要求解式(6.35),这个子问题是带不等式约束的优化问题,我们用拉格朗日乘子把约束项放到目标函数中,构成拉格朗日函数。
下面是具体问题求解思路(个人理解并结合参考文章):
首先把约束转化成
,然后利用拉格朗日乘子法进行转化为无约束目标问题
,令
,这里需要注意的是
和
的关系,一些文章里面并没有提到,有一篇文章里面和本文一致(LM(列文伯格-马夸尔特)方法的个人理解,以及实现问题_lm方法-优快云博客)。
采用拉格朗日乘数法确实需要解出不同情况下对应的,但是在LM算法中将
看成常数,相等于把问题转化成了数学建模中的规划问题,约束条件的权重为
,而高斯牛顿法优化目标为
,当
时,两者同比重,也就是总优化目标同时考虑到了两者。这样我们就可以减少求解乘子的步骤,得到最终的迭代向量
特别的当D为单位矩阵时,表示信任域是一个球。
LM定义,表征了实际下降量与一阶微分量(也就是近似下降量)的比值。
若,则
,即信赖域缩小,在具体算法中
;
若,则
,即信赖域扩大,在具体算法中
;
若,则迈出这一步之后处于可信赖和不可信赖区间之间,则
,即信赖域扩大,在具体算法中
;
若说明函数值是向着上升而非下降的趋势变化了(与最优化的目标相反),这说明这一步迈得错得“离谱”了,这时不应该走到下一点,而应“原地踏步”,即x(k+1)=x(k),并且和上面 ρ≤0.25的情况一样缩小信赖域。反之,在 ρ>0 的情况下,都可以走到下一点,即
按照经验来说,可以设置初始参数为
其中,可以自己指定。
LM算法可以一定程度避免系数矩阵的非奇异和病态问题,可以提供更鲁棒、更准确的步长。因此LM算法在相机标定、视觉SLAM等领域中应用非常广泛。