Atmosphere Engineering Lab.

モデルと現実の乖離を埋める — カルマンフィルタ・Multi-fidelity・Sim-to-Realを一望する

はじめに — 3つの技術が解いている、実は同じ問題

製造業において、シミュレーションはかなり広範に利用されているものの、実機との乖離は頭を悩ませる問題です。 このような予測と実測のギャップをいかに埋めるかという問題は、古くから様々な業界で取り組まれています。

例えば、人類初の有人月面着陸計画であるアポロ計画では、宇宙という広大で地図が存在しない空間において、宇宙船の現在位置を特定するために、 モデル予測とセンサ実測を融合させるカルマンフィルタという技術が利用されました。

その後も、このような予測と実測を融合させる技術は、様々な分野に拡張し、進化を続けてきました。 たとえば、CFDの分野だとMulti-Fidelityやデータ同化。 ロボット制御や自動運転の分野だと、強化学習のSim-to-Real転移。

この3つですが、全く異なる分野で発達してきた手法ではあるものの、抽象化すると同じ問題設定を解いています。

  • 安価だが偏りのあるモデル(運動方程式による予測、低忠実度CFD、シミュレータ上の方策)
  • 高コストだが信頼できる実データ(センサ観測、高忠実度CFDや風洞実験、実機のフライトデータ)

この2つをどう組み合わせれば、どちらか片方だけよりも良い推定が得られるか、という問題です。

diagram rendering…

今回は、この共通構造がもっとも純粋な形で現れるカルマンフィルタから出発し、CFDのMulti-fidelity、そしてドッグファイトAIの事例にもつながるSim-to-Realへと、対象がどんどん複雑になっていく順に辿っていきます。最後には、同じ発想がどこまで「厳密な最適融合」として書け、どこから先は近似に頼らざるを得なくなるのか、その境界線も見えてきます。

カルマンフィルタ — 予測と観測を重みづけて融合する

出発点 — 2つの推定値を1つにまとめる

まず最も単純な状況を考えます。同じ未知の量 xx について、2つの独立な推定が手に入っているとします。

  • モデルによる予測: x^N(x^,σpred2)\hat{x}^- \sim \mathcal{N}(\hat{x}^-, \sigma_{\text{pred}}^2)
  • 観測による推定: yN(x,σobs2)y \sim \mathcal{N}(x, \sigma_{\text{obs}}^2)

両方ともガウス分布に従うとすると、ベイズの定理により、これらを掛け合わせた事後分布もガウス分布になり、その平均は分散の逆数(精度)で重みづけた平均になります。

x^=σobs2x^+σpred2yσpred2+σobs2\hat{x} = \frac{\sigma_{\text{obs}}^2\, \hat{x}^- + \sigma_{\text{pred}}^2\, y}{\sigma_{\text{pred}}^2 + \sigma_{\text{obs}}^2}

これを整理すると

x^=x^+K(yx^),K=σpred2σpred2+σobs2\hat{x} = \hat{x}^- + K\,(y - \hat{x}^-), \qquad K = \frac{\sigma_{\text{pred}}^2}{\sigma_{\text{pred}}^2 + \sigma_{\text{obs}}^2}

という形に書けます。KK はカルマンゲインと呼ばれる重みで、予測の不確かさ σpred2\sigma_{\text{pred}}^2 が観測の不確かさ σobs2\sigma_{\text{obs}}^2 より大きいほど KK は1に近づき(観測を信じる)、逆にモデルの方が信頼できるなら KK は0に近づきます(予測を信じる)。この「不確かさの比で重みを決める」という発想が、これから見ていく3つの技術すべてに共通する核です。

時間発展する状態への拡張

実際のセンサフュージョンでは、xx は時刻とともに変化する状態ベクトル(位置・速度・姿勢など)です。カルマンフィルタは、上の考え方を「予測」と「更新」の2ステップに分けて時間方向に繰り返します。

予測ステップ(運動モデルによる時間発展)

x^k=Fx^k1,Pk=FPk1F+Q\hat{\mathbf{x}}_k^- = F \hat{\mathbf{x}}_{k-1}, \qquad P_k^- = F P_{k-1} F^\top + Q

更新ステップ(観測による補正)

