Levenberg-Marquardt算法
date
Apr 24, 2025
slug
LevenbergMarquardt
status
Published
tags
优化算法
summary
type
Post
Ananth Ranganathan
2004年6月8日
1 引言
Levenberg-Marquardt(LM)算法是使用最广泛的优化算法。它在各种问题中都优于简单的梯度下降和其他共轭梯度方法。本文旨在为该算法提供一个直观的解释。首先展示LM算法是普通梯度下降和高斯-牛顿迭代的混合,然后从信任域方法的角度提供另一种对算法的解释。
2 问题
LM算法解决的问题称为非线性最小二乘最小化。这意味着要最小化的函数具有以下特殊形式:
其中 x = [x_1, x_2, \ldots, x_n] 是一个向量,每个 是从 到 的函数。假设 。为了简化问题,将 表示为一个残差向量 ,定义为
现在, f 可以重写为 。 f 的导数可以用 r 关于 x 的雅可比矩阵 J 来表示,定义为 ,其中 。首先考虑线性情况,即每个 r_i 函数都是线性的。在这种情况下,雅可比矩阵是常数,我们可以将 r 表示为一个超平面,因此 f 由二次函数 f(x) = \frac{1}{2} \|Jx - r_0\|^2 给出。我们还得到 \nabla f(x) = J^T(Jx - r_0) 和 \nabla^2 f(x) = J^TJ 。通过将 \nabla f(x) = 0 来求解最小值,我们得到 x_{\text{min}} = (J^TJ)^{-1}J^Tr_0 ,这是法方程组的解。
回到一般非线性情况,我们有
\nabla f(x) = \sum_{j=1}^{m} r_j(x) \nabla r_j(x) = J(x)^T r(x) \quad (1)
\nabla^2 f(x) = J(x)^T J(x) + \sum_{j=1}^{m} r_j(x) \nabla^2 r_j(x) \quad (2)
最小二乘问题的显著特点是,给定雅可比矩阵 J ,如果可以将 r_j 近似为线性函数( \nabla^2 r_j(x) 很小)或者残差 r_j(x) 本身很小,我们就可以几乎免费地得到海森矩阵 \nabla^2 f(x) 。在这种情况下,海森矩阵简化为 \nabla^2 f(x) = J(x)^T J(x) \quad (3) ,这与线性情况相同。这里常用的近似是假设 r_i 在解附近近似为线性,使得 \nabla^2 r_j(x) 很小。需要注意的是,(3) 只在残差很小时才有效。对于残差很大的问题,不能使用二次近似,因此本文介绍的算法在这种情况下性能较差。
3 LM作为梯度下降和高斯-牛顿迭代的混合
普通梯度下降是一种最简单、最直观的寻找函数最小值的方法。通过在每一步加上负的缩放梯度来更新参数,即
x_{i+1} = x_i - \lambda \nabla f \quad (4)
简单的梯度下降存在各种收敛问题。逻辑上,我们希望在梯度较小的地方(斜率平缓)采取大步,在梯度较大时(斜率陡峭)采取小步,以免跳出最小值。然而,上述更新规则却恰恰相反。另一个问题是误差曲面的曲率在各个方向上可能并不相同。例如,如果误差曲面有一个狭长的山谷,沿着山谷底部方向的梯度分量很小,而沿着山谷墙壁方向的梯度分量却很大。这导致运动方向更多地沿着墙壁,尽管我们需要沿着底部移动很长的距离,而沿着墙壁移动的距离却很短。通过使用曲率和梯度信息,即二阶导数,可以改善这种情况。一种方法是使用牛顿法求解方程 \nabla f(x) = 0 。将 f 的梯度在当前状态 x_0 附近用泰勒级数展开,我们得到
\nabla f(x) = \nabla f(x_0) + (x - x_0)^T \nabla^2 f(x_0) + \text{更高阶项} \quad (5)
如果我们忽略更高阶项(假设 f 在 x_0 附近为二次函数),并通过将 (5) 的左边设为 0 来求解最小值 x ,我们得到牛顿法的更新规则
x_{i+1} = x_i - (\nabla^2 f(x_i))^{-1} \nabla f(x_i) \quad (6)
牛顿法隐式地使用了 f 的二次假设(源于在 f 的泰勒级数展开中忽略更高阶项),因此不需要精确计算海森矩阵。相反,可以使用 (3) 的近似。这种方法的主要优点是收敛速度快。然而,收敛速度对起始位置(或更准确地说,起始位置附近的线性)非常敏感。可以看出,简单的梯度下降和高斯-牛顿迭代在它们提供的优势上是互补的。Levenberg 基于这一观察提出了一个算法,其更新规则是上述算法的混合,给出为
x_{i+1} = x_i - (H + \lambda I)^{-1} \nabla f(x_i) \quad (7)
其中 H 是在 x_i 处评估的海森矩阵。这个更新规则的使用方法如下。如果更新后的误差减小,这意味着我们对 f(x) 的二次假设是有效的,我们将 \lambda 减小(通常减小 10 倍)以减少梯度下降的影响。另一方面,如果误差增加,我们希望更多地沿着梯度方向前进,因此 \lambda 增加相同的倍数。Levenberg 算法因此为:
- 按照上述规则进行更新。
- 在新的参数向量处评估误差。
- 如果更新导致误差增加,则撤回该步骤(即恢复之前的权重值),并将 \lambda 增加 10 倍或某个显著的倍数。然后返回步骤 (1) 并再次尝试更新。
- 如果更新导致误差减小,则接受该步骤(即保持权重在新的值),并将 \lambda 减小 10 倍左右。
上述算法的缺点是,如果 \lambda 的值很大,则完全不使用计算出的海森矩阵。即使在这种情况下,我们也可以通过根据曲率对梯度的每个分量进行缩放来获得二阶导数的一些优势。这应该会导致在梯度较小的方向上移动得更多,从而不再出现经典的“误差谷”问题。Marquardt 提供了这一关键的见解。他在 (7) 中用海森矩阵的对角线替换了单位矩阵,得到了 Levenberg-Marquardt 更新规则。
x_{i+1} = x_i - (H + \lambda \text{diag}(H))^{-1} \nabla f(x_i) \quad (8)
由于海森矩阵与 f 的曲率成比例,(8) 意味着在曲率较低的方向(即几乎平坦的地形)上迈出大步,在曲率较高的方向(即陡坡)上迈出大步。需要注意的是,尽管 LM 方法绝非最优,而只是一种启发式方法,但在实践中效果非常好。唯一的缺点是更新过程中需要矩阵求逆。即使通常使用巧妙的伪逆方法(如奇异值分解)来实现逆运算,但随着模型大小增加到几千个参数,更新的成本变得难以承受。然而,对于中等大小的模型(几百个参数),这种方法比简单的梯度下降要快得多。
4 LM作为信任域算法
历史上,LM算法由 Marquardt 以第 3 节中给出的形式提出,其中参数被直接操纵以找到最小值。随后,基于信任域的方法逐渐流行起来。信任域算法的工作方式与第 3 节中介绍的线搜索方法根本不同。在线搜索方法中,我们决定沿着梯度下降的方向,然后关心步长,即如果 p_k 是下降方向, 是步长,那么我们的步骤由 给出,步长通过求解子问题
得到。相比之下,在信任域算法中,我们在 x_k 附近的有限区域内构建一个模型 ,该模型近似于函数 f 。这个区域,其中模型是 f 的良好近似,称为信任域。信任域算法维护 并在每次迭代中使用启发式方法更新它。模型 m_k 通常是通过在 x_k 附近对 f 进行泰勒级数展开得到的二次函数,即
其中 H 是海森矩阵(或海森矩阵的近似)。要解决的子问题以找到迭代中要采取的步骤是
迭代步骤本身是 。因此,信任域算法可以被看作是一系列迭代,每次迭代中我们用二次函数近似函数 f ,然后跳到该二次函数的最小值。求解 (10) 的解由以下定理给出: p 是 \min_{\|p\| \leq \Delta} f(x_k) + \nabla f(x_k)^T p + \frac{1}{2} p^T H p 的全局解当且仅当
(H + \lambda I) p = g \quad (11)
\lambda (\Delta - \|p\|) \geq 0 \quad (12)
并且
H + \lambda I \text{ 是正半定的}
其中 g = \nabla f(x_k) 。可以看出,(11) 与 (7) 相同。(12) 基本上表明,如果 \|p\| < \Delta ,则 \lambda 为 0,否则不是。因此,使用信任域框架,我们得到了与使用线搜索方法相同的 LM 算法参数更新方程。更新信任域大小的启发式方法通常取决于预测变化与实际变化的比率,即
\rho_k = \frac{f(w_k) - f(w_k + p)}{f(w_k) - m_k(p)} \quad (13)
如果预测值与实际值之间有很好的一致性 ( \rho_k \approx 1 ),则增加 \Delta ;如果一致性较差 ( \rho_k 很小),则减少 \Delta 。如果 \rho_k 小于某个阈值(如 10^{-4} ),则拒绝该步骤并保留 w_k 的值,但仍然像之前一样减少 \Delta 。因此,该算法与第 3 节中的算法相似,但每次迭代中改变的值是 \Delta 而不是 \lambda 。
5 参考文献
[Levenberg44] K. Levenberg, “A method for the solution of certain problems in least squares,” Quart. Appl. Math., 1944, Vol. 2, pp. 164–168.
[Marquardt63] D. Marquardt, “An algorithm for least-squares estimation of nonlinear parameters,” SIAM J. Appl. Math., 1963, Vol. 11, pp. 431–441.
[Nocedal99] J. Nocedal and S.J. Wright, “Numerical Optimization,” Springer, New York, 1999.
希望这个翻译对你有帮助!如果还有其他问题,欢迎随时提问。