# IBISML2023 10/29(Sun.)
# 物理シミュレーションのための機械学習入門
## 定義
- 物理シミュレーションとは、計算機上で物理現象を再現すること
- 微分方程式とは、「未知の関数$u$とその導関数を含む等式」
- 未知の関数$u$は「状態」を表す
- 独立変数が1つの場合ODE, 2つ以上の場合PDE
- 常微分方程式(ODE)
- $\dot{u} = f(t,u)$と表現される。ただし$f$はダイナミクスを表す関数
- 方程式の解は$u(t)$
- 時間モデル
- 偏微分方程式(PDE)
- $\dot{u} = F(t,x,u,\partial_x u, \partial_{xx} u...)$
- 方程式の解は$u(t,x)$
- 時空間モデル
## 微分方程式に関する問題
- 順問題 方程式$f$や$F$, 及び初期条件/境界条件から解$u$を求める
- 解析解が求まるのはごく一部の例のみなので、微分方程式を十分細かいメッシュに離散化して数値的に解く
- 逆問題(の1つ)
- 解$u$の観測、及び初期条件/境界条件から方程式$f$や$F$を求める
- つまり方程式に含まれる物理パラメータを推定する(機械学習的?)
- 順問題は結局解く
- 順問題を解いた結果$\hat{u}$と観測値$u$が一致するようにパラメータを調整
アプリケーション
ユーザが指定した初期/境界条件に対して順問題を解く
### 機械学習と物理学の融合
**従来のアプローチ**
現象
→実験・観測を通してデータ/知識を得る
→理論的検討・設計で方程式を立てる
→数値シミュレーションから解を得る
- 理論的検討・設計で方程式を立てるプロセス
😭専門知識が必要でコストが膨大
😭複雑な現象のモデル化は限界あり
- 数値シミュレーションから解を得るプロセス
😭シミュレーションコストは膨大
😭メッシュの作成が経験による
**深層学習によって従来のプロセスを代替する**
1. ダイナミクスを推定(理論的検討・設計で方程式を立てるプロセスを代替)
2. 方程式の解を推定(数値シミュレーションから解を得るプロセスを代替)
3. 解作用素を推定(両方)
**機械学習と物理学の融合**
物理学の知識を深層学習のための帰納バイアスとして活用する
Physics-informed machine learning[karniadais'21]
* ソフト制約の場合は損失関数に導入する
* ハード制約の場合はモデルクラスを絞り込む("Baked Approach")
## 1. ダイナミクスの推定
- 方程式が未知の物理現象をデータから学習できる
- ダイナミクスを表すベクトル場をモデル化する
**BreakThrough: Neural ODE[Chen+'18']**
* ベクトル場をニューラルネットによりモデル化し、観測データに合うようにパラメータを最適化
* ResNetを連続化したもの
* ODEの方程式をFFNでモデリングする潮流を生み出す
**誤差逆伝播法に基づく方法(小規模)**
とりあえず$f_\theta(u)$で$u_t$を予想して観測値$u'_t$との誤差を測る
オイラー法を適用すると計算グラフが巨大になってしまう(100次元で時間発展が長くない場合はこちらでも実行可能)
**随伴変数法に基づく方法(中規模以上)**
随伴変数を導入して、後ろ向きの積分をする
* 計算グラフを保持する必要がなく省メモリ
* ODEを2回解くので誤差が大きい
ノイズが大きい場合やデータが少ない場合、単純にNeural ODEを使ってもあまり精度は出ない
**ハミルトン力学**
- ニュートン力学は力の釣り合いをもとに考える
- ハミルトン力学はエネルギーを出発点に再定式化した解析力学の一形式
- 一般化座標$q$と一般化運動量$p$で決まるハミルトニアン$H:\mathbb{R}^{2n}\rightarrow\mathbb{R}^{n}$が与えられ、ハミルトンの運動方程式を通してダイナミクスを導出する
- ハミルトンの運動方程式
- $\dot{q}=\frac{\partial H}{\partial p}$
- $\dot{p}=-\frac{\partial H}{\partial q}$
- ハミルトンの運動方程式に従うダイナミクスはエネルギーを保存する
**HNN(Hamiltonian Neural Network)**
* ODEソルバを用いてHNNを学習する
* Neural ODEの学習法(誤差逆伝播法/随伴変数法)が使える。例えば
* ルンゲクッタ法
* シンプレクティック数値積分法
* シンプレクティック随伴変数方
* 離散力学に基づく方法
**拡張**
- 摩擦や外力を伴う場合への拡張
- ポートハミルトン系
- ハミルトニアンPDEへの拡張[DGNet]
- ハミルトニアンPDEとは
- ハミルトニアン密度を全空間で積分してあげると全エネルギーになる
- $\dot{u}(x,t) = S\dfrac{\delta H}{ \delta u}$
- N点で空間を離散化するとN次元のODEとして解くことが可能となる
- ハミルトニアン密度をニューラルネットでモデル化する。また、全空間について積分する代わりにN点でサンプリングする
- 高次元データ入力への拡張[HGN]
- オートエンコーダ等を用いて状態を表す潜在変数を学習
- 物理量を学習するよりも動画等の方が観測しやすい場合に有効
**まとめ**
- 方程式が未知の場合でもダイナミクスを推定できることが魅力
- torchdiffeq等のライブラリがある
- 順問題を解くので最終的に数値計算が必要となる
## 2. 数値シミュレーションをニューラルネットで代替する
モデル化の対象はシミュレーション解$u(t,x)$
これは初期条件/境界条件が与えられた時の特殊解
#### DNNは微分器である
**Physics-informed Neural Network(PINN)**
- 関数$f$が$θ$でパラメタライズされている
- 合成関数の微分を考えると、自動微分の利用と計算グラフの保持をすれば$f$の導関数も$θ$でパラメタライズされる
- パラメタライズされた解$u_\theta$に対し$\theta$を学習することが順問題を解くことに対応
**PINNの損失**
- 初期条件と境界条件の損失+任意の点での微分方程式の損失(メッシュを切る必要がない)
- 損失関数の各係数はOriginalの問題だと全部1
→これはまだ決着がついていない
- 任意の点のサンプリング:ラテン超方格法
Neural Conservation Law[Richter-Powell+22]
求めたい$u(x,t)$と$\rho(x,t)$が連続の方程式を満たすようにNNを作りたい
$u$の観測データがあるわけではく、$u$の微分についての損失から解$u$を学習する
## 3. 解作用素を推定する
入力関数$a$から解$u$への写像をDNNでモデル化する
一般解をモデル化(PINNの場合は特殊解だった)
シミュレーションはPINNに比べ超高速
クエリ点についての損失をもとに学習
クエリ点はデータごとに荒い・細かいがあってもよい
**Deep Operator Network(Deep Operator Nerwork)**
- 作用素に対する万能近似定理に基づきアーキテクチャを構成
- 入力関数$a$についてのネットワークとクエリ点$q$についてのネットワークの出力を用いて、解作用素を推定
- $a(q)$から$u(q)$へのマッピングを学習すると思えば良い
**Neural Operator**
- カーネル積分作用素による畳み込みでモデル化
- **フーリエニューラル作用素**
- 周波数領域では畳み込み積分を積として表せることを利用
- 高速フーリエ変換や、低周波成分だけの利用によって計算量を大幅に落とすことが可能
cf. クープマン作用素
潜在空間において線形ダイナミクスを仮定する(?)
PINNと作用素学習を加えた研究もある
**まとめ**
- 解の精度の面で従来の数値シミュレーションには及ばないことも
- シミュレーションデータを学習に使う場合はデータの作り方も工夫できる
- PINNやDeepONet/NOは高精度かつ効率的な学習法が確立できれば従来のシミュレーションを圧倒できるかも