1. 程式人生 > >神經網路中前向傳播和反向傳播解析

神經網路中前向傳播和反向傳播解析

雖然學深度學習有一段時間了,但是對於一些演算法的具體實現還是模糊不清,用了很久也不是很瞭解,最近在看去年LeCun和Hinton在Nature上發表的deep learning的review,有兩張圖分別是講得網路的前向傳播和反向傳播,下面記錄一下。

前向傳播

前向傳播示意圖
如圖所示,這裡講得已經很清楚了,前向傳播的思想比較簡單。
舉個例子,假設上一層結點i,j,k,…等一些結點與本層的結點w有連線,那麼結點w的值怎麼算呢?就是通過上一層的i,j,k等結點以及對應的連線權值進行加權和運算,最終結果再加上一個偏置項(圖中為了簡單省略了),最後在通過一個非線性函式(即啟用函式),如ReLu,sigmoid等函式,最後得到的結果就是本層結點w的輸出。
最終不斷的通過這種方法一層層的運算,得到輸出層結果。

反向傳播

反向傳播的方法其實也比較簡單,但是因為需要求偏導,而我的數學又不怎麼好,所以一直理解上有困難。下面上圖:
反向傳播示意圖
由於我們前向傳播最終得到的結果,以分類為例,最終總是有誤差的,那麼怎麼減少誤差呢,當前應用廣泛的一個演算法就是梯度下降演算法,但是求梯度就要求偏導數,下面以圖中字母為例講解一下。
設最終總誤差為E,對於輸出那麼E#對於輸出結點yl的偏導數是yl - tl,其中tl是真實值ylzl是指上面提到的啟用函式,zl是上面提到的加權和,那麼這一層的Ezl的偏導數為Ezl=Eylylzl。同理,下一層也是這麼計算,(只不過Eyk計算方法變了),一直反向傳播到輸入層,最後有

Exi=Eyjyjzjzjxi=wij
然後調整這些過程中的權值,再不斷進行前向傳播和反向傳播的過程,最終得到一個比較好的結果