视觉SLAM学习打卡【6】-非线性优化

  • 本节把机器人状态估计问题(已知观测z、输入u,求定位x、建图y)转化为最小二乘问题进行优化.
  • 最小二乘问题可采用求导(解析解)或迭代(数值解)来解决。在评价函数为为非线性(指凸函数)时,一般采用迭代方式(凸优化),具体有一阶梯度下降法(直速下降法),二阶梯度下降法(牛顿法、高斯牛顿法G-N、列文伯格-马夸尔特法L-M).
  • 本节涉及到向量求导、贝叶斯法则、条件概率、高斯分布、拉格朗日乘数法等基础数学知识…

一、数学基础

1.矩阵求导

矩阵or向量求导只是批量求导数的一种方式,本质还是矩阵or向量中的标量之间在求导数,只不过是借助矩阵or向量的形式,同时对多个因变量关于自变量求导.
在这里插入图片描述
本节只涉及到 scale-vector 和 vector-vector.

  • 两种布局
    a. 分子布局:偏导后得出矩阵的行数是和分子的维度一致
    ∂ y ∂ x = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋯ ∂ y ∂ x n ] . ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y m ∂ x ] . ∂ y ∂ x = [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ∂ y m ∂ x 2 ⋯ ∂ y m ∂ x n ] ∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 21 ⋯ ∂ y ∂ x p 1 ∂ y ∂ x 12 ∂ y ∂ x 22 ⋯ ∂ y ∂ x p 2 ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x 1 q ∂ y ∂ x 2 q ⋯ ∂ y ∂ x p q ] \begin{aligned} &\frac{\partial y}{\partial\mathbf{x}} \left.=\left[\begin{array}{cccc}\frac{\partial y}{\partial x_1}&\frac{\partial y}{\partial x_2}&\cdots&\frac{\partial y}{\partial x_n}\end{array}\right.\right]. \\ &\frac{\partial\mathbf{y}}{\partial x} \left.=\left[\begin{array}{c}\frac{\partial y_1}{\partial x}\\\frac{\partial y_2}{\partial x}\\\vdots\\\frac{\partial y_m}{\partial x}\end{array}\right.\right]. \\ &\frac{\partial\mathbf{y}}{\partial\mathbf{x}} =\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_1}{\partial x_2}&\cdots&\frac{\partial y_1}{\partial x_n}\\\frac{\partial y_2}{\partial x_1}&\frac{\partial y_2}{\partial x_2}&\cdots&\frac{\partial y_2}{\partial x_n}\\\vdots&\vdots&\ddots&\vdots\\\frac{\partial y_m}{\partial x_1}&\frac{\partial y_m}{\partial x_2}&\cdots&\frac{\partial y_m}{\partial x_n}\end{bmatrix} \\ &\frac{\partial y}{\partial\mathbf{X}} \left.=\left[\begin{matrix}\frac{\partial y}{\partial x_{11}}&\frac{\partial y}{\partial x_{21}}&\cdots&\frac{\partial y}{\partial x_{p1}}\\\frac{\partial y}{\partial x_{12}}&\frac{\partial y}{\partial x_{22}}&\cdots&\frac{\partial y}{\partial x_{p2}}\\\vdots&\vdots&\ddots&\vdots\\\frac{\partial y}{\partial x_{1q}}&\frac{\partial y}{\partial x_{2q}}&\cdots&\frac{\partial y}{\partial x_{pq}}\end{matrix}\right.\right] \end{aligned} xy=[x1yx2yxny].xy= xy1xy2xym .xy= x1y1x1y2x1ymx2y1x2y2x2ymxny1xny2xnym Xy= x11yx12yx1qyx21yx22yx2qyxp1yxp2yxpqy
    其中, ∂ y ∂ x p × q \frac{\partial y}{\partial x_{p\times q}} xp×qy可看作:
    ∂ y ∂ x p × q = [ ∂ y ∂ x 1 i ⋯ ∂ y ∂ x p i ] \frac{\partial y}{\partial x_{p\times q}}=[\frac{\partial y}{\partial x_{1i}}\cdots\frac{\partial y}{\partial x_{pi}}] xp×qy=[x1iyxpiy]
    b. 分母布局:偏导后得出矩阵的行数是和分母的维度一致
    ∂ y ∂ x = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋮ ∂ y ∂ x n ] . ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y m ∂ x ] . ∂ y ∂ x = [ ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 ⋯ ∂ y m ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y m ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n ⋯ ∂ y m ∂ x n ] ∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 12 ⋯ ∂ y ∂ x 1 q ∂ y ∂ x 21 ∂ y ∂ x 22 ⋯ ∂ y ∂ x 2 q ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x p 1 ∂ y ∂ x p 2 ⋯ ∂ y ∂ x p q ] \begin{aligned} &\frac{\partial y}{\partial\mathbf{x}} \left.=\left[\begin{array}{l}\frac{\partial y}{\partial x_1}\\\frac{\partial y}{\partial x_2}\\\vdots\\\frac{\partial y}{\partial x_n}\end{array}\right.\right]. \\ &\frac{\partial\mathbf{y}}{\partial x} \left.=\left[\begin{array}{cccc}\frac{\partial y_1}{\partial x}&\frac{\partial y_2}{\partial x}&\cdots&\frac{\partial y_m}{\partial x}\end{array}\right.\right]. \\ &\frac{\partial\mathbf{y}}{\partial\mathbf{x}} =\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_2}{\partial x_1}&\cdots&\frac{\partial y_m}{\partial x_1}\\\frac{\partial y_1}{\partial x_2}&\frac{\partial y_2}{\partial x_2}&\cdots&\frac{\partial y_m}{\partial x_2}\\\vdots&\vdots&\ddots&\vdots\\\frac{\partial y_1}{\partial x_n}&\frac{\partial y_2}{\partial x_n}&\cdots&\frac{\partial y_m}{\partial x_n}\end{bmatrix} \\ &\frac{\partial y}{\partial\mathbf{X}} =\begin{bmatrix}\frac{\partial y}{\partial x_{11}}&\frac{\partial y}{\partial x_{12}}&\cdots&\frac{\partial y}{\partial x_{1q}}\\\frac{\partial y}{\partial x_{21}}&\frac{\partial y}{\partial x_{22}}&\cdots&\frac{\partial y}{\partial x_{2q}}\\\vdots&\vdots&\ddots&\vdots\\\frac{\partial y}{\partial x_{p1}}&\frac{\partial y}{\partial x_{p2}}&\cdots&\frac{\partial y}{\partial x_{pq}}\end{bmatrix} \end{aligned} xy= x1yx2yxny .xy=[xy1xy2xym].xy= x1y1x2y1xny1x1y2x2y2xny2x1ymx2ymxnym Xy= x11yx21yxp1yx12yx22yxp2yx1qyx2qyxpqy
    其中, ∂ y ∂ x p × q \frac{\partial y}{\partial x_{p\times q}} xp×qy可看作:
    ∂ y ∂ x p × q = [ ∂ y ∂ x 1 i ⋮ ∂ y ∂ x p i ] \left.\frac{\partial y}{\partial x_{p\times q}}=\left[\begin{matrix}\frac{\partial y}{\partial x_{1i}}\\\varvdots\\\frac{\partial y}{\partial x_{pi}}\end{matrix}\right.\right] xp×qy= x1iyxpiy
    c. 分子布局 = 分母布局 ^T
  • 求导规律
    a. 常量可提到导数外
    ∂ a u ∂ x = a ∂ u ∂ x \frac{\partial a\mathbf{u}}{\partial\mathbf{x}}=a\frac{\partial\mathbf{u}}{\partial\mathbf{x}} xau=axu
    b. 分子线性组合可拆开
    ∂ ( u + v ) ∂ x = ∂ u ∂ x + ∂ v ∂ x \frac{\partial\mathbf{(u+v)}}{\partial \mathbf{x}}=\frac{\partial \mathbf{u}}{\partial\mathbf{ x}}+\frac{\partial \mathbf{v}}{\partial\mathbf{ x}} x(u+v)=xu+xv
    c. 转置符号可以提出来
    ∂ F T ∂ x = ( ∂ F ∂ x T ) T \frac{\partial\boldsymbol{F}^\mathrm{T}}{\partial\boldsymbol{x}}=\left(\frac{\partial\boldsymbol{F}}{\partial\boldsymbol{x}^\mathrm{T}}\right)^\mathrm{T} xFT=(xTF)T
  • 两个重要的结论
    a. ∂ A y → ∂ y → = A T \frac{\partial A\overrightarrow{y}}{\partial\overrightarrow{y}}=A^T y Ay =AT
    b. ∂ y ⃗ T A y ⃗ ∂ y ⃗ = ( A + A T ) y ⃗ \frac{\partial\vec{y}^TA\vec{y}}{\partial\vec{y}}=(A+A^T){\vec{y}} y y TAy =(A+AT)y
    若A为对称矩阵,则 ∂ y ⃗ T A y ⃗ ∂ y ⃗ = ( A + A T ) y ⃗ = 2 A y ⃗ \frac{\partial\vec{y}^TA\vec{y}}{\partial\vec{y}}=(A+A^T){\vec{y}}=2A{\vec{y}} y y TAy =(A+AT)y =2Ay
  • 查表
    矩阵求导涉及到谁左谁右的问题,具体法则可参考Matrix_calculus 的 wiki 网站

