機械学習とハミルトニアン

## 概要
物理学をかじったことのある人であれば聞いたことのある、物理系の保存量である**ハミルトニアン**を、機械学習（ニューラルネット）でも使った論文があると聞き、少し追ってみたので備忘録的にまとめます。
たぶん、物理屋は機械学習やり始めても物理をいつまでも追いかけているんだなあ。


##参考にしたもの

- [原論文](https://arxiv.org/abs/1906.01563)　2019年６月くらいに発表されたものです。
- [AI Scholarさんの エネルギー保存則を満足する物体運動の予測を可能とする Hamiltonian Neural Networks](https://ai-scholar.tech/deep-learning/hamiltonian-ai-344/)
- [yoheikikutaさんの[2019] Hamiltonian Neural Networks](https://github.com/yoheikikuta/paper-reading/issues/46)
- [NTTComさんの　認めたくないものだな… Neural Networkの力学系表現というものを](https://qiita.com/BootCamp_2019/items/478334a37b54f9641725)


## 内容

### 最小作用の原理
物理学のハミルトニアンをまずは知らないと話にならないのではあるが、、、
まず、物理学において**最小作用の原理**というものがあります。これは、全ての物理現象を記述するすごい原理です。例えば**電磁気学のマクスウェル方程式**や、**相対論のアインシュタイン方程式**も、すべてこの最小作用の原理をある**ラグランジアン**のもとで導出することで求ってしまうのです。。この辺の話は**解析力学**と呼ばれ、めちゃくちゃ面白いです。

作用というものを**ラグランジアン**から定義します。ラグランジアンとは、物体の位置と速度で記述される物理量のことです。最小作用の原理は、ラグランジアンの時間積分を作用と置いた時に、力学系の運動はその作用が最小になるような軌道（位置情報と速度情報）で実現されます。
<img width="268" alt="Screen Shot 2019-12-25 at 10.56.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/5c12e53b-4cea-9947-5827-d6b982208eb1.png">

物理系（例えば何かの物体の運動を記述する物理システムのこと）が決まると、このようにまずラグランジアンを定義します、例えば**運動エネルギー**、**位置エネルギー**、（多体システムであれば）**物体同士の相互作用**などを含んだラグランジアンが定義され、それを最小作用の原理にぶち込むと、ニュートン力学でおなじみの**運動方程式**（電磁気ではマクスウェル方程式など）が出てくるのです！！


### ハミルトニアン
ハミルトニアンは、ラグランジアンを**ルジャンドル変換したもの**です。まあ、変数変換をやっているわけです。これにより、物体の位置と速度で記述されていたラグランジアンから、**一般座標と一般運動量**と呼ばれる（併せて**正準変数**と呼ばれる）変数で記述された物理量である、ハミルトニアンを得ることができます。このハミルトニアンを用いると、先ほどの作用は
<img width="317" alt="Screen Shot 2019-12-25 at 11.09.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/0b77d10e-809b-5e86-f096-c4603cd7481b.png">
と書くことができ、最小作用の原理を用いると、その系の運動方程式である
<img width="261" alt="Screen Shot 2019-12-25 at 11.10.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/77254954-2fac-765c-0f27-d766be53f37f.png">

が得られます。ここで$q$は一般化座標、$p$は一般化運動量です。この式が何を言っているかというと、**ハミルトニアンを一方の正準変数で偏微分すると、他方の正準変数の時間微分がわかる**ということです。つまり、ハミルトニアンを正準変数で微分することで、正準変数の時間発展がわかる、つまり系の運動を記述できるということになります。また、ニュートン力学のように運動方程式が位置の時間での２階微分で書かれたりすることもなく、運動方程式は位相空間で定義された正準変数の一階の常微分方程式になるのです。これがハミルトニアンを導入する一番の理由でしょう。

また、ハミルトニアン（エネルギー）は時間微分をとると０になる、すなわち**エネルギーは系の運動において時間保存**します。このことを利用し、物理系を機械学習で学習させる時に、保存量をうまく保存させるような制約を入れることで、物理に相反しない機械学習をしよう、としているのが[原論文](https://arxiv.org/abs/1906.01563)での取り組みになります。

### Hamiltonian Neural Network
提案されているハミルトニアンニューラルネットワークの概要ですが、$p$, $q$ を入力として、ハミルトニアンを出力するようなネットワークを組み、出力されたハミルトニアンを正準変数で微分したものと、正準変数を時間微分したものが等しくなるようにネットワークを学習させています。
<img width="628" alt="Screen Shot 2019-12-25 at 11.47.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/8119daa2-fbc4-e5f9-4ad1-17d912a86d57.png">

ロスは以下のように定義されており、パラメータ$\theta$がロスを最小化する方向にアップデートされていきます。
<img width="554" alt="Screen Shot 2019-12-25 at 11.47.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/08ec194c-a7cf-de62-8161-c227eb5c8e91.png">

論文では、簡単な一体問題として

- 調和振動子
- 摩擦なし振り子
- 摩擦あり振り子

についての物理運動を学習するハミルトニアンネットワークを実装している。
また、比較対象として、GroundTruth としては運動方程式を数値的に単純に解いたもの、NNはある時刻の$p_t,q_t$が与えられて、$p_{t+1}, q_{t+1}$ を予測するような隠れそう200のニューラルネットワークです。

結果は以下、
<img width="630" alt="Screen Shot 2019-12-25 at 12.22.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/e1078384-bc8e-9448-f291-e845463040b8.png">


また、少し複雑な問題として

- 重力で引き合う二粒子が回転している連星系

についての実装が行われている。
<img width="625" alt="Screen Shot 2019-12-25 at 12.22.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/5936f405-0c32-2e56-e65d-7716ce86d183.png">


どちらの実装でも、ハミルトニアンニューラルネットでは保存量が物理的に保存され、NN よりもGroundTruthに近い形で現象予測ができていることがわかります。


## 最後に
ハミルトニアンを出力するようなネットワークを組むことで、物理の保存則に制約を設けた形で機械学習を行うことができるのがとても面白いですね。

おわり。