深入浅出3D感知中的优化与基于学习的技术 (第二章)原创教程
总结了下这部分基于学习的感知技术,会写一个新的系列教程讲解这部分三维感知技术的发展到最新的技术细节,并支持自己最近的项目开发和论文。本系列禁止转载
,有技术探讨可以发邮件给我 fanzexuan135@163.com
这一章先讲一些数学知识,这是看懂后面要讲解的论文和学术界前沿技术的关键。
2.1 导数记号
我们将导数视为向量空间之间的线性映射。更准确地说,给定在开集 U ⊆ X U\subseteq X U⊆X 和 V ⊆ Y V\subseteq Y V⊆Y 上定义的函数 F : U → V F:U\rightarrow V F:U→V 以及 a ∈ U a\in U a∈U,在 a a a 处的导数是一个线性映射 D F ( a ) : X → Y DF(a):X\rightarrow Y DF(a):X→Y,满足:
lim v → 0 ∥ F ( a + v ) − F ( x ) − D F ( a ) ⋅ v ∥ ∥ v ∥ = 0 (2.1) \lim_{v\to 0} \frac{\|F(a+v)-F(x)-DF(a)\cdot v\|}{\|v\|}=0 \tag{2.1} v→0lim∥v∥∥F(a+v)−F(x)−DF(a)⋅v∥=0(2.1)
其中, ∥ ⋅ ∥ \|\cdot\| ∥⋅∥ 表示向量的范数。
如果 X = R n X=\mathbb{R}^n X=Rn 和 Y = R m Y=\mathbb{R}^m Y=Rm 是欧几里得空间,那么可以通过对标准坐标基 { e 1 , e 2 , ... , e n } \{e_1,e_2,\dots,e_n\} {e1,e2,...,en} 作用导数算子来形成雅可比矩阵:
J i j = ∂ F i ∂ x j ( a ) = D F i ( a ) e j , F ( a ) = ( F 1 ( a ) , ... , F m ( a ) ) (2.2) J_{ij}=\frac{\partial F_i}{\partial x_j}(a)=DF_i(a)e_j,\quad F(a)=(F_1(a),\dots,F_m(a)) \tag{2.2} Jij=∂xj∂Fi(a)=DFi(a)ej,F(a)=(F1(a),...,Fm(a))(2.2)
式中, ∂ ∂ x j \frac{\partial}{\partial x_j} ∂xj∂ 表示对第 j j j 个分量求偏导数。
高阶导数的表示类似,例如二阶导数 D x 2 F = D x x F D^2_xF=D_{xx}F Dx2F=DxxF。
梯度: 关于泛函 L L L (即损失函数)的导数称为梯度。我们将梯度表示为行向量:
∂ L ∂ x = D x L = [ ∂ L ∂ x 1 ... ∂ L ∂ x n ] (2.3) \frac{\partial L}{\partial x}=D_xL=\left[\frac{\partial L}{\partial x_1}\quad\dots\quad\frac{\partial L}{\partial x_n}\right] \tag{2.3} ∂x∂L=DxL=[∂x1∂L...∂xn∂L](2.3)
这暗示了它们属于 R n \mathbb{R}^n Rn 上线性泛函的空间。在推导自定义网络层的反向传播时,这种表示法的经济性很明显。给定函数 F : X ↦ Y F:X\mapsto Y F:X↦Y 和 L : Y ↦ R L:Y\mapsto\mathbb{R} L:Y↦R 以及 a ∈ X a\in X a∈X,应用链式法则,我们得到反向传播算法中典型的向量-雅可比乘积:
D L x ( a ) = D y L ( F ( a ) ) ⋅ D x F ( a ) (2.4) DL_x(a)=D_yL(F(a))\cdot D_xF(a) \tag{2.4} DLx(a)=DyL(F(a))⋅DxF(a)(2.4)
在大多数情况下,不需要显式构造矩阵 D x F ( a ) D_xF(a) DxF(a),而是可以就地计算向量-雅可比乘积。
2.2 隐式层
隐式层是在神经网络中施加先验和几何约束的强大工具。与直接将输入映射到输出 y = f ( x ) y=f(x) y=f(x) 的典型前馈层不同,隐式层定义了一个函数 ϕ ( x , y ) = 0 \phi(x,y)=0 ϕ(x,y)=0,给定的输出 y ∗ y^* y∗ 必须满足这个函数。当然,任何前馈层都可以写成隐式形式 ϕ ( x , y ) = f ( x ) − y = 0 \phi(x,y)=f(x)-y=0 ϕ(x,y)=f(x)−y=0。
作为一个激励性的例子,考虑一个求解线性系统 A x = b Ax=b Ax=b 的层,其中 A ∈ R n × n A\in\mathbb{R}^{n\times n} A∈Rn×n 是非奇异的, b ∈ R n b\in\mathbb{R}^n b∈Rn, x ∈ R n x\in\mathbb{R}^n x∈Rn。我们可以将其表示为一个神经网络层,它接受两个输入 A A A 和 b b b,并求解一个满足约束 A x = b Ax=b Ax=b 的 x x x。为了训练具有这种层的网络,我们需要能够通过这一层进行微分。换句话说,给定梯度 ∂ L ∂ x \frac{\partial L}{\partial x} ∂x∂L,我们需要计算相对于输入的梯度 ∂ L ∂ A \frac{\partial L}{\partial A} ∂A∂L 和 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L。为此,我们应用逆函数定理。
定理1(逆函数定理[2])。 假设 U U U 和 V V V 是 R n \mathbb{R}^n Rn 的开子集, F : U ↦ V F:U\mapsto V F:U↦V 是一个光滑函数。如果在某个点 a ∈ U a\in U a∈U 处 D F ( a ) DF(a) DF(a) 是可逆的,那么存在 a a a 的连通邻域 U 0 ⊆ U U_0\subseteq U U0⊆U 和 F ( a ) F(a) F(a) 的邻域 V 0 ⊆ U V_0\subseteq U V0⊆U,使得限制 F ∣ U 0 : U 0 ↦ V 0 F|_{U_0}:U_0\mapsto V_0 F∣U0:U0↦V0 是一个微分同胚(即具有光滑逆的光滑双射函数)。
给定一个隐式函数 ϕ : R k × R n ↦ R n \phi:\mathbb{R}^k\times\mathbb{R}^n\mapsto\mathbb{R}^n ϕ:Rk×Rn↦Rn,其雅可比矩阵 D y ϕ ( a , b ) D_y\phi(a,b) Dyϕ(a,b) 是非奇异的,定义函数 Φ : R k × R n ↦ R k × R n \Phi:\mathbb{R}^k\times\mathbb{R}^n\mapsto\mathbb{R}^k\times\mathbb{R}^n Φ:Rk×Rn↦Rk×Rn 为 Φ ( x , y ) = ( x , ϕ ( x , y ) ) \Phi(x,y)=(x,\phi(x,y)) Φ(x,y)=(x,ϕ(x,y))。它在 ( a , b ) (a,b) (a,b) 处的雅可比矩阵为:
D Φ ( a , b ) = [ I n 0 D x ϕ ( a , b ) D y ϕ ( a , b ) ] (2.5) D\Phi(a,b)=\begin{bmatrix}I_n & 0 \\ D_x\phi(a,b) & D_y\phi(a,b)\end{bmatrix} \tag{2.5} DΦ(a,b)=[InDxϕ(a,b)0Dyϕ(a,b)](2.5)
显然,如果 D y ϕ ( a , b ) D_y\phi(a,b) Dyϕ(a,b) 是非奇异的,那么 D Φ ( a , b ) D\Phi(a,b) DΦ(a,b) 是非奇异的,逆函数定理适用于 Φ \Phi Φ。因此,在 ( a , b ) (a,b) (a,b) 的邻域 U 0 × W 0 U_0\times W_0 U0×W0 内存在一个光滑的逆 Φ − 1 \Phi^{-1} Φ−1。因此,如果给定一个 ( x , z ) ∈ U 0 × W 0 (x,z)\in U_0\times W_0 (x,z)∈U0×W0,存在一个函数使得:
Φ ( x , y ) = Φ − 1 ( x , z ) = ( Φ x − 1 ( x , z ) , Φ y − 1 ( x , z ) ) = ( x , Φ y − 1 ( x , z ) ) (2.6) \Phi(x,y)=\Phi^{-1}(x,z)=(\Phi_x^{-1}(x,z),\Phi_y^{-1}(x,z))=(x,\Phi_y^{-1}(x,z)) \tag{2.6} Φ(x,y)=Φ−1(x,z)=(Φx−1(x,z),Φy−1(x,z))=(x,Φy−1(x,z))(2.6)
此外,给定一个 x ∈ U 0 x\in U_0 x∈U0,我们可以用逆 y ∗ = Φ y − 1 ( x , 0 ) y^*=\Phi_y^{-1}(x,0) y∗=Φy−1(x,0) 找到一个 y ∗ y^* y∗ 使得 ϕ ( x , y ∗ ) = 0 \phi(x,y^*)=0 ϕ(x,y∗)=0。
命题1。 给定开集 U ⊆ R n U\subseteq\mathbb{R}^n U⊆Rn 和 V ⊆ R n V\subseteq\mathbb{R}^n V⊆Rn 以及微分同胚 F : U ↦ V F:U\mapsto V F:U↦V,那么对于每个 a ∈ U a\in U a∈U,雅可比矩阵是可逆的,且 D F − 1 ( F ( a ) ) = D F ( a ) − 1 DF^{-1}(F(a))=DF(a)^{-1} DF−1(F(a))=DF(a)−1。
证明。 设 a ∈ U a\in U a∈U,则 D ( F − 1 ∘ F ) ( a ) = D ( F − 1 ) ( F ( a ) ) ⋅ D F ( a ) = I n D(F^{-1}\circ F)(a)=D(F^{-1})(F(a))\cdot DF(a)=I_n D(F−1∘F)(a)=D(F−1)(F(a))⋅DF(a)=In。由于 D F ( a ) DF(a) DF(a) 是非奇异的,则 D ( F − 1 ) ( F ( a ) ) D(F^{-1})(F(a)) D(F−1)(F(a)) 是它的逆。
应用命题1到 Φ \Phi Φ,我们得到:
D ( Φ − 1 ) ( Φ ( a , b ) ) = D ( Φ ) ( a , b ) − 1 = [ I n 0 D x ϕ ( a , b ) D y ϕ ( a , b ) ] − 1 = [ I n 0 − D y ϕ ( a , b ) − 1 D x ϕ ( a , b ) D y ϕ ( a , b ) − 1 ] (2.7) D(\Phi^{-1})(\Phi(a,b))=D(\Phi)(a,b)^{-1}=\begin{bmatrix}I_n & 0 \\ D_x\phi(a,b) & D_y\phi(a,b)\end{bmatrix}^{-1}=\begin{bmatrix}I_n & 0 \\ -D_y\phi(a,b)^{-1}D_x\phi(a,b) & D_y\phi(a,b)^{-1}\end{bmatrix} \tag{2.7} D(Φ−1)(Φ(a,b))=D(Φ)(a,b)−1=[InDxϕ(a,b)0Dyϕ(a,b)]−1=[In−Dyϕ(a,b)−1Dxϕ(a,b)0Dyϕ(a,b)−1](2.7)
左下角的块给出了雅可比矩阵 D x Φ y − 1 ( a , 0 ) D_x\Phi_y^{-1}(a,0) DxΦy−1(a,0)。
2.2.1 隐式线性系统的梯度
回到激励性的例子,我们可以使用式(2.7)中的结果对线性系统 A x = b Ax=b Ax=b 执行反向传播。首先,我们将系统重写为隐式形式,并将矩阵 A A A 表示为列向量的集合:
ϕ ( A , b , x ) = A x − b = [ a 1 a 2 ... a n ] [ x 1 ⋮ x n ] − [ b 1 ⋮ b n ] (2.8) \phi(A,b,x)=Ax-b=\begin{bmatrix}a_1 & a_2 & \dots & a_n\end{bmatrix}\begin{bmatrix}x_1 \\ \vdots \\ x_n\end{bmatrix}-\begin{bmatrix}b_1 \\ \vdots \\ b_n\end{bmatrix} \tag{2.8} ϕ(A,b,x)=Ax−b=[a1a2...an] x1⋮xn − b1⋮bn (2.8)
设 x ∗ = A − 1 b x^*=A^{-1}b x∗=A−1b 是使用任何标准求解方法(例如LU分解,如果已知 A A A 是正定的,则为Cholesky分解)获得的线性系统的解,则:
∂ x ∗ ∂ b = − [ D x ϕ ( A , b , x ∗ ) ] − 1 D y ϕ ( A , b , x ∗ ) = A − 1 I n = A − 1 (2.9) \frac{\partial x^*}{\partial b}=-[D_x\phi(A,b,x^*)]^{-1}D_y\phi(A,b,x^*)=A^{-1}I_n=A^{-1} \tag{2.9} ∂b∂x∗=−[Dxϕ(A,b,x∗)]−1Dyϕ(A,b,x∗)=A−1In=A−1(2.9)
然后可以通过向量-雅可比乘积在反向传递过程中计算梯度 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L:
∂ L ∂ b = ∂ L ∂ x ∗ ⋅ ∂ x ∗ ∂ b = ∂ L ∂ x ∗ A − 1 = A − T ( ∂ L ∂ x ∗ ) T (2.10) \frac{\partial L}{\partial b}=\frac{\partial L}{\partial x^*}\cdot\frac{\partial x^*}{\partial b}=\frac{\partial L}{\partial x^*}A^{-1}=A^{-T}\left(\frac{\partial L}{\partial x^*}\right)^T \tag{2.10} ∂b∂L=∂x∗∂L⋅∂b∂x∗=∂x∗∂LA−1=A−T(∂x∗∂L)T(2.10)
我们还需要计算相对于 A A A 的梯度。我们从分别计算相对于每个列向量 a i a_i ai 的雅可比矩阵开始:
∂ x ∗ ∂ a i = − [ D x ϕ ( A , b , x ∗ ) ] − 1 D a i ϕ ( A , b , x ∗ ) = A − 1 x i ∗ I n = x i ∗ A − 1 (2.11) \frac{\partial x^*}{\partial a_i}=-[D_x\phi(A,b,x^*)]^{-1}D_{a_i}\phi(A,b,x^*)=A^{-1}x_i^*I_n=x_i^*A^{-1} \tag{2.11} ∂ai∂x∗=−[Dxϕ(A,b,x∗)]−1Daiϕ(A,b,x∗)=A−1xi∗In=xi∗A−1(2.11)
因为 D a i ϕ ( A , b , x ∗ ) = x i I n D_{a_i}\phi(A,b,x^*)=x_iI_n Daiϕ(A,b,x∗)=xiIn。再次形成向量-雅可比乘积:
∂ L ∂ a i = ∂ L ∂ x ∗ ⋅ ∂ x ∗ ∂ a i = − ∂ L ∂ x ∗ x i ∗ A − 1 = x i ∗ A − T ( ∂ L ∂ x ∗ ) T (2.12) \frac{\partial L}{\partial a_i}=\frac{\partial L}{\partial x^*}\cdot\frac{\partial x^*}{\partial a_i}=-\frac{\partial L}{\partial x^*}x_i^*A^{-1}=x_i^*A^{-T}\left(\frac{\partial L}{\partial x^*}\right)^T \tag{2.12} ∂ai∂L=∂x∗∂L⋅∂ai∂x∗=−∂x∗∂Lxi∗A−1=xi∗A−T(∂x∗∂L)T(2.12)
我们恢复梯度 ∂ L ∂ a i \frac{\partial L}{\partial a_i} ∂ai∂L。完整的 A A A 矩阵的梯度可以计算为单个外积:
∂ L ∂ A = x ∗ ( A − T ( ∂ L ∂ x ∗ ) T ) T (2.13) \frac{\partial L}{\partial A}=x^*\left(A^{-T}\left(\frac{\partial L}{\partial x^*}\right)^T\right)^T \tag{2.13} ∂A∂L=x∗(A−T(∂x∗∂L)T)T(2.13)
由于 ∂ L ∂ A \frac{\partial L}{\partial A} ∂A∂L 和 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L 共享项,我们可以简化表达式以避免冗余计算:
∂ L ∂ A = x ∗ d z T , ∂ L ∂ b = d z T where d z = A − T ( ∂ L ∂ x ∗ ) T (2.14) \frac{\partial L}{\partial A}=x^*d_z^T,\quad \frac{\partial L}{\partial b}=d_z^T\quad\text{where}\quad d_z=A^{-T}\left(\frac{\partial L}{\partial x^*}\right)^T \tag{2.14} ∂A∂L=x∗dzT,∂b∂L=dzTwheredz=A−T(∂x∗∂L)T(2.14)
从式(2.14)中的结果可以得到几个关键点。首先,梯度不依赖于我们如何获得 x ∗ x^* x∗,只依赖于 x ∗ x^* x∗ 本身。我们可以使用最适合问题的任何求解方法。其次,反向传递通常可以相当廉价地执行。例如,我们可以在反向传递中重用前向传递的LU分解。
作为网络层的无约束优化问题: 上面的结果为我们提供了通过无约束优化问题的解进行微分所需的所有工具。给定一个由 θ \theta θ 参数化的优化问题,形式为:
x ∗ = arg min x ∈ R n f ( x ; θ ) θ ∈ R m (2.15) x^*=\underset{x\in\mathbb{R}^n}{\arg\min} f(x;\theta)\quad \theta\in\mathbb{R}^m \tag{2.15} x∗=x∈Rnargminf(x;θ)θ∈Rm(2.15)
其中 θ \theta θ 是塑造优化景观的参数向量。为了在神经网络中使用这一层,我们需要对输入 θ \theta θ 的解 x ∗ x^* x∗ 进行微分,假设可以使用任何现成的优化器计算固定点 x ∗ x^* x∗。我们可以应用一阶必要条件生成隐式函数:
( D x f ) ( x ∗ ; θ ) = 0 (2.16) (D_xf)(x^*;\theta)=0 \tag{2.16} (Dxf)(x∗;θ)=0(2.16)
如果二阶导数 D x x f D_{xx}f Dxxf 是非奇异的,我们可以应用逆函数定理并得到:
∂ x ∗ ∂ θ = [ ( D x x f ) ( x ∗ ; θ ) ] − 1 ( D θ x f ) ( x ∗ ; θ ) (2.17) \frac{\partial x^*}{\partial\theta}=[(D_{xx}f)(x^*;\theta)]^{-1}(D_{\theta x}f)(x^*;\theta) \tag{2.17} ∂θ∂x∗=[(Dxxf)(x∗;θ)]−1(Dθxf)(x∗;θ)(2.17)
然后我们可以在反向传递过程中计算向量-雅可比乘积:
∂ L ∂ θ = ∂ L ∂ x ∗ ⋅ ∂ x ∗ ∂ θ (2.18) \frac{\partial L}{\partial\theta}=\frac{\partial L}{\partial x^*}\cdot\frac{\partial x^*}{\partial\theta} \tag{2.18} ∂θ∂L=∂x∗∂L⋅∂θ∂x∗(2.18)
求解器的反向传递与获得解的方法无关,只需要二阶导数 D x x f D_{xx}f Dxxf 和 D x θ f D_{x\theta}f Dxθf。
2.3 李群
我们在3D视觉问题中遇到的许多对象不是向量空间的元素,而是光滑流形的元素。李群就是这样一类重要的对象,它们是具有群结构的光滑流形。3D空间中的变换,例如旋转和刚体变换,都是李群。
矩阵李群 M M M 既是一个群,也是一个光滑流形。 M M M 中的每个元素 X X X 都可以表示为 R n × n \mathbb{R}^{n\times n} Rn×n 中的一个矩阵。群运算与矩阵乘法相同,群的逆与矩阵求逆相同。作为一个光滑流形, M M M 中的每个元素 X X X 都有一个唯一的切空间。此外,每个群元素的切空间是一个向量空间,同构于单位元素的切空间。
李代数: 李代数 g \mathfrak{g} g 定义为单位元素处的切空间,每个群都有一个相关的李代数。李代数 g \mathfrak{g} g 形成一个具有一组基元素 { G 1 , ... , G n } \{G_1,\dots,G_n\} {G1,...,Gn} 的向量空间。李代数同构于 R n \mathbb{R}^n Rn,我们可以使用wedge算子 ∧ \wedge ∧ 在 g \mathfrak{g} g 的元素和 R n \mathbb{R}^n Rn 的元素之间映射:
∧ : R n → g : τ ∧ = ∑ i = 1 n τ i G i (2.19) \wedge:\mathbb{R}^n\rightarrow\mathfrak{g}:\tau^\wedge=\sum_{i=1}^n\tau_iG_i \tag{2.19} ∧:Rn→g:τ∧=i=1∑nτiGi(2.19)
vee算子 ∨ : g ↦ R n \vee:\mathfrak{g}\mapsto\mathbb{R}^n ∨:g↦Rn 是wedge算子的逆,使得 ( τ ∧ ) ∨ = τ (\tau^\wedge)\vee=\tau (τ∧)∨=τ。
李代数 g \mathfrak{g} g 同构于 R n \mathbb{R}^n Rn, g ≅ R n \mathfrak{g}\cong\mathbb{R}^n g≅Rn。由于在 R n \mathbb{R}^n Rn 中工作通常更容易,我们使用 R n \mathbb{R}^n Rn 中的向量进行微分,但这等价于在 g \mathfrak{g} g 中表示梯度。还值得注意的是,标准基 ( e 1 , e 2 , ... , e n ) (e_1,e_2,\dots,e_n) (e1,e2,...,en) 对应于李代数的基:
G i = e i ∧ e i = G i ∨ (2.20) G_i=e_i^\wedge\quad e_i=G_i^\vee \tag{2.20} Gi=ei∧ei=Gi∨(2.20)
SO(3)、SE(3)和Sim(3)群的 ∧ \wedge ∧ 算子可以在Sola等人[3]和Eade[1]的参考文献中找到。
指数映射和对数映射: 李代数 ξ ∧ ∈ g \xi^\wedge\in\mathfrak{g} ξ∧∈g 的元素可以通过指数映射精确地映射到流形上:
exp ( ξ ∧ ) = I + ξ ∧ + 1 2 ! ( ξ ∧ ) 2 + 1 3 ! ( ξ ∧ ) 3 + ... (2.21) \exp(\xi^\wedge)=I+\xi^\wedge+\frac{1}{2!}(\xi^\wedge)^2+\frac{1}{3!}(\xi^\wedge)^3+\dots \tag{2.21} exp(ξ∧)=I+ξ∧+2!1(ξ∧)2+3!1(ξ∧)3+...(2.21)
对数映射是指数映射的逆,它将流形上的元素映射到李代数。为了方便起见,我们使用向量化版本的指数映射和对数映射,直接在 R k \mathbb{R}^k Rk 和 M M M 之间映射:
Exp : R k → M Log : M → R k (2.22) \text{Exp}:\mathbb{R}^k\rightarrow M\quad \text{Log}:M\rightarrow\mathbb{R}^k \tag{2.22} Exp:Rk→MLog:M→Rk(2.22)
群乘法: 群上赋予了一个二元运算 ⊞ \boxplus ⊞,使得两个群元素可以结合形成第三个元素 X ⊞ Y ∈ M X\boxplus Y\in M X⊞Y∈M。使用Sola等人[3]的记号,我们可以重载加法和减法运算:
⊞ : R k × M → M : ξ ⊞ X = Exp ( ξ ) ⋅ X (2.23) \boxplus:\mathbb{R}^k\times M\rightarrow M:\xi\boxplus X=\text{Exp}(\xi)\cdot X \tag{2.23} ⊞:Rk×M→M:ξ⊞X=Exp(ξ)⋅X(2.23)
⊟ : M × M → R k : X ⊟ Y = Log ( X ⋅ Y − 1 ) (2.24) \boxminus:M\times M\rightarrow\mathbb{R}^k:X\boxminus Y=\text{Log}(X\cdot Y^{-1}) \tag{2.24} ⊟:M×M→Rk:X⊟Y=Log(X⋅Y−1)(2.24)
如果流形 M M M 是欧几里得空间,则 ⊞ \boxplus ⊞ 和 ⊟ \boxminus ⊟ 与标准的向量加法和减法相同。
伴随: 李代数和指数映射为 X X X 附近的邻域提供了两种可能的局部参数化:右作用参数化 X ⊞ Exp ( a ) X\boxplus\text{Exp}(a) X⊞Exp(a) 和左作用参数化 Exp ( b ) ⊞ X \text{Exp}(b)\boxplus X Exp(b)⊞X,其中 a a a 和 b b b 表示局部坐标。对于 X X X 附近的群元素,它的坐标 a a a 和 b b b 通过线性映射 X X X 的伴随 Adj X \text{Adj}_X AdjX 相关:
Adj X ( a ) = ( X a ∧ X − 1 ) ∨ (2.25) \text{Adj}X(a)=(Xa^\wedge X^{-1})\vee \tag{2.25} AdjX(a)=(Xa∧X−1)∨(2.25)
从中很容易验证:
X ⊞ Exp ( a ) = Exp ( Adj X ( a ) ) ⊞ X (2.26) X\boxplus\text{Exp}(a)=\text{Exp}(\text{Adj}_X(a))\boxplus X \tag{2.26} X⊞Exp(a)=Exp(AdjX(a))⊞X(2.26)
因为 Adj X \text{Adj}_X AdjX 是线性映射,它可以表示为矩阵 Adj X \text{Adj}^X AdjX (即 Adj X \text{Adj}^X AdjX 是一个 n × n n\times n n×n 矩阵,其中 n n n 是 X X X 的切空间的维数)。
李群上的导数: 我们可以将式(2.1)中的导数定义扩展到李群之间的映射。给定李群 M M M 和函数 F : M → N F:M\rightarrow N F:M→N,在 a ∈ M a\in M a∈M 处的导数是一个线性映射 D F ( a ) : m → n DF(a):\mathfrak{m}\rightarrow\mathfrak{n} DF(a):m→n,满足:
lim v → 0 ∥ F ( v ⊞ a ) ⊟ F ( a ) − D F ( a ) ⋅ v ∥ ∥ v ∥ = 0 v ∈ m (2.27) \lim_{v\to 0}\frac{\|F(v\boxplus a)\boxminus F(a)-DF(a)\cdot v\|}{\|v\|}=0\quad v\in\mathfrak{m} \tag{2.27} v→0lim∥v∥∥F(v⊞a)⊟F(a)−DF(a)⋅v∥=0v∈m(2.27)
如果存在的话。式(2.27)将 a ∈ M a\in M a∈M 的切空间中的扰动与 f ( a ) f(a) f(a) 的切空间中的扰动联系起来。如果取 M = R m M=\mathbb{R}^m M=Rm 和 N = R n N=\mathbb{R}^n N=Rn 形成标准向量加法下的李群,则式(2.27)简化为式(2.1)中给出的导数的标准定义。我们可以通过对每个基元素 { e 1 , ... , e m } \{e_1,\dots,e_m\} {e1,...,em} 作用导数算子来形成雅可比矩阵:
J i j = D F i ( a ) ⋅ e j (2.28) J_{ij}=DF_i(a)\cdot e_j \tag{2.28} Jij=DFi(a)⋅ej(2.28)
李群上的自动微分: 在许多情况下,我们希望对包含李群的计算图执行自动微分,如图2.1所示。幸运的是,广义李群导数与标准反向传播完全一致。给定函数 F : X → Y F:X\rightarrow Y F:X→Y 和 L : Y → R L:Y\rightarrow\mathbb{R} L:Y→R 以及 a ∈ X a\in X a∈X:
D L x ( a ) = D y L x ( F ( a ) ) ⋅ D x F ( a ) (2.29) DL_x(a)=D_yL_x(F(a))\cdot D_xF(a) \tag{2.29} DLx(a)=DyLx(F(a))⋅DxF(a)(2.29)
为了轻松处理由群函数和标准深度学习操作(即卷积、池化)组成的计算图,我们实现了一个PyTorch扩展,通过包含李群的函数执行自动微分。反向传递使用式(2.27)中的广义导数来计算每个支持操作的梯度。正如torch.Tensor是标量的n维数组,我们的lietorch.SE3是SE(3)元素的n维数组。我们的扩展支持广播、索引和表2.1中总结的各种群操作。每个操作和梯度都在c++和CUDA中实现。这个库由我们的场景流和SLAM方法使用。
2.4 李群上的优化
假设我们给定一组特征匹配 M = { ( x i k , x j k ) } k = 1 M \mathcal{M}=\{(x_i^k,x_j^k)\}{k=1}^M M={(xik,xjk)}k=1M,并希望求解一组逆深度 d = { d i k } k = 1 M d=\{d_i^k\}{k=1}^M d={dik}k=1M 和姿态 T = { T 1 , ... , T N } T=\{T_1,\dots,T_N\} T={T1,...,TN}。我们可以构建一个最小化重投影误差的最小二乘目标函数:
f ( T , d ) = 1 2 ∑ ( x i k , x j k ) ∈ M ∥ r k ( T i , T j , x i k , x j k , d i k ) ∥ 2 r k ( ⋅ ) = x j k ⊟ ω i j ( x i k , d i k ) (2.46) f(T,d)=\frac{1}{2}\sum_{(x_i^k,x_j^k)\in\mathcal{M}}\|r_k(T_i,T_j,x_i^k,x_j^k,d_i^k)\|^2\quad r_k(\cdot)=x_j^k\boxminus\omega_{ij}(x_i^k,d_i^k) \tag{2.46} f(T,d)=21(xik,xjk)∈M∑∥rk(Ti,Tj,xik,xjk,dik)∥2rk(⋅)=xjk⊟ωij(xik,dik)(2.46)
将所有残差收集为列向量 r = ( r 1 , ... , r M ) T r=(r_1,\dots,r_M)^T r=(r1,...,rM)T,我们可以计算由两个块组成的雅可比矩阵 J J J:
J = [ D T r ( ⋅ ) D d r ( ⋅ ) ] = [ D T 1 r ( ⋅ ) ... D T N r ( ⋅ ) ∣ D d 1 r ( ⋅ ) ... D d M r ( ⋅ ) ] (2.47) J=\begin{bmatrix}D_Tr(\cdot) & D_dr(\cdot)\end{bmatrix}=\begin{bmatrix}D_{T_1}r(\cdot) & \dots & D_{T_N}r(\cdot) & | & D_{d_1}r(\cdot) & \dots & D_{d_M}r(\cdot)\end{bmatrix} \tag{2.47} J=[DTr(⋅)Ddr(⋅)]=[DT1r(⋅)...DTNr(⋅)∣Dd1r(⋅)...DdMr(⋅)](2.47)
其中 D T r ( ⋅ ) D_Tr(\cdot) DTr(⋅) 是姿态块, D d r ( ⋅ ) D_dr(\cdot) Ddr(⋅) 是深度块。 J J J 是一个稀疏矩阵,事实上深度块是分块对角的。为了求解 T T T 和 d d d 的更新,我们首先线性化式(2.46)中的残差:
r ( v ⊞ T , d + w ) ≈ J [ v w ] + r (2.48) r(v\boxplus T,d+w)\approx J\begin{bmatrix}v \\ w\end{bmatrix}+r \tag{2.48} r(v⊞T,d+w)≈J[vw]+r(2.48)
将线性化的残差代入式(2.46):
f ( v ⊞ T , d + w ) ≈ 1 2 ∥ J [ v w ] + r ∥ 2 (2.49) f(v\boxplus T,d+w)\approx\frac{1}{2}\left\|J\begin{bmatrix}v \\ w\end{bmatrix}+r\right\|^2 \tag{2.49} f(v⊞T,d+w)≈21 J[vw]+r 2(2.49)
对更新 v v v 和 w w w 求导并令其等于零:
D [ v , w ] f ( T , d ) = J T J [ v w ] + J T r = 0 (2.50) D_{[v,w]}f(T,d)=J^TJ\begin{bmatrix}v \\ w\end{bmatrix}+J^Tr=0 \tag{2.50} D[v,w]f(T,d)=JTJ[vw]+JTr=0(2.50)
我们得到更新:
[ v w ] = − ( J T J ) − 1 J T r T k + 1 = v ⊞ T k d k + 1 = w + d k (2.51) \begin{bmatrix}v \\ w\end{bmatrix}=-(J^TJ)^{-1}J^Tr\quad T^{k+1}=v\boxplus T^k\quad d^{k+1}=w+d^k \tag{2.51} [vw]=−(JTJ)−1JTrTk+1=v⊞Tkdk+1=w+dk(2.51)
矩阵 J T J J^TJ JTJ 是半正定的。如果我们添加一个小的对角项,则它保证是正定的,线性系统可以通过Cholesky分解求解。
参考文献:
[1] Ethan Eade. Lie groups for computer vision. Cambridge Univ., Cam-bridge, UK, Tech. Rep, 2, 2014.
[2] John M Lee. Smooth manifolds. In Introduction to Smooth Manifolds, pages 1--31. Springer, 2013.
[3] Joan Sola, Jeremie Deray, and Dinesh Atchuthan. A micro lie theory for state estimation in robotics. arXiv preprint arXiv:1812.01537, 2018.