Kk=PkH(HPkH+R)1K_k = P_k^- H^\top (H P_k^- H^\top + R)^{-1} x^k=x^k+Kk(ykHx^k),Pk=(IKkH)Pk\hat{\mathbf{x}}_k = \hat{\mathbf{x}}_k^- + K_k\,(\mathbf{y}_k - H \hat{\mathbf{x}}_k^-), \qquad P_k = (I - K_k H) P_k^-

FF は運動モデル(ドッグファイトAIの事例で言えば6自由度の運動方程式に相当)、HH はセンサが状態のどの成分を観測するかを表す行列、QQ はモデルの不確かさ(プロセスノイズ)、RR はセンサの不確かさ(観測ノイズ)です。PP が状態推定の共分散(=どれだけ自信があるか)で、これがステップごとに QQ で膨らみ(予測は時間が経つほど不確かになる)、観測で縮む(観測のたびに自信を取り戻す)という挙動を繰り返します。IMUの角速度・加速度から姿勢を予測しつつ、GPSやピトー管の観測で定期的に補正する、といったセンサフュージョンはまさにこの構図です。

QとRの較正とロバスト化 — ここにも同じループがある

QQ(プロセスノイズ)と RR(観測ノイズ)は、理論から一意に決まる値ではありません。実運用では、次のようなループを回しながら決めていきます。

  1. 較正: センサのノイズ特性やモデルの誤差要因を分析し、Q,RQ, R を見積もる。運用データから最尤推定するAutocovariance Least-Squares(ALS)のような手法もあります
  2. ロバスト化: 見積もった QQ を、なお残る不確かさに備えてやや大きめに設定する(process noise inflation)。モデルを過信しすぎないための保険です
  3. 監視: フィルタを運用しながら、イノベーション(観測とモデル予測の残差)が想定した共分散と統計的に整合しているかを継続的にチェックする(正規化イノベーション二乗統計量によるカイ二乗検定など)
  4. 分岐: 整合していれば運用を継続。整合しなくなってきたら Q,RQ, R を再推定して1に戻るか、線形モデルでは表現しきれない誤差の発生源を状態に組み込んで拡張するか、非線形性が無視できないなら拡張カルマンフィルタ(EKF)や無香料カルマンフィルタ(UKF)に切り替える

「較正して、余裕を持たせて、監視して、ズレたらやり直す」というこのループは、このあと見るMulti-fidelityやSim-to-Realにもそのまま現れます。

線形なモデル・観測とガウスノイズという前提の範囲では、この融合は「理論的に最適」であることが証明されています。次のMulti-fidelityとSim-to-Realは、この前提がどう崩れていくかの物語でもあります。

Multi-fidelity — 静的な関数のフィデリティ融合(CFD)

低忠実度モデルを、少数の高忠実度データで補正する

CFDの形状最適化では、粗いメッシュや簡易な乱流モデルを使った低忠実度解析 fL(x)f_L(x) は安く大量に回せますが、系統的なバイアスを含みます。一方、詳細メッシュのCFDや風洞実験による高忠実度データ fH(x)f_H(x) は正確ですが、数十点評価するのがやっとです。CAEへの向き合い方で触れた「RANSが定常渦近似という大胆な仮定の上に成り立っている」という話も、まさにこの fLf_L が抱える系統的バイアスの一例です。

