Deep Learning(An MIT Press book) の要点メモシリーズ。
計算グラフつよい・・・。という話。
Chapter 6 Deep Feedforward Networks
6.5 Back-Propagation and Other Differentiation Algorithms
6.5.2 Chain Rule of Calculus
- chain rule of calculus: 既に導関数のわかっている関数で構成された関数の導関数を計算する
- back-propagation は chain rule を計算するアルゴリズム
- のとき
6.5.3 Recursively Applying the Chain Rule to Obtain Backprop
- chain rule を使うと(出力となる) scalar の計算グラフ上の任意の変数(ノード)の勾配を素直に書ける
- 計算機で扱う場合、部分的な式を繰り返し計算するか、計算済みのものを保存しておくかを考える必要がある
- 計算回数とメモリのトレードオフ
- simplified version of the back-propagation
- 最後の子ノードに対して各ノードで微分した勾配を求める
- 子ノードから親ノードに向かって勾配計算していく
- 各勾配の計算は子ノードにだけ依存するので、勾配を保存しておくことで部分式の再計算が発生しなくなる
- 計算量はエッジ数(≒ノード数)に線形になる
- ノード間で Jacobian と gradient の積を計算するだけなので
6.5.4 Back-Propagation Computation in Fully Connected MLP
- MLP(Multi Layer Perceptron)を back-propagation で解く例
6.5.5 Symbol-to-Symbol Derivatives
- symbol-to-number
- 計算グラフに値を突っ込んで勾配を得る
- 各勾配は外からは見えない
- Torch, Caffe が採用
- 計算グラフに値を突っ込んで勾配を得る
- symbol-to-symbol
- 計算グラフ中の各ノードの勾配に対応するノードを追加
- 勾配ノードは自身が依存するノードの値が確定した時点で勾配の値を計算できる
- 各勾配を部分的に取り出して利用できる
- Theano, TensorFlow が採用
- 計算グラフ中の各ノードの勾配に対応するノードを追加