MatcherNetと拡張カルマンフィルタ
1. 連続時間の非線形ダイナミクスモデルと離散時間化線形化
線形のダイナミクスモデルと観測モデルのペアを、線形状態空間モデルと呼ぶ。
線形の連続系ダイナミクス
$ \dot{x}=Ax
を考える。$ x\in\mathbb{R}^{M_X}は状態変数、$ A\in\mathbb{R}^{M_X\times M_X}はシステム行列である。
この連続系ダイナミクスは、十分に小さな時間幅 $ \Delta tを用いて以下のように離散化することができる。
$ x_{t+\Delta t} = Fx_t
ここで $ F = I+\Delta t A。ただし $ Iは $ M_X\times M_Xの単位行列。
また、非線形の連続系ダイナミクス
$ \dot{x}=f(x)
は、各時刻$ tにおける状態 $ x_tの周辺でヤコビ行列
$ A_t = \left. \frac{\partial f(x)}{\partial x}\right|_{x=x_t}
を求めて線形化することにより、
$ \dot{x}=f(x)\approx A_t f(x)
と書くことができる。これを十分に小さな時間幅を用いて離散時間化すると、
$ x_{t+\Delta t} = F_tx_t
と書くことができる。ここで $ F_t = I+\Delta t A_t。
連続系ダイナミクスにノイズを加えたモデルは、確率微分方程式 (stochastic differential equation; SDE)と呼ばれる。
$ \dot{x}=f(x)+dw
ここで $ dwはノイズに対応する確率過程であり、最も簡単には Wiener 過程を想定する。Wiener 過程は適当な時間幅で積分した結果がガウス分布になるような確率過程であるため、小さな時間幅を用いて離散化した結果を、以下のように書くことができる。
$ x_{t+\Delta t} = F_t x_t + z_t,
$ z_t\sim \mathcal{N}(0, \Delta t\Sigma_Z)
ここで $ z_tは各時間幅$ \Delta t毎に独立に積み重なるガウス分布であり、共分散行列は、定数行列$ \Sigma_Zに比例する。
2. 状態空間モデル
状態の(確率的な)時間発展を定義するダイナミクスモデルと、状態の(確率的な)観測値生成過程を定義する観測モデルのペアを、状態空間モデルと呼ぶ。拡張カルマンフィルタでは、状態空間モデルとして、(確率的な)非線形ダイナミクスモデル
$ \dot{x} = f(x) + dw
と、(確率的な)非線形観測モデル
$ y_t = g( x_t ) + w_t
のペアを考える。ここで、$ x_t\in\mathbb{R}^{M_X}, y_t\in\mathbb{R}^{M_Y}をそれぞれ状態変数、観測変数と呼ぶ。 $ f(.)はダイナミクスモデル、$ g(.)は観測モデルであり、それぞれ既知の微分可能な関数として与えられている。これら関数をパラメトリックなニューラルネットの形で表現し未知パラメタ推定問題を同時に解く場合もある(このページの第5章参照)。
十分に小さい時間ステップ $ \Delta t のもとで、上記の状態空間モデルは以下のように離散化かつ線形化される。
$ x_{t+\Delta t} = F_t x_t + z_t
$ y_{t} = C_t x_t + w_t
$ M_X, M_Yはそれぞれ状態変数、観測変数の次元である。 ここで、$ F_t = I+\Delta t A_t であり、
$ A_t = \left. \frac{\partial f(x)}{\partial x}\right|_{x=x_t}, C_t = \left. \frac{\partial g(x)}{\partial x}\right|_{x=x_t},
はそれぞれダイナミクス関数、観測関数に関するヤコビ行列である。
$ z_t\sim\mathcal{N}(0,\Sigma_z) および $ w_t\sim\mathcal{N}(0,\Sigma_w) はそれぞれシステムノイズ、観測ノイズであり、簡単のためガウス分布を想定している。
時間ステップ $ \Delta tの大きさは任意であり、必要な計算精度と計算コストとのバランスを勘案して、計算シミュレーションの途中でダイナミックに変更する場合を考える可能性がある点に注意しておく。
3. 拡張カルマンフィルタ
拡張カルマンフィルタは、微分可能な非線形状態空間モデルを各時刻で局所線形化し、カルマンフィルタとして解くアルゴリズムである。
カルマンフィルタは状態変数 $ x_tの事後確率 $ q_t = q(x_t) = q(x_t;\mu_t, \Sigma_t)をガウス分布の形で保持する。事後確率はガウス分布であるので、事後確率は平均と共分散に対応するパラメタ $ (\mu_t\in\mathbb{R}^{M_X}, \Sigma_t\in\mathbb{R}^{M_X\times M_X})で表される。観測 $ y_tを得る毎にパラメタ更新をしてゆく。拡張カルマンフィルタで想定している一般化モデルにおいて、正確な事後確率はガウス分布であるとは限らないが、事後確率をガウス分布とする近似を採用する。
拡張カルマンフィルタのパラメタ更新アルゴリズム (EKF algorithm)
1. 時刻$ tにおける観測 $ y_tと、1ステップ以前の時刻 $ t'= t-\Delta tにおける状態事後確率 $ q_{t'} = q(x_{t'}) = q(x_{t'};\mu_{t'}, \Sigma_{t'})が与えられているものとする
2. ダイナミクスの局所離散化・線形化を行う
$ A_{t'} = \left. \frac{\partial f(x)}{\partial x}\right|_{x=\mu_{t'}}
$ F_{t'} = \exp( \Delta t A_{t'} ) \approx I + \Delta t A_{t'}
3. 状態にダイナミクスを適用する
$ \bar{\mu}_{t} = F_{t'} \mu_{t'}
$ \bar{\Sigma}_{t'} = \Delta t \Sigma_X + F_{t'} \Sigma_{t'} F_{t'}^T
4. 観測モデルの局所線形化を行う
$ C_t = \left. \frac{\partial g(x)}{\partial x}\right|_{x=\bar{\mu}_{t}}
5. カルマンゲインと観測誤差を計算する
$ S = \Sigma_Y + C_t \bar{\Sigma}_t C_t^T
$ K = \bar{\Sigma}_t C_t^T S_t^{-1}
$ z_t = y_t - g(\bar{\mu}_t)
6. 観測誤差にカルマンゲインを適用する
$ \Delta \mu_t = K_t z_t
$ \Delta \Sigma_t = - K_t C_t \bar{\Sigma}_t
7. 状態を更新する
$ \mu_{t}=\bar{\mu}_{t}+\Delta\mu_t
$ \Sigma_{t} = \bar{\Sigma}_t + \Delta\Sigma_t
8. 1-7を観測毎に繰り返す
MatcherNet は、上記の拡張カルマンフィルタの計算過程を、bundle と matcher に分割することで、拡張カルマンフィルタと等価な更新過程を実現する。具体的には上記アルゴリズム の 1,2,3,7 を bundle で行い、4,5,6 をmatcherで行う。このさい、計算順が変わっていることに注意する。
dynamics bundle の更新
1. bundle ノードは、matcher ノードから更新ベクトル $ \Delta q = (\Delta \mu, \Delta \Sigma)を受け取る。これに基づいて固有の現状態 $ q=q(x)を更新する。(EKF algorithm の 7. に対応)
2. ダイナミクスの線形化を行う(EKF algorithm の 2. に対応)
3. 現状態にダイナミクスを適用する(EKF algorithm の 3. に対応)
4. 結果$ (\bar{\mu}_{t},\bar{\Sigma}_{t})を matcher から参照できるように用意しておく
observation bundle の更新
1. matcher ノードからの問い合わせに備えて、現観測値 $ y_t を用意しておく
matcher の更新
1. matcher ノードは、bundle ノードから状態$ (\bar{\mu}_{t},\bar{\Sigma}_{t}) を読み取り、観測に関する別の bundle ノードから観測 $ y_tを読み取る。
2. 観測モデルの線形化を行う(EKF algorithm の 4. に対応)
3. カルマンゲインと観測誤差を計算する(EKF algorithm の 5. に対応)
4. 観測誤差にカルマンゲインを適用する(EKF algorithm の 6. に対応)
5. 結果 $ \Delta q = (\Delta \mu, \Delta \Sigma)を bundle から参照できるように用意しておく
4. MatcherNet EKF
MatcherNet による拡張カルマンフィルタの取り扱いを以下のようにさらに拡張し、これを MatcherNet EKF と呼ぶ。
観測に対応する bundle (observation bundle)を複数持つ
ダイナミクスに対応する bundle (dynamics bundle) を複数持つ
matcher は observer と dynamics をつなぐことができるだけでなく、2つの dynamics bundle をつなぐことができるものとする
複数の observation bundle を $ O_1, O_2, ..., O_{K_O} と名付ける。 $ K_Oは observation bundle の個数である。典型的には $ O_iは $ i 番目のセンサー信号 $ y_{i,t}\in\mathbb{R}^{M_{Yi}}を意味するものとする。信号ベクトル$ y_{i,t} の次元 $ M_{Yi}はセンサー毎に異なっていてもよい。
複数の dynamics bundle を $ B_1, B_2, ..., B_{K_B}と名付ける。$ K_Bは dynamics bundle の個数である。典型的には $ B_iは $ i番目の状態ベクトル $ x_{i,t}\in\mathbb{R}^{M_{Xi}}のダイナミクス $ \dot{x}_i = f_i(x_i) + z_i を取り扱う。状態ベクトル $ x_{i,t}の次元 $ M_{Xi}はダイナミクス毎に異なっていてもよい。
MatcherNet EKF はこれらの bundle を matcher を介して任意に接続した構造を持つ。
2つの bundle $ B_1と$ B_2をつなぐ matcher を $ M_{12}と名付け、$ M_{12} の挙動を以下のアルゴリズムで定義する。
matcher $ M_{12} の更新
1. matcher ノードは、これと接続する 2つの dynamics bundle ノードから状態$ (\bar{\mu}_{1t},\bar{\Sigma}_{1t}), (\bar{\mu}_{2t},\bar{\Sigma}_{2t}) を読み取る
2. 観測誤差を計算する
$ z_t = g_1( \bar{\mu}_{1t} ) - g_2( \bar{\mu}_{2t} )
3. 観測モデルの線形化を行う
$ C_{1t} = \left. \frac{\partial g_1(x_1)}{\partial x_1}\right|_{x_1=\bar{\mu}_{1t}}, C_{2t} = \left. \frac{\partial g_2(x_2)}{\partial x_2}\right|_{x_2=\bar{\mu}_{2t}}
3. カルマンゲインを計算する
$ S = \Sigma_Y + C_{1t} \bar{\Sigma}_{1t} C_{1t}^T + C_{2t} \bar{\Sigma}_{2t} C_{2t}^T
$ K_1 = \bar{\Sigma}_{1t} C_{1t}^T S^{-1}
$ K_2 = \bar{\Sigma}_{2t} C_{2t}^T S^{-1}
4. 観測誤差にカルマンゲインを適用する
$ \Delta \mu_{1t} = -K_{1t} z_t, \Delta \Sigma_{1t} = - K_{1t} C_{1t} \bar{\Sigma}_{1t}
$ \Delta \mu_{2t} = K_{2t} z_t, \Delta \Sigma_{2t} = - K_{2t} C_{2t} \bar{\Sigma}_{2t}
$ \Delta\mu_{1t}と$ \Delta\mu_{2t}の符号が違うことに注意
5. 計算結果 $ \Delta q_1 = (\Delta \mu_1, \Delta \Sigma_1), \Delta q_2 = (\Delta \mu_2, \Delta \Sigma_2)をそれぞれに対応する bundle から参照できるメモリに格納する
上記の「 $ M_{12}更新アルゴリズム」は、2つのbundle のうち片方が observation bundle であった場合のアルゴリズム(3章参照)を特別な場合として含んでいる。例えば $ \bar{\mu}_{2t} = y_t, \bar{\Sigma}_{2t} = \sigma^2 I とする。ここで $ \sigma^2 \approx 0は十分に小さい正スカラー値定数、$ Iは単位行列である。このとき、「 $ M_{12}更新アルゴリズム」は3章の matcher 更新アルゴリズムと一致する。
次に MatcherNet EKF において、一般に dynamics bundle は任意個数の matcher と接続することができる。このことは 3章の dynamics bundle の更新アルゴリズムの第一行を以下のように変更することで実現する。
1. bundle ノード $ Bは、$ Bが接続するすべての matcher ノード $ i\in M_Bのそれぞれから更新ベクトル $ \Delta q_i = (\Delta \mu_i, \Delta \Sigma_i)を受け取る。これに基づいて固有の現状態 $ q=q(x)を以下のように更新する。
$ \mu_{t}=\bar{\mu}_{t}+\sum_{i\in M_B} \Delta\mu_{i}
$ \Sigma_{t} = \bar{\Sigma}_t + \sum_{i\in M_B} \Delta\Sigma_i
Observation bundle のバリエーション(観測精度と欠測)
Observation bundle の最低限の機能は観測$ y_t\in\mathbb{R}^{M_Y}を matcher に提供することである。しかし、observation bundle に対して、以下のような発展機能を与えることには意味がある。
観測ノイズ共分散 $ \Sigma_Y\in\mathbb{R}^{M_Y\times M_Y} を合わせたもの $ (y_t, \Sigma_Y)を matcher に提供する。各時刻$ tにおける観測精度が低いことがわかっている場合や、その極端な場合として欠測がある場合に、これに応じて大きな共分散を与える。するとmatcher における出力に対して観測$ y_tに対する予測誤差が与える影響の大きさ(重み付け)を変えることができる。
なお、このことはカルマンゲインの計算式を見ることでわかる。観測ノイズ$ \bar{\Sigma}_{1t} が状態変数事後確率の分散 $ \bar{\Sigma}_{2t}と比べて大きいとき、カルマンゲイン $ K_2が小さくなり、予測誤差 $ z_t に比例した状態変数の更新量 $ K_2 z_tが小さくなる。
$ S = \Sigma_Y + C_{1t} \bar{\Sigma}_{1t} C_{1t}^T + C_{2t} \bar{\Sigma}_{2t} C_{2t}^T
$ K_2 = \bar{\Sigma}_{2t} C_{2t}^T S^{-1}
5. モデルパラメタの更新
ダイナミクスモデル $ f(x)=f(x;\theta_f)および観測モデル $ g(x)=g(x;\theta_g) がそれぞれパラメタ $ \theta_f, \theta_g で支配されるパラメトリック関数である場合を考える。MatcherNet では matcher が $ g(x)を、 bundle が $ f(x)を保持・更新しているため、 パラメタの$ \theta_f, \theta_gの更新も、対応する bundle と matcher の更新時に行う。
パラメタ $ \theta_f, \theta_g の更新と事後確率 $ qの更新は、事後確率の汎関数として表現される自由エネルギー $ \mathcal{F}(q)の勾配を用いた勾配法で行われる。簡単のために自由エネルギーの代わりに予測誤差
$ \mathcal{E} = \frac{1}{2}||z_t||^2
の勾配を求める。パラメタの更新は、勾配法を用いて予測誤差を小さくする方向に向けておこなえばよい。
$ \theta_g \leftarrow \theta_g + \eta \frac{\partial \mathcal{E}}{\partial \theta_g}
$ \theta_f \leftarrow \theta_f + \eta \frac{\partial \mathcal{E}}{\partial \theta_f}
ここで $ \eta>0は適当な学習係数である。
次にこれらの勾配の数値計算は、
$ z_t = g(\mu_t)-y_t
$ \mu_t = \mu_{t-\Delta t} + \Delta t f(\mu_{t-\Delta t})
であることを利用して chain rule を用いると、
$ \frac{\partial \mathcal{E}}{\partial \theta_g}=z_t^T \frac{\partial g(\mu_t)}{\partial \theta_g},
$ \frac{\partial \mathcal{E}}{\partial \theta_f}=z_t^T \frac{\partial g(\mu_t)}{\partial \mu_t}\frac{\partial \mu_t}{\partial \theta_f} = z_t^T \frac{\partial g(\mu_t)}{\partial \mu_t} \frac{\partial f(\mu_{t-\Delta t})}{\partial \theta_f}\Delta t = \Delta t \Delta \mu_t^T \frac{\partial f(\mu_{t-\Delta t})}{\partial \theta_f}
のように計算可能である。
ここで $ \Delta \mu_t \in\mathbb{R}^{M_X}は matcher 更新アルゴリズムの最後に matcher から bundle に返される値である。ダイナミクスを表す関数$ f()の出力が同じく$ M_X次元縦ベクトルであるから、$ \Delta \mu_t^T f(\mu_{t-\Delta t})は内積でありスカラー値である。
bundle 更新は matcher から$ \Delta \mu_tを受け取って、bundle が持つ状態 $ \mu_tの更新のために使うと同時に、これをダイナミクス $ f(.;\theta_f)のパラメタ更新のためにも使うのである。
MatcherNetEKF における bundle および matcher の更新アルゴリズム(本ドキュメントの3章)に対して、以下の拡張を施すことによってパラメタ更新を行う。
bundle更新の第1ステップで $ \Delta\mu_tを得た直後に $ \Delta \mu_tを用いて $ \theta_f を更新する
matcher 更新アルゴリズムでは第3ステップで誤差を計算した直後に $ \theta_gを更新する
6. デモンストレーション
画像認識に基づく姿勢推定を含むデモンストレーションを行う。制御は行わない。
https://gyazo.com/bd6b49ae741924a7841f9cb859713e66
6-1. 画像認識に基づく 2次元平面上 N-link robot hand の姿勢推定と、精度評価
N-link robot hand として、2次元平面原点を中心とした多重振り子モデルを与える。
多重振り子の運動方程式の導出は以下がわかりやすい。
6-2. 複数ビューからの画像認識に基づいて姿勢推定を行うデモを行い、ビュー固有の精度変動に対するロバスト性を評価する
6-3. 画像入力を用いたMPC
6-4. 環境変動に対するロバスト性向上を示すデモを行う