2.贝叶斯法则

p ( A / B ) = P ( B / A ) P ( A ) P ( B ) p(A/B)=\frac{P(B/A)P(A)}{P(B)} p(A/B)=P(B)P(B/A)P(A)

  • P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率.
  • P(B|A)称为似然.
  • P(A)是A的先验概率边缘概率。之所以称为"先验"是因为它不考虑任何B方面的因素.
  • P(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant).
  • Bayes法则可表述为
    后验概率 = (似然度 * 先验概率)/标准化常量.
    也就是说,后验概率与先验概率和似然度的乘积成正比.

3.拉格朗日乘数法

  • 设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0.
  • 为寻找z=ƒ(x,y)在附加条件下的极值点,先做拉格朗日函数 F ( x , y , λ ) = f ( x , y ) + λ φ ( x , y ) F\left(x,y,\lambda\right)=f(x,y)+\lambda\varphi(x,y) F(x,y,λ)=f(x,y)+λφ(x,y),其中λ为参数.
  • 令F(x,y,λ)对x和y和λ的一阶偏导数等于零,即
    F x ′ = f x ′ ( x , y ) + λ φ x ′ ( x , y ) = 0 F y ′ = f y ′ ( x , y ) + λ φ y ′ ( x , y ) = 0 F λ ′ = φ ( x , y ) = 0 \begin{array}{ll}\mathrm{F'_x=f'_x(x,y)+\lambda\varphi'_x(x,y)=0}\\\\\mathrm{F'_y=f'_y(x,y)+\lambda\varphi'_y(x,y)=0}\\\\\mathrm{F'_\lambda=\varphi(x,y)=0}\end{array} Fx=fx(x,y)+λφx(x,y)=0Fy=fy(x,y)+λφy(x,y)=0Fλ=φ(x,y)=0
  • 由上述方程组解出x,y及λ,如此求得的(x,y),就是函数z=ƒ(x,y)在附加条件φ(x,y)=0下的可能极值点.

4.多元高斯分布

一般标量服从高斯分布的概率密度函数为:
f ( x ) = 1 2 π σ exp ⁡ [ − ( x − μ ) 2 2 σ 2 ] f(x)=\frac1{\sqrt{2\pi}\sigma}\exp\left[-\frac{(x-\mu)^2}{2\sigma^2}\right] f(x)=2π σ1exp[2σ2(xμ)2]
向量 x ∼ N ( μ , Σ ) x\sim\mathcal{N}(\boldsymbol{\mu},\boldsymbol{\Sigma}) xN(μ,Σ),其中,μ为均值, ∑为协方差矩阵.
P ( x ) = 1 ( 2 π ) N det ⁡ ( Σ ) exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) P\left(\boldsymbol{x}\right)=\frac{1}{\sqrt{\left(2\pi\right)^{N}\det\left(\boldsymbol{\Sigma}\right)}}\exp\left(-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}}\boldsymbol{\Sigma}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}\right)\right) P(x)=(2π)Ndet(Σ) 1exp(21(xμ)TΣ1(xμ))
对概率密度函数取负对数,仅第二项与P(x)直接相关.
− ln ⁡ ( P ( x ) ) = 1 2 ln ⁡ ( ( 2 π ) N det ⁡ ( Σ ) ) + 1 2 ( x − μ ) T Σ − 1 ( x − μ ) -\ln\left(P\left(\boldsymbol{x}\right)\right)=\frac12\ln\left(\left(2\pi\right)^N\det\left(\boldsymbol{\Sigma}\right)\right)+\frac12(\boldsymbol{x}-\boldsymbol{\mu})^\mathrm{T}\boldsymbol{\Sigma}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}\right) ln(P(x))=21ln((2π)Ndet(Σ))+21(xμ)TΣ1(xμ)

