为什么在SLAM中使用链式求导?为什么对微小扰动进行求导?
链式求导是一个很常用、很简单的模型,但是为什么用这个模型呢?在SLAM十四讲中并没有对这个问题进行阐述。
这与非线性优化的方法有关,首先对于一个最小二乘问题:
min
x
1
2
∥
f
(
x
)
∥
2
2
\min _{x} \frac{1}{2}\|f(\boldsymbol{x})\|_{2}^{2}
xmin21∥f(x)∥22
高斯牛顿法是处理这个问题最简单的方法,它的做法是将f(x)进行泰勒展开:
f
(
x
+
Δ
x
)
≈
f
(
x
)
+
J
(
x
)
Δ
x
f(\boldsymbol{x}+\Delta \boldsymbol{x}) \approx f(\boldsymbol{x})+\boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x}
f(x+Δx)≈f(x)+J(x)Δx
然后开始求J最小时,delta_x的值。首先进行展开:
1
2
∥
f
(
x
)
+
J
(
x
)
Δ
x
∥
2
=
1
2
(
f
(
x
)
+
J
(
x
)
Δ
x
)
T
(
f
(
x
)
+
J
(
x
)
Δ
x
)
=
1
2
(
∥
f
(
x
)
∥
2
2
+
2
f
(
x
)
T
J
(
x
)
Δ
x
+
Δ
x
T
J
(
x
)
T
J
(
x
)
Δ
x
)
\begin{aligned} \frac{1}{2}\|f(\boldsymbol{x})+\boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x}\|^{2} &=\frac{1}{2}(f(\boldsymbol{x})+\boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x})^{T}(f(\boldsymbol{x})+\boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x}) \\ &=\frac{1}{2}\left(\|f(\boldsymbol{x})\|_{2}^{2}+2 f(\boldsymbol{x})^{T} \boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x}+\Delta \boldsymbol{x}^{T} \boldsymbol{J}(\boldsymbol{x})^{T} \boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x}\right) \end{aligned}
21∥f(x)+J(x)Δx∥2=21(f(x)+J(x)Δx)T(f(x)+J(x)Δx)=21(∥f(x)∥22+2f(x)TJ(x)Δx+ΔxTJ(x)TJ(x)Δx)
然后对delta_x进行求偏导,并令其为0:
J
(
x
)
T
J
(
x
)
Δ
x
=
−
J
(
x
)
T
f
(
x
)
\boldsymbol{J}(\boldsymbol{x})^{T} \boldsymbol{J}(\boldsymbol{x}) \Delta \boldsymbol{x}=-\boldsymbol{J}(\boldsymbol{x})^{T} f(\boldsymbol{x})
J(x)TJ(x)Δx=−J(x)Tf(x)
这样得到的delta_x可以让惩罚函数达到最小。这就让函数从一个寻找最优x的问题转换成为寻找最优delta_x问题,而让x成为当前迭代的初始条件,这就是非线性优化、最小二乘方法的核心最底层的逻辑。
在这个过程中对x求导的过程变成了对delta_x求导数,这种方法对我们理解SLAM中的求导是十分有用的。
因此在PNP中,同样对微小变量delta_zeta进行求导。
∂
e
∂
δ
ξ
=
lim
δ
ξ
→
0
e
(
δ
ξ
⊕
ξ
)
δ
ξ
=
∂
e
∂
P
′
∂
P
′
∂
δ
ξ
\frac{\partial e}{\partial \delta \boldsymbol{\xi}}=\lim _{\delta \boldsymbol{\xi} \rightarrow 0} \frac{e(\delta \boldsymbol{\xi} \oplus \boldsymbol{\xi})}{\delta \boldsymbol{\xi}}=\frac{\partial \boldsymbol{e}}{\partial \boldsymbol{P}^{\prime}} \frac{\partial \boldsymbol{P}^{\prime}}{\partial \delta \boldsymbol{\xi}}
∂δξ∂e=δξ→0limδξe(δξ⊕ξ)=∂P′∂e∂δξ∂P′
这里的 ⊕ 指李代数上的左乘扰动。第二项为变换后的点关于李代数的导数,
∂
P
′
∂
δ
ξ
=
[
I
,
−
P
′
∧
]
\frac{\partial \boldsymbol{P}^{\prime}}{\partial \delta \boldsymbol{\xi}}=\left[\boldsymbol{I},-\boldsymbol{P}^{\prime \wedge}\right]
∂δξ∂P′=[I,−P′∧]
推导参考。
∂ P ~ ′ ∂ ξ = ∂ ( T ⋅ P ~ ) ∂ ξ = ∂ ( exp ( ξ ∧ ) P ~ ) ∂ δ ξ ( 左扰动模型 ) \begin{aligned} &\frac{\partial \tilde{\mathbf{P}}^{\prime}}{\partial \boldsymbol{\xi}}=\frac{\partial(\mathbf{T} \cdot \tilde{\mathbf{P}})}{\partial \boldsymbol{\xi}}\\ &=\frac{\partial\left(\exp \left(\boldsymbol{\xi}^{\wedge}\right) \tilde{\mathbf{P}}\right)}{\partial \delta \boldsymbol{\xi}} \quad(\text { 左扰动模型 }) \end{aligned} ∂ξ∂P~′=∂ξ∂(T⋅P~)=∂δξ∂(exp(ξ∧)P~)( 左扰动模型 )
= lim δ ξ → 0 exp ( δ ξ ∧ ) exp ( ξ ∧ ) P ~ − exp ( ξ ∧ ) P ~ δ ξ ≈ lim δ ξ → 0 ( I + δ ξ ∧ ) exp ( ξ ∧ ) P ~ − exp ( ξ ∧ ) P ~ δ ξ \begin{array}{l} =\lim _{\delta \xi \rightarrow 0} \frac{\exp \left(\delta \boldsymbol{\xi}^{\wedge}\right) \exp \left(\boldsymbol{\xi}^{\wedge}\right) \tilde{\mathbf{P}}-\exp \left(\boldsymbol{\xi}^{\wedge}\right) \tilde{\mathbf{P}}}{\delta \boldsymbol{\xi}} \\ \approx \lim _{\delta \xi \rightarrow 0} \frac{\left(\mathbf{I}+\delta \boldsymbol{\xi}^{\wedge}\right) \exp \left(\boldsymbol{\xi}^{\wedge}\right) \tilde{\mathbf{P}}-\exp \left(\boldsymbol{\xi}^{\wedge}\right) \tilde{\mathbf{P}}}{\delta \boldsymbol{\xi}} \end{array} =limδξ→0δξexp(δξ∧)exp(ξ∧)P~−exp(ξ∧)P~≈limδξ→0δξ(I+δξ∧)exp(ξ∧)P~−exp(ξ∧)P~
= lim δ ξ → 0 δ ξ ∧ exp ( ξ ∧ ) P ~ δ ξ = lim δ ξ → 0 [ δ ϕ ∧ δ ρ 0 T 0 ] [ R ⋅ P + t 1 ] δ ξ = lim δ ξ → 0 [ δ ϕ ∧ ( R ⋅ P + t ) + δ ρ 0 ] δ ξ \begin{array}{l} =\lim _{\delta \xi \rightarrow 0} \frac{\delta \boldsymbol{\xi}^{\wedge} \exp \left(\boldsymbol{\xi}^{\wedge}\right) \tilde{\mathbf{P}}}{\delta \boldsymbol{\xi}} \\ =\lim _{\delta \xi \rightarrow 0} \frac{\left[\begin{array}{cc} \delta \boldsymbol{\phi}^{\wedge} & \delta \boldsymbol{\rho} \\ \mathbf{0}^{T} & 0 \end{array}\right]\left[\begin{array}{c} \mathbf{R} \cdot \mathbf{P}+\mathbf{t} \\ 1 \end{array}\right]}{\delta \boldsymbol{\xi}} \\ =\lim _{\delta \xi \rightarrow 0} \frac{\left[\begin{array}{c} \delta \boldsymbol{\phi}^{\wedge}(\mathbf{R} \cdot \mathbf{P}+\mathbf{t})+\delta \boldsymbol{\rho} \\ 0 \end{array}\right]}{\delta \boldsymbol{\xi}} \end{array} =limδξ→0δξδξ∧exp(ξ∧)P~=limδξ→0δξ[δϕ∧0Tδρ0][R⋅P+t1]=limδξ→0δξ[δϕ∧(R⋅P+t)+δρ0]
= [ I − ( R ⋅ P + t ) ∧ 0 T 0 T ] = [ I − P ′ ∧ 0 T 0 T ] \begin{array}{l} =\left[\begin{array}{cc} \mathbf{I} & -(\mathbf{R} \cdot \mathbf{P}+\mathbf{t})^{\wedge} \\ \mathbf{0}^{T} & \mathbf{0}^{T} \end{array}\right] \\ =\left[\begin{array}{cc} \mathbf{I} & -\mathbf{P}^{\prime \wedge} \\ \mathbf{0}^{T} & \mathbf{0}^{T} \end{array}\right] \end{array} =[I0T−(R⋅P+t)∧0T]=[I0T−P′∧0T]
这里面用到了左乘扰动模型去寻找流形空间中的优化,实际上这个可以理解成为旋转矩阵与旋转矢量的关系。
因此,通过链式求导把这个问题给解决了,与非线性优化的处理是同一个思路,只不过用P’对delta_zeta求导正好有现成的数学工具可以用。