今日は誤差逆伝搬法(Backpropagation)について書いてみます。
Karpathy先生のCS231nの講義が秀逸すぎるのでそれを見れば十分です! (◍•ᴗ•◍)
- 講義ビデオ: CS231n Winter 2016: Lecture 4: Backpropagation, Neural Networks 1 - YouTube
- 講義スライド: http://cs231n.stanford.edu/slides/winter1516_lecture4.pdf
- 講義ノート: CS231n Convolutional Neural Networks for Visual Recognition
これではあんまりなので特に覚えておきたいポイントをまとめてみようと思います。。
global勾配にlocal勾配を掛けて次のノードにエラーの誤差を伝搬させる
微分の連鎖律(チェインルール)です。
基本的な演算での伝搬を覚えよう
Add演算はそのまま誤差を伝搬させる
Mul演算は互いの値をクロスに掛けて誤差を伝搬させる
Max演算は値が大きい方へのみ誤差を伝搬させる
分岐ノードは誤差を加算する
RNNのhiddenノードも出力層からの誤差と次のRNNセルからの誤差が加算されます。(hは次のRNNセルへの入力でもあるため)
ベクトルの場合も同じ
computational graph | network layer graph |
---|---|
入力がベクトルの場合も同じです。ただ、行列(W)の次元を考慮する必要があります。 掛け算するために転置(T)をしたり、掛ける順番を考慮しないと怒られます..。
ポイント
- あるノードでの順方向(X)と逆方向(dX)の次元は同じ(当たり前だけど)
- 出力されるべき次元に合わせて転置や掛ける順番を考える (紙に書けというアドバイスをよく見かける。地道に慣れろということ)
- この例では W は (outsize, insize) になっているが実際のフレームワークでは W は基本的に (insize, outsize) という次元になる。バッチ単位で処理するため
個人的には computational グラフで考えると誤差の伝搬が計算しやすいです。
バッチ単位で考えたとき
このようにバッチ単位でまとめて行列計算したいときは W は (insize, outsize) となります。 また、WX ではなく D = XW と掛け算します。
今回はここまでです。 マウスで文字を書くのつらい.. (ノ゚ο゚)ノ