牛顿法-高斯牛顿法-LM算法

这是非线性优化 最经典的一条数学主线,也是 PnP、Bundle Adjustment、ICP、相机标定、SLAM 等算法的基础

三者之间的关系可以用一张图概括:

cpp 复制代码
                     泰勒展开
                         │
        ┌────────────────┴────────────────┐
        │                                 │
      二阶泰勒                        一阶泰勒
        │                                 │
        ▼                                 ▼
     牛顿法(Newton)                  高斯牛顿(GN)
        │                                 │
        └──────────────┬──────────────────┘
                       ▼
             Levenberg-Marquardt(LM)

它们的区别主要在于 Hessian(海森矩阵)的处理方式

一、泰勒公式

设目标函数 f(x)

那么在x点附近展开:

一阶泰勒

二阶泰勒

二、牛顿法(Newton)

思想

直接利用二阶泰勒寻找极小值。

目标:

优点

  • 二阶收敛(接近最优点时非常快)
  • 收敛步数少
  • 精度高

缺点

  • Hessian难计算
  • Hessian求逆开销大
  • Hessian可能不可逆
  • 初值不好容易发散

三、高斯牛顿法(Gauss-Newton)

适用于

最小二乘:

写成: 其中 e=e(x)

一阶泰勒

误差展开: 其中 J 就是雅克比

代入目标函数:

为什么不用真正 Hessian?

优点

  • 不需要计算 Hessian
  • 比牛顿法简单
  • 收敛速度快
  • 工程应用广泛

缺点

  • 初值要求高
  • 离最优解远容易发散
  • 可能病态

四、LM算法(Levenberg--Marquardt)

LM是在高斯牛顿基础上加入阻尼。

方程:

阻尼作用

的时候

的时候

λ如何调整

如果:

误差下降

则: 减少步长

如果误差增加了:

优点

  • 收敛稳定
  • 不容易发散
  • 对初值要求低
  • 工程应用最广

缺点

  • 每次需要调整阻尼
  • 计算量略大于高斯牛顿
  • 参数设置影响速度

五、三种算法比较

方法 泰勒展开 Hessian 收敛速度 初值要求 稳定性 计算量
牛顿法 二阶 真正Hessian 最快 很高 最大
高斯牛顿 一阶(误差) (J^TJ)近似 较高 一般 中等
LM 一阶(误差) (J^TJ+\lambda I) 较低 最好 略高

泰勒公式

二阶泰勒

牛顿法(真实 Hessian)

├── Hessian 难求

高斯牛顿(H≈JᵀJ)

├── 容易发散

LM(JᵀJ+λI)

工业视觉最常用的非线性优化算法

可以把它们理解为:

  • 牛顿法:理论最优,但代价最高。
  • 高斯牛顿法:利用最小二乘结构,用 JTJ近似 Hessian,在效率和精度之间取得平衡。
  • LM 算法:在高斯牛顿基础上加入阻尼机制,兼顾收敛速度与稳定性,因此成为现代计算机视觉和 SLAM 中的主流优化方法。

Matlab 非线性迭代法(2)高斯牛顿法_高斯迭代matlab-CSDN博客