最小二乘问题和非线性优化

这篇具有很好参考价值的文章主要介绍了最小二乘问题和非线性优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.引言

转载自此处,修正了一点小错误。

1.最小二乘问题

在求解 SLAM 中的最优状态估计问题时,我们一般会得到两个变量,一个是由传感器获得的实际观测值 z \boldsymbol{z} z,一个是根据目前估计的状态量和观测模型计算出来的预测值 h ( x ) h(\boldsymbol{x}) h(x)。求解最优状态估计问题时通常我们会尝试最小化预测值和观测值计算出的残差平方(使用平方是为了统一正负号的影响),即求解以下最小二乘问题:

x ∗ = arg ⁡ min ⁡ x ∣ ∣ z − h ( x ) ∣ ∣ 2 \boldsymbol{x}^* = \arg\min_{\boldsymbol{x}}||\boldsymbol{z} - h(\boldsymbol{x})||^2 x=argxmin∣∣zh(x)2
如果观测模型是线性模型,则上式转化为线性最小二乘问题:

x ∗ = arg ⁡ min ⁡ x ∣ ∣ z − H x ∣ ∣ 2 \boldsymbol{x}^* = \arg\min_{\boldsymbol{x}}||\boldsymbol{z} - \boldsymbol{H}\boldsymbol{x}||^2 x=argxmin∣∣zHx2
对于线性最小二乘问题,我们可以直接求闭式解: x ∗ = − ( H T H ) − 1 H T z \boldsymbol{x}^* = -(\boldsymbol{H}^T\boldsymbol{H})^{-1}\boldsymbol{H}^T\boldsymbol{z} x=(HTH)1HTz 这里不进行赘述。

实际的问题中,我们通常要最小化不止一个残差,不同残差通常会按其重要性(不确定性)分配一个相应的权重系数,且观测模型也通常是非线性的,即求解以下问题:

e i ( x ) = z i − h i ( x ) i = 1 , 2 , . . . , n ∣ ∣ e i ( x ) ∣ ∣ Σ i 2 = e i T Σ i e i x ∗ = arg ⁡ min ⁡ x F ( x ) = arg ⁡ min ⁡ x ∑ i ∣ ∣ e i ( x ) ∣ ∣ Σ i 2 \begin{aligned} \boldsymbol{e}_i(\boldsymbol{x}) &= \boldsymbol{z}_i - h_i(\boldsymbol{x}) \qquad i = 1, 2, ..., n\\ ||\boldsymbol{e}_i(\boldsymbol{x})||^2_{\Sigma_i} &= \boldsymbol{e}_i^T\boldsymbol{\Sigma}_i\boldsymbol{e}_i\\ \boldsymbol{x}^* &= \arg\min_{\boldsymbol{x}}F(\boldsymbol{x})\\ &= \arg\min_{\boldsymbol{x}}\sum_i||\boldsymbol{e}_i(\boldsymbol{x})||^2_{\Sigma_i} \end{aligned} ei(x)∣∣ei(x)Σi2x=zihi(x)i=1,2,...,n=eiTΣiei=argxminF(x)=argxmini∣∣ei(x)Σi2
我们想要获得一个状态量 x ∗ \boldsymbol{x}^* x,使得损失函数 F ( x ) F(\boldsymbol{x}) F(x) 取得局部最小值。

在具体求解之前,先考虑 F ( x ) F(\boldsymbol{x}) F(x) 的性质,对其进行二阶泰勒展开:

F ( x + Δ x ) = F ( x ) + J Δ x + 1 2 Δ x T H Δ x + O ( ∣ ∣ Δ x ∣ ∣ 3 ) F(\boldsymbol{x} + \Delta\boldsymbol{x}) = F(\boldsymbol{x}) + \boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{H}\Delta\boldsymbol{x} + O(||\Delta\boldsymbol{x}||^3) F(x+Δx)=F(x)+JΔx+21ΔxTHΔx+O(∣∣Δx3)
忽略高阶余项,对二次函数,有以下性质:

如果在点 x ∗ \boldsymbol{x}^* x 处,导数为 0 \boldsymbol{0} 0,则这个点为稳定点,根据 Hessian 矩阵的正定性有不同性质:

  • 如果 H \boldsymbol{H} H 为正定矩阵,则 F ( x ∗ ) F(\boldsymbol{x}^*) F(x) 为局部最小值
  • 如果 H \boldsymbol{H} H 为负定矩阵,则 F ( x ∗ ) F(\boldsymbol{x}^*) F(x) 为局部最大值
  • 如果 H \boldsymbol{H} H 为不定矩阵,则 F ( x ∗ ) F(\boldsymbol{x}^*) F(x) 为鞍点

