define-by-run
モデルを直接実行する
計算グラフの構築をデータを流しなら行う
実際に計算が行われたタイミングで計算グラフを作っていく
異なるデータを入れたときに、異なる計算グラフを作成することができる
データによって条件分岐ができたりするのも利点なのか?
ref制御フローを使用するモデルでは特に使い勝手が良い
インタプリタ的に実行やデバッグが可能
欠点
Pythonインタプリタのパフォーマンスの低さが影響する
ただし以下のようなアプローチにより最適化の余地がある
遅延評価
JIT tracingする
GILがあるのでマルチコアCPUを活用したい場合、複雑な回避策が必要になる
インタプリタ的な実行なので、全体的な最適化がしづらい
モデルの並列処理など
足し算の処理をすると、裏では足し算をしたことを記録していて、
誤差逆伝播法の時に使うやつ、のことかな?
これは効果的だが、
>lose the ability to translate control flow constructs in the host language to the computation graph
微分が失敗した時に最適化出来ない、もしくはエラーがわかりにくくなる
ただし、
ONNXなどを使ってエクスポートすれば可能
例
chainer.functions.add(A, B)
を実行する
このタイミングで実際にA+Bを計算
使われているフレームワーク
参考
===========
欠点
いくつか書いてるけど概念がわからなくて理解できない..

参考