二、解决机器人状态估计

经典SLAM问题:
{ x k = f ( x k − 1 , u k ) + w k z k , j = h ( y j , x k ) + v k , j \begin{cases}\boldsymbol{x}_k=f\left(\boldsymbol{x}_{k-1},\boldsymbol{u}_k\right)+\boldsymbol{w}_k\\\boldsymbol{z}_{k,j}=h\left(\boldsymbol{y}_j,\boldsymbol{x}_k\right)+\boldsymbol{v}_{k,j}&\end{cases} { xk=f(xk1,uk)+wkzk,j=h(yj,xk)+vk,j运动方程和观测方程中的噪声: w k ∼ N ( 0 , R k ) , v k ∼ N ( 0 , Q k , j ) \boldsymbol{w}_k\sim\mathcal{N}\left(\boldsymbol{0},\boldsymbol{R}_k\right),\boldsymbol{v}_k\sim\mathcal{N}\left(\boldsymbol{0},\boldsymbol{Q}_{k,j}\right) wkN(0,Rk),vkN(0,Qk,j)由已知的z和u,推测x和y,构成状态估计问题.

1.处理思路

  • 滤波角度-增量/渐进数据
    由于在SLAM中,数据随时间逐渐到来,可以先持有当前时刻的估计状态,然后用新数据更新它,存在累计误差.
  • 优化角度-批量数据SFM(Structure from Motion)
    让机器人和无人机收集所有时刻的数据,带回计算中心统一处理.
  • 折衷手段-滑动窗口
    固定一些历史轨迹,仅对当前时刻附近的一些轨迹进行优化.
  • 综合手段-前端后端
    前端使用轻量级的方法预估路径(滤波/小优化/预积分),积累一定的数据后,在后端对轨迹进行优化.

2.问题描述(本节对批量数据优化进行介绍)

  • 面临的问题:已知运动和观测,求轨迹和地图,即 P ( x , y ∣ z , u ) P(x,\boldsymbol{y}|\boldsymbol{z},\boldsymbol{u}) P(x,yz,u).
  • 使用贝叶斯法则对问题变形,将最大化后验概率转换为最大化似然和先验的乘积
    P ( x , y ∣ z , u ) = P ( z , u ∣ x , y ) P ( x , y ) P ( z , u ) ∝ P ( z , u ∣ x , y ) ⏟ 似然 P ( x , y ) ⏟ 先验 P\left(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{z},\boldsymbol{u}\right)=\frac{P\left(\boldsymbol{z},\boldsymbol{u}|\boldsymbol{x},\boldsymbol{y}\right)P\left(\boldsymbol{x},\boldsymbol{y}\right)}{P\left(\boldsymbol{z},\boldsymbol{u}\right)}\propto\underbrace{P\left(\boldsymbol{z},\boldsymbol{u}|\boldsymbol{x},\boldsymbol{y}\right)}_\text{似然}{ \underbrace { P \left ( \boldsymbol { x },\boldsymbol{y}\right)}_\text{先验}} P(x,yz,u)=P(z,u)P(z,ux,y)P(x,y)似然 P(z,ux,y)先验 P(x,y) ( x , y ) M A P ∗ = arg ⁡ max ⁡ P ( x , y ∣ z , u ) = arg ⁡ max ⁡ P ( z , u ∣ x , y ) P ( x , y ) (x,y)^*_{\mathrm{MAP}}=\arg\max P\left(x,\boldsymbol{y}|z,\boldsymbol{u}\right)=\arg\max P(\boldsymbol{z},\boldsymbol{u}|\boldsymbol{x},\boldsymbol{y})P(x,\boldsymbol{y}) (x,y)MAP=argmaxP(x,yz,u)=argmaxP(z,ux,y)P(x,y)
    其中,arg为目标函数 P ( x , y ∣ z , u ) P\left(x,\boldsymbol{y}|z,\boldsymbol{u}\right) P(x,yz,u)取最大值时对应的(x,y)值.
  • 有时候我们没有运动信息,只有一组观测,这时就没有了先验,问题是纯粹的SFM问题(在怎样的位姿和地图下,最可能出现已知观测),直接求最大似然估计.
    ( x , y ) M L E ∗ = arg ⁡ max ⁡ P ( z , u ∣ x , y ) (\boldsymbol{x},\boldsymbol{y})^*_{\mathrm{MLE}}=\arg\max P(\boldsymbol{z},\boldsymbol{u}|\boldsymbol{x},\boldsymbol{y}) (x,y)MLE=argmaxP(z,ux,y)

3.某次观测误差

  • 先看某次观测: z k , j = h ( y j , x k ) + v k , j \boldsymbol{z}_{k,j}=h\left(\boldsymbol{y}_j,\boldsymbol{x}_k\right)+\boldsymbol{v}_{k,j} zk,j=h(yj,xk)+vk,j
    噪声项: v k ∼ N ( 0 , Q k , j ) \boldsymbol{v}_k\sim\mathcal{N}\left(\boldsymbol{0},\boldsymbol{Q}_{k,j}\right) vkN(0,Qk,j)
  • 观测的概率分布为: P ( z j , k ∣ x k , y j ) = N ( h ( y j , x k ) , Q k , j ) P(\boldsymbol{z}_{j,k}|\boldsymbol{x}_k,\boldsymbol{y}_j)=N\left(h(\boldsymbol{y}_j,\boldsymbol{x}_k),\boldsymbol{Q}_{k,j}\right) P(zj,kxk,yj)=N(h(yj,xk),Qk,j)
  • 由对概率密度函数取负对数: − ln ⁡ ( P ( x ) ) = 1 2 ln ⁡ ( ( 2 π ) N det ⁡ ( Σ ) ) + 1 2 ( x − μ ) T Σ − 1 ( x − μ ) -\ln\left(P\left(\boldsymbol{x}\right)\right)=\frac12\ln\left(\left(2\pi\right)^N\det\left(\boldsymbol{\Sigma}\right)\right)+\frac12(\boldsymbol{x}-\boldsymbol{\mu})^\mathrm{T}\boldsymbol{\Sigma}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}\right) ln(P(x))=21ln((2π)Ndet(Σ))+21(xμ)TΣ1(xμ)仅第二项与P(x)直接相关可知: ( x k , y j ) ∗ = arg ⁡ max ⁡ N ( h ( y j , x k ) , Q k , j ) = arg ⁡ min ⁡ ( ( z k , j − h ( x k , y j ) ) T Q k , j − 1 ( z k , j − h ( x k , y j ) ) ) \begin{aligned} (\boldsymbol{x}_k,\boldsymbol{y}_j)^*& =\arg\max\mathcal{N}(h(\boldsymbol{y}_j,\boldsymbol{x}_k),\boldsymbol{Q}_{k,j}) \\ &=\arg\min\left(\left(\boldsymbol{z}_{k,j}-h\left(\boldsymbol{x}_k,\boldsymbol{y}_j\right)\right)^{\mathrm{T}}\boldsymbol{Q}_{k,j}^{-1}\left(\boldsymbol{z}_{k,j}-h\left(\boldsymbol{x}_k,\boldsymbol{y}_j\right)\right)\right) \end{aligned} (xk,yj)=argmaxN(h(yj,xk),Qk,j)=argmin((zk,jh(xk,yj))TQk,j1(zk,jh(xk,yj)))
    其中,Q为协方差矩阵 Q − 1 {Q}^{-1} Q1信息矩阵.