在实际过程中,一般 F ( x ) F(x) F(x) 比较复杂,我们没有办法直接使其导数为 0 进而求出该点,因此常用的是迭代法,即找到一个下降方向使损失函数随 x \boldsymbol{x} x 的迭代逐渐减少,直到 x \boldsymbol{x} x 收敛到 x ∗ \boldsymbol{x}^* x。下面整理以下常用的几种迭代方法。

2.迭代下降法

上面提到,我们需要找到一个 x \boldsymbol{x} x 的迭代量使得 F ( x ) F(\boldsymbol{x}) F(x) 减少。这个过程分两步:

找到 F ( x ) \boldsymbol{F(x)} F(x) 的下降方向,构建该方向的单位向量 d \boldsymbol{d} d
确定该方向的迭代步长 α \alpha α
迭代后的自变量 x + α d \boldsymbol{x} + \alpha\boldsymbol{d} x+αd 对应的函数值可以用一阶泰勒展开近似(当步长足够小的时候):

F ( x + α d ) = F ( x ) + α J d F(\boldsymbol{x} + \alpha\boldsymbol{d}) = F(\boldsymbol{x}) + \alpha\boldsymbol{Jd} F(x+αd)=F(x)+αJd
因此,不难发现,要保持 F ( x ) F(x) F(x) 是下降的,只需要保证 J d < 0 \boldsymbol{Jd} < 0 Jd<0。以下几种方法都是以不同思路在寻找一个合适的方向进行迭代。

3.最速下降法

基于上一部分,我们知道变化量为 α J d \alpha\boldsymbol{Jd} αJd,其中 J d = ∣ ∣ J ∣ ∣ cos ⁡ θ \boldsymbol{Jd} = ||\boldsymbol{J}||\cos{\theta} Jd=∣∣J∣∣cosθ θ \theta θ 为梯度 J \boldsymbol{J} J d \boldsymbol{d} d 的夹角。当 θ = − π \theta = -\pi θ=π 时, J d = − ∣ ∣ J ∣ ∣ \boldsymbol{Jd} = -||\boldsymbol{J}|| Jd=∣∣J∣∣ 取得最小值,此时方向向量为:

d = − J T ∣ ∣ J ∣ ∣ \boldsymbol{d} = \frac{-\boldsymbol{J}^T}{||\boldsymbol{J}||} d=∣∣J∣∣JT
因此,沿梯度 J \boldsymbol{J} J 的负方向可以使 F ( x ) F(\boldsymbol{x}) F(x),但实际过程中,一般只会在迭代刚开始使用这种方法,当接近最优值时这种方法会出现震荡并且收敛较慢。

4.牛顿法

F ( x ) F(\boldsymbol{x}) F(x) 进行二阶泰勒展开有:

F ( x + Δ x ) = F ( x ) + J Δ x + 1 2 Δ x T H Δ x F(\boldsymbol{x} + \Delta\boldsymbol{x}) = F(\boldsymbol{x}) + \boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{H}\Delta\boldsymbol{x} F(x+Δx)=F(x)+JΔx+21ΔxTHΔx
我们关注的是求一个 Δ x \Delta\boldsymbol{x} Δx 使得 J Δ x + 1 2 Δ x T H Δ x \boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{H}\Delta\boldsymbol{x} JΔx+21ΔxTHΔx 最小,因此可以求导得:

∂ ( J Δ x + 1 2 Δ x T H Δ x ) ∂ Δ x = J T + H Δ x = 0 ⇒ Δ x = − H − 1 J T \begin{aligned} \frac{\partial(\boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{H}\Delta\boldsymbol{x})}{\partial\Delta\boldsymbol{x}} &= \boldsymbol{J}^T + \boldsymbol{H}\Delta\boldsymbol{x} = 0\\ \Rightarrow \Delta\boldsymbol{x} &= -\boldsymbol{H}^{-1}\boldsymbol{J}^T \end{aligned} Δx(JΔx+21ΔxTHΔx)Δx=JT+HΔx=0=H1JT
H \boldsymbol{H} H 为正定矩阵且当前 x \boldsymbol{x} x 在最优点附近时,取 Δ x = − H − 1 J T \Delta\boldsymbol{x} = -\boldsymbol{H}^{-1}\boldsymbol{J}^T Δx=H1JT 可以使函数获得局部最小值。但缺点是残差的 Hessian 函数通常比较难求。

