Basic Calculus
SLAMのバックエンドは、その処理時間の大半を非線形コスト関数の最小化に費やしている。これを可能にするのが、微積分学の2つの道具である微分(ヤコビ行列)とテイラー展開(線形化)である。
微分とヤコビ行列
スカラー関数 f:Rn→R は勾配 ∇f=[∂x1∂f,…,∂xn∂f]T を持つ。ベクトル関数 f:Rn→Rm はヤコビ行列を持つ:
J=∂x∂f=∂x1∂f1⋮∂x1∂fm⋯⋱⋯∂xn∂f1⋮∂xn∂fm∈Rm×n
ヤコビ行列は、SLAMの最適化における中心的な道具である。残差 e(x)(例えば再投影誤差)が与えられたとき、そのヤコビ行列 J=∂x∂e は、状態に対する微小な摂動によって残差がどのように変化するかを示す — これはガウス・ニュートン法やレーベンバーグ・マーカート法がまさに必要としている情報である。
SLAM残差における連鎖律
SLAMの残差はほとんど常に単純な関数の合成であるため、そのヤコビ行列は連鎖律から導かれる。ポーズ T の下でピクセル z で観測されるマップ点 X の再投影誤差は
e=z−π(TX)
であり、これは(1)剛体変換、(2)透視除算、(3)内部パラメータによる写像の合成である。そのヤコビ行列は積に分解される:
∂x∂e=−∂Xc∂π⋅∂x∂Xc
ここで Xc=TX はカメラ座標系における点である。各因子を個別に導出して乗じる方が、全体の式を一度に微分するよりもはるかに誤りが少ない — そしてこれは、SLAMライブラリが解析的ヤコビ行列を構成する際に実際に行っている方法である。
テイラー展開
テイラー級数は、滑らかな関数 f を点 x0 の周りで展開する:
f(x)=f(x0)+f′(x0)(x−x0)+2!1f′′(x0)(x−x0)2+⋯
多変数関数 f(x) を x0 の周りで展開すると:
f(x)≈f(x0)+J(x0)(x−x0)+21(x−x0)TH(x0)(x−x0)
ここで J はヤコビ行列(1次)、H はヘッセ行列(2次)である。1次で打ち切るとガウス・ニュートン法で使われる線形近似になり、2次で打ち切るとニュートン法で使われる二次近似になる。
テイラー展開からガウス・ニュートン法へ
残差の二乗和 F(x)=21∥e(x)∥2 を最小化する問題を考える。現在の推定値の周りで残差を線形化し、e(x+Δx)≈e+JΔx を代入すると:
F(x+Δx)≈21∥e∥2+eTJΔx+21ΔxTJTJΔx
これは Δx に関する二次関数であり、その導関数をゼロと置くと正規方程式が得られる:
(JTJ)Δx=−JTe
したがってガウス・ニュートン法は「H≈JTJ としたニュートン法」である — 真のヘッセ行列の二次微分項が省略されるが、残差が小さい場合には良い近似となる。レーベンバーグ・マーカート法は減衰項を加え、(JTJ+λI)Δx=−JTe を解くことで、ガウス・ニュートン法(λ→0)と勾配降下法(λ が大きい)の間を補間する。
ヤコビ行列の数値的検証
解析的ヤコビ行列は、符号の誤りや転置ブロックの誤りなど、間違いを起こしやすいことで知られている。標準的な妥当性チェックは中心差分法である。状態の1次元ずつを摂動させ、次を比較する:
J:,k≈2he(x+h1k)−e(x−h1k)
微小なステップ(例えば h∼10−6)を用いる。まっとうなSLAMコードベースには、各残差タイプに対してこれを実行する単体テストが必ず存在する。
よくある落とし穴
- 符号の誤り: 残差を z−π(⋅) とするか π(⋅)−z とするかで J の符号が反転する。一貫性を保つこと。
- 回転を素朴に微分すること: 回転行列には制約があるため、微分は9個の行列成分に対してではなく、局所的な摂動に関して取る必要がある(Lie groupsを参照)。
- 正規化や歪み関数を通る連鎖律の因子を忘れること — 上記の数値チェックはこれを即座に検出する。
SLAMにおける意義
バンドル調整では、再投影誤差 e(x+Δx)≈e(x)+JΔx が現在の推定値の周りで線形化される。これにより、非線形最小二乗問題が線形システム (JTJ)Δx=−JTe の系列に変換され、反復的に解かれる。ポーズグラフ最適化からフルバンドル調整まで、最適化ベースのSLAMシステムはすべてこの「線形化・解・更新」というループの上に構築されている。したがって、ヤコビ行列を手で導出し(そして数値的に検証する)能力は、中核的なスキルである。
関連ノート