Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[DL輪読会]Neural Ordinary Differential Equations

12,525 views

Published on

2019/01/11
Deep Learning JP:
http://deeplearning.jp/seminar-2/

Published in: Technology

[DL輪読会]Neural Ordinary Differential Equations

  1. 1. 1 DEEP LEARNING JP [DL Papers] http://deeplearning.jp/ Neural Ordinary Differential Equations Joji Toyama, DeepX, Matsuo-lab
  2. 2. 2 本資料で紹介する論文 • Neural Ordinary Differential Equations – NeurIPS2018 Best paper – Ricky T.Q. Chen*, Yulia Rubanova*, Jesse Bettencourt*, David Duvenand – Vector Institute, Toronto Univ • FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models – ICLR2019 Oral – Will Grathwohl*, Rickey T.Q. Chen*, Jesse Bettencourt, Ilya Sutskever, David Duvenand – Vector Institute, Toronto Univ • 1本目が、ニューラルネットワークを微分方程式として見る、という新しい概念を提案。 2本目は、それをflow-basedな生成モデルに応用した論文。 • めっちゃ面白い(と思ってくれると発表者冥利に尽きる)
  3. 3. 3 事前知識:常微分方程式(ODE: Ordinary Differential Equations) • 未知関数の導関数を含む関数方程式を微分方程式と呼ぶ。 • その中で、独立変数が1つだけのものを常微分方程式と呼ぶ。 • 例1: 𝑑𝑥(𝑡) 𝑑𝑡 = −𝑐𝑥(𝑡) – 独立変数はtのみ – この解は、初期値𝑋0として、 𝑥(𝑡) = 𝑥0exp(−𝑐𝑡)と一意に定まる。 – 放射性物質の崩壊式 • 例2: 𝑑2 𝑥(𝑡) 𝑑𝑡2 = −𝑐2 𝑥(𝑡) – 独立変数はtのみ – 任意定数AとBを用いて、 𝑥 𝑡 = A ∗ sin ct + B ∗ cos(ct)と一意に定まる。 – 単振動の式
  4. 4. 4 事前知識:ODE Solver • 常微分方程式の解析解(=数式で表された解)を求めるのは一般に困難。 • そこで、ある時刻tにおける値を、計算機を使って数値解として求める! – = ODE Solver • 代表的なODE Solver – オイラー法 – ルンゲクッタ法 – etc…
  5. 5. 5 事前知識:オイラー法 • 最も簡単なODE Solver • 𝑑𝑦 𝑑𝑡 = 𝑓 𝑡, 𝑦 , 𝑦 𝑡0 = 𝑦0であるとき、 𝑓 𝑡, 𝑦 はyの微分なので、ステップ幅h後のyの 値は、 𝑦 𝑡0 + ℎ = 𝑦0 + 𝑓 𝑡0, 𝑦0 ∗ ℎと近似できる • これを繰り返すことで、任意のステップ後の𝑦(𝑡)を求めることができる。 – 下の図では𝑡ではなく𝑥が変数になっていることに注意 https://guide.freecodecamp.org/mathematics/differential-equations/eulers-method/
  6. 6. 6 ResNetとオイラー法 • ResNetは差分を学習させることによって、従来のDeepNetより精度向上 h1 = f1(x) h2 = f2(h1) h3 = f3(h2) h4 = f4(h3) y = f5(h4) h1 = f1(x)+x h2 = f2(h1)+h1 h3 = f3(h2)+h2 h4 = f4(h3)+h3 y = f5(h4)+h4 ResNetDeepNet
  7. 7. 7 ResNetとオイラー法 • ResNetは差分を学習させることによって、従来のDeepNetより精度向上 h1 = f1(x) h2 = f2(h1) h3 = f3(h2) h4 = f4(h3) y = f5(h4) h1 = f1(x)+x h2 = f2(h1)+h1 h3 = f3(h2)+h2 h4 = f4(h3)+h3 y = f5(h4)+h4 ResNetDeepNet
  8. 8. 8 ResNetとオイラー法 • ResNetは差分を学習させることによって、従来のDeepNetより精度向上 • なんかよく見るとオイラー法っぽい – “These iterative updates can be seen as an Euler discretization of a continuous transformation (Lu et al., 2017; Haber and Ruthotto, 2017; Ruthotto and Haber, 2018)” – 筆者はここから着想を得たとのこと。 h1 = f1(x) h2 = f2(h1) h3 = f3(h2) h4 = f4(h3) y = f5(h4) h1 = f1(x)+x h2 = f2(h1)+h1 h3 = f3(h2)+h2 h4 = f4(h3)+h3 y = f5(h4)+h4 ResNetDeepNet
  9. 9. 9 ODENet • ResNetの更新則は • 一回の更新幅(=層の深さに該当)が微小であるときを考える。すると、 という常微分方程式(Neural ODE)を用いてResNetの更新則を表現できる – ある時刻(深さ)での隠れ層のダイナミクスを出力する𝑓(ℎ 𝑡 , 𝑡, 𝜃)を、ニューラルネットワー クでモデル化し、これをODENetと呼ぶ – 今まで離散的だった”層”が、連続になる(!) • ResNetでは各層で異なるパラメータを持つ関数 𝑓(ℎ 𝑡, 𝜃𝑡)が用いられるが、ODENetは単一の関数 𝑓(ℎ 𝑡 , 𝑡, 𝜃)のみが存在する • ℎ(𝑡)はODE Solverによって計算される。 ℎ 𝑡+1 = ℎ 𝑡 + 𝑓(ℎ 𝑡, 𝜃𝑡) 𝑑ℎ 𝑡 𝑑𝑡 = 𝑓(ℎ 𝑡 , 𝑡, 𝜃)
  10. 10. 10 ResNet vs ODENet • ResNetは変換が層においてのみ行われる。一方で、ODENetは層を連続値として 扱って入力に用いるので、連続的な変換が行われる。 • 丸い点は値の評価がされていることを示す。ResNetは各層ごとに値が出力されるが、 ODENetはいかなる点でも値を評価することができる。 – 実際には、評価の回数と場所はあらかじめ適当に決めたり、ODE Solverによって自動的に 決まる
  11. 11. 11 ODENetの嬉しいこと • Memory efficiency – 計算グラフを保持する必要なしに勾配を求めることができるようになる • Adaptive computation – ResNetは最も簡単なODE Solverである、オイラー法を用いていると見ることができる。 ODENetではもう少し賢いODE solverを使う(e.g. Runge-kutta 4)ことにより、数値解の許容 誤差と推論速度のトレードオフを取ったり、ステップ幅の適応制御を可能にする。 • Parameter efficiency – 各層に異なるパラメータを持たないので、パラメータ効率が良い • Scalable and invertible normalizing flows – Normalizing flowの計算上のボトルネックである行列式計算が、トレース計算で済む様になる。 • Continuous time-series models – RNNにおけるタイムステップが連続になるため、より自然に時間をモデリングできる。
  12. 12. 12 ODENetの順伝播と逆伝播 • Given – ODENetのパラメータ𝜃,開始時刻𝑡0,終了時刻𝑡1, ODE Solver • 順伝播 𝑧(𝑡1) = 𝑡0 𝑡1 𝑓 𝑧 𝑡 , 𝑡, 𝜃 𝑑𝑡 = 𝑂𝐷𝐸𝑆𝑜𝑙𝑣𝑒𝑟(𝑧 𝑡0, 𝑓, 𝑡0, 𝑡1, 𝜃 ) – ODE Solverによってちまちま𝑧(𝑡1)まで計算していくだけ。 • 逆伝播 – 素直にやろうとすると、ODESolverの各ステップで毎回微分をする必要があり、forward時の 計算グラフの保持に大量のメモリを必要とする。 – そこで、adjoint method(Pontryagin et al., 1962)という賢い方法を用いて、ODEをブラックボッ クスとして扱いながら、計算グラフの保持なしに、各変数についての勾配を求める。
  13. 13. 13 Adjoint methodを用いた逆伝播 • 𝐿(𝑧(𝑡1)) = 𝐿 𝑡0 𝑡1 𝑓 𝑧 𝑡 , 𝑡, 𝜃 𝑑𝑡 = 𝐿 𝑂𝐷𝐸𝑆𝑜𝑙𝑣𝑒𝑟 𝑧 𝑡0), 𝑓, 𝑡0, 𝑡1, 𝜃 – Lを最適化するため、 𝑧 𝑡0 , 𝑡0, 𝑡1, 𝜃に関する勾配を求めたい • ある状態𝑧 𝑡 の、損失に関する勾配をadjointと呼び、 • このadjointは、以下の微分方程式に従う。 – 未知の関数が𝑎 𝑡 で、独立変数がtのみであるため、これも常微分方程式であり、初期値を 𝑎 𝑡1 = −𝜕𝐿/𝜕𝑧(𝑡1)とすることで、 𝑎 𝑡0 = −𝜕𝐿/𝜕𝑧(𝑡0) をODE Solverによって解くことができる。 • 同様のことを、𝑎 𝜃 𝑡 = −𝜕𝐿/𝜕𝜃 𝑡 、 𝑎 𝑡 𝑡 = −𝜕𝐿/𝜕𝑡 𝑡 とおくことで、 𝑡0, 𝑡1, 𝜃についての 勾配もODE Solverによって求めることができる。 – ※細かい導出は本論文のappendixをみてください(そんなに難しくないです) 𝑎 𝑡 = −𝜕𝐿/𝜕𝑧(𝑡) 𝑑𝑎 𝑡 𝑑𝑡 = −𝑎 𝑡 𝑇 𝜕𝑓 𝑧 𝑡 , 𝑡, 𝜃 𝜕𝑧
  14. 14. 14 勾配計算アルゴリズム
  15. 15. 15 実験1:ODENetによる教師あり学習 ーMNIST 定量評価ー • 1-Layer MLP, ResNet, RK-Net(ODE-Netの時のソルバとしてルンゲクッタを用い、普 通に誤差逆伝播させるモデル)と,ODE-Net(adjoint methodで勾配計算)をMNISTで 比較 – Lはレイヤー数、 𝐿はODE Solverが要したステップ回数(=関数評価回数) • 𝐿 はODENetにおける層の数と解釈もできる • ResNetと同じ精度ながら、パラメータ数が少なくメモリ使用量も少ない
  16. 16. 16 実験1:ODENetによる教師あり学習 ーMNIST 定性分析ー • 関数評価回数を増やすと数値誤差は減少する(当たり前) • 関数評価回数を増やすと時間がかかる(当たり前) – 数値誤差とフォワード時の推論時間のトレードオフを取れる。例えば、テスト時だけ許容数値誤差 を大きくすることで、関数評価回数が減り、短時間での推論が可能になる。 • バックワード時のODE Solverの関数評価回数は、フォワード時の関数評価回数の約半分 – 素直にやったらバックワード時の関数評価回数はフォワード時と同じ。つまり、Adjoint methodはメ モリ効率がいいだけでなく、計算効率も良い! • 訓練が進むにつれ、関数評価回数は増えていく – 訓練が進むにつれ、ダイナミクスの複雑さが増していくことを示唆。
  17. 17. 17 Normalizing FlowをNODEとして見る • Normalizing Flowの変数変換 – ただし𝑓は全単射な関数 – ヤコビアンの行列式を求めるのにO(𝐷3 )かかるため、 𝑓に様々な工夫を必要としていた。 • Normalizing Flowの更新も、NODEとして見ることができる。 • すると、なんと • となる(証明が気になる人は論文のAppendixを読んでください) – また、ODEは解の一意性が担保されているため、 𝑓に何を選ぼうとも、変換は全単射。 𝑧1 = 𝑓 𝑧0 => log 𝑝(𝑧1) = log 𝑝 𝑧0 − log | det 𝜕𝑓 𝜕𝑧0 | 𝑑𝑧 𝑑𝑡 = 𝑓(𝑧 𝑡 , 𝑡) 𝜕 log 𝑝(𝑧 𝑡 ) 𝜕𝑡 = −𝑡𝑟 ( 𝑑𝑓 𝑑𝑧 𝑡 )
  18. 18. 18 Continuous normalizing flow • planar normalizing flowを改良したContinuous normalizing flow(CNF)を提案 – Planar normalizing flow – Continuous normalizing flow • トレースは線形性を持つため、 𝑓を関数の和として表現した場合、log densityもトレースの 和として計算できる。 – つまり、CNFは隠れユニットを増やしても計算量がO(M)のオーダでしか増えないため、wideな Planar NFが構築可能! 𝑧 𝑡 + 1 = 𝑧 𝑡 + 𝑢ℎ 𝑤 𝑇 𝑧 𝑡 + 𝑏 𝑢, 𝑤 ∈ 𝑅 𝐷, 𝑏 ∈ 𝑅, ℎ 𝑖𝑠 𝑛𝑜𝑛𝑙𝑖𝑛𝑖𝑎𝑟𝑖𝑡𝑦 𝑎𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛 𝑑𝑧 𝑡 𝑑𝑡 = 𝑓 𝑧 𝑡 = 𝑢ℎ 𝑤 𝑇 𝑧 𝑡 + 𝑏 , 𝜕 log 𝑝 𝑧 𝑡 𝜕𝑡 = −𝑢 𝑇 𝜕ℎ 𝜕𝑧 𝑡 𝑑𝑧 𝑡 𝑑𝑡 = 𝑛=1 𝑀 𝑓𝑛(𝑧 𝑡 ) , 𝑑 log 𝑝 𝑧 𝑡 𝑑𝑡 = 𝑛=1 𝑀 𝑡𝑟( 𝜕𝑓𝑛 𝜕𝑧 )
  19. 19. 19 実験2:Density matching • Target分布になるように訓練 • LossはKL • KはNFの深さ、Mは隠れ層のユニット数(CNFは常にK=1) • CNFのほうがNFよりもLossが下がっていて、定性的にもよくモデリングできてる
  20. 20. 20 実験2:Maximum Likelihood Training • Two CirclesとTwo Moons • %はflowの時間(深さ)を表す • CNFはターゲットにうまくフィットできると共に、そこから遡って元のガウス分布にきち んと対応する。
  21. 21. 21 NODEのRNNへの応用 • RNNでは時間は離散化されている。そのため、時間に対して不均一に得られるデー タの扱いが難しい。 – 医療診断のログ – ネットワークトラフィック • 従来では、時間に不均一なデータに対し、以下の対策を講じていた – 欠損値補完 – タイムスタンプ情報を入力にする • NODEは時間を連続的に扱えるため、上の問題を根本的に解決できる。
  22. 22. 22 ODENetをデコーダもちいたRNN型VAE • 本論文では、時系列の潜在変数を出力するデコーダをODENetでモデリングしたRNN 型VAEを考える。
  23. 23. 23 実験3:ODERNN • データ:渦巻き状(時計回りと反時計回 り)の時系列データで、観測点が不均一 • ODERNNはうまく予測できている。また、 観測点が終わった後の外挿もうまくでき ている。 • 潜在空間は、時計回りと反時計回りの回 転をうまく獲得できている。 • 定量的にも良い。
  24. 24. 24 結論 • 微分方程式にNNを組み込み、ODE Solverによって順伝播と勾配計算を行う、全く新 しい学習スキームを提案 • 5つのメリット – メモリ効率が良い – 計算時間と正確さを自由に調整できる – パラメータ効率が良い – 計算コストが少ないNF – 時間を連続的に扱えるRNN • NeurIPS Best paper取るわけですわ、という面白さと革新さ
  25. 25. 25 FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models • 先の論文で、変数変換を常微分方程式の形 で表すことで、NFのレイヤーの幅を増やすこ とが可能になったことを見たが、あくまで planar normalizing flowの形に限定されてい た。 • 本論文では、Reversible generative models のアーキテクチャの制約を完全に外すことを 目指す。 – FFJORD(Free-form Jacobian of Reversible Dynamics)と名付ける(もう少しいい名前を考え られなかったものか) • ODEなので、右みたいに連続的なダイナミク スが学習されます。
  26. 26. 26 Flow-based Generative Models • Flow-based generative models – 変数変換によって、単純な分布(e.g. ガウス分布)からデータへの変換を直接学習する生成モデル • 変数変換時にヤコビアンの行列式を求める際の工夫の仕方で、Flow-based generative modelsは以下の3クラスに分類できる(筆者談) – Normalizing Flow • 普通に変数変換するモデルのことを言っている。関数𝑓の形を限定することで行列式を計算しやすくする。た だ 𝑓−1 は求められないため、reversibleではなく、データ点𝑋のみから学習はできない。 – Planar NF, Radial NF – Autoregressive Transformations • 変数変換を自己回帰的に行うことで、ヤコビアンが三角行列になり行列式を計算しやすくする。 – MAF, IAF – Partitioned Transformations • データの特定の次元を不変にし、他の残った次元を、不変にしたデータを入力として出力されるパラメータに よって変換をするように変数変換をすることで、ヤコビアンが三角行列になる。 – NICE, RealNVP, Glow • ここらへんよくわからない人はこちらを読むことをお勧め – https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html#realnvp
  27. 27. 27 Reversible generative models • この論文で定義された生成モデルクラスであり、以下を満たす。 – 変数変換を行う – 効率よく密度推定ができる – 効率よくサンプリングができる(One-pass) – (表で言うと、下から二列目から下がreversible generative modelsになる) • FFJORDはReversible generative modelsで、かつ、ヤコビアン行列式計算困難問題による諸々の制約 を解消
  28. 28. 28 CNF振り返り • Continuous Normalizing Flowでは変数変換の行列式をトレースに置き換えられる • Flow後のlog-densityは次のようになる • 通常𝑇𝑟 𝜕𝑓 𝜕𝑧 𝑡 の計算コストは𝑂(𝐷2)だが、これを𝑂(𝐷)にするため、以下の二つの工 夫を用いる – 自動微分 – Hutchinson’s Trace Estimator 𝑑𝑧 𝑑𝑡 = 𝑓 𝑧 𝑡 , 𝑡 , 𝜕 log 𝑝(𝑧 𝑡 ) 𝜕𝑡 = −𝑇𝑟 ( 𝑑𝑓 𝑑𝑧 𝑡 ) log 𝑝 𝑧 𝑡1 = log 𝑝 𝑧 𝑡0 − 𝑡0 𝑡1 𝑇𝑟 𝜕𝑓 𝜕𝑧 𝑡 𝑑𝑡
  29. 29. 29 Unbiased Linear-time log-density estimation • 𝑣 𝑇 𝜕𝑓 𝜕𝑧 は、自動微分によってフォワード計算と同コストで計算可能。 • 𝐸 𝜖 = 0, 𝐶𝑜𝑣 𝜖 = 𝐼に従う𝜖を用いて、トレースは以下を満たす(Hutchinson Trace Estimator) • ODE solverの間は同じ𝜖を用いても大丈夫 𝑇𝑟 𝐴 = 𝐸 𝑝(𝜖)[𝜖 𝑇 𝐴𝜖]
  30. 30. 30 FFJORD アルゴリズム • 𝑓の評価に𝑂(𝐷𝐻)かかるとすると、NFは𝑂( 𝐷𝐻 + 𝐷3 𝐿), CNFは𝑂( 𝐷𝐻 + 𝐷2 𝐿), FFJORDは𝑂( 𝐷𝐻 + 𝐷 𝐿) の計算量がかかる。 – 𝐻は最大の隠れ層の次元、 𝐿はレイヤー数、 𝐿はODE Solverの評価回数
  31. 31. 31 実験1:Toy dataでの密度推定 • Glow, Planar CNFとFFJORDを比較。 • Glowは密度の境目をうまくモデリングで きていない • CNFは1レイヤーしかないため、複雑な ダイナミクスをモデリングしきれない • 一方FFJORDは多層に積めるので、表 現力が高く、すべてのデータの密度をう まく推定できている。 – ODE Solverの評価回数は70~100回だった
  32. 32. 32 実験2:Real dataでの密度推定 • UCI Datasetsから5つと、MNIST,CIFAR10で実験 • Reversible generative modelsの中では、CIFAR10を除きFFJORDが最も良い結果 • 最新の自己回帰モデルにはちょいちょい負ける • GlowやReal NVPは複数のフローを必要とするが、FFJORDは単一のフローでもそこそこい いモデリングができる • Glowと比べ、モデルのパラメータ数は2%以下 – 本気出せばGlowに勝てそうだけど、あえて研究の余地を残してる感がある。
  33. 33. 33 実験3:VAEのvariational inference • VAEのエンコーダにFFJORDを用いる。 • Planar NF, IAF, Sylvester NF(Berg et al., 2018)と比較 • 4つのデータセット全てでFFJORDが最も良い
  34. 34. 34 分析:Bottleneck Capacity • Hutchinsonのトレース推定の用いるノイズの次元は、以下のトリックで𝑓の中の最小 の隠れ層(bottleneck)の次元ℎで済み、それによって推定の分散を下げることができ るんじゃない?と筆者は(理論根拠無く)述べている。 – なお、先の実験ではbottleneckは𝑓の表現力を落とすので用いられていない。 • それを確かめた結果が以下。ノイズの分布としてガウス分布を用いた時は訓練が早 く進むけど、ラデマッハ分布(半々の確率で-1か1)だとその効果はない。
  35. 35. 35 分析:関数評価回数とデータの次元の関係 • データの次元が増えるほど、関数評価回数 𝐿も増えるんじゃない?という分析 – 𝐿がDに依存することは、計算量の観点から好ましくない • VAEの潜在変数の次元を色々変えた時に、関数評価回数がどう変わるかを可視化 – データの次元と関数評価回数の関係性は見られなかった。 – データの次元というよりは、学習しなければいけない変換の難しさに関数評価回数は依存す ると思われる。
  36. 36. 36 分析:Single-scaleとMulti-scaleなアーキテクチャ • Real NVPやGlowはMulti-scaleなアーキテクチャを用いることによってモデルの表現 力を高めた。 • FFJORDで同様のことをすると、関数評価回数がだいたい二倍になり、精度は少しだ け上がった。
  37. 37. 37 FFJORDの限界1:関数評価回数が増えすぎると計算できなくなる • 関数評価回数は事前にどれくらいまで増えるかはわからず、学習が進むに従い増え ていくが、あまりに増えていくとフォワード計算に時間がかかり過ぎてしまう。 – Weight decayやSpectral Normalizationが関数評価回数を抑えるのに役立つが、それはモデ ルの表現力を損なってしまうことにつながってしまう。
  38. 38. 38 FFJORDの限界2:硬い微分方程式を解くのは大変 • 近似解を計算するためのある数値的方法が、刻み幅が限りなく小さくない限り数値 的不安定になる微分方程式を、硬い方程式、と呼ぶ。 • 硬い方程式でもうまく解けるようなODE Solverはあるが、計算時間がかかり過ぎて今 回のような実用には耐えない。 • 実験的には、わずかなweight decayを入れれば、微分方程式は硬くならないらしい。
  39. 39. 39 結論 • 尤度計算可能でone-passでサンプリングできるreversible generative modelである FFJORDを提案。 • 変数変換に用いられる関数𝑓の制約を外すために、以下の工夫 – Continuous dynamics – 自動微分 – Hutchinson’s trace estimator – black-box ODE solvers • Continuous dynamicsの研究には多くの改善の余地があるだろう。
  40. 40. 40 感想 • 結局、 𝑑ℎ 𝑡 𝑑𝑡 = 𝑓(ℎ 𝑡 , 𝑡, 𝜃)というアイディアが全て • 高次元データに適用するには計算時間の課題があるが、それも来年あたりには解 決されてそう • Optical flowや、流体シミュレータとかに応用できないかな。 • 読んでてとても楽しかった。 • 実装も上がってる(ODE solverの勾配計算をGPUでやるところも含め)ので、すぐ試 せる。
  41. 41. 41 Appendix: NODEの解の一意性 • 一般に、ODEの解が一意に定まるためには、zについてリプシッツ連続、tについて連 続であれば良い – ピカール・リンデレフの定理 • ダイナミクスをNNとする場合、重みが有限であり、tanhやReluを活性化関数として用 いていれば大丈夫。

×