DiffEqFlux.jl — A Julia Library for Neural Differential Equations
===
<!-- .element: style="font-size:160%" -->
2019/02/06 Chris Rackauckas, Mike Innes, Yingbo Ma, Jesse Bettencourt, Lyndon White, Vaibhav Dixit
<!-- .element: style="font-size:80%" -->
https://arxiv.org/abs/1902.02376
(まとめ:[@antimon2](https://github.com/antimon2))
---
## どんなもの?
+ ニューラル微分方程式ソルバーライブラリの紹介
+ リポジトリ: https://github.com/JuliaDiffEq/DiffEqFlux.jl
+ サンプルコード: https://github.com/FluxML/model-zoo/tree/master/other/diffeq
+ 元のブログ記事: https://julialang.org/blog/2019/01/fluxdiffeq
----
### ニューラル微分方程式
+ 微分方程式とニューラルネットの統合
+ 微分方程式をニューラルネット(機械学習)で解く
+ 逆にニューラルネットを微分方程式に組み込む(?)
---
## 技術や手法の肝は?
+ ニューラルネットの層とは、入力として長さ `n` のベクトルと受け取り、長さ `m` のベクトルを出力する、*微分可能な関数*。
+ (O)DEソルバーもその条件を満たす!
+ それを利用して(O)DEを解く!
+ Julia のエコシステムでそれらを同時に利用できるようにマージした。
----
### DiffEqFlux.jl
+ [DifferentialEquations.jl](https://github.com/JuliaDiffEq/DifferentialEquations.jl) で用意されている様々な微分方程式モデルを利用したレイヤを [Flux.jl](https://github.com/FluxML/Flux.jl/) に簡単に組み込める!
+ 硬い常微分方程式(Stiff ODE)
+ 確率微分方程式(SDE)
+ 遅延微分方程式(DDE)
+ ハイブリッド(不連続)微分方程式
---
## ~~先行研究~~ 他言語のパッケージと比べて何がすごい? (1)
+ [torchdiffeq](https://github.com/rtqichen/torchdiffeq)
+ PyTorch でソルバーを記述
+ 完全なソルバー一式が提供されていない(できない?)
----
## ~~先行研究~~ 他言語のパッケージと比べて何がすごい? (2)
+ [ROBER ODE](https://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Single/DemoRobertson/demorobertson.pdf)
+ C++パッケージ SUNDIALS の CVODE インテグレータ
+ ここで利用されている手法では、硬い微分方程式が解けない
+ [Ernst Hairer’s Fortran Suite](https://www.unige.ch/~hairer/software.html) の `dopri`
+ 硬い微分方程式が解けない(↑と同様)
----
## ~~先行研究~~ 他言語のパッケージと比べて何がすごい? (3)
+ [DiffEqFlux.jl](https://github.com/JuliaDiffEq/DiffEqFlux.jl)
+ MLパッケージ(=[Flux.jl](https://github.com/FluxML/Flux.jl/))固有の実装ではなく [DifferentialEquations.jl](https://github.com/JuliaDiffEq/DifferentialEquations.jl) の実装をそのまま利用・統合
+ あらゆる微分方程式モデル・ソルバーをそのまま利用可能
---
## どうやって有効だと検証した?
+ DDE/SDE のサンプルを提示。
+ [ブログ記事](https://julialang.org/blog/2019/01/fluxdiffeq) 参照
---
## 議論はある?
+ 特になし
---
## 次に読むべき論文は?
+ [Neural Ordinary Differential Equations](https://arxiv.org/abs/1806.07366)
+ [Reinforcement Learning vs. Differentiable Programminga](https://fluxml.ai/2019/03/05/dp-vs-rl.html)
+ DiffEq を利用して強化学習の古典的な問題を解く話(ブログ記事)
---
## 略語・訳語集
+ ODE (Ordinary Differential Equations)
+ 常微分方程式
+ SDE (Stochastic Differential Equations)
+ 確率微分方程式
+ DAE (Differential Algebraic Equations)
+ 微分代数方程式
+ DDE (Delay Differential Equations)
+ 遅延微分方程式
{"metaMigratedAt":"2023-06-14T20:31:36.737Z","metaMigratedFrom":"YAML","title":"DiffEqFlux.jl — A Julia Library for Neural Differential Equations","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"theme\":\"white\"}","contributors":"[{\"id\":\"80062a4b-8dad-49ac-95bf-848ce0686e9e\",\"add\":4763,\"del\":2132}]"}