4 优化问题—处理噪声
4.1 状态估计
由于SLAM的数学表达式为
{
x
k
=
f
(
x
k
−
1
,
u
k
)
+
w
k
z
k
,
j
=
h
(
y
j
,
x
k
)
+
v
k
,
j
\begin{cases}x_k=f(x_{k-1},u_k)+w_k\\z_{k,j}=h(y_j,x_k)+v_{k,j}\end{cases}
{xk=f(xk−1,uk)+wkzk,j=h(yj,xk)+vk,j假设在
x
k
x_k
xk 处对路标
y
j
y_j
yj 进行了一次观测,对应到图像上的像素
z
k
,
j
z_{k,j}
zk,j ,观测方程可以写成
s
z
k
,
j
=
K
(
R
k
y
j
+
t
k
)
(4.1.1)
sz_{k,j}=K(R_ky_j+t_k)\tag{4.1.1}
szk,j=K(Rkyj+tk)(4.1.1)其中
K
K
K 为相机内参矩阵,
s
s
s 为像素点的距离(
R
k
y
j
+
t
k
R_ky_j+t_k
Rkyj+tk 的第三个分量)。
通常假设运动方程和观测方程中的噪声
w
k
w_k
wk 和
v
k
,
j
v_{k,j}
vk,j 满足零均值的高斯分布:
w
k
∼
N
(
0
,
R
k
)
v
k
,
j
∼
N
(
0
,
Q
k
,
j
)
w_k\sim\mathcal{N}(0,R_k)~~~~v_{k,j}\sim\mathcal{N}(0,Q_{k,j})
wk∼N(0,Rk) vk,j∼N(0,Qk,j)其中
N
\mathcal{N}
N 表示告诉分布,
0
0
0 表示零均值,
R
k
R_k
Rk 和
Q
k
,
j
Q_{k,j}
Qk,j 为协方差矩阵。通过带噪声的数据
z
z
z 和
u
u
u 推断位姿
x
x
x 和地图
y
y
y (以及它们的概率分布),这构成了一个状态估计问题。在比较常见且合理的情况下,假设状态量和噪声量服从高斯分布——这意味着在程序中只需存储它们的均值和协方差矩阵即可。均值可以看作对变量最优值的估计,而协方差矩阵则度量了它的不确定性。因此,问题就变成了 当存在一些运动数据和观测数据时,如何估计状态量
x
x
x
y
y
y 的高斯分布。
处理状态估计问题大致有两种方法,一种是把数据从零时刻整合到当前时刻一齐处理,称为批量(batch)的方法;另一种是已知当前时刻的估计状态,通过下一时刻的数据来更新状态,这种增量/渐进(incremental)的方法称为滤波器。相对来说,增量法仅考虑当前时刻的状态估计即可,而批量方法可以在更大的范围达到最优化,被认为优于增量法,是目前视觉SLAM的主流方法。极端情况下,可以让机器人收集所有时刻的数据,再带回计算中心统一处理,这也是SfM(Structure from Motion)的主流做法。显然,这种极端做法无法做到实时性,不符合SLAM的运动场景。所以在SLAM中,也可以用到折衷的方法。例如,固定一些历史轨迹,仅对当前时刻附近的一些轨迹进行优化,称之为滑动窗口估计法。理解批量方法更容易理解增量的办法。
批量法:
从
1
1
1 到
N
N
N 的所有时刻,假设有
M
M
M 个路标点,定义所有时刻机器人位姿和路标点坐标为
x
=
{
x
1
,
⋯
,
x
N
}
y
=
{
y
1
,
⋯
,
y
M
}
(4.1.2)
x=\{x_1,\cdots,x_N\}~~~~~~y=\{y_1,\cdots,y_M\}\tag{4.1.2}
x={x1,⋯,xN} y={y1,⋯,yM}(4.1.2)同样地,用不带下标的
u
u
u 表示所有时刻的输入,
z
z
z 表示所有时刻的观测数据。从概率学的角度来看,对机器人的估计就是已知输入数据
u
u
u 和观测数据
z
z
z 的条件下,求状态
x
x
x 和
y
y
y 的条件概率分布:
P
(
x
,
y
∣
z
,
u
)
(4.1.3)
P(x,y~|~z,u)\tag{4.1.3}
P(x,y ∣ z,u)(4.1.3)(当控制输入未知,只有图像时,即只考虑观测方程带来的数据时,相当于估计
P
(
x
,
y
∣
z
)
P(x,y|z)
P(x,y∣z) 的条件概率分布,此问题称之为SfM,即如何从众多图像中重建三维空间结构。)
先验、后验是概率,似然估计(函数)是前两者的拟合程度。
根据贝叶斯公式
p ( x ∣ y ) = p ( y ∣ x ) p ( x ) p ( y ) p(x|y)=\frac{p(y|x)p(x)}{p(y)} p(x∣y)=p(y)p(y∣x)p(x)
可得, P ( x ) P(x) P(x)为先验概率,似然估计是先验和后验的拟合程度,可以看成是一个系数。因此有先验乘以似然估计正比于后验估计。故可有下述公式理解:先得到一个条件概率,将此条件概率视为后验概率(因为后验概率是条件概率。似然估计也可以是条件概率,那怎么不看做似然估计呢?是因为我们通过传感器已知 P ( z , u ) P(z,u) P(z,u),因此就知道 p ( x , y ) p(x,y) p(x,y)为先验估计)
由贝叶斯法则得
P
(
x
,
y
∣
z
,
u
)
=
P
(
z
,
u
∣
x
,
y
)
P
(
x
,
y
)
P
(
z
,
u
)
∝
P
(
z
,
u
∣
x
,
y
)
⏟
L
i
k
e
l
i
h
o
o
d
P
(
x
,
y
)
⏟
P
r
i
o
r
(4.1.4)
P(x,y|z,u)=\frac{P(z,u|x,y)P(x,y)}{P(z,u)}\propto \underbrace{P(z,u|x,y)}_{Likelihood}~\underbrace{P(x,y)}_{Prior}\tag{4.1.4}
P(x,y∣z,u)=P(z,u)P(z,u∣x,y)P(x,y)∝Likelihood
P(z,u∣x,y) Prior
P(x,y)(4.1.4)其中式子(4.1.3)称为后验概率,
P
(
z
,
u
∣
x
,
y
)
P(z,u|x,y)
P(z,u∣x,y) 称为似然(Likelihood),
P
(
x
,
y
)
P(x,y)
P(x,y) 称为先验(Prior)。直接求后验分布是困难的,但求一个状态最优估计,使得在该状态下后验概率最大化是可行的:
(
x
,
y
)
M
A
P
∗
=
arg max
P
(
x
,
y
∣
z
,
u
)
=
arg max
P
(
z
,
u
∣
x
,
y
)
P
(
x
,
y
)
(4.1.5)
(x,y)^*_{MAP}=\argmax P(x,y|z,u)=\argmax P(z,u|x,y)P(x,y)\tag{4.1.5}
(x,y)MAP∗=argmaxP(x,y∣z,u)=argmaxP(z,u∣x,y)P(x,y)(4.1.5)
(arg max=argument of max)其中
P
(
z
,
u
)
P(z,u)
P(z,u) 与状态
x
x
x 和
y
y
y 无关,可以省略。求解最大后验估计(Maximize a Posterior)等价于最大化似然和先验的乘积。当然,假如不知道机器人位姿或路标大概的位置关系,就没有了先验。求解最大似然估计(Maximize Likelihood Estimation)
(
x
,
y
)
M
L
E
∗
=
arg max
P
(
z
,
u
∣
x
,
y
)
(4.1.6)
(x,y)^*_{MLE}=\argmax P(z,u|x,y)\tag{4.1.6}
(x,y)MLE∗=argmaxP(z,u∣x,y)(4.1.6)似然就是指“在现在的位姿下,可能产生怎样的观测数据”。由于已知观测数据(
u
u
u 和
y
y
y),最大似然估计就是指在哪种状态下,最能产生现在观测到的数据。
最小二乘
已知噪声项服从高斯分布
v
k
,
j
∼
N
(
0
,
Q
k
,
j
)
v_{k,j}\sim\mathcal{N}(0,Q_{k,j})
vk,j∼N(0,Qk,j),对于某一时刻观测方程
z
k
,
j
=
h
(
y
j
,
x
k
)
+
v
k
,
j
z_{k,j}=h(y_j,x_k)+v_{k,j}
zk,j=h(yj,xk)+vk,j 来说,有
P
(
z
k
,
j
∣
x
k
,
y
j
)
=
N
(
h
(
y
j
,
x
k
)
,
Q
k
,
j
)
(4.1.7)
P(z_{k,j}|x_k,y_j)=\mathcal{N}(h(y_j,x_k),Q_{k,j})\tag{4.1.7}
P(zk,j∣xk,yj)=N(h(yj,xk),Qk,j)(4.1.7)对于最大似然估计,可以用最小化负对数处理此问题。似然估计依然服从高斯分布。由任意高维高斯分布
x
∼
N
(
μ
,
Σ
)
x\sim\mathcal{N}(\mu,\Sigma)
x∼N(μ,Σ) 的概率密度函数展开式为
P
(
x
)
=
1
(
2
π
)
N
det
(
Σ
)
exp
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
P(x)=\frac{1}{\sqrt {(2\pi)^N\det(\Sigma)}}\exp\left(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\right)
P(x)=(2π)Ndet(Σ)1exp(−21(x−μ)TΣ−1(x−μ))取负对数,则有
−
ln
(
P
(
x
)
)
=
1
2
ln
(
(
2
π
)
N
det
(
Σ
)
)
+
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
(4.1.8)
-\ln(P(x))=\frac{1}{2}\ln\left((2\pi)^N\det(\Sigma)\right)+\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\tag{4.1.8}
−ln(P(x))=21ln((2π)Ndet(Σ))+21(x−μ)TΣ−1(x−μ)(4.1.8)因为式子(4.1.8)第一项与
x
x
x 无关,可以略去。因此最大似然估计可转变为最小化式子(4.1.8)第二项。因为代入式子(4.1.6)(4.1.7)(4.1.8)得
(
x
k
,
y
j
)
∗
=
arg max
N
(
h
(
y
j
,
x
k
)
,
Q
k
,
j
)
=
arg min
(
(
z
k
,
j
−
h
(
y
j
,
x
k
)
T
Q
k
,
j
−
1
(
z
k
,
j
−
h
(
y
j
,
x
k
)
)
(4.1.9)
\begin{aligned}(x_k,y_j)^*&=\argmax\mathcal{N}(h(y_j,x_k),Q_{k,j})\\&=\argmin\left((z_{k,j}-h(y_j,x_k)^TQ_{k,j}^{-1}(z_{k,j}-h(y_j,x_k)\right)\end{aligned}\tag{4.1.9}
(xk,yj)∗=argmaxN(h(yj,xk),Qk,j)=argmin((zk,j−h(yj,xk)TQk,j−1(zk,j−h(yj,xk))(4.1.9)该式子等价于最小化噪声项(即误差)的一个二次型,称该二次型为马哈拉诺比斯距离(Mahalanobis distance),又叫马氏距离。也可以看成由
Q
k
,
j
−
1
Q_{k,j}^{-1}
Qk,j−1 (信息矩阵)加权之后的欧氏距离(二范数)。上述为观测方程,运动方程同理可得。
由于各个时刻的输入和观测为相互独立,因此可以联合分布对批量法的数据进行因式分解
P
(
z
,
u
∣
x
,
y
)
=
∏
k
P
(
u
k
∣
x
k
−
1
,
x
k
)
∏
k
,
j
P
(
z
k
,
j
∣
x
k
,
y
j
)
(4.1.10)
P(z,u|x,y)=\prod_kP(u_k|x_{k-1},x_k)\prod_{k,j}P(z_{k,j}|x_k,y_j)\tag{4.1.10}
P(z,u∣x,y)=k∏P(uk∣xk−1,xk)k,j∏P(zk,j∣xk,yj)(4.1.10)定义各次运动方程(输入)和观测方程(观测)的误差
e
u
,
k
=
x
k
−
f
(
x
k
−
1
,
u
k
)
e
z
,
j
,
k
=
z
k
,
j
−
h
(
x
k
,
y
j
)
\begin{aligned}e_{u,k}=x_k-f(x_{k-1},u_k)\\e_{z,j,k}=z_{k,j}-h(x_k,y_j)\end{aligned}
eu,k=xk−f(xk−1,uk)ez,j,k=zk,j−h(xk,yj)最大似然估计等价于求最小化所有时刻估计值于真实读数之间的马氏距离。目标函数如下
min
J
(
x
,
y
)
=
∑
k
e
u
,
k
T
R
k
−
1
e
u
,
k
+
∑
k
∑
j
e
z
,
k
,
j
T
Q
k
,
j
−
1
e
z
,
k
,
j
(4.1.11)
\min J(x,y)=\sum_ke_{u,k}^TR_k^{-1}e_{u,k}+\sum_k\sum_je_{z,k,j}^TQ_{k,j}^{-1}e_{z,k,j}\tag{4.1.11}
minJ(x,y)=k∑eu,kTRk−1eu,k+k∑j∑ez,k,jTQk,j−1ez,k,j(4.1.11)就得到了一个最小二乘问题(Least Square Problem)。由于误差的存在,估计的轨迹于地图代入运动、观测方程式并不会完美成立,因此我们采取对状态的估计值进行微调,使得整体误差下降到某一极小值的限度,这就是非线性优化问题。
4.2 非线性最小二乘
对于简单的最小二乘表达式 min x F ( x ) = 1 2 ∥ f ( x ) ∥ 2 2 (4.2.1) \min_x F(x)=\frac{1}{2}\|f(x)\|_2^2\tag{4.2.1} xminF(x)=21∥f(x)∥22(4.2.1)其中,自变量 x ∈ R n x\in\mathbb{R}^n x∈Rn, f f f 是任意标量非线性函数 f ( x ) : R n → R f(x):\mathbb{R}^n\to\mathbb{R} f(x):Rn→R。系数 1 2 \frac{1}{2} 21 可有可无。由于函数 f ( x ) f(x) f(x) 为非线性函数,所求得最值无法用线性函数直接求导得出,因此采用迭代的方式,从一个初始值出发,不断的更新当前优化变量,使目标函数下降。具体步骤如下:
- 给定某个初始值 x 0 x_0 x0
- 对于第 k k k 次迭代,寻找一个增量 Δ x k \Delta x_k Δxk,使得 F ( x k + Δ x k ) = ∥ f ( x k + Δ x k ) ∥ 2 2 F(x_k+\Delta x_k)=\|f(x_k+\Delta x_k)\|_2^2 F(xk+Δxk)=∥f(xk+Δxk)∥22 达到极小值
- 若 Δ x k \Delta x_k Δxk 足够小,则停止
- 否则,令 x k + 1 = x k + Δ x k x_{k+1}=x_k+\Delta x_k xk+1=xk+Δxk,返回第 2 步。
让求解导函数为零的问题变为了一个不断寻找下降增量 Δ x k \Delta x_k Δxk 的问题。
一阶和二阶梯度法
考虑第
k
k
k 次迭代,在
x
k
x_k
xk 处寻求增量
Δ
x
k
\Delta x_k
Δxk,最直观的方式是将目标函数
F
(
x
)
F(x)
F(x) 在
x
k
x_k
xk 附近进行泰勒展开(线性化处理)
F
(
x
k
+
Δ
x
k
)
≈
F
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
+
1
2
Δ
x
k
T
H
(
x
k
)
Δ
x
k
(4.2.2)
F(x_k+\Delta x_k)\approx F(x_k)+J(x_k)^T\Delta x_k+\frac{1}{2}\Delta x_k^TH(x_k)\Delta x_k\tag{4.2.2}
F(xk+Δxk)≈F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk(4.2.2)其中
J
(
x
k
)
J(x_k)
J(xk) 是
F
(
x
)
F(x)
F(x) 关于
x
x
x 的一阶导数,也叫梯度、雅可比(Jacobian)矩阵,
H
(
x
)
H(x)
H(x) 则是二阶导数,也叫海塞(Hessian)矩阵。保留一阶项和二阶项对应求解方法中的一阶梯度或二阶梯度法。如果保留一阶梯度,取增量为反向的梯度,即可保证函数下降(梯度表示函数在该点处沿着此梯度方向变化最快,变化率最大,变化率值为梯度的模)
Δ
x
∗
=
−
J
(
x
k
)
(4.2.3)
\Delta x^*=-J(x_k)\tag{4.2.3}
Δx∗=−J(xk)(4.2.3)该式表示下降的方向,通常还需要指定一个可以根据一定条件算出的步长
λ
\lambda
λ。一阶梯度法也称为最速下降法(Steepest Method),直观意义为只要沿着反梯度的方向前进,在一阶(线性)的近似下,目标函数必定会下降。可以看出上述列举的第
k
k
k 次迭代只与
k
k
k 次有关,因此可省略下角标
k
{}_k
k,适用于任何一次迭代。一阶梯度法是根据梯度的意义求得。
同时,也可选择保留二阶梯度信息,此时增量方程为
Δ
x
∗
=
arg min
(
F
(
x
)
+
J
(
x
)
T
Δ
x
+
1
2
Δ
x
T
H
(
x
)
Δ
x
)
\Delta x^*=\argmin\left(F(x)+J(x)^T\Delta x+\frac{1}{2}\Delta x^TH(x)\Delta x\right)
Δx∗=argmin(F(x)+J(x)TΔx+21ΔxTH(x)Δx)由于只含有
Δ
x
\Delta x
Δx 的一次、二次项,因此对
Δ
x
\Delta x
Δx 求导,导数为零可得
J
+
H
Δ
x
=
0
⇒
H
Δ
x
=
−
J
(4.2.4)
J+H\Delta x=0~~~\Rightarrow~~~H\Delta x = -J\tag{4.2.4}
J+HΔx=0 ⇒ HΔx=−J(4.2.4)求解该线性方程,得到
Δ
x
\Delta x
Δx 即可,二阶梯度法又称牛顿法。二阶梯度法是根据求导为零求得。
梯度法是通过对初始值开始迭代,在迭代值处对目标函数(非线性函数)线性化,通过所得线性方程的最小值猜测目标函数的极小值。弊端就是最速法过于贪婪(与梯度值有关),容易出现Zigzag形,反而增加了迭代次数;而牛顿法需要求解目标函数的 H H H 矩阵,问题规模较大时,难以求解该矩阵,通常避免直接求解 H H H 矩阵。对于一般的问题,一些拟牛顿法可以得到较好的效果,对于最小二乘问题,有高斯牛顿法和列文伯格—马夸尔特方法。
高斯牛顿法
高斯牛顿法是优化算法中最简单的算法之一。它的思想是将式子(4.2.1)中的
f
(
x
)
f(x)
f(x) 一阶泰勒展开(注意选取的函数不是目标函数
F
(
x
)
F(x)
F(x) )
f
(
x
+
Δ
x
)
≈
f
(
x
)
+
J
(
x
)
T
Δ
x
(4.2.5)
f(x+\Delta x)\approx f(x)+J(x)^T\Delta x\tag{4.2.5}
f(x+Δx)≈f(x)+J(x)TΔx(4.2.5)其中,
J
(
x
)
J(x)
J(x) 为
f
(
x
)
f(x)
f(x) 关于
x
x
x 的导数(牛顿法中的
J
J
J 和
H
H
H 是关于
F
(
x
)
F(x)
F(x) 的)。也可以看成
min
f
(
x
)
F
(
x
)
=
1
2
∥
f
(
x
)
∥
2
2
\min_{f(x)} F(x)=\frac{1}{2}\|f(x)\|_2^2
f(x)minF(x)=21∥f(x)∥22区别于牛顿法。
当前的目标是寻求使
f
(
x
)
f(x)
f(x) 最小。而对于非线性函数
f
(
x
)
f(x)
f(x) 来说,取最小值同理于梯度法。有
Δ
x
∗
=
arg min
Δ
x
1
2
∥
f
(
x
)
+
J
(
x
)
T
Δ
x
∥
2
(4.2.6)
\Delta x^*=\argmin_{\Delta x}\frac{1}{2}\|f(x)+J(x)^T\Delta x\|^2\tag{4.2.6}
Δx∗=Δxargmin21∥f(x)+J(x)TΔx∥2(4.2.6)展开
1
2
∥
f
(
x
)
+
J
(
x
)
T
Δ
x
∥
2
=
1
2
(
f
(
x
)
+
J
(
x
)
T
Δ
x
)
T
(
f
(
x
)
+
J
(
x
)
T
Δ
x
)
=
1
2
(
∥
f
(
x
)
∥
2
+
2
f
(
x
)
J
(
x
)
T
Δ
x
+
Δ
x
T
J
(
x
)
J
(
x
)
T
Δ
x
)
\begin{aligned}\frac{1}{2}\|f(x)+J(x)^T\Delta x\|^2&=\frac{1}{2}\left(f(x)+J(x)^T\Delta x\right)^T\left(f(x)+J(x)^T\Delta x\right)\\&=\frac{1}{2}\left(\|f(x)\|^2+2f(x)J(x)^T\Delta x+\Delta x^TJ(x)J(x)^T\Delta x\right)\end{aligned}
21∥f(x)+J(x)TΔx∥2=21(f(x)+J(x)TΔx)T(f(x)+J(x)TΔx)=21(∥f(x)∥2+2f(x)J(x)TΔx+ΔxTJ(x)J(x)TΔx)对
Δ
x
\Delta x
Δx 求导,导数为零有
J
(
x
)
f
(
x
)
+
J
(
x
)
J
(
x
)
T
Δ
x
=
0
J
(
x
)
J
(
x
)
T
⏟
H
(
x
)
Δ
x
=
−
J
(
x
)
f
(
x
)
⏟
g
(
x
)
\begin{aligned}&J(x)f(x)+J(x)J(x)^T\Delta x=0\\&\underbrace{J(x)J(x)^T}_{H(x)}\Delta x =\underbrace{-J(x)f(x)}_{g(x)}\end{aligned}
J(x)f(x)+J(x)J(x)TΔx=0H(x)
J(x)J(x)TΔx=g(x)
−J(x)f(x)此方程是关于
Δ
x
\Delta x
Δx 的线性方程组,称之为增量方程,也叫高斯牛顿方程(Gauss-Newton equation)或者正规方程(Normal equation)。上式还可写为
H
Δ
x
=
g
(4.2.7)
H\Delta x=g\tag{4.2.7}
HΔx=g(4.2.7)此式对比式子(4.2.4)牛顿法,高斯牛顿法用
J
J
T
JJ^T
JJT 作为牛顿法中二阶Hessian矩阵的近似,从而省略了
H
H
H 的计算过程。高斯牛顿法的算法步骤:
- 给定初始值 x 0 x_0 x0。
- 对于第 k k k 次迭代,求出当前对于 f ( x ) f(x) f(x) 的雅可比矩阵 J ( x k ) J(x_k) J(xk) 和误差 f ( x k ) f(x_k) f(xk)。
- 求解增量方程: H Δ x = g H\Delta x= g HΔx=g。
- 若 Δ x \Delta x Δx 足够小,则停止 。否则,令 x k + 1 = x k + Δ x k x_{k+1}=x_k+\Delta x_k xk+1=xk+Δxk,返回第 2 步。
为了求解增量方程,需要求解 H − 1 H^{-1} H−1,需要 H H H 矩阵可逆,但实际中计算的 J J T JJ^T JJT 多数为半正定,此时增量的稳定性较差,导致算法不收敛。
列文伯格—马夸尔特法
此方法在一定程度上,修正了上述的
H
H
H 矩阵的问题,但收敛速度可能更慢,被称为阻尼牛顿法(Damped Newton Method)。高斯牛顿法中的泰勒展开只在展开点附近有较好的近似效果,所以很自然的想到应该给
Δ
x
\Delta x
Δx 添加一个范围—信赖区域(Trust Region)。该范围定义了在什么区域近似是有效的,该类方法也称为信赖区域方法(Trust Region Method)。
确定信赖区域的一个较好的办法是根据我们的近似模型和实际函数之间的差异来确定:差异小,效果好,可以扩大近似范围;差异大,效果差,可以缩小近似范围。定义一个指标
ρ
\rho
ρ 来刻画近似程度:
ρ
=
f
(
x
+
Δ
x
)
−
f
(
x
)
J
(
x
)
T
Δ
x
(4.2.8)
\rho=\frac{f(x+\Delta x)-f(x)}{J(x)^T\Delta x}\tag{4.2.8}
ρ=J(x)TΔxf(x+Δx)−f(x)(4.2.8)如果
ρ
\rho
ρ 比较大,近似效果可以放大;比较小,近似效果需要缩小;接近于1,则近似是好的。
改良版非线性优化框架如下:
- 给定初始值 x 0 x_0 x0,以及初始优化半径 μ \mu μ。
- 对于第 k k k 次迭代,在高斯牛顿法的基础上加上信赖区域: min Δ x k 1 2 ∥ f ( x k ) + J ( x k ) T Δ x k ∥ 2 s . t . ∥ D Δ x k ∥ 2 ≤ μ (4.2.9) \min_{\Delta x_k}\frac{1}{2}\|f(x_k)+J(x_k)^T\Delta x_k\|^2~~~~~s.t.~~~~\|D\Delta x_k\|^2\leq\mu\tag{4.2.9} Δxkmin21∥f(xk)+J(xk)TΔxk∥2 s.t. ∥DΔxk∥2≤μ(4.2.9)其中, μ \mu μ 是信赖区域的半径, D D D 为系数矩阵。
- 按照式子(4.2.8)计算 ρ \rho ρ。
- 若 ρ > 3 4 \rho >\frac{3}{4} ρ>43,则设置 μ = 2 μ \mu=2\mu μ=2μ。
- 若 ρ < 1 4 \rho <\frac{1}{4} ρ<41,则设置 μ = 0.5 μ \mu=0.5\mu μ=0.5μ。
- 如果 ρ \rho ρ 大于某阈值,则认为近似可行。令 x k + 1 = x k + Δ x k x_{k+1}=x_k+\Delta x_k xk+1=xk+Δxk。
- 判断算法是否收敛。如不收敛,则返回第 2 步,否则结束。
框架中的近似范围扩大的倍数和阈值都是经验值,可以替换成别的值;在公式(4.2.9)中,把增量限定于一个半径为
μ
\mu
μ 的球中,若带上系数矩阵
D
D
D,可以视为一个椭球。
列文伯格提出的优化方法是把
D
D
D 取成单位阵
I
I
I,相当于直接把
Δ
x
k
\Delta x_k
Δxk 约束在一个球中;马夸尔特提出的方法是将
D
D
D 取成一个非负对角阵(实际上用
J
T
J
J^TJ
JTJ 的对角元素平方根,使得在梯度小的维度上约束范围更大一些)。
将式子(4.2.9)通过拉格朗日乘子将约束条件放到目标函数中去,构成拉格朗日函数:
L
(
Δ
x
k
,
λ
)
=
1
2
(
∥
f
(
x
k
)
+
J
(
x
k
)
T
Δ
x
k
∥
2
+
λ
(
∥
D
Δ
x
k
∥
2
−
μ
)
)
(4.2.10)
\mathcal{L}(\Delta x_k,\lambda)=\frac{1}{2}\left(\|f(x_k)+J(x_k)^T\Delta x_k\|^2+\lambda\left(\|D\Delta x_k\|^2-\mu\right)\right)\tag{4.2.10}
L(Δxk,λ)=21(∥f(xk)+J(xk)TΔxk∥2+λ(∥DΔxk∥2−μ))(4.2.10)其中,
λ
\lambda
λ 为拉格朗日乘子。令对
Δ
x
k
\Delta x_k
Δxk 的导函数为零,仍为计算增量的线性方程
(
H
+
λ
D
T
D
)
Δ
x
k
=
g
(4.2.11)
(H+\lambda D^TD)\Delta x_k=g\tag{4.2.11}
(H+λDTD)Δxk=g(4.2.11)简化形式为
(
H
+
λ
I
)
Δ
x
k
=
g
(4.2.12)
(H+\lambda I)\Delta x_k=g\tag{4.2.12}
(H+λI)Δxk=g(4.2.12)参数
λ
\lambda
λ 比较小时,
H
H
H 占主导位置,说明二阶近似模型在该范围内效果较好,列文伯格—马夸尔特法较为接近高斯牛顿法;当
λ
\lambda
λ 比较大,
λ
I
\lambda I
λI 占主导位置,列文伯格—马夸尔特法较为接近一阶梯度法,说明附近的二阶近似不够好。
BA与图优化
BundleAdjustment,是指从视觉图像中提炼出最优的 3D 模型和相机参数(内参和外参)。考虑从任意特征点发射出来的几束光线(bundles of light rays),它们会在几个相机的成像平面上变成像素或是检测到的特征点。如果我们调整(adjustment)各相机姿态和各特征点的空间位置,使得这些光线最终收束到相机的光心。