[ML筆記] Backpropagation

ML Lecture 7: Backpropagation

本篇為台大電機系李宏毅老師 Machine Learning (2016) 課程筆記
上課影片:
https://www.youtube.com/watch?v=ibJpTrp5mcE
課程網 (投影片出處):
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html

螢幕快照 2017-07-04 下午4.18.17.png
在 Neural Network 裡面使用 Gradient Descent 更新上百萬個參數
對於上百萬維度的 Vector 如何有效地計算偏微分出來
這就是 Backpropagation 做的事情!


原理:會用到 Chain Rule,先來複習一下

Chain Rule
螢幕快照 2017-07-04 下午4.20.39.png
接下來看 Loss Function
螢幕快照 2017-07-04 下午4.22.10.png
Cn 代表計算 yn 跟 ynhat 距離差距的 function
我們要計算一筆 data 的偏微分,就可以計算出全部偏微分的加總
先考慮某一個 neuron


螢幕快照 2017-07-04 下午4.26.33.png
partial z over partial w 稱為 Forward pass
partial C over partial z 稱為 Backward pass


先來看
Forward Pass
螢幕快照 2017-07-04 下午4.28.25.png
秒算!
螢幕快照 2017-07-04 下午4.29.21.png
要算 forward pass 偏微分的結果,等同於 input 丟進去,計算每一個 output 就是答案
再來看
Backward Pass
也就是怎麼算  partial C over partial z
螢幕快照 2017-07-04 下午4.31.27.png
根據 chain rule 可以得到
partial a / partial z 這就是 sigmoid function 的微分!
螢幕快照 2017-07-04 下午4.31.42.png
Sigmoid function 的微分結果如圖!


那 partial C / partial a  是什麼呢?
螢幕快照 2017-07-04 下午4.31.51.png
再根據 chain rule 可以展開 partial C / partial a
螢幕快照 2017-07-04 下午4.31.59.png
目前的結果展開來得到這樣個式子


從另一個觀點來看這個式子!想像有另外一個 Neuron 用三角形表示螢幕快照 2017-07-04 下午4.37.35.png
這個 Neuron 的 input 如圖
把下面的式子畫成圖中得長相
z 是一個已知的值,因為在 forward pass 就知道多少了!





螢幕快照 2017-07-04 下午4.42.08.png
Case 1 如果是在最後一層 output layer
兩個紅色的 neuron 是整個 network 的 output
根據 chain rule 以及根據 output y1 y2 的結果秒算!


真正要煩惱的問題是 Case 2
如果這兩個紅色的 neuron 不在 output layer 的話
螢幕快照 2017-07-04 下午4.42.17.png螢幕快照 2017-07-04 下午4.42.25.png


螢幕快照 2017-07-04 下午4.42.32.png
如果知道 partial C / partial za 跟 partial C / partial zb 就可以知道 partial C / partial z’
這樣的做法從前面慢慢往後找會很崩潰
螢幕快照 2017-07-04 下午4.42.39.png
螢幕快照 2017-07-04 下午4.42.45.png
從後面往前算的話就會很有效率!
所以在做 Backword Pass 的實際做法,就是建一個反向的 network 來計算
螢幕快照 2017-07-04 下午4.42.52.png


留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[ML筆記] Ensemble - Bagging, Boosting & Stacking

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)