SLAM初学-非线性优化
date
Apr 8, 2022
Last edited time
Sep 12, 2022 04:59 AM
status
Published
slug
SLAM初学-非线性优化
tags
SLAM
summary
2022.09.12@添加了cpp示例
type
Post
Field
Plat
牛顿法
它的思想是将 进行二阶的泰勒展开得:
求 使 最小:
求导并使导数为 得:
如果只是直接沿着一阶梯度的相反反向前进,即可保证函数值下降。这种方法称为最速下降法。 最速下降法过于贪心,容易走出锯齿路线,反而增加了迭代次数。 而牛顿法则需要计算目标函数的 矩阵,这在问题规模较大时非常困难,我们通常倾向于避免 的计算。对于一般的问题,一些拟牛顿法可以得到较好的结果,而对于最小二乘问题,一般可以采取:高斯牛顿法和列文伯格一马夸尔特方法
高斯牛顿法
Gauss Newton 是最优化算法里面最简单的方法之一。它的思想是将 进行一阶的泰勒展开。
这里 为 关于 的导数。根据前面的框架,当前的目标是为了寻找下降矢量 ,使得 达到最小。为了求 ,我们需要解一个线性的最小二乘问题:
展开得:
求上式关于 的导数,并令其为零:
可以得到如下方程组:
注意,我们要求解的变量是 ,因此这是一个线性方程组,我们称它为增量方程,也可以称为高斯牛顿方程 (Gauss Newton equations) 或者正规方程 (Normal equations)。我们把左边的系数定义为 ,右边定义为 ,那么上式变为:
这里把左侧记作 是有意义的。对比牛顿法可见,Gauss-Newton 用 作为牛顿法中二阶Hessian 矩阵的近似,从而省略了计算 的过程。求解增量方程是整个优化问题的核心所在。如果我们能够顺利解出该方程,那么 Gauss-Newton 的算法步骤可以写成:
- 给定初始值 。
- 对于第 次迭代,求出当前的雅可比矩阵 和误差 。
- 求解增量方程:.
形式:
- 若 足够小,则停止。否则,令 ,返回 2.