Multi-fidelity最適化では、この2つを次のような自己回帰モデルで結びつけます(Kennedy–O'Haganモデル)。

fH(x)=ρfL(x)+δ(x),δ(x)GP(0, kδ(x,x))f_H(x) = \rho\, f_L(x) + \delta(x), \qquad \delta(x) \sim \mathcal{GP}\bigl(0,\ k_\delta(x, x')\bigr)

ρ\rho は低忠実度と高忠実度のスケールを合わせる係数、δ(x)\delta(x) は両者の残差(バイアス)を表す、それ自体もガウス過程としてモデル化される補正項です。

ベイズ最適化を理解するで見たガウス過程回帰と同じ機械 — 平均 μ(x)\mu(x) と分散 σ2(x)\sigma^2(x) を返す仕組み — をここでも使います。まず fLf_L に大量の低忠実度データをフィットし、探索空間全体の予測平均・予測分散を得ます。次に、少数の高忠実度点において ρfL(x)\rho f_L(x) からの残差を δ(x)\delta(x) としてフィットし、この2段のガウス過程を合成した予測分布を最終的な fH(x)f_H(x) の推定として使います。

カルマンフィルタとの対応

この構図をカルマンフィルタの言葉に置き換えると、次のように対応します。

カルマンフィルタMulti-fidelity
予測 x^\hat{x}^-(運動モデル)低忠実度モデル fL(x)f_L(x)
観測 yy(センサ)高忠実度データ fH(x)f_H(x) の実測点
イノベーション yHx^y - H\hat{x}^-残差 δ(x)\delta(x)
カルマンゲイン KKρ\rhoδ\delta の事後分散による重みづけ
共分散 P,Q,RP, Q, Rガウス過程の予測分散 σ2(x)\sigma^2(x)

違いは、カルマンフィルタが時々刻々変化する状態ベクトルを扱うのに対し、Multi-fidelityは時間に依存しない設計空間全体の関数を扱う点です。それでも「安価なモデルの不確かさ」と「高コストなデータの不確かさ」をガウス分布の重みとして融合する、という骨格は変わりません。ガウス過程という枠組みで閉じている限り、この融合もやはり解析的に(=閉形式で)書き下せます。

次にどの点を測るか — 較正とロバスト化のループ

Multi-fidelityも一度モデルを作って終わりではなく、カルマンフィルタと同じループを回しながら高忠実度データを追加していきます。

  1. 較正: 手持ちの高忠実度点で ρ\rhoδ(x)\delta(x) のカーネルハイパーパラメータを最尤推定し、低忠実度モデルとのズレを較正する
  2. ロバスト化: δ(x)\delta(x) の事前分散を、まだ検証されていない領域では保守的に(大きめに)見積もる。fLf_L を過信して外挿しすぎないための保険で、カルマンフィルタのプロセスノイズ膨張と同じ発想です
  3. 監視: ベイズ最適化を理解するで見た獲得関数と同じ発想で、δ(x)\delta(x) の予測分散が最も大きい(=低忠実度モデルとのズレが一番読めていない)点を次の高忠実度評価点として選び、実際に評価する
  4. 分岐: 予測とのズレが想定通りなら較正は妥当と判断して運用を続ける。ズレが大きければ1に戻って再較正する。データを増やしても δ(x)\delta(x) がある領域で構造的に大きいまま縮まらないなら、co-krigingでの補正では限界と判断し、低忠実度モデル fLf_L 自体を見直す(乱流モデルの変更、メッシュ解像度の引き上げなど)のが最終手段です

この「較正 → ロバスト化 → 監視 → ズレたら較正に戻る、それでも埋まらなければモデル自体を見直す」という流れは、次に見るSim-to-Realでも同じ形で現れます。

Sim-to-Real — 方策のフィデリティ融合(強化学習)

シムは「安価だが偏ったモデル」そのもの

運動シミュレーションと強化学習を組み合わせるで紹介した6自由度飛行シミュレータは、安定微係数モデルで空力を近似し、無限に高速で試行錯誤できる環境でした。これはまさに「安価だが偏ったモデル」で、実機とは空力係数の誤差、モデル化されていない乱気流や突風、センサ遅延・ノイズ、機体ごとの個体差といった形で乖離を抱えています。対して実機のフライトデータは、正確ではあるものの、飛行試験の回数が限られる高コストな実データです。この記事で扱った学習は自己対戦のみで完結しており、実機データによる補正は行っていません。ここでは、もしそれをやるならどんな選択肢があるかを、カルマンフィルタ・Multi-fidelityと同じ枠組みで整理します。

較正とロバスト化のループ

Sim-to-Realも、カルマンフィルタの Q,RQ, R 較正、Multi-fidelityの ρ\rho・カーネル較正と同じ「較正 → ロバスト化 → 検証 → ズレたら較正に戻る」というループの上に成り立っています。

diagram rendering…
  1. ①ベースラインのシム構築: 6自由度運動方程式・安定微係数モデルなど、物理ベースのシムを作る
  2. ②System identification(較正): 地上試験や限定的な飛行試験など、少量の実機データからシムのパラメータ(質量特性・空力係数・アクチュエータ遅延・センサノイズ)を実機に近づける。カルマンフィルタの Q,RQ, R 較正、Multi-fidelityの ρ\rho 較正と同じ操作です
  3. ③Domain randomization(ロバスト化): ②で較正してもなお残る誤差の範囲で、シムパラメータをランダム化しながら方策を学習する。カルマンフィルタのprocess noise inflation、Multi-fidelityの δ(x)\delta(x) の事前分散の保守化と同じ、「モデルを過信しない」ための操作です
  4. ④実機へのzero-shot展開: 学習済み方策をそのまま実機に載せてテストする。安全パイロットの同乗や飛行エンベロープの限定など、リスクを絞った状態で行う
  5. ⑤Reality gapの評価: 実機とシムの挙動差を測る。カルマンフィルタのイノベーション整合性検定、Multi-fidelityの新規高忠実度点での予測誤差評価に相当します
  6. 分岐: 差が許容範囲内なら運用。まだシム側の較正で縮められる余地があるなら②に戻ってやり直す(安全でコストの低い反復)。②③のループを何度回しても埋まらない残差だけ、最後の手段として少量の実機ロールアウトで方策を直接fine-tuning、または軽量な補正層(residual policy)を追加学習する

fine-tuningが主役ではなく「②③のループでは埋めきれない残差に対する最後の一手」という位置づけなのは、実機ロールアウトがコストも高くリスクも伴う一方、②③はシム内で完結する安全な反復だからです。

なぜここで「閉形式」が崩れるのか

カルマンフィルタもMulti-fidelityも、ループを回して較正をやり直す点はSim-to-Realと同じです。それでも、ループの中身自体は閉形式でした。Q,RQ, R の再推定は最小二乗、ρ\rho とカーネルハイパーパラメータの再推定は最尤推定と、いずれも解析的または凸最適化に近い形で解けます。

一方、強化学習の方策はニューラルネットワークのパラメータという高次元・非線形な空間に存在し、状態も方策も明示的な確率分布を持ちません。②のSystem identification自体は古典的な推定なので閉形式に近いものの、③のDomain randomizationによる方策学習も、⑥のfine-tuningも、非凸な目的関数を勾配法で近似的に解くほかありません。「同じループ構造を持ちながら、ループの中身が閉形式では書けない」というのが、Sim-to-Realをカルマンフィルタ・Multi-fidelityと並べたときに見えてくる違いです。

まとめ — 3つを並べてみる

カルマンフィルタMulti-fidelity(CFD)Sim-to-Real(RL)
対象時間発展する状態ベクトル設計空間上の静的な関数方策(ニューラルネット)
安価なモデル運動モデルによる予測 x^\hat{x}^-低忠実度CFD fL(x)f_L(x)シム上で学習した方策
高コストな実データセンサ観測 yy高忠実度CFD・風洞実験 fH(x)f_H(x)実機フライトデータ
融合の仕組みカルマンゲイン KKρfL(x)+δ(x)\rho f_L(x) + \delta(x)Domain randomization + 実機fine-tuning
較正(System identification相当)Q,RQ, R の推定(ALSなど)ρ\rho・カーネルハイパーパラメータの最尤推定シムパラメータの実機データによる較正
ロバスト化Process noise inflationδ(x)\delta(x) の事前分散の保守化Domain randomization
ループが崩れた・埋まらない時の最終手段モデル拡張(バイアス状態の追加、EKF/UKF化)低忠実度モデル fLf_L 自体の改善実機fine-tuning
不確かさの表現共分散行列 P,Q,RP, Q, Rガウス過程の予測分散 σ2(x)\sigma^2(x)明示的な分布を持たない
ループの中身は閉形式か閉形式(線形ガウスなら理論上最適)閉形式(ガウス過程の範囲で厳密)閉形式なし(勾配法による近似)

上から下に向かって、対象は「ベクトル → 関数 → ネットワークのパラメータ空間」と複雑になり、それに伴って融合の仕組みは「厳密な最適解」から「経験的に効く近似」へと後退していきます。それでも、「較正 → ロバスト化 → 検証 → ズレたら較正に戻る」というループ構造そのものは3つとも変わりません。変わるのは、そのループの中身が閉形式で書けるかどうかだけです。

おわりに

この記事は表を作って終わりにしましたが、本来面白いのはここからです。ドッグファイトAIのシムに対して実機データのようなものをどう用意し、system identificationやfine-tuningをどこまで効かせられるか、あるいはCFDのMulti-fidelityで培われたバイアス補正の発想をSim-to-Realに逆輸入できないか、といった問いはまだ手つかずのままです。CAEへの向き合い方で書いた「CAEも実験も、どちらも設計判断のための情報源」という感覚は、実はカルマンフィルタからSim-to-Realまで一貫して流れている態度なのだと、今回整理してみて改めて感じました。