1. kenmaro

    Posted

    kenmaro
Changes in title
+今更ながらODENetについて調べてみた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,43 @@
+## 概要
+このバズっている[認めたくないものだな… Neural Networkの力学系表現というものを](https://qiita.com/BootCamp_2019/items/478334a37b54f9641725)に感化され、ODENetについて少しだけ調べておもしれええってなったので備忘録的にまとめます。
+大手のAI研究者は実装もやりつつ、いろんなキャッチアップもしててやはり優秀な方が多いですね!!さすが!!
+
+## サクッとなにがすごいのか
+
+参考文献にも出しますが、いろいろなまとめがもうすでに上がっており、非常に勉強になったのでとりあえず細かいところはそちらにリンクを飛ばして、自分の浅はかにもちょっとかじれたところだけを書いていきます。
+この辺が素晴らしいのでぜひご覧ください。
+
+- とりあえずの原論文[Neural Ordinary Differential Equations](https://arxiv.org/pdf/1806.07366.pdf)
+- [論文紹介: Neural Ordinary Differential Equations](https://qiita.com/github-nakasho/items/10f71e756a1cca94b5ca)
+- [NIPS 2018最優秀賞論文 トロント大学発 : 中間層を微分可能な連続空間で連結させる、まったく新しいNeural Networkモデル](https://ainow.ai/2018/12/25/159218/)
+
+
+<img width="636" alt="Screen Shot 2019-12-24 at 3.59.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/4ce491ef-39c0-3cae-0a69-c62d8001a58c.png">
+もうこの画像が全て(ではないけど)ある意味使い古されている原論文[Neural Ordinary Differential Equations](https://arxiv.org/pdf/1806.07366.pdf)の図になります。
+もともとニューラルネットは隠れ層をいくつか用意して、ある意味離散的に各層に情報を伝達するような、「とぎれとぎれ」の近似を行なっていたわけです。例えば ResNetでいうと
+<img width="372" alt="Screen Shot 2019-12-24 at 3.59.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/b1687210-06b1-d72f-a5d2-a5c63719c6f3.png">
+この更新式ってオイラー近似(時刻$t$ の常微分方程式を解くときのオイラー法)に似てない?となったわけでして、
+<img width="346" alt="Screen Shot 2019-12-24 at 3.59.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/a057d3fe-632a-b93f-ef8a-56e76cf5da59.png">
+この上の常微分方程式をオイラー法で解く際の、$t$を連続的な層情報とすれば、「連続的な」層を持つようなNNが学習できるんじゃ?となったのがODENetになります。
+
+このとき、常微分方程式を解く際の計算量はもちろんどれだけ$t$の幅を細かくとるか、が関わってくるのですが、これは連続的な層をどれだけ粗くとるか、ということと計算量のトレードオフになっています。
+論文の提案では、学習の際、バックプロパゲーションをするときに計算グラフをメモリ上に全て保持しなければならなかった従来のニューラルネットの学習ではなく、ODENetを使うことによって計算グラフの保持の必要がなく、常微分方程式のソルバーを使うことでニューラルネット学習しようよ、ということになっています。
+
+論文の1つのメインポイントは、素直にこれを実行した時にやはり保持しないといけない計算グラフを、adjoint-methodを使うことで保持の必要を無くしたというところです。
+学習の際に小さくしたいロス関数は、
+<img width="1040" alt="Screen Shot 2019-12-24 at 4.19.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/0f11aded-b3ba-ffff-7440-1e45221472d9.png">
+
+になりますが、これをパラメータで微分したときの挙動が知りたいわけで、
+それをajointと呼ばれる
+<img width="318" alt="Screen Shot 2019-12-24 at 4.19.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/41d8f7ff-f24a-97fa-fae8-b7f7063b13ca.png">
+
+が従う微分方程式
+<img width="496" alt="Screen Shot 2019-12-24 at 4.19.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/9ae81430-dc22-a1e3-4da5-2e08fc91a7f3.png">
+をソルバーを使って解くことで、メモリに計算グラフを置く必要性を解消しています。
+
+## 常微分方程式で定式化されるニューラルネット
+この解釈めちゃくちゃおもしろいですね!!
+原論文の式の導出なども含め、もう少し深入りできるように頑張ります!
+
+
+おわり。