4.批量数据

  • 假设各个时刻的输入和观测是独立的,可以分解成多个概率的乘积: P ( z , u ∣ x , y ) = ∏ k P ( u k ∣ x k − 1 , x k ) ∏ k , j P ( z k , j ∣ x k , y j ) P\left(\boldsymbol{z},\boldsymbol{u}|\boldsymbol{x},\boldsymbol{y}\right)=\prod_{k}P\left(\boldsymbol{u}_{k}|\boldsymbol{x}_{k-1},\boldsymbol{x}_{k}\right)\prod_{k,j}P\left(\boldsymbol{z}_{k,j}|\boldsymbol{x}_{k},\boldsymbol{y}_{j}\right) P(z,ux,y)=kP(ukxk1,xk)k,jP(zk,jxk,yj)
  • 定义运动和观测误差.
    e u , k = x k − f ( x k − 1 , u k ) e z , j , k = z k , j − h ( x k , y j ) \begin{gathered} e_{u,k} =\boldsymbol{x}_k-f\left(\boldsymbol{x}_{k-1},\boldsymbol{u}_k\right) \\ e_{z,j,k} =\boldsymbol{z}_{k,j}-h\left(\boldsymbol{x}_k,\boldsymbol{y}_j\right) \end{gathered} eu,k=xkf(xk1,uk)ez,j,k=zk,jh(xk,yj)
  • 将xy作为优化变量,将输入误差和观测误差之和作为目标函数,求当误差最小时的xy,形成最小二乘问题. 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 \min J(\boldsymbol{x},\boldsymbol{y})=\sum_{k}\boldsymbol{e}_{\boldsymbol{u},k}^\mathrm{T}\boldsymbol{R}_{k}^{-1}\boldsymbol{e}_{\boldsymbol{u},k}+\sum_{k}\sum_{j}\boldsymbol{e}_{\boldsymbol{z},k,j}^\mathrm{T}\boldsymbol{Q}_{k,j}^{-1}\boldsymbol{e}_{\boldsymbol{z},k,j} minJ(x,y)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j

