7
3

More than 3 years have passed since last update.

今更ながらODENetについて調べてみた

Last updated at Posted at 2019-12-24

概要

このバズっている認めたくないものだな… Neural Networkの力学系表現というものをに感化され、ODENetについて少しだけ調べておもしれええってなったので備忘録的にまとめます。自分の書いてる内容は薄いです。読める人は原論文読みましょう!
大手のAI研究者は実装もやりつつ、いろんなキャッチアップもしててやはり優秀な方が多いですね!!さすが!!

サクッとなにがすごいのか

参考文献にも出しますが、いろいろなまとめがもうすでに上がっており、非常に勉強になったのでとりあえず細かいところはそちらにリンクを飛ばして、自分の浅はかにもちょっとかじれたところだけを書いていきます。
この辺が素晴らしいのでぜひご覧ください。

Screen Shot 2019-12-24 at 3.59.41.png
もうこの画像が全て(ではないけど)ある意味使い古されている原論文Neural Ordinary Differential Equationsの図になります。
もともとニューラルネットは隠れ層をいくつか用意して、ある意味離散的に各層に情報を伝達するような、「とぎれとぎれ」の近似を行なっていたわけです。例えば ResNetでいうと
Screen Shot 2019-12-24 at 3.59.11.png
この更新式ってオイラー近似(時刻$t$ の常微分方程式を解くときのオイラー法)に似てない?となったわけでして、
Screen Shot 2019-12-24 at 3.59.20.png
この上の常微分方程式をオイラー法で解く際の、$t$を連続的な層情報とすれば、「連続的な」層を持つようなNNが学習できるんじゃ?となったのがODENetになります。

このとき、常微分方程式を解く際の計算量はもちろんどれだけ$t$の幅を細かくとるか、が関わってくるのですが、これは連続的な層をどれだけ粗くとるか、ということと計算量のトレードオフになっています。
論文の提案では、学習の際、バックプロパゲーションをするときに計算グラフをメモリ上に全て保持しなければならなかった従来のニューラルネットの学習ではなく、ODENetを使うことによって計算グラフの保持の必要がなく、常微分方程式のソルバーを使うことでニューラルネット学習しようよ、ということになっています。

論文の1つのメインポイントは、素直にこれを実行した時にやはり保持しないといけない計算グラフを、adjoint-methodを使うことで保持の必要を無くしたというところです。
学習の際に小さくしたいロス関数は、
Screen Shot 2019-12-24 at 4.19.26.png

になりますが、これをパラメータで微分したときの挙動が知りたいわけで、
それをajointと呼ばれる
Screen Shot 2019-12-24 at 4.19.34.png

が従う微分方程式
Screen Shot 2019-12-24 at 4.19.42.png
をソルバーを使って解くことで、メモリに計算グラフを置く必要性を解消しています。

常微分方程式で定式化されるニューラルネット

この解釈めちゃくちゃおもしろいですね!!
原論文の式の導出なども含め、もう少し深入りできるように頑張ります!

おわり。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3