最小二乘及非线性优化
前言
\quad 最小二乘及非线性优化是SLAM技术的基础,在此梳理该问题相关基础知识,以加深理解。
最小二乘问题以及SLAM中的最小二乘
\quad
最简单的最小二乘问题可以表示为:
min
x
F
(
x
)
=
1
2
∣
∣
f
(
x
)
∣
∣
2
2
(1)
{\min_x} F(x) = \frac{1}{2}||f(x)||_2^2 \tag{1}
xminF(x)=21∣∣f(x)∣∣22(1)
\quad
而在SLAM问题中,仅考虑其观测方程:
z
k
,
j
=
f
(
y
j
,
x
k
)
+
v
k
,
j
(2)
z_{k,j} = f(y_{j}, x_{k}) + v_{k,j}\tag{2}
zk,j=f(yj,xk)+vk,j(2)
\quad
其中,
x
k
x_{k}
xk表示系统状态,
y
j
y_{j}
yj表示路标点,
v
k
,
j
v_{k,j}
vk,j表示观测噪声,
z
k
,
j
z_{k,j}
zk,j表示系统观测。在已知系统观测的条件下,估计系统状态,即为求解条件概率
P
(
x
,
y
∣
z
)
P(x,y|z)
P(x,y∣z), 根据贝叶斯公式:
P
(
x
,
y
∣
z
)
=
P
(
z
∣
x
,
y
)
P
(
x
,
y
)
P
(
z
)
(3)
P(x,y|z) = \frac{P(z|x,y)P(x,y)}{P(z)} \tag{3}
P(x,y∣z)=P(z)P(z∣x,y)P(x,y)(3)
\quad
上式中的
P
(
x
,
y
∣
z
)
P(x,y|z)
P(x,y∣z) 称之为后验概率,可以形象理解为在已知系统的结果(后)的条件下估计系统状态(先),
P
(
x
,
y
)
P(x,y)
P(x,y) 称为状态先验,
P
(
z
∣
x
,
y
)
P(z|x,y)
P(z∣x,y)称为似然,可以形象理解为估计系统处于何种状态下,最有可能得到如今的系统状态。
\quad
上式中,单纯的系统状态
z
z
z的概率与带估计变量
(
x
,
y
)
(x, y)
(x,y)无关,因此可以得出重要的结论:最大后验概率等价于最大化先验与似然的乘积。 而更进一步地,当系统缺乏先验时,则变成了 最大后验概率等价于最大似然估计 ,即对应上式中的
P
(
z
∣
x
,
y
)
P(z|x,y)
P(z∣x,y)。
\quad
普遍假设公式(2)中的噪声服从高斯分布,即
v
k
,
j
v_{k,j}
vk,j ~
N
(
0
,
Q
k
,
j
)
N(0, Q_{k,j})
N(0,Qk,j),则
z
k
,
j
z_{k,j}
zk,j~
N
(
f
(
y
j
,
x
k
)
,
Q
k
,
j
)
N( f(y_{j}, x_{k}), Q_{k,j})
N(f(yj,xk),Qk,j)。
\quad
对于一个高斯分布
x
x
x ~
N
(
μ
,
Σ
)
N(\mu, \Sigma)
N(μ,Σ),其概率分布为:
P
(
x
)
=
1
(
2
π
)
N
∣
Σ
∣
e
x
p
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
(4)
P(x) =\frac{1}{\sqrt{{(2\pi})^N|\Sigma| }}exp(-\frac{1}{2}(x-\mu)^T \Sigma^{-1}(x-\mu)) \tag{4}
P(x)=(2π)N∣Σ∣1exp(−21(x−μ)TΣ−1(x−μ))(4)
\quad
为求解
P
(
x
)
P(x)
P(x)的最大值,对其取负对数:
−
l
n
(
P
(
x
)
)
=
1
2
l
n
(
(
2
π
)
N
∣
Σ
∣
)
+
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
(5)
-ln(P(x))=\frac{1}{2}ln((2\pi)^N|\Sigma|)+\\ \frac{1}{2}(x-\mu)^T \Sigma^{-1}(x-\mu) \tag{5}
−ln(P(x))=21ln((2π)N∣Σ∣)+21(x−μ)TΣ−1(x−μ)(5)
\quad
ln(x)单调递增,由此P(x)最大值等价于其负对数最小值,且式(5)中第一项与x无关,由此:
(
x
k
,
y
j
)
∗
=
a
r
g
m
a
x
(
P
(
z
k
,
j
)
)
=
a
r
g
m
i
n
(
(
z
k
,
j
−
f
(
y
j
,
x
k
)
)
T
Q
k
,
j
−
1
(
z
k
,
j
−
f
(
y
j
,
x
k
)
)
(6)
(x_k, y_j)^* = argmax(P(z_{k,j} )) \\ \ = argmin((z_{k,j}-f(y_{j}, x_{k}))^T Q_{k,j}^{-1}(z_{k,j}-f(y_{j}, x_{k})) \tag{6}
(xk,yj)∗=argmax(P(zk,j)) =argmin((zk,j−f(yj,xk))TQk,j−1(zk,j−f(yj,xk))(6)
\quad
通常假设系统各个历史时刻的观测相互独立,因此多个系统状态的联合分布可以写作乘积形式,则该分布的负对数可以写作加和形式,令
e
z
,
k
,
j
=
z
k
,
j
−
h
(
y
j
,
x
k
)
e_{z,k,j} = z_{k,j}-h(y_{j}, x_{k})
ez,k,j=zk,j−h(yj,xk)(即为估计误差),则各时刻历史状态的估计问题就转化为如下的最小二乘问题(即为最小化误差的加权二范数):
(
x
,
y
)
∗
=
a
r
g
m
i
n
∑
j
,
k
e
z
,
k
,
j
T
Q
k
,
j
−
1
e
z
,
k
,
j
(7)
(\mathbf{x, y})^* = argmin \sum_{j,k}e_{z,k,j}^T Q_{k,j}^{-1}e_{z,k,j} \tag{7}
(x,y)∗=argminj,k∑ez,k,jTQk,j−1ez,k,j(7)
最小二乘求解
\quad 最小二乘问题的求解,复杂程度取决于 h ( y j , x k ) h(y_{j}, x_{k}) h(yj,xk)的复杂度。当 h h h是线性函数时,则简单地通过求导即可得到系统状态的有效估计;而当 h h h是一个非线性函数时,则需要利用非线性迭代求解,典型的方法包括一阶梯度法(最速下降法)、二阶梯度法(牛顿法)、Gauss-Newton、Levenberg-Marquardt 算法。
线性最小二乘求解
\quad
仍利用式(2)为例,当
f
f
f函数为线性函数时,可以将不同时刻的系统观测转化为矩阵形式:
z
=
A
x
\mathbf{z} = \mathbf{Ax}
z=Ax,此处
x
\mathbf{x}
x表示不同时刻批量系统状态向量,
z
\mathbf{z}
z表示批量系统观测向量。此时最小二乘问题转化为:
x
∗
=
a
r
g
m
i
n
(
(
z
−
A
x
)
T
Σ
−
1
(
z
−
A
x
)
)
(8)
\mathbf{x}^* = argmin((\mathbf{z-Ax})^T \Sigma^{-1}(\mathbf{z-Ax})) \tag{8}
x∗=argmin((z−Ax)TΣ−1(z−Ax))(8)
\quad
此时,根据矩阵求导思路,易得:
2
A
T
Σ
−
1
(
A
x
−
z
)
=
0
x
∗
=
(
A
T
Σ
−
1
H
)
A
T
Σ
−
1
z
(9)
2\mathbf{A^T}\Sigma^{-1}(\mathbf{Ax-z}) = 0 \\ \mathbf{x^*}=(\mathbf{A^T \Sigma^{-1} H })\mathbf{A^T \Sigma^{-1} z} \tag{9}
2ATΣ−1(Ax−z)=0x∗=(ATΣ−1H)ATΣ−1z(9)
\quad
关于矩阵求导相关讲解,可以参考:矩阵求导与矩阵微分
非线性最小二乘求解
\quad
当上文中的
f
f
f函数为非线性函数时,定义
r
(
x
)
=
z
−
A
x
\mathbf{r(x) = z-Ax}
r(x)=z−Ax,则最小二乘问题转化为:
a
r
g
m
i
n
x
F
(
r
)
=
a
r
g
m
i
n
x
(
r
T
Σ
−
1
r
)
argmin_x \mathbf{F(r)} = argmin_x(\mathbf{r^T \Sigma^{-1}r})
argminxF(r)=argminx(rTΣ−1r),对于此类的最小二乘问题,通用方案都是通过Taylor将目标函数近似为线性函数,而后迭代计算求解。迭代过程如下图所示(取自高博SLAM十四讲):
一阶梯度法
\quad
一阶梯度法直接将
F
(
r
)
\mathbf{F(r)}
F(r)展开为如下形式:
F
(
r
)
=
F
(
r
)
+
J
F
T
ξ
(10)
\mathbf{F(r) = F(r) + {J_F}^T\xi} \tag{10}
F(r)=F(r)+JFTξ(10)
\quad
此时,每次的迭代增量
ξ
=
−
J
F
T
\mathbf{\xi = - {J_F}^T}
ξ=−JFT,即向目标函数的逆梯度方向进行迭代,该方法也称为最速下降法。
二阶梯度法
\quad
如式(9),若保留
F
(
e
)
\mathbf{F(e)}
F(e)的二阶展开项,形式如下:
F
(
r
)
=
F
(
r
)
+
J
F
T
ξ
+
1
2
ξ
T
H
ξ
(11)
\mathbf{F(r) = F(r) + {J_F}^T\xi + \frac{1}{2} \xi^TH\xi } \tag{11}
F(r)=F(r)+JFTξ+21ξTHξ(11)
\quad
为求解
ξ
\xi
ξ使上式极小,因此对
ξ
\xi
ξ求导,结果如下:
ξ
=
J
F
T
+
H
ξ
→
H
ξ
=
−
J
F
T
ξ
(12)
\mathbf{ \xi = {J_F}^T + H \xi \to H\xi = - {J_F}^T\xi} \tag{12}
ξ=JFT+Hξ→Hξ=−JFTξ(12)
\quad
二阶梯度法又称为牛顿法,但考虑到该方法每次求解过程中均需更新二阶导数H矩阵,计算复杂度较高
Gauss-Newton
\quad
不同于上述两种方法,Gauss-Newton对
r
(
x
)
\mathbf{r(x)}
r(x)进行一阶Taylor展开:
r
(
x
)
=
r
(
x
)
+
J
r
T
ξ
\mathbf{r(x) = r(x) + {J_r}^T\xi}
r(x)=r(x)+JrTξ,此时目标函数为:
F
(
r
)
=
(
r
+
J
r
T
ξ
)
T
Σ
−
1
(
r
+
J
r
T
ξ
)
=
r
T
Σ
−
1
r
+
2
ξ
T
J
r
Σ
−
1
r
+
ξ
J
r
Σ
−
1
J
r
T
ξ
(13)
\mathbf{F(r)=(r+{J_r}^T\xi)^T \Sigma^{-1}(r+{J_r}^T\xi) }\\ \mathbf{=r^T\Sigma^{-1}r +2\xi^TJ_r \Sigma^{-1} r + \xi {J_r}\Sigma^{-1} {J_r}^T\xi }\tag{13}
F(r)=(r+JrTξ)TΣ−1(r+JrTξ)=rTΣ−1r+2ξTJrΣ−1r+ξJrΣ−1JrTξ(13)
\quad
对
ξ
\xi
ξ进行求导计算迭代增量:
J
r
Σ
−
1
r
+
J
r
Σ
−
1
J
r
T
ξ
=
0
→
ξ
∗
=
−
(
J
r
Σ
−
1
J
r
T
)
−
1
J
r
Σ
−
1
r
\mathbf{J_r\Sigma^{-1}r +J_r\Sigma^{-1}{J_r}^T\xi= 0 \to \xi^* = -(J_r\Sigma^{-1}{J_r}^T)^{-1}J_r\Sigma^{-1}r}
JrΣ−1r+JrΣ−1JrTξ=0→ξ∗=−(JrΣ−1JrT)−1JrΣ−1r
Levenberg-Marquardt
\quad
高斯牛顿法中采用的Taylor展开仅能在展开点附近产生较好的近似。LM算法在此基础上,为增量
ξ
\xi
ξ添加了一个信赖区域
μ
\mu
μ,并定义了一个指标,用于衡量近似效果:
ρ
=
r
(
x
+
ξ
)
−
r
(
x
)
J
r
T
(
ξ
)
=
实
际
变
化
量
近
似
变
化
量
\rho=\frac{r(x+\xi)-r(x)}{{J_r}^T(\xi)}=\frac{实际变化量}{近似变化量}
ρ=JrT(ξ)r(x+ξ)−r(x)=近似变化量实际变化量,当
ρ
\rho
ρ过小时,则近似变化量远超实际变化量,需缩小信赖区域;反之,
ρ
\rho
ρ过大时,则近似变化量不及实际变化量,需扩大信赖区域。
\quad
由此,LM方法中的最小二乘问题转化为:
m
i
n
x
(
r
+
J
r
T
ξ
)
T
Σ
−
1
(
r
+
J
r
T
ξ
)
)
s
.
t
.
∣
∣
D
ξ
∣
∣
2
<
μ
(14)
\mathbf{min_x(r+{J_r}^T\xi)^T \Sigma^{-1}(r+{J_r}^T\xi))} \\ s.t. \mathbf{{||D\xi||}^2 < \mu \tag{14}}
minx(r+JrTξ)TΣ−1(r+JrTξ))s.t.∣∣Dξ∣∣2<μ(14)
\quad
上式属于带有不等式约束的最优化问题,可以通过构造拉格朗日函数,统一为无约束的最优化问题:
m
i
n
x
(
r
+
J
r
T
ξ
)
T
Σ
−
1
(
r
+
J
r
T
ξ
)
)
+
λ
2
(
∣
∣
D
ξ
∣
∣
2
−
μ
)
(15)
\mathbf{min_x(r+{J_r}^T\xi)^T \Sigma^{-1}(r+{J_r}^T\xi))}\\+\mathbf{\frac{\lambda}{2}({||D\xi||}^2 - \mu) } \tag{15}
minx(r+JrTξ)TΣ−1(r+JrTξ))+2λ(∣∣Dξ∣∣2−μ)(15)
\quad
其中
λ
\lambda
λ表示拉格朗日乘子。此后求导过程与Gauss-Newton方法相同,得到迭代增量结果:
J
r
Σ
−
1
r
+
J
r
Σ
−
1
J
r
T
ξ
+
λ
D
T
D
ξ
=
0
→
ξ
∗
=
−
(
J
r
Σ
−
1
J
r
T
+
λ
D
T
D
)
−
1
J
r
Σ
−
1
r
\mathbf{J_r\Sigma^{-1}r +J_r\Sigma^{-1}{J_r}^T\xi + \lambda D^TD\xi= 0} \\ \to \mathbf{\xi^* = -(J_r\Sigma^{-1}{J_r}^T+ \lambda D^TD )^{-1}J_r\Sigma^{-1}r}
JrΣ−1r+JrΣ−1JrTξ+λDTDξ=0→ξ∗=−(JrΣ−1JrT+λDTD)−1JrΣ−1r
方案优缺点总结
- 一阶梯度法(最速下降法)是最直观的迭代算法,计算量最小,但在迭代后期,易在极小值附近左右横跳,导致迭代次数增加;
- 二阶梯度法(牛顿法)同样较为直观,但由于每次迭代都要计算Hessian矩阵,计算量较大;
- Gauss-Newton法可以视为牛顿法的改进,利用 J J T JJ^T JJT近似Hessian矩阵,计算量较小,但问题在于 J J T JJ^T JJT仅能保证半正定性质,可能存在奇异或病态问题;且当增量计算结果较大时,对目标函数的近似准确度下降,可能导致迭代无法收敛
- LM算法是高斯牛顿法的一种改进形式,通过增加信赖区域的方式,降低了病态问题出现的可能,整体迭代过程更为健壮,但迭代收敛速度一般比高斯牛顿法更慢。
\quad 在实际问题中,一般选择GN或者LM算法作为迭代方案,当问题接近病态时选择LM方案,其余时刻则选择GN方案。