三、最小二乘问题

  • 问题描述: min ⁡ x F ( x ) = 1 2 ∥ f ( x ) ∥ 2 2 \min_{\boldsymbol{x}}F(\boldsymbol{x})=\frac12{\left\|f\left(\boldsymbol{x}\right)\right\|}_{2}^{2} xminF(x)=21f(x)22
  • 根据求解形式不同,可分为解析解(求导)和 数值解(求迭代,在 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 F(\boldsymbol{x}_k+\Delta\boldsymbol{x}_k)\approx F(\boldsymbol{x}_k)+\boldsymbol{J}\left(\boldsymbol{x}_k\right)^\mathrm{T}\Delta\boldsymbol{x}_k+\frac12\Delta\boldsymbol{x}_k^\mathrm{T}\boldsymbol{H}(\boldsymbol{x}_k)\Delta\boldsymbol{x}_k F(xk+Δxk)F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk,J是雅克比Jacobian-F(x)关于x的一阶导,H是海森矩阵Hessian-F(x)关于x的二阶导, X T A X X^TAX XTAX是二次型).

1. 一阶(梯度下降法)

F ( x ) = 1 2 ∣ ∣ f ( x ) ∣ ∣ 2 ∂ F ( x ) ∂ x = 1 2 ⋅ ∂ f ( x ) ∂ x ⋅ ∂ ( f ( x ) ) 2 ∂ f ( x ) = J ( x ) f ( x ) \begin{aligned}F(x)&=\frac{1}{2}\left|\left|f(x)\right|\right|^{2}\\\frac{\partial F(x)}{\partial x}&=\frac{1}{2}\cdot\frac{\partial f(x)}{\partial x}\cdot\frac{\partial\left(f(x)\right)^{2}}{\partial f(x)}\\&=J(x)f(x)\end{aligned} F(x)xF(x)=21f(x)2=21xf(x)f(x)(f(x))2=J(x)f(x)这里的梯度是目标函数的梯度,导数(梯度)是增量的方向,梯度取反就是梯度下降的方向,通常不会直接让J代表步长,会加因子or饱和函数(深度学习中把这个因子叫做学习率).
Δ x ∗ = − α J ( x k ) \Delta x^{*}=-\alpha J(x_{k}) Δx=αJ(xk)

