articles:gauss_newton

文書の過去の版を表示しています。


ガウス・ニュートン法

非線形多変数関数$\boldsymbol{f}(\boldsymbol{x})$の最小二乗解を求める.

すなわち $$ \boldsymbol{x} = \underset{\boldsymbol{x}}{\operatorname{argmin}} \|\boldsymbol{f}(\boldsymbol{x})\| $$ となる$\boldsymbol{x}$を求める.

ガウス・ニュートン法は, $\boldsymbol{f}(\boldsymbol{x}) = \boldsymbol{0}$となる$\boldsymbol{x}$を求める ニュートン・ラフソン法の拡張になっている.

手順は以下の通り.

(1) まず$\boldsymbol{f}(\boldsymbol{x}_0)$が十分に小さい$\boldsymbol{x}_0$を初期解として選ぶ.

(2) 近似的に $$ \boldsymbol{f}(\boldsymbol{x}) = \boldsymbol{f}(\boldsymbol{x}_i) + J(\boldsymbol{x}-\boldsymbol{x}_i) = \boldsymbol{0} \tag{1} $$ として,これを解いて $$ \boldsymbol{x}_{i+1} = \boldsymbol{x}_i - J^+\boldsymbol{f}(\boldsymbol{x}_i) \tag{2} $$ とする.

ここで$J$はヤコビ行列であり,$J^{+}$はその擬似逆行列.

(3) $\boldsymbol{x}$や$\boldsymbol{f}(\boldsymbol{x})$の変化が十分に小さく収束していると判断されれば終了. $\boldsymbol{x}_{i+1}$を解とする.

そうでなければ$\boldsymbol{x}_{i+1}$を新たな初期解として(2)を繰り返す.

$\boldsymbol{f}$の次元を$m$,$\boldsymbol{x}$の次元を$n$,$J$のランクを$r$としたとき, ニュートン・ラフソン法では,$J$の逆行列$J^{-1}$が存在する, つまり$J$が正則であり,$m=n=r$でなくてはならなかった.

一方,ガウス・ニュートン法では$J$の擬似逆行列$J^{+}$を用いているのでその制約がない 1)

ガウス・ニュートン法は多数の計測値からシステムの未知パラメタを推定する問題にがよく用いられる.

たとえば一回の計測で$v_i$ が得られたとする.それを未知パラメタ$\boldsymbol{x}$を含む 関数で以下のように表現できるとする.ここで$\boldsymbol{u}_i$は既知のパラメタである 2). $$ v_i = g_i(\boldsymbol{u_i} ,\, \boldsymbol{x}) $$ これを $$ f_i(\boldsymbol{x})=g_i(\boldsymbol{u_i} ,\, \boldsymbol{x}) - v_i = 0 $$ として,$m$回の計測を連立させてガウス・ニュートン法を適用することで $\boldsymbol{v}$に最小二乗フィッティングしたパラメタ$\boldsymbol{x}$が得られる.

このような問題の場合は$m>n=r$となることが多い.

ロボットアームの逆運動学を求める場合には, 位置や姿勢への拘束条件$m$,関節の自由度$n$として,

  • 拘束条件と関節自由度が一致している場合は,$m=n\ge r$
  • 条件が過剰な場合は,$m>n\ge r$
  • 自由度が過剰(冗長自由度)の場合は,$n>m\ge r$

となっている.$r$の不等号部分は特異姿勢などによるヤコビ行列のランク落ちの場合である.

ガウス・ニュートン法を用いることで上記のいずれの場合にも望ましい解を得ることができる 3)

解の収束性に関してはニュートン・ラフソン法で述べた注意点が同様に当てはまる.

この収束性を改善した手法としては Levenberg-Marquardt法が有名である.

ガウス・ニュートン法で得られた解が最小二乗解になっていることは式(1)を式(2)のように疑似逆行列を用いて解いていることに依存している.

線形代数では $\boldsymbol{b}$を$m$次元ベクトル,$\boldsymbol{x}$を$n$次元ベクトル,$A$を$m \times n$の行列,$m \ge n$とする 線形連立方程式 $$ \boldsymbol{b} = A\boldsymbol{x} \tag{3} $$ が与えられたとき,これを $$ \boldsymbol{x} = A^+ \boldsymbol{b} \tag{4} $$ と擬似逆行列を用いて解くと,この$\boldsymbol{x}$が $$ \| \boldsymbol{b} - A\boldsymbol{x} \| \tag{5} $$ を最小化することはよく知られている 4)

すなわち式(2)の$\boldsymbol{x}_{i+1}$が $$ \| \boldsymbol{f}(\boldsymbol{x}_{i+1}) \| = \| \boldsymbol{f}(\boldsymbol{x}_i) + J(\boldsymbol{x}_{i+1} - \boldsymbol{x}_i) \| $$ を局所的に最小化しているので,それが収束したものも局所的に最小になっている.

ガウス・ニュートン法に限らず,線形連立方程式を擬似逆行列を用いて解くことで式(5)の残差を最小化するが, $\boldsymbol{b}$の成分を平等に扱って良いのだろうか.

たとえばある成分はもともと誤差が多いことがわかっていて信頼性にかけることがあるかもしれない. そういう場合は各要素を誤差の標準偏差で正規化してやる必要がある.

またロボットなどで座標系の誤差を位置の差(距離)と姿勢の差(角度)で表した場合のように, もともと単位系が異なるもの同士を結合して最小化する場合にはその調整を行う必要がある.

さらに場合によっては,ある成分を他の成分よりより正確に調整する必要がある, 逆にある成分の影響をできるだけ小さく場合によっては無視したいといった要求に応じる必要がある.

このような場合,$\boldsymbol{b}$の成分ごとに重み付けする必要がある.

これは式(3)の線形連立方程式の$\boldsymbol{b}$の各成分に対応する式に重みを乗じることで実現できる. すなわち, $$ D\boldsymbol{b} = DA\boldsymbol{x} $$ ここで $$ D=\operatorname{diag}(d_1,d_2,\cdots,d_m) $$ である.重み$d_i$が大きいほど$b_i$の残差を小さくできる. 逆に重みを$0$にしてしまえばその要素はないものとして扱われることになる.

これを改めて $$ \boldsymbol{x} = (DA)^+D\boldsymbol{b} $$ と解くことで $$ \| D\boldsymbol{b} - DA\boldsymbol{x} \| $$ を最小化することができる.


1)
$m=n=r$の場合は$J^{-1}=J^+$となる.
2)
多項式フィッティングの場合は,$y_i=f(\boldsymbol{x}_i ,\, \boldsymbol{a})$で, 未知パラメタは$x$の多項式の係数$\boldsymbol{a}$になる.
ただ,その場合$\boldsymbol{a}$に関して線形方程式になるのでヤコビ行列や繰り返しなしで解けてしまう.
3)
$J$の逆行列を求めるときに$J^+=(J^TJ)^{-1}J^T$とするのではなく特異値分解を 利用して正しく求めなくてはいけない.
4)
これについては特異値分解の項目でもう少し詳しく説明する.
  • articles/gauss_newton.1626918750.txt.gz
  • 最終更新: 2021/07/22 10:52
  • by Takashi Suehiro