本篇博客为系列博客第二篇,主要介绍非线性最小二乘相关内容,线性最小二乘介绍请参见SLAM中的优化理论(一)—— 线性最小二乘。本篇博客期望通过下降法和信任区域法引出高斯牛顿和LM两种常用的非线性优化方法。博客中主要内容为:
- 非线性最小二乘介绍;
- 下降法相关理论(Desent Method);
- 信任区域理论(Trust Region Methods);
- 非线性最小二乘求解方法(高斯牛顿、LM)
由于个人水平有限,文中难免有解释不清晰的地方,因此希望大家结合着[1]、[2]和[3]进行理解。如果在阅读过程中发现有任何错误烦请告知。
如果有人知道如何将word中编辑的公式直接复制到博客上也麻烦给我说一下。
1. 非线性最小二乘介绍
1.1. 最小二乘问题回顾:
在上一篇博客中我们知道最小二乘问题是为了找到测量值和模型预测值之间的最小误差,该问题可以简单的表示为:
其中e(x)为模型和样本之间的误差,在SLAM中亦可以看作为观测值和估计值之间的误差。通过求解该问题我们就能够优化我们的模型函数使之更接近与真实的函数模型。
下图的数据拟合可以很好的说明最小二乘问题的结果和效果。
1.2. 线性与非线性最小二乘
假如该问题为线性的我们可以直接对目标函数求导,并且令其等于零,以此求得其极值,并通过比较求取全局最小值(Global Minimizer),并将其最为目标函数的解。
但是如果问题为非线性,此时我们通常无法直接写出其导数形式(函数过于复杂),因此我们不再去试图直接找到全局最小值,而是退而求其次通过不停的迭代计算寻找到函数的局部最小值(Local Minimizer),并认为该局部最小值能够使得我们的目标函数取得最优解(最小值),这就是非线性最小二乘的通常求解思路。
1.3. 非线性最小二乘相关定义
我们可以定义非线性最小二乘问题形式为:
同时我们定义局部最小值满足以下定义:
可理解为局部最小值的搜索区域,对于每一次的迭代,局部最小值与当前迭代的初始值之差不应超出设定的搜索区域。
现在我们将代价函数在点处进行泰勒展开有:
假设x为局部最小值,即使足够小,我们也将无法找到一个点x+△x,使得其对应的函数值小于x处的函数值。因此我们也可以得到以下结论:
同时我们也将所有满足令函数在其处一阶导等于零的点为驻点(Stationary Point)。