Backpropagation-反向傳播算法
1 前言
1.1 爲什麼要用 Backpropagation
在神經網絡中的梯度下降算法和之前求線性迴歸方程中用的沒有太大的區別,都是不斷的計算微分,然後更新參數,最終找到一個最優解。
但是在神經網絡中,有着大量可能多達上百萬個的參數,所以傳統的求微分方法行不通,計算量太大無法快速有效的求出微分。
1.2 鏈式求導法則(Chain Rule)
Backprogation 中設計的最重要的數學知識就是 chain rule,通過下面的圖片回顧一下。這個都不會就要回去讀高中了。
2 Backpropagation
2.1 應該求什麼
從上一節內容我們知道,每一個神經網絡都需要定義一個 Loss Function, 用來定義實際輸出與預期輸出之間的誤差 ,則總的誤差就是
我們的目的就是要使上式的值最小。用 Gradient descent 來做的話就是這個式子對權值 求偏導,即
由此我們知道只需要求每個 對 的偏導,然後全部加起來就可以了。
2.2 Forward pass
對上面這個 Neural 來說,根據 Chain Rule,
很明顯,計算 是很容易的,如在上圖中,
,
即, 就等於其所在邊的輸入。
2.3 Backward pass
所以我們剩下的問題是計算 ,(貼公式真是太麻煩了 :cry:),但是我們沒辦法直接算這個偏導,所以又要再做變換了。
由上圖可知,
其中, ,所以 .
於是我們剩下的任務就是求 ,根據上圖的公式我們知道剩下要求的就是 .
接下來,我們假設 是已知的(通過某些神奇的方法算出來了),於是將上述的東西湊起來,我們就可以算出
然後,我們繼續假設下一層是輸出層,如下圖
我們發現,圖中的公式是可以計算的(看不出來就多看幾遍,再看不出來就假裝已經看出來了),於是我們把所有要求的都求出來了,就可以計算微分值了。
但是,如果下一層不是輸出層呢?那就把問題繼續往下一層傳遞,直到輸出層,然後就可以從最後一層一直往前計算回來了。如下圖,相當於把輸出作爲輸入,建立一個反向的神經網絡。
3. 總結
所以,Backpropagation 算法的流程就是:
- Forward Pass: 算出每一層的輸出 ,也就是 .
- Backward Pass: 反轉神經網絡,從輸出層往回計算每一層的 .
- 將前面算出來的兩項相乘,得到 .
對我來說,我覺得把這個算法過程當成是一次遞歸就會很好理解,Forward Pass 就是函數一層層的調用,達到返回條件(在BackPropagation中是遇到輸出層)就開始返回,也就是 Backward Pass.
最後,寫一堆公式和符號真是麻煩啊!