下面介绍2种常用的方法——高斯牛顿法和列文伯格—马夸尔特法 - 高斯牛顿法:
思想是将 f(x) 进行一阶的 泰勒展开(请注意不是目标函数 f(x)2)
[color=rgba(0, 0, 0, 0.75)]这里 J(x) 为 f(x) 关于 x 的导数,实际上是一个 m×n 的矩阵,也是一个雅可比矩 阵。根据前面的框架,当前的目标是为了寻找下降矢量 ∆x,使得 ∥f (x + ∆x)∥[color=rgba(0, 0, 0, 0.75)]2[color=rgba(0, 0, 0, 0.75)] 达到最 小。为了求 ∆x,我们需要解一个线性的最小二乘问题:
对上式进行展开:
注:这里的展开平方处理成转置乘原式,我没有看懂,数学上的问题缺失。 求上式关于 ∆x的倒数并令其等于0:
但是这种方法存在缺点: 1) 在求解增量方程时,要求所用的近似H矩阵是可逆的(且正定的),但实际中JTJ只有半正定。也就是在求解过程中可能会出现JTJ为奇异矩阵或者病态的情况,这种情况下,增量的稳定性较差,导致算法不收敛。 2)就算H满足需求,如果求出来的步长太大,也会导致采用的局部近似不准确,甚至无法保证其收敛,甚至让目标函数变得更大。
所以SLAM中通常采用的是以下的方法 —— 列文伯格—马夸尔特(也叫阻尼牛顿法)
|