Theseus

Pineda (Meta) 2022 · 論文

一行要約 — 微分可能な非線形最小二乗(DNLS)のための応用領域を問わないオープンソースPyTorchライブラリであり、バンドル調整のような幾何的最適化ループの内部でニューラルネットワークを学習させるための再利用可能な基盤インフラを提供する。

問題

2022年までに、いくつかの画期的なシステム(BA-Net、DROID-SLAM、gradSLAM)が、非線形最小二乗ソルバーをネットワークの内部に置き、それを通して学習することの威力を示していたが、各実装は1つのシステムのために独自に作られたものだった。論文が述べる通り、既存のDNLS実装は「応用に特化しており、効率にとって重要な多くの要素を必ずしも取り込んでいない」:疎ソルバー、バッチ処理、ベクトル化、GPUサポート、メモリ効率の良い勾配計算はプロジェクトごとに再発明されたり(あるいは省略されたり)しており、先行するDNLS研究は勾配計算のためにアンローリングしか対応していなかった。一方、成熟した古典的ソルバー(Ceres、g2o、GTSAM)は効率化の仕組みは持つが、求解を通して逆伝播する手段がなかった。Theseusはこの隙間を一度に埋め、「ロボティクスとビジョンにおけるエンドツーエンドの構造化学習」のための共有基盤となる。

手法とアーキテクチャ

双レベル最適化としてのDNLS。 内側の問題は、多様体値の変数θ={θj}\theta = \{\theta_j\}(ユークリッドベクトルまたはリー群)に関する非線形最小二乗であり、残差は重みとコストに因数分解される、ri(θi)=wici(θi)r_i(\theta^i) = w_i c_i(\theta^i)

θ=arg minθS(θ),S(θ)=12iwici(θi)2.\theta^{\star} = \operatorname*{arg\,min}_{\theta} S(\theta), \qquad S(\theta) = \frac{1}{2}\sum_i \|w_i c_i(\theta^i)\|^2 .

これは反復的な線形化によって解かれる:Ji=ri/θiJ_i = \partial r_i / \partial\theta^iとして(iJiJi)δθ=iJiri\big(\textstyle\sum_i J_i^{\top}J_i\big)\,\delta\theta = \textstyle\sum_i J_i^{\top} r_iを解き、その後リトラクションθθδθ\theta \leftarrow \theta - \delta\thetaを行う(ガウス・ニュートン法;適応的減衰を持つLMおよびDoglegも提供される)。上流のネットワークパラメータϕ\phiはコスト、重み、初期化のいずれにも入り得るため、次の双レベル設定が得られる。

内側:    θ(ϕ)=arg minθS(θ;ϕ),外側:    ϕ=arg minϕL(θ(ϕ)),\text{内側:}\;\; \theta^{\star}(\phi) = \operatorname*{arg\,min}_{\theta} S(\theta;\phi), \qquad \text{外側:}\;\; \phi^{\star} = \operatorname*{arg\,min}_{\phi} L(\theta^{\star}(\phi)),

ここで外側のループは、ソルバーを通じたθ/ϕ\partial\theta^{\star}/\partial\phiを用いる通常の勾配降下である。

API(ファクターグラフ形式)。 Variable(最適化対象または補助テンソル)、CostFunctioncic_i;解析的ヤコビアンを備えたライブラリ提供のもの — ガウス計測、再投影、相対姿勢、動作モデル、衝突など — またはインプレースのAutoDiffCostFunction)、CostWeightwiw_i、ロバスト損失を含む)、ObjectiveSS)、Optimizer、そしてTheseusLayer。そのforwardは入力テンソルを、任意のPyTorchグラフ内で最適な変数値に写す。微分可能なリー群は、指数写像・対数写像・逆元・合成を解析的接空間導関数付きの閉形式で計算し、さらに自動微分の勾配が接空間に正しく写るような射影演算子を備える(LieTorchの演算ごとのカスタムカーネルとは対照的)。微分可能な順運動学はDifferentiable Robot Modelをラップする。

効率化の仕組み。 (i) 2レベルの並列性 — DNLS問題のネイティブなバッチ処理と、同種のコスト演算の自動ベクトル化(SIMD風)。(ii) PyTorchの密なコレスキー分解を置き換える、エンドツーエンドで微分可能な線形ソルバー:CHOLMOD(CPU)、cudaLU(GPU上のcuSolverRFベースのバッチLU)、そしてBaSpaCho — GPU対応の新規オープンソースなバッチ超節点疎コレスキー分解であり、その疎な消去によって外部のシューア補元トリックが不要になる。線形求解y=A1by = A^{-1}bの逆伝播は陰関数微分を用い、f/b=A1f/y\partial f/\partial b = A^{-1}\,\partial f/\partial yおよびf/A=A1(f/y)y\partial f/\partial A = -A^{-1}(\partial f/\partial y)\,y^{\top}であり、キャッシュされた因数分解によって逆伝播が順伝播より高速になる。

4つの逆伝播モード。 アンローリング(ソルバーの反復を通した逆伝播 — 計算量・メモリが反復数に対して線形に増加し、勾配消失のリスクがある);打ち切り微分(TBPTT、バイアスあり);陰関数微分 — 最適性条件g(θ;ϕ):=θS(θ;ϕ)=0g(\theta;\phi) := \nabla_{\theta} S(\theta;\phi) = 0に陰関数定理を適用したもの:

Dϕθ(ϕˉ)=Dθ1g(θ(ϕˉ);ϕˉ)Dϕg(θ(ϕˉ);ϕˉ),\mathrm{D}_{\phi}\theta^{\star}(\bar{\phi}) = -\mathrm{D}_{\theta}^{-1} g\big(\theta^{\star}(\bar{\phi});\bar{\phi}\big)\, \mathrm{D}_{\phi} g\big(\theta^{\star}(\bar{\phi});\bar{\phi}\big),

実際には、解において単一のニュートンステップh(θ;ϕ)=θ[θ2S]stop1θSh(\theta;\phi) = \theta - [\nabla^2_{\theta}S]^{-1}_{\text{stop}}\nabla_{\theta}Sを微分することで計算される;そして直接損失最小化(DLM)は、損失を付加した内側求解を用いる有限差分ベクトル-ヤコビアン積方式である。陰関数微分とDLMのコストは反復数に依存しない。

同一のコンポーネントから構築される応用例: ポーズグラフ最適化(Welschロバストカーネルの半径を学習)、タクタイル状態推定(タクタイル画像から相対姿勢へのネットワークをエンドツーエンドで学習)、バンドル調整(外れ値ソフトカーネルの半径を学習)、動作計画(学習された初期化モデルを持つ微分可能なGPMP2)、特徴量ベースのホモグラフィ推定(ロバストなアライメント特徴のためのCNNを学習)。

実験結果

SLAMにおける意義

古典的なSLAMバックエンド(g2o、Ceres、GTSAM)は高度に最適化されているが微分可能ではなく、一方で深層ネットワークは微分可能だがSLAMを扱いやすくする疎構造を捨ててしまう。Theseusはこの2つを橋渡しする:ファクターグラフ風の最適化をPyTorchに持ち込み、学習済みフロントエンドと最適化バックエンドを持つハイブリッドシステムを、真の課題損失に対してエンドツーエンドで学習できるようにする。BA-NetとDROID-SLAMが先駆けたパターンを共有基盤へと一般化しており、VIO/SLAM推定器の残差重み、ロバストカーネル、初期化ネットワークを手動で調整する代わりに学習させるための自然なツールである。

関連ノート