Levenberg-Marquardt - (A + mu.I) 或 (A + mu.diag[A]) 哪个更可取?

计算科学 优化 数值分析
2021-11-28 18:08:30

通过求解

(A+μI)h=g

我可以在一些文献中发现,可以通过求解 来计算步长。 据说这对误差谷问题很有帮助,误差表面在最小值平坦且长。我无法决定是否的对角线用于所有情况,或者单位矩阵更合适。

(A+μdiag(A))h=g
AI

一些信息:
Levenberg-Marquardt 算法:一种迭代技术,用于定位函数的最小值,该函数表示为非线性函数的平方和。 : 梯度矩阵 (Jacobian x 函数值) : 近似 Hessian 矩阵 (JacobianTransposed x Jacobian) : 阻尼因子 : 步长
g
A
μ
h

4个回答

这与其说是一个答案,不如说是一个注释,但您不能总是将表单与一起使用。特别是,如果您遇到在对角线上有零或负元素的情况,则不再保证您获得下降方向,因此您可能不会收敛。μdiag(A)A

使用而不是μdiag(A)μI通常更好。当你使用μI你有步宽μ在各个方向。如果你使用μdiag(A), 这i第一个组件是μai,i, 什么时候ai,i是主对角线元素A在位置(i,i). 因此,您在每个方向都有一个可变的步长。由于 Levenberg-Marquardt 本质上是高斯-牛顿和梯度下降的混合,具体取决于阻尼参数μai,i是小还是大,您可以将这两种算法组合在一个迭代步骤中以用于不同的方向。

Seber 和 Wild 所著的“非线性回归”一书在这方面引用了相当多的论文。我认为大多数实现都使用μdiag(A)代替I一般来说,虽然我不能证明它在所有情况下都表现得更好。

回答 Umesh Tiwari 的评论(我自己无法评论): [A+μdiag(A)]h=g确实相当于马夸特确实提出的。他制定了: (A+μI)h=g 可以修改如下:

(A+μI)h=gADh+μDh=D1gDADh+μD2h=gAh+μD2h=g(A+μD2)h=g
在哪里D2是 A 的对角线。

形式总是可以使用,并且在实践中它比给出更好的结果。OP给出的理由是正确的。它在误差谷中沿着更平坦的方向移动得更快,因为它更好地考虑了曲率信息。然而,Levenberg-Marquardt 是一种启发式方法,对速度和收敛性没有明确的保证。(A+μdiag(A))h=g(A+μI)h=g

此外,Levenberg-Marquardt 处理了没有给出下降方向的情况。请注意,此方法是信任区域方法的祖先之一。因此,如果一次迭代没有给出下降方向,则不要采取该步骤,增加并继续下一次迭代。(A+μdiag(A))h=gμ