1. 程式人生 > >後向傳播算法“backpropragation”詳解

後向傳播算法“backpropragation”詳解

關聯 常常 ges 傳播 鏈式 包括 alt img 技術

為什麽要使用backpropagation?

技術分享

梯度下降不用多說,如果不清楚的可以參考http://www.cnblogs.com/yangmang/p/6279054.html。

神經網絡的參數集合theta,包括超級多組weight和bais。

要使用梯度下降,就需要計算每一個參數的梯度,但是神經網絡常常有數以萬計,甚至百萬的參數,所以需要使用backpropagation來高效地計算梯度。

backpropagation的推導

backpropagation背後的原理其實很簡單,就是求導的鏈式法則。

技術分享

技術分享

技術分享

我們從上面的公式開始推導。以其中一個神經元為例。

技術分享

如上面的紅框中所示,根據鏈式法則,l對w的偏導數,等於z對w的偏導數乘以l對z的偏導數。

l對w的梯度可以分為兩部分:

前向傳播:對所有參數求梯度;

後向傳播:對所有激活函數的輸入z求梯度;

技術分享

前向傳播的梯度求法簡單,就z對w求偏導數,直接求出就是對應的輸入xi

技術分享

技術分享

後向傳播比較復雜,需要再使用鏈式法則,如紅框中所示。l/z的梯度分解為a/z和l/a的梯度。

a對z的導數圖像如上所示,現在關鍵就是求l對a的偏導數。

技術分享

為了求出l對a的偏導數,繼續使用鏈式法則,關聯上後面的兩個神經元。

現在問題就轉化成了,求紅框中的兩個問號的梯度/

技術分享

現在假設兩個問號梯度已知,就可以求出之前l對z的梯度了。

技術分享

現在來看看怎麽可以求出l對z的梯度。

技術分享

第一種情況:當z‘和z’‘為輸出層時。根據鏈式法則,y/z和l/y的梯度都是可解的,這樣問題就解決了。

技術分享

第二種情況:不是輸出層。就是說還有後續的神經元幾點連接。

技術分享

循環計算l對z的梯度,直到輸出層,出現case1的情況,問題也就解決了。

技術分享

所以,我們就可以從輸出層開始,反向計算l對每層z的梯度,在結合前向傳播得到的梯度,就可以計算出梯度下降所需的梯度了。

而且,反向傳播的復雜度和前向傳播是一樣的,這樣就大大提升了梯度計算的效率。

最後結果就是這樣的:

技術分享

後向傳播算法“backpropragation”詳解