2.二阶(牛顿法)

仅使用一阶梯度作为下降方向,有时并不能很好地拟合函数的局部趋势(最速下降法过于贪心). Δ x ∗ = arg ⁡ min ⁡ ( F ( x ) + J ( x ) T Δ x + 1 2 Δ x T H Δ x ) \Delta\boldsymbol{x}^{*}=\arg\min\left(F\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)^{\mathrm{T}}\Delta\boldsymbol{x}+\frac12\Delta\boldsymbol{x}^{\mathrm{T}}\boldsymbol{H}\Delta\boldsymbol{x}\right) Δx=argmin(F(x)+J(x)TΔx+21ΔxTHΔx)
对二阶展开关于△x求偏导,令其等于0得: J + H Δ x = 0 ⇒ H Δ x = − J J+H\Delta x=0\Rightarrow H\Delta x=-J J+HΔx=0HΔx=J

  • x在这里是一个参数,真正的变量是△x,当x确定下来后,△x 也就直接确定下来了.
  • 如果能求出△x的解析解,那么在任意位置x都能准确知道使得 F(x+△x) 达到最小的最佳△x.
  • 就这样,边寻找当前 x k x_{k} xk下的最佳△x,边更新下一时刻的 x k + 1 x_{k+1} xk+1,虽然二阶近似也不会非常准确,但是只要步长不过于大,迭代次数多,就能找到近乎准确的数值极小值x.
    牛顿法中,海森矩阵 H 计算不易,求逆也不易