5.阻尼法

在牛顿法的基础上,为了控制每次迭代不要太激进,我们可以在损失函数中增加一项惩罚项,如下所示:

arg ⁡ min ⁡ Δ x { F ( x ) + J Δ x + 1 2 Δ x T H Δ x + 1 2 μ ( Δ x ) T ( Δ x ) } \arg\min_{\Delta\boldsymbol{x}}\left\{F(\boldsymbol{x}) + \boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{H}\Delta\boldsymbol{x} + \frac{1}{2}\mu(\Delta\boldsymbol{x})^T(\Delta\boldsymbol{x})\right\} argΔxmin{F(x)+JΔx+21ΔxTHΔx+21μ(Δx)T(Δx)}
当我们选的 Δ x \Delta\boldsymbol{x} Δx 太大时,损失函数也会变大,变大的幅度由 μ \mu μ 决定,因此我们可以控制每次迭代量 Δ x \Delta\boldsymbol{x} Δx 的大小。同样在右侧部分对 Δ x \Delta\boldsymbol{x} Δx 求导有:

J T + H Δ x + μ Δ x = 0 ( H + μ I ) Δ x = − J T \begin{aligned} \boldsymbol{J}^T + \boldsymbol{H}\Delta\boldsymbol{x} + \mu\Delta\boldsymbol{x} &= 0\\ (\boldsymbol{H} + \mu\boldsymbol{I})\Delta\boldsymbol{x} = -\boldsymbol{J}^T \end{aligned} JT+HΔx+μΔx(H+μI)Δx=JT=0
这个思路我们后面在介绍 LM 法时也会用到。

6.高斯牛顿(GN)法

在前面的整理中实际上我们求解的是一系列残差的和,求单个残差的雅可比比较简单,因此在后续的几种方法中我们关注各个残差的变化。将上述非线性最小二乘问题中的各个残差写成向量形式:

F ( x ) = E ( x ) = [ e 1 ( x ) e 2 ( x ) . . . e n ( x ) ] \boldsymbol{F}(\boldsymbol{x}) =\boldsymbol{E}(\boldsymbol{x}) =\begin{bmatrix} \boldsymbol{e}_1(\boldsymbol{x})\\ \boldsymbol{e}_2(\boldsymbol{x})\\ ...\\ \boldsymbol{e}_n(\boldsymbol{x})\\ \end{bmatrix} F(x)=E(x)= e1(x)e2(x)...en(x)

e ( x ) \boldsymbol{e}(\boldsymbol{x}) e(x) 进行泰勒展开,有:

e ( x + Δ x ) = e ( x ) + J Δ x \boldsymbol{e}(\boldsymbol{x} + \Delta\boldsymbol{x}) = \boldsymbol{e}(\boldsymbol{x}) + \boldsymbol{J}\Delta\boldsymbol{x} e(x+Δx)=e(x)+JΔx
上式中, J \boldsymbol{J} J 是残差矩阵 e ( x ) \boldsymbol{e}(\boldsymbol{x}) e(x) 对状态量的雅可比矩阵。

注意到在原来的线性最小二乘问题中,对每个残差还有一个权重矩阵 Σ \boldsymbol{\Sigma} Σ。这种情况下,我们只需要令 e i ( x ) = Σ i e i ( x ) \boldsymbol{e}_i(\boldsymbol{x}) = \sqrt{\boldsymbol{\Sigma}_i}\boldsymbol{e}_i(\boldsymbol{x}) ei(x)=Σi ei(x) 即可。因此下式中暂不考虑 Σ \boldsymbol{\Sigma} Σ 的影响。

在这种形式下对 e ( x ) \boldsymbol{e}(\boldsymbol{x}) e(x) 进行泰勒展开,有:

∣ ∣ e ( x + Δ x ) ∣ ∣ 2 = e ( x + Δ x ) T e ( x + Δ x ) = ( e ( x ) + J Δ x ) T ( e ( x ) + J Δ x ) = e ( x ) T e ( x ) + Δ x T J T e ( x ) + e ( x ) T J Δ x + Δ x T J T J Δ x \begin{aligned} ||e(\boldsymbol{x} + \Delta\boldsymbol{x}) ||^2&= \boldsymbol{e}(\boldsymbol{x} + \Delta\boldsymbol{x})^T\boldsymbol{e}(\boldsymbol{x} + \Delta\boldsymbol{x})\\ &= (\boldsymbol{e}(\boldsymbol{x}) + \boldsymbol{J}\Delta\boldsymbol{x})^T(\boldsymbol{e}(\boldsymbol{x}) + \boldsymbol{J}\Delta\boldsymbol{x})\\ &= \boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{e}(\boldsymbol{x}) + \Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{e}(\boldsymbol{x}) + \boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{J}\Delta\boldsymbol{x} + \Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} \end{aligned} ∣∣e(x+Δx)2=e(x+Δx)Te(x+Δx)=(e(x)+JΔx)T(e(x)+JΔx)=e(x)Te(x)+ΔxTJTe(x)+e(x)TJΔx+ΔxTJTJΔx
上式中,注意到: e ( x ) e(\boldsymbol{x}) e(x) 是一维的,因此 Δ x T J T e ( x ) = e ( x ) T J Δ x \Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{e}(\boldsymbol{x}) = \boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{J}\Delta\boldsymbol{x} ΔxTJTe(x)=e(x)TJΔx,因此化简得:

F ( x + Δ x ) = e ( x ) T e ( x ) + 2 e ( x ) T J Δ x + Δ x T J T J Δ x = F ( x ) + 2 e ( x ) T J Δ x + Δ x T J T J Δ x \begin{aligned} F(\boldsymbol{x} + \Delta\boldsymbol{x}) &= \boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{e}(\boldsymbol{x}) + 2\boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{J}\Delta\boldsymbol{x} + \Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x}\\ &= F(\boldsymbol{x}) + 2\boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{J}\Delta\boldsymbol{x} + \Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} \end{aligned} F(x+Δx)=e(x)Te(x)+2e(x)TJΔx+ΔxTJTJΔx=F(x)+2e(x)TJΔx+ΔxTJTJΔx
通过这种方式,我们同样将其近似一个二次函数,并且和我们之前展开的结果比较,不难发现在这里我们实际上是用 J T e \boldsymbol{J}^T\boldsymbol{e} JTe 来近似 Jacobian 矩阵,用 J T J \boldsymbol{J}^T\boldsymbol{J} JTJ 来近似 Hessian 矩阵。因此,当 J \boldsymbol{J} J 满秩时,我们可以保证在上式导数为 0 的地方可以确保函数取得局部最小值。同样,在上式右侧部分对 Δ x \Delta\boldsymbol{x} Δx 求导并使其为 0 有:

J T e ( x ) + J T J Δ x = 0 ⇒ J T J Δ x = − J T e ( x ) ⇒ H Δ x = b \begin{aligned} \boldsymbol{J}^T\boldsymbol{e}(\boldsymbol{x}) + \boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} = 0\\ \Rightarrow \boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} &= -\boldsymbol{J}^T\boldsymbol{e}(\boldsymbol{x})\\ \Rightarrow \boldsymbol{H}\Delta\boldsymbol{x} &= \boldsymbol{b} \end{aligned} JTe(x)+JTJΔx=0JTJΔxHΔx=JTe(x)=b
上式中,我们令 H = J T J , b = − J T e \boldsymbol{H} = \boldsymbol{J}^T\boldsymbol{J}, \boldsymbol{b} = -\boldsymbol{J}^T\boldsymbol{e} H=JTJ,b=JTe。这样我们获得了高斯牛顿法的求解过程:

  • 计算残差矩阵关于状态值的雅可比矩阵 J \boldsymbol{J} J
  • 利用雅可比矩阵和残差构建信息矩阵和信息向量 H , b \boldsymbol{H}, \boldsymbol{b} H,b
  • 计算当次迭代量: Δ x = H − 1 b \Delta\boldsymbol{x} = \boldsymbol{H}^{-1}\boldsymbol{b} Δx=H1b
  • 如果迭代量足够小则结束迭代,否则进入下一次迭代

7.莱文贝格马夸特(LM)法

LM 法是在高斯牛顿法的基础上按照阻尼法的思路加入阻尼因子,即求解以下方程:

( H + μ I ) Δ x = b (\boldsymbol{H} + \mu\boldsymbol{I})\Delta\boldsymbol{x} = \boldsymbol{b} (H+μI)Δx=b
上式中,阻尼因子的作用有:

  • 添加进 H \boldsymbol{H} H 保证 H \boldsymbol{H} H 是正定的

  • μ \mu μ 很大时, Δ x = − ( H + μ I ) − 1 b ≈ − 1 μ b = − 1 μ J T E ( x ) \Delta\boldsymbol{x} = -(\boldsymbol{H}+\mu\boldsymbol{I})^{-1}\boldsymbol{b}\approx-\frac{1}{\mu}\boldsymbol{b}=-\frac{1}{\mu}\boldsymbol{J}^T\boldsymbol{E}(\boldsymbol{x}) Δx=(H+μI)1bμ1b=μ1JTE(x),接近最速下降法

  • μ \mu μ 很小时,则接近高斯牛顿法
    因此,合理的设置阻尼因子,能够达到动态对迭代速度进行调节。阻尼因子的设置分为两部分:

  • 初始值的选取

  • 随迭代量变化的更新策略

先来看初始值选取方法,阻尼因子的大小应该根据 J T J \boldsymbol{J}^T\boldsymbol{J} JTJ 的大小来选取,对 J T J \boldsymbol{J}^T\boldsymbol{J} JTJ 进行特征值分解,有: J T J = V Λ V T \boldsymbol{J}^T\boldsymbol{J} = \boldsymbol{V}\boldsymbol{\Lambda}\boldsymbol{V}^T JTJ=VΛVT Λ = diag ( λ 1 , λ 2 , . . . , λ n ) , V = [ v 1 , . . . , v n ] \boldsymbol{\Lambda} = \text{diag}(\lambda_1, \lambda_2,..., \lambda_n), \boldsymbol{V} = [\boldsymbol{v}_1, ..., \boldsymbol{v}_n] Λ=diag(λ1,λ2,...,λn),V=[v1,...,vn],因此,迭代公式化简为:

( V Λ V T + μ I ) Δ x = b Δ x = ( V Λ V T + μ I ) − 1 b = − ∑ i v i T b λ i + μ v i \begin{aligned} (\boldsymbol{V\Lambda}\boldsymbol{V}^T + \mu\boldsymbol{I})\Delta\boldsymbol{x} &= \boldsymbol{b}\\ \Delta\boldsymbol{x} &= (\boldsymbol{V\Lambda}\boldsymbol{V}^T + \mu\boldsymbol{I})^{-1}\boldsymbol{b}\\ &= -\sum_i\frac{\boldsymbol{v}_i^T\boldsymbol{b}}{\lambda_i + \mu}\boldsymbol{v}_i \end{aligned} (VΛVT+μI)ΔxΔx=b=(VΛVT+μI)1b=iλi+μviTbvi
因此,将 μ \mu μ 选为 λ i \lambda_i λi 接近即可,一个简单的思路是设 μ 0 = τ max ⁡ ( J T J ) i i \mu_0 = \tau\max{(\boldsymbol{J}^T\boldsymbol{J})_{ii}} μ0=τmax(JTJ)ii,实际中一般设 τ ≈ [ 1 0 − 8 , 1 ] \tau \approx [10^{-8}, 1] τ[108,1]

接下来看 μ \mu μ 的更新策略,先定性分析应该怎么更新阻尼因子:

  • Δ x \Delta\boldsymbol{x} Δx F ( x ) F(\boldsymbol{x}) F(x) 增加时,应该提高 μ \mu μ 来降低 Δ x \Delta\boldsymbol{x} Δx 即通过减少步长来降低本次迭代带来的影响
  • Δ x \Delta\boldsymbol{x} Δx F ( x ) F(\boldsymbol{x}) F(x) 减少时,应该降低 μ \mu μ 来提高 Δ x \Delta\boldsymbol{x} Δx 即通过增加步长来提高这次迭代的影响

下面进行定量分析,令 L ( Δ x ) = F ( x ) + 2 E ( x ) T J Δ x + 1 2 Δ x T J T J Δ x L(\Delta\boldsymbol{x}) = F(\boldsymbol{x}) +2\boldsymbol{E}(\boldsymbol{x})^T\boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} L(Δx)=F(x)+2E(x)TJΔx+21ΔxTJTJΔx考虑以下比例因子:

ρ = F ( x ) − F ( x + Δ x ) L ( 0 ) − F ( Δ x ) \rho = \frac{F(\boldsymbol{x}) - F(\boldsymbol{x} + \Delta\boldsymbol{x})}{L(\boldsymbol{0}) - F(\Delta\boldsymbol{x})} ρ=L(0)F(Δx)F(x)F(x+Δx)
Marquardt 提出一个策略:

  • ρ < 0 \rho < 0 ρ<0,表示当前 Δ x \Delta\boldsymbol{x} Δx 使 F ( x ) F(\boldsymbol{x}) F(x) 增大,表示离最优值还很远,应该提高 μ \mu μ 使其接近最速下降法进行较大幅度的更新
  • ρ > 0 \rho > 0 ρ>0 且比较大,表示当前 Δ x \Delta\boldsymbol{x} Δx 使 F ( x ) F(\boldsymbol{x}) F(x) 减小,应该降低 μ \mu μ 使其接近高斯牛顿法,降低速度更新至最优点
  • 如果 ρ > 0 \rho > 0 ρ>0 但比较小,表示已经到最优点附近,则增大阻尼 μ \mu μ,缩小迭代步长

Marquardt 的具体策略如下:

if rho < 0.25: 
    mu = mu * 2
else if rho > 0.75: 
    mu = mu /3

一个使用 Marquardt 策略进行更新的过程如下:
最小二乘问题和非线性优化,# 十四讲,机器学习,算法,线性代数,优化,LM,GN

可以发现,效果并不算很好,随着迭代次数的增加, μ \mu μ 开始进行震荡,表示迭代量周期性的使 F ( x ) F(\boldsymbol{x}) F(x) 增加又下降。

因此,Nielsen 提出了另一个策略,也是 G2O 和 Ceres 中使用的策略:

if rho > 0:
    mu = mu * max(1/3, 1 - (2 * rho - 1)^3)
    v = 2
else:
    mu = mu * v
    v = 2 * v

使用这种策略进行优化的例子如下:

可以看到, μ \mu μ 随着迭代的进行可以比较平滑的持续下降直至达到收敛。
最小二乘问题和非线性优化,# 十四讲,机器学习,算法,线性代数,优化,LM,GN

8.鲁棒核函数

在进行最小二乘问题中,我们会遇到一些异常观测值使得观测残差特别大,如果不对这些异常点做处理会影响在优化过程中,优化器会尝试最小化异常的残差项,最后影响状态估计的精度,鲁棒核函数就是用来降低这些异常观测值造成的影响。

将鲁棒核函数直接作用在每个残差项上,将最小二乘问题变成如下形式:

F ( x ) = ∑ i ρ ( ∣ ∣ e i ( x ) ∣ ∣ 2 ) F(\boldsymbol{x}) = \sum_i\rho(||e_i(\boldsymbol{x})||^2) F(x)=iρ(∣∣ei(x)2)
使用鲁棒核函数时求解非线性最小二乘的过程
在这个形式下对带有鲁棒核函数的残差进行二阶泰勒展开:

ρ ( s + Δ s ) = ρ ( x ) + ρ ′ ( x ) Δ s + 1 2 ρ ′ ′ ( x ) Δ 2 s \rho(s + \Delta s) = \rho(x) + \rho'(x)\Delta s + \frac{1}{2}\rho''(x)\Delta^2s ρ(s+Δs)=ρ(x)+ρ(x)Δs+21ρ′′(x)Δ2s
上式中,变化量 Δ s \Delta s Δs 的计算方式如下:

Δ s k = ∣ ∣ e i ( x + Δ x ) ∣ ∣ 2 − ∣ ∣ e i ( x ) ∣ ∣ 2 = ∣ ∣ e i ( x ) + J i Δ x ∣ ∣ 2 − ∣ ∣ e i ( x ) ∣ ∣ 2 = 2 e i ( x ) T J i Δ x + Δ x T J i T J i Δ x \begin{aligned} \Delta s_k &= ||e_i(\boldsymbol{x}+\Delta\boldsymbol{x})||^2 - ||e_i(\boldsymbol{x})||^2\\ &= ||e_i(\boldsymbol{x})+\boldsymbol{J}_i\Delta\boldsymbol{x}||^2 - ||e_i(\boldsymbol{x})||^2\\ &= 2e_i(\boldsymbol{x})^T\boldsymbol{J}_i\Delta\boldsymbol{x}+\Delta\boldsymbol{x}^T\boldsymbol{J}_i^T\boldsymbol{J}_i\Delta\boldsymbol{x} \end{aligned} Δsk=∣∣ei(x+Δx)2∣∣ei(x)2=∣∣ei(x)+JiΔx2∣∣ei(x)2=2ei(x)TJiΔx+ΔxTJiTJiΔx
Δ s \Delta s Δs 代入 ρ ( s + Δ s ) \rho(s + \Delta s) ρ(s+Δs) 可得:

ρ ( s + Δ s ) = ρ ( s ) + ρ ′ ( s ) ( 2 e i ( x ) T J i Δ x + Δ x T J i T J i Δ x ) + 1 2 ρ ′ ′ ( s ) ( 2 e i ( x ) T J i Δ x + Δ x T J i T J i Δ x ) 2 ≈ ρ ( s ) + 2 ρ ′ ( s ) e i ( x ) T J i Δ x + ρ ′ ( s ) Δ x T J i T J i Δ x + 2 ρ ′ ′ ( s ) Δ x T J i T e i ( x ) e i ( x ) T J i Δ x \begin{aligned} \rho(s + \Delta s) =& \rho(s) + \rho'(s)(2e_i(\boldsymbol{x})^T\boldsymbol{J}_i\Delta\boldsymbol{x}+\Delta\boldsymbol{x}^T\boldsymbol{J}_i^T\boldsymbol{J}_i\Delta\boldsymbol{x}) \\ &+ \frac{1}{2}\rho''(s)(2e_i(\boldsymbol{x})^T\boldsymbol{J}_i\Delta\boldsymbol{x}+\Delta\boldsymbol{x}^T\boldsymbol{J}_i^T\boldsymbol{J}_i\Delta\boldsymbol{x})^2\\ \approx& \rho(s) + 2\rho'(s)e_i(\boldsymbol{x})^T\boldsymbol{J}_i\Delta\boldsymbol{x}+\rho'(s)\Delta\boldsymbol{x}^T\boldsymbol{J}_i^T\boldsymbol{J}_i\Delta\boldsymbol{x} \\ &+ 2\rho''(s)\Delta\boldsymbol{x}^T\boldsymbol{J}_i^Te_i(\boldsymbol{x})e_i(\boldsymbol{x})^T\boldsymbol{J}_i\Delta\boldsymbol{x} \end{aligned} ρ(s+Δs)=ρ(s)+ρ(s)(2ei(x)TJiΔx+ΔxTJiTJiΔx)+21ρ′′(s)(2ei(x)TJiΔx+ΔxTJiTJiΔx)2ρ(s)+2ρ(s)ei(x)TJiΔx+ρ(s)ΔxTJiTJiΔx+2ρ′′(s)ΔxTJiTei(x)ei(x)TJiΔx
按照之前的思路,对上式求导并使其为 0,可得:

∑ i J i T ( ρ ′ ( s ) + 2 ρ ′ ′ ( s ) e i ( x ) e i ( x ) T ) J Δ x = − ∑ i ρ ′ ( s ) J i T e i ( x ) \sum_i\boldsymbol{J}_i^T(\rho'(s) + 2\rho''(s)e_i(\boldsymbol{\boldsymbol{x}})e_i(\boldsymbol{x})^T)\boldsymbol{J}\Delta\boldsymbol{x} = -\sum_i\rho'(s)\boldsymbol{J}_i^Te_i(\boldsymbol{x}) iJiT(ρ(s)+2ρ′′(s)ei(x)ei(x)T)JΔx=iρ(s)JiTei(x)
对比之前的矩阵 J T J Δ x = − J i T e ( x ) \boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} = -\boldsymbol{J}_i^T\boldsymbol{e}(\boldsymbol{x}) JTJΔx=JiTe(x) 可得,当我们使用了鲁棒核函数之后,只需要将各项残差的核函数的一阶二阶导数值计算出,再按照以上形式对信息矩阵和信息向量进行更新即可。

常用的鲁棒核函数
柯西鲁棒核函数:

ρ ( s ) = c 2 log ⁡ ( 1 + s c 2 ) ρ ′ ( s ) = 1 1 + s c 2 ρ ′ ′ ( s ) = − 1 c 2 ( ρ ′ ( s ) ) 2 \begin{aligned} \rho(s) &= c^2\log{(1+\frac{s}{c^2})}\\ \rho'(s) &= \frac{1}{1+\frac{s}{c^2}}\\ \rho''(s) &= -\frac{1}{c^2}(\rho'(s))^2 \end{aligned} ρ(s)ρ(s)ρ′′(s)=c2log(1+c2s)=1+c2s1=c21(ρ(s))2
其中, c c c 为控制参数。当残差是正态分布,Huber c 选为 1.345,Cauchy c 选为 2.3849。不同鲁棒核函数的效果如下图所示:
最小二乘问题和非线性优化,# 十四讲,机器学习,算法,线性代数,优化,LM,GN文章来源地址https://www.toymoban.com/news/detail-640023.html

到了这里,关于最小二乘问题和非线性优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Open3D 非线性最小二乘拟合二维多项式曲线

      多项式曲线表示为: p ( x ) = p 1 x n + p 2 x

    2024年02月07日
    浏览(44)
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业

    小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第四次作业。 现实⽣活中的图像总存在畸变。原则上来说,针孔透视相机应该将三维世界中的直线投影成直线,但是当我们使⽤⼴⾓和鱼眼镜头时,由于畸变的原因,直线在图像⾥看起来是扭曲的

    2024年02月05日
    浏览(41)
  • 非线性最优化问题求解器Ipopt介绍

    Ipopt(Interior Point OPTimizer) 是求解大规模非线性最优化问题的求解软件。可以求解如下形式的最优化问题的(局部)最优解。 m i n ⏟ x ∈ R n     f ( x ) s . t . g L ≤ g ( x ) ≤ g U x L ≤ x ≤ x U (0) underbrace{min}_ {x in Rⁿ} , , , f(x) \\\\ s.t. g_L ≤ g(x) ≤ g_U \\\\ x_L ≤ x ≤ x_U tag{0} x ∈ R

    2024年01月20日
    浏览(55)
  • 详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题

       本文中将详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题,结合给出的带约束的最优化问题示例,给出相应的完整的C++程序,并给出详细的解释和注释,以及编译规则等    一、Ipopt库的安装和测试    本部分内容在之前的文章《Ubuntu20.04安装Ipopt的流程介

    2024年02月08日
    浏览(72)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(53)
  • 【scipy】Python调用非线性最小二乘法

    在scipy中,非线性最小二乘法的目的是找到一组函数,使得误差函数的平方和最小,可以表示为如下公式 arg min ⁡ f i F ( x ) = 0.5 ∑ i = 0 m − 1 ρ ( f i ( x ) 2 ) , x ∈ [ L , R ] argmin_{f_i} F(x) = 0.5sum_{i=0}^{m-1}rho(f_i(x)^2),quad xin[L,R] f i ​ arg min ​ F ( x ) = 0.5 i = 0 ∑ m − 1 ​ ρ ( f i

    2024年02月09日
    浏览(37)
  • 数学建模:线性与非线性优化算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 优化算法 是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 优化的两个关键点: 1.明确优化的目标函数 2.明确优化

    2024年02月07日
    浏览(41)
  • 优化模型:MATLAB非线性规划

    1.1 非线性规划的定义 非线性规划(Nonlinear Programming,NLP) 是一种数学规划方法,用于解决含有非线性目标函数和/或非线性约束条件的优化问题。它是线性规划的一种扩展形式,更加广泛适用于复杂实际问题。 非线性规划的目标是最小化(或最大化)一个非线性目标函数,

    2024年02月04日
    浏览(42)
  • matlab使用教程(22)—非线性优化函数的设置

            可以使用由 optimset 函数创建的 options 结构体来指定优化参数。然后,可以将 options 作为输入传递给优化函数,例如,通过使用以下语法调用 fminbnd x = fminbnd(fun,x1,x2,options)         或使用以下语法调用 fminsearch x = fminsearch(fun,x0,options)         例如,要显示算

    2024年02月11日
    浏览(40)
  • 【单谐波非线性振动问题求解器 GUI 】使用单个谐波表示解决 MDOF 非线性振动问题(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 对于解决多自由度(MDOF)非线性振动问题,使用单个谐波表示是一种常见的近似方法。这种方法将系统的非线性部分在谐波振动的基础上线性化,从而简化求解过程。 以下是一个基于GUI的单谐波非线性振动问题

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包