最小二乗問題と非線形最適化

0 まえがき

ここから転載し、軽微な誤りを修正しました。

1. 最小二乗問題

SLAM で最適状態推定問題を解くと、一般に 2 つの変数が得られます。1 つはセンサーによって得られた実際の観測値 z ですz 、1は現在推定されている状態量と観測モデルに基づいて計算された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バツ=arg _バツ∣∣z _h ( x ) 2
観測モデルが線形モデルの場合、上記の方程式は線形最小二乗問題に変換されます。

x ∗ = arg ⁡ min ⁡ x ∣ ∣ z − H x ∣ ∣ 2 \boldsymbol{x}^* = \arg\min_{\boldsymbol{x}}||\boldsymbol{z} - \boldsymbol{H}\太字記号{x}||^2バツ=arg _バツ∣∣z _H × ∣∣ _2
線形最小二乗問題の場合、閉形式の解を直接求めることができます:x ∗ = − ( HTH ) − 1 HT z \boldsymbol{x}^* = -(\boldsymbol{H}^T\boldsymbol{H} ) ^{-1}\boldsymbol{H}^T\boldsymbol{z}バツ=( HTH_1時間 z についてはここでは詳しく説明しない。

実際の問題では、通常、複数の残差を最小化する必要があります。通常、異なる残差には、その重要性 (不確実性) に応じて対応する重み係数が割り当てられ、観測モデルは通常、非線形です。つまり、次の問題を解決します。

ei ( x ) = zi − hi ( x ) i = 1 , 2 , ... , n ∣ ∣ ei ( x ) ∣ ∣ Σ i 2 = ei T Σ ieix ∗ = arg ⁡ min ⁡ x F ( x ) = arg ⁡ min ⁡ x ∑ i ∣ ∣ ei ( 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{整列}e私は( × )∣∣ e私は( x ) S私は2バツ=z私はh私は( × )=1 2 ... n=eTS私はe私は=arg _バツF ( × )=arg _バツ∣∣ e私は( x ) S私は2
状態量x ∗ \boldsymbol{x}^*を取得したいバツ、損失関数F ( x ) F(\boldsymbol{x})F ( x )は極小値を取得します。

特定の問題を解決する前に、まずF ( x ) F(\boldsymbol{x})について考えてみましょう。F ( x )のプロパティは、それに対して 2 次テイラー展開を実行します。

F ( x + Δ x ) = F ( x ) + J Δ x + 1 2 Δ x TH Δ 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 ( ×+Δ ×=F ( × )+J Δ x+21Δx_ _T HΔx+O ( ∣∣Δ x3 )
高次の剰余を無視すると、二次関数には次の特性があります。

x ∗ \boldsymbol{x}^*の場合バツでの導関数は0 \boldsymbol{0}0の場合、この点は安定点であり、ヘッセ行列の正定値に従って異なる特性を持ちます。

  • Hの場合\boldsymbol{H}Hが正定行列の場合、F ( x ∗ ) F(\boldsymbol{x}^*)F ( × )は極小値です
  • Hの場合\boldsymbol{H}Hが負の定行列の場合、F ( x ∗ ) F(\boldsymbol{x}^*)F ( × )は極大値です
  • Hの場合\boldsymbol{H}Hが不定行列の場合、F ( x ∗ ) F(\boldsymbol{x}^*)F ( × )は鞍点です

実際の処理では一般的にF ( x ) F(x)F ( x )は比較的複雑です。その導関数を直接 0 にしてこの点を見つける方法はありません。したがって、損失関数が x とともに変化するように下降方向を見つける、反復法が一般的に使用されます。 {x}xの反復はx \boldsymbol{x}になるまで徐々に減少します。x はxに収束します∗ \boldsymbol{x}^*バツ一般的に使用される反復メソッドをいくつか示します。

2. 反復降下法

上で述べたように、 x \boldsymbol{x}を見つける必要があります。xの反復量は、 F ( x ) F(\boldsymbol{x})F ( x )が減少します。このプロセスは 2 つのステップに分かれています。

F ( x ) \boldsymbol{F(x)}を見つけますF ( x )の下降方向、この方向に単位ベクトル d を構築します\boldsymbol{d}d は、
この方向のα \alphaα
反復後のx + α d \boldsymbol{x} + \alpha\boldsymbol{d}バツ+α dに対応する関数値は、一次テイラー展開によって近似できます (ステップ サイズが十分に小さい場合)。

F ( x + α d ) = F ( x ) + α J d F(\boldsymbol{x} + \alpha\boldsymbol{d}) = F(\boldsymbol{x}) + \alpha\boldsymbol{Jd}F ( ×+αd _=F ( × )+α Jdしたがって、 F ( x ) F(x)
を維持することを見つけるのは難しくありません。F ( x )は減少しています。Jd < 0 \boldsymbol{Jd} < 0ジェーディー<0以下の方法はすべて、異なるアイデアを使用して反復して適切な方向を見つけます。

3. 最急降下法

前の部分に基づいて、変化はα J d \alpha\boldsymbol{Jd}であることがわかります。α Jd、ここでJ d = ∣ ∣ J ∣ ∣ cos ⁡ θ \boldsymbol{Jd} = ||\boldsymbol{J}||\cos{\theta}ジェーディー=∣∣ J ∣∣コスθθ \シータθは勾配J \boldsymbol{J}Jd \boldsymbol{d}d角度。θ = − πのとき=πの場合J d = − ∣ ∣ J ∣ ∣ \boldsymbol{Jd} = -||\boldsymbol{J}||ジェーディー=∣∣ J ∣∣は最小値を求めますが、このときの方向ベクトルは次のようになります。

d = − JT ∣ ∣ 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 )の 2 次テイラー展開は次の

F ( x + Δ x ) = F ( x ) + J Δ x + 1 2 Δ x TH Δ 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 ( ×+Δ ×=F ( × )+J Δ x+21Δx_ _T HΔx
私たちが焦点を当てるのは、Δ x \Delta\boldsymbol{x}Δ x使得J Δ x + 1 2 Δ x TH Δ x \boldsymbol{J}\Delta\boldsymbol{x} + \frac{1}{2}\Delta\boldsymbol{x}^T\boldsymbol{H}\デルタ\boldsymbol{x}J Δ x+21Δx_ _T HΔxが最小であるため、次のように導出されます。

∂ ( J Δ x + 1 2 Δ x TH Δ x ) ∂ Δ x = JT + H Δ x = 0 ⇒ Δ x = − H − 1 JT \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{整列}Δ x( J Δ x+21Δx_ _TH Δx)_Δ ×=JT+H Δ x=0=H- 1J _T
Hのとき\boldsymbol{H}Hは正定行列であり、現在のx \boldsymbol{x}xが最適点に近い場合、Δ x = − H − 1 JT \Delta\boldsymbol{x} = -\boldsymbol{H}^{-1}\boldsymbol{J}^T となります。Δx_ _=H- 1J _T は関数に極小値を取得させることができます。ただし、残差のヘッセ関数を見つけるのが通常は難しいという欠点があります。

5. 制振方法

ニュートン法に基づいて、各反復があまりにも積極的にならないように制御するために、以下に示すように損失関数にペナルティ項を追加できます。

arg ⁡ min ⁡ Δ x { F ( x ) + J Δ x + 1 2 Δ x TH Δ 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 _Δx_ _{ F ( x )+J Δ x+21Δx_ _T HΔx+21m ( Δ x )T (Δx)}Δ x \Delta\boldsymbol{x}
を選択した場合Δ xが大きすぎると、損失関数も大きくなり、増加の振幅はμ \muμが決まるので、各反復の量Δ x \Delta\boldsymbol{x}Δxサイズ。Δ x \Delta\boldsymbol{x}の右側の部分にもありますΔxの導関数は次のとおりです。

JT + H Δ x + μ Δ x = 0 ( H + μ I ) Δ x = − JT \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+mDx _ _( H+μ I ) Δ x=JT=0
この考え方は、後で LM 法を導入するときにも使用されます。

6.ガウス・ニュートン(GN)法

前の配置では、実際に解いたのは一連の残差の合計でしたが、単一の残差のヤコビアンを求めるのは比較的簡単なので、次の方法では各残差の変化に焦点を当てます上記の非線形最小二乗問題の各残差をベクトル形式で書きます。

F ( x ) = E ( x ) = [ e 1 ( x ) e 2 ( x ) 。en ( 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 ( × )=E ( × )= e1( × )e2( × )...e( 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}\デルタ\boldsymbol{x}そして( x+Δ ×=そして( x )+J Δ x
上の式では、J \boldsymbol{J}Jは残差行列e ( x ) \boldsymbol{e}(\boldsymbol{x})e ( x )と状態量のヤコビアン行列。

元の線形最小二乗問題では、各残差の重み行列Σ \boldsymbol{\Sigma}も存在することに注意してください。Σこの場合、 ei ( x ) = Σ iei ( x ) \boldsymbol{e}_i(\boldsymbol{x}) = \sqrt{\boldsymbol{\Sigma}_i}\boldsymbol{e}_i とするだけで済みます(\boldsymbol{x})e私は( × )=S私は e私は( 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 TJT e ( x ) + e ( x ) TJ Δ x + Δ x TJTJ Δ x \begin{aligned} ||e(\boldsymbol{x} + \Delta\ボールドシンボル{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}) + \ボールドシンボル{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} + \デルタ\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} \end{aligned}∣∣ e ( x+Δ x ) 2=そして( x+Δ ×(×_+Δ ×=(( x )+J Δ x )T (e(x)+J Δ x )=そして( x )×_+Δx_ _T J×_+そして( x )T JΔx+Δx_ _T JTJΔx ___
上の式では、e ( x ) e(\boldsymbol{x}) に注意してください。e ( x )は 1 次元なので、Δ x TJT e ( x ) = e ( x ) TJ Δ x \Delta\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{e}(\boldsymbol{ x}) = \boldsymbol{e}(\boldsymbol{x})^T\boldsymbol{J}\Delta\boldsymbol{x}Δx_ _T J×_=そして( x )T JΔxなので、次のように単純化します。

F ( x + Δ x ) = e ( x ) T e ( x ) + 2 e ( x ) TJ Δ x + Δ x TJTJ Δ x = F ( x ) + 2 e ( x ) TJ Δ x + Δ x TJTJ Δ 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} + \デルタ\boldsymbol{x}^T\boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} \end{aligned}F ( ×+Δ ×=そして( x )×_+2e ( × ) _T JΔx+Δx_ _T JT JΔx=F ( × )+2e ( × ) _T JΔx+Δx_ _T JTJΔx ___
このようにして、これも二次関数として近似します。以前の展開結果と比較すると、ここで実際にJT e \boldsymbol{J}^T\boldsymbol{e}を使用していることがわかります。Jヤコビ行列を近似するには、JTJ \boldsymbol{J}^T\boldsymbol{J} を使用ますJT J を使用してヘッセ行列を近似します。したがって、J \boldsymbol{J}Jがフルランクの場合、関数は上記の式の導関数が 0 となる極小値を確実に取得できます。同様に、上の式の右辺で、Δ x \Delta\boldsymbol{x}Δ xを導出して

JT e ( x ) + JTJ Δ x = 0 ⇒ JTJ Δ x = − JT 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}J×_+JT JΔx=0JT JΔxHΔx __=J×_=b
上の式では、H = JTJ , b = − JT e \boldsymbol{H} = \boldsymbol{J}^T\boldsymbol{J}, \boldsymbol{b} = -\boldsymbol{J}^T\ とします。太字記号 {e}H=JTJ_b=J。__ このようにして、ガウス・ニュートン法の解法プロセスを取得します。

  • 状態値\boldsymbol{J}に対する残差行列のヤコビアン行列 J を計算します。J
  • ヤコビアン行列と残差を使用して、情報行列と情報ベクトルH, b \boldsymbol{H}, \boldsymbol{b} を構築します。Hb
  • 現在の反復量を計算します: Δ 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 μ JTE ( x ) \Delta\boldsymbol{x} = -(\boldsymbol{H}+\mu\ボールドシンボル{I})^{-1}\ボールドシンボル{b}\おおよそ-\frac{1}{\mu}\boldsymbol{b}=-\frac{1}{\mu}\boldsymbol{J}^T \boldsymbol{E}(\boldsymbol{x})Δx_ _=( H+μI _1b _メートル1b=メートル1JTE (x)最急降下法に近い

  • μ \muμが非常に小さい場合はガウス・ニュートン法に近いため、
    減衰係数を適切に設定することで反復速度を動的に調整できます。減衰率の設定は 2 つの部分に分かれています。

  • 初期値の選択

  • イテレーション量に応じて変化する更新戦略

まず初期値の選択方法を見てみましょう. 減衰係数の大きさはJTJ \boldsymbol{J}^T\boldsymbol{J}に基づく必要がありますJT Jのサイズを選択するにはJTJ \boldsymbol{J}^T\boldsymbol{J}JT J は固有値分解を実行します。次のものがあります。JTJ = V Λ VT \boldsymbol{J}^T\boldsymbol{J} = \boldsymbol{V}\boldsymbol{\Lambda}\boldsymbol{V}^TJT J=VΛV _ _TΛ = diag (λ 1 , λ 2 , ... , λ n ), V = [ v 1 , ... . , vn ] \boldsymbol{\Lambda} = \text{diag}(\lambda_1, \lambda_2,..., \lambda_n), \boldsymbol{V} = [\boldsymbol{v}_1, ..., \boldsymbol {宿]L=diag ( λ12... V=[ v1... v]したがって、反復公式は次のように簡略化されます。

( V Λ VT + μ I ) Δ x = b Δ x = ( V Λ VT + μ I ) − 1 b = − ∑ ivi T b λ i + μ vi \begin{aligned} (\boldsymbol{V\Lambda} \boldsymbol{V}^T + \mu\boldsymbol{I})\Delta\boldsymbol{x} &= \boldsymbol{b}\\ \Delta\boldsymbol{x} &= (\boldsymbol{V\Lambda}\ bulledsymbol{V}^T + \mu\boldsymbol{I})^{-1}\boldsymbol{b}\\ &= -\sum_i\frac{\boldsymbol{v}_i^T\boldsymbol{b}}{ \lambda_i + \mu}\boldsymbol{v}_i \end{整列}( V Λ VT+μ I ) Δ xΔx_ _=b=( V Λ VT+μI _1b _=私は+メートルvTbv私は
したがって、μ \muμ 选为 λ i \lambda_i 私は簡単なアイデアは、μ 0 = τ max ⁡ ( JTJ ) ii \mu_0 = \tau\max{(\boldsymbol{J}^T\boldsymbol{J})_{ii}} と設定することですメートル0=t最大( JTJ_ii、実際には、一般にτ ≈ [ 1 0 − 8 , 1 ] \tau \estimate [10^{-8}, 1] と想定されます。t[ 1 081 ]

次にμ \muを見てください。μの更新戦略については、まず減衰係数を更新する方法を定性的に分析します。

  • Δ x \Delta\boldsymbol{x}Δ x letF ( x ) F(\boldsymbol{x})F ( x )が増加すると、μ \muΔ x \Delta\boldsymbol{x}を減らすためのμΔx はステップ サイズを小さくすることで、この反復の影響を軽減します。
  • Δ x \Delta\boldsymbol{x}Δ x letF ( x ) F(\boldsymbol{x})F ( x )が減少すると、μ \muμを増加させるとΔ x \Delta\boldsymbol{x}Δx はステップサイズを増やすことにより、この反復の影響を増大させます。

以下で定量分析を行ってみましょう。L ( Δ x ) = F ( x ) + 2 E ( x ) TJ Δ x + 1 2 Δ x TJTJ Δ 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\ボールドシンボル {J}^T\ボールドシンボル{J}\デルタ\ボールドシンボル{x}L ( Δ x )=F ( × )+2E ( × ) _T JΔx+21Δx_ _T JT JΔxでは、次のスケーリング係数が考慮されます。

ρ = F ( x ) − F ( x + Δ x ) L ( 0 ) − F ( Δ x ) \rho = \frac{F(\boldsymbol{x}) - F(\boldsymbol{x} + \Delta\ボールドシンボル{x})}{L(\ボールドシンボル{0}) - F(\デルタ\ボールドシンボル{x})}r=L ( 0 )F ( Δ x )F ( × )F ( ×+Δ ×
マルカート氏は次のような戦略を提案しています。

  • ρ < 0 \rho < 0r<0は、現在のΔ x \Delta\boldsymbol{x}Δ xはF ( x ) F(\boldsymbol{x})になりますF ( x )が増加することは、最適値からはまだ遠いことを示しており、μ \muμ により、大規模な更新で​​は最急降下法に近づきます。
  • ρ > 0 \rho > 0の場合r>0で比較的大きく、現在のΔ x \Delta\boldsymbol{x}Δ xはF ( x ) F(\boldsymbol{x})になりますF ( x )が減少すると、μ \mu をμはガウス・ニュートン法に近づけ、速度を落として最適点に更新します。
  • ρ > 0 \rho > 0の場合r>0ですが比較的小さいので、最適点近くに到達したことを示し、減衰μ \muμ、反復ステップ サイズを小さくします

マルカート氏の具体的な戦略は次のとおりです。

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

Marquardt 戦略を使用した更新プロセスは次のとおりです。
ここに画像の説明を挿入します

効果があまり良くないことがわかります。反復回数が増加するにつれて、μ \muμが振動し始め、反復量が周期的に変化することを示しますF ( x ) F(\boldsymbol{x})F ( x )は増加し、その後減少します。

したがって、ニールセンは、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であることがわかります。μ は、収束に達するまで反復が進むにつれて比較的スムーズに減少し続けることができます。
ここに画像の説明を挿入します

8. 堅牢なカーネル機能

最小二乗問題を実行すると、観測残差が特に大きくなる異常な観測値がいくつか発生します。これらの異常な点が処理されないと、最適化プロセスに影響します。オプティマイザは異常な残差項を最小化しようとします。 , 状態推定の精度に影響を与えるため、これらの異常な観測の影響を軽減するために、堅牢なカーネル関数が使用されます。

ロバストなカーネル関数を各残差項に直接適用して、最小二乗問題を次の形式に変換します。

F ( x ) = ∑ i ρ ( ∣ ∣ ei ( x ) ∣ ∣ 2 ) F(\boldsymbol{x}) = \sum_i\rho(||e_i(\boldsymbol{x})||^2)F ( × )=ρ ( ∣∣ e私は( x ) 2 )
ロバスト カーネル関数を使用する場合の非線形最小二乗を解くプロセス
この形式では、ロバスト カーネル関数を使用して残差に対して 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^2sp ( s+Δs ) _=p ( x )+r' (x)Δs+21r (×)D」2 s
上式において、変化量Δ s \Delta sΔs は次のように計算されます

Δ sk = ∣ ∣ ei ( x + Δ x ) ∣ ∣ 2 − ∣ ∣ ei ( x ) ∣ ∣ 2 = ∣ ∣ ei ( x ) + J i Δ x ∣ ∣ 2 − ∣ ∣ ei ( x ) ∣ ∣ 2 = 2 ei ( x ) TJ i Δ x + Δ x TJ i TJ 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}Δs_ _=∣∣ e私は( ×+Δ x ) 2∣∣ e私は( x ) 2=∣∣ e私は( × )+J私はΔ × ∣∣ _2∣∣ e私は( x ) 2=2e _私は( × )T J私はΔx_ _+Δx_ _T JTJ私はΔ ×
Δ s \Delta sΔ s代入ρ ( s + Δ s ) \rho(s + \Delta s)p ( s+Δ s ) は次のように取得できます。

ρ ( s + Δ s ) = ρ ( s ) + ρ ’ ( s ) ( 2 ei ( x ) TJ i Δ x + Δ x TJ i TJ i Δ x ) + 1 2 ρ ’ ’ ( s ) ( 2 ei ( x ) TJ i Δ x + Δ x TJ i TJ i Δ x ) 2 ≈ ρ ( s ) + 2 ρ ' ( s ) ei ( x ) TJ i Δ x + ρ ' ( s ) Δ x TJ i TJ i Δ x + 2 ρ ′ ′ ( s ) Δ x TJ i T ei ( x ) ei ( x ) TJ 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\ボールドシンボル{x}+\デルタ\ボールドシンボル{x}^T\ボールドシンボル{J}_i^T\ボールドシンボル{J}_i\デルタ\ボールドシンボル{x})^2\\ \およそ& \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{整列}p ( s+Δs ) _=p ( s )+r' (s)(2e私は( × )T J私はΔx_ _+Δx_ _T JTJ私はΔ ×+21r'' (s)(2e私は( × )T J私はΔx_ _+Δx_ _T JTJ私はΔ ×2p ( s )+2P _' (s)e私は( × )T J私はΔx_ _+r' (s)ΔxT JTJ私はΔx_ _+2P _'' (s)ΔxT JTe私は( × ) e私は( × )T J私はΔ ×
前のアイデアに従って、上記の式の導関数を取得し、それを 0 にすると、次の結果が得られます。

∑ i J i T ( ρ ′ ( s ) + 2 ρ ′ ′ ( s ) ei ( x ) ei ( x ) T ) J Δ x = − ∑ i ρ ′ ( s ) J i T ei ( 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})JT( r( s )_+2P _'' (s)e私は( × ) e私は( × )T )JΔx=r( s )J_Te私は( x )
前の行列を比較JTJ Δ x = − J i T e ( x ) \boldsymbol{J}^T\boldsymbol{J}\Delta\boldsymbol{x} = -\boldsymbol{J}_i^T\boldsymbol {e}(\boldsymbol{x})JT JΔx=JTe ( x )を取得できます。ロバストなカーネル関数を使用した後は、各残差のカーネル関数の 1 次導関数と 2 次導関数を計算し、次の式に従って情報行列と情報ベクトルを更新するだけです。上記フォームで可能です。

一般的に使用される堅牢なカーネル関数
Cauchy の堅牢なカーネル関数:

ρ ( s ) = c 2 log ⁡ ( 1 + sc 2 ) ρ ' ( s ) = 1 1 + sc 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}p ( s )r( s )_r (s)=c2ログ_( 1+c2s=1+c2s1=c21( r' (s)_2
その中には、cccは制御パラメータです。残差が正規分布する場合、Huber c は 1.345 として選択され、Cauchy c は 2.3849 として選択されます。さまざまな堅牢なカーネル関数の効果を次の図に示します。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/fb_941219/article/details/132106286