3. 改进二阶 (高斯-牛顿 G-N)

使用一阶展开的平方产生二阶项,从而避免求Fx的海森矩阵.
f ( x + Δ x ) ≈ f ( x ) + J ( x ) T Δ x f\left(\boldsymbol{x}+\Delta\boldsymbol{x}\right)\approx f\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)^\mathrm{T}\Delta\boldsymbol{x} f(x+Δx)f(x)+J(x)TΔx Δ x ∗ = arg ⁡ min ⁡ Δ x 1 2 ∥ f ( x ) + J ( x ) T Δ x ∥ 2 \Delta\boldsymbol{x}^{*}=\arg\min_{\Delta\boldsymbol{x}}\frac12{\left\|f\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)^{\mathrm{T}}\Delta\boldsymbol{x}\right\|}^{2} Δx=argΔxmin21 f(x)+J(x)TΔx 2 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 + 2 f ( x ) J ( x ) T Δ x + Δ x T J ( x ) J ( x ) T Δ x ) \begin{aligned} \frac12{\left\|f\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)^{\mathrm{T}}\Delta\boldsymbol{x}\right\|}^{2}& =\frac12\Big(f\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)^\mathrm{T}\Delta\boldsymbol{x}\Big)^\mathrm{T}\left(f\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)^\mathrm{T}\Delta\boldsymbol{x}\right) \\ &=\frac12\left(\left\|f(\boldsymbol{x})\right\|_2^2+2f\left(\boldsymbol{x}\right)\boldsymbol{J}(\boldsymbol{x})^\mathrm{T}\Delta\boldsymbol{x}+\Delta\boldsymbol{x}^\mathrm{T}\boldsymbol{J}(\boldsymbol{x})\boldsymbol{J}(\boldsymbol{x})^\mathrm{T}\Delta\boldsymbol{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)22+2f(x)J(x)TΔx+ΔxTJ(x)J(x)TΔx)
对△x求导得: J ( x ) f ( x ) + J ( x ) J T ( x ) Δ x = 0 \boldsymbol{J}\left(\boldsymbol{x}\right)f\left(\boldsymbol{x}\right)+\boldsymbol{J}\left(\boldsymbol{x}\right)\boldsymbol{J}^\mathrm{T}\left(\boldsymbol{x}\right)\Delta\boldsymbol{x}=\boldsymbol{0} J(x)f(x)+J(x)JT(x)Δx=0 J ( x ) J T ⏟ H ( x ) ( x ) Δ x = − J ( x ) f ( x ) ⏟ g ( x ) \underbrace{\boldsymbol{J}(\boldsymbol{x})\boldsymbol{J}^\mathrm{T}}_{\boldsymbol{H}(\boldsymbol{x})}\left(\boldsymbol{x}\right)\Delta\boldsymbol{x}=\underbrace{-\boldsymbol{J}(\boldsymbol{x})\boldsymbol{f}\left(\boldsymbol{x}\right)}_{\boldsymbol{g}(\boldsymbol{x})} H(x) J(x)JT(x)Δx=g(x) J(x)f(x) H Δ x = g H\Delta x=\boldsymbol{g} HΔx=g
使用 J ( x ) J ( x ) T J(x)J(x)^T J(x)J(x)T近似代替了H,起到简化运算的效果.
J ( x ) J ( x ) T J(x)J(x)^T J(x)J(x)T是半正定的,不一定可逆 )

G-N方法步骤
在这里插入图片描述

4. 改进二阶 (列文伯格-马夸尔特L-M)

高斯牛顿法中使用 J ( x ) J ( x ) T J(x)J(x)^T J(x)J(x)T代替H,只在展开点附近有较好的近似效果,应为△x限定一个“信任区域”.

  • 可信度指标
    ρ = f ( x + Δ x ) − f ( x ) J ( x ) T Δ x \rho=\frac{f\left(\boldsymbol{x}+\Delta\boldsymbol{x}\right)-f\left(\boldsymbol{x}\right)}{\boldsymbol{J}\left(\boldsymbol{x}\right)^\mathrm{T}\Delta\boldsymbol{x}} ρ=J(x)TΔxf(x+Δx)f(x)分子表示实际函数差,分布表示近似函数差.
    a. ρ<1,近似比实际大,激进(应缩小信任域)
    b. ρ>1,近似比实际小,保守(应扩大信任域)
    c. ρ≈1,近似贴近实际,信任域维持不变

min ⁡ Δ x k 1 2 ∥ f ( x k ) + J ( x k ) T Δ x k ∥ 2 , s . t . ∥ D Δ x k ∥ 2 ⩽ μ , \min_{\Delta\boldsymbol{x}_k}\frac12\Big\Vert f\left(\boldsymbol{x}_k\right)+\boldsymbol{J}\left(\boldsymbol{x}_k\right)^\mathrm{T}\Delta\boldsymbol{x}_k\Big\Vert^2,\quad\mathrm{s.t.}\quad\left\Vert\boldsymbol{D}\Delta\boldsymbol{x}_k\right\Vert^2\leqslant\mu, Δxkmin21 f(xk)+J(xk)TΔxk 2,s.t.DΔxk2μ,
采用拉格朗日乘数法得: L ( Δ x k , λ ) = 1 2 ∥ f ( x k ) + J ( x k ) T Δ x k ∥ 2 + λ 2 ( ∥ D Δ x k ∥ 2 − μ ) \mathcal{L}(\Delta\boldsymbol{x}_k,\lambda)=\frac12\Big\Vert f\left(\boldsymbol{x}_k\right)+\boldsymbol{J}\left(\boldsymbol{x}_k\right)^\mathrm{T}\Delta\boldsymbol{x}_k\Big\Vert^2+\frac\lambda2\left(\left\Vert\boldsymbol{D}\Delta\boldsymbol{x}_k\right\Vert^2-\mu\right) L(Δxk,λ)=21 f(xk)+J(xk)TΔxk 2+2λ(DΔxk2μ)对△x求偏导得: ( H + λ D T D ) Δ x k = g \left(\boldsymbol{H}+\lambda\boldsymbol{D}^\mathrm{T}\boldsymbol{D}\right)\Delta\boldsymbol{x}_k=\boldsymbol{g} (H+λDTD)Δxk=g若D=I, ( H + λ I ) Δ x k = g (\boldsymbol{H}+\lambda\boldsymbol{I})\Delta\boldsymbol{x}_k=\boldsymbol{g} (H+λI)Δxk=g

  • 与高斯牛顿法相比,左边H上加了个λI
  • 当λ比较小,退化为高斯牛顿方法
  • 当λ比较大,退化为梯度下降方法
  • L-M方法可以看成 梯度下降与高斯牛顿法之间的融合,通过 λ 来切换两种方法.

L-M方法步骤
在这里插入图片描述

四、安装库及报错解决

1. Ceres库的安装

  • 按照本书3rdparty提供的链接编译时,会报错,原因是Ceres和eigen3版本发生冲突。此处安装Ceres1.14.0版本。
    点击此处——>链接到下载网址
  • 安装ceres相关依赖
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
  • 解压、编译、安装
tar -zxvf ceres-solver-1.14.0.tar.gz 
cd ceres-solver-1.14.0/
mkdir build
cd build/
cmake ..
make
sudo make install

2. g2o库的安装

  • g2o采用本书3rdparty提供的链接直接编译安装即可
  • `安装依赖项
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
sudo apt-get install qtdeclarative5-dev
sudo apt-get install qt5-qmake
sudo apt-get install libqglviewer-dev

装最后一个依赖项时,如果出现 Package ‘libqglviewer-dev’ has no installation candidate

改为:

sudo apt-get install qtdeclarative5-dev qt5-qmake libqglviewer-headers

3.编译、安装

cd g2o
mkdir build
cd build
sudo ldconfig
cmake ..
make
sudo make install

注:一定要在编译前进行sudo ldconfig,ldconfig是一个动态链接库管理命令。安装完成某个工程后生成许多动态库,为了让这些动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。

猜你喜欢

转载自blog.csdn.net/qq_52757671/article/details/137055164