神經網絡-前向傳播與反向傳播

一、前言

這是一場以誤差(Error)爲主導的反向傳播(Back Propagation)運動,旨在得到最優的全局參數矩陣,進而將多層神經網絡應用到分類或者回歸任務中去。

前向傳遞輸入信號直至輸出產生誤差,反向傳播誤差信息更新權重矩陣。這兩句話很好的形容了信息的流動方向,權重得以在信息雙向流動中得到優化,其實就類似一個帶反饋校正循環的電子信號處理系統。

我們知道梯度下降可以應對帶有明確求導函數的情況,或者說可以應對那些可以求出誤差的情況,比如邏輯迴歸(Logistic Regression),我們可以把它看做沒有隱層的網絡;但對於多隱層的神經網絡,輸出層可以直接求出誤差來更新參數,但其中隱層的誤差是不存在的,因此不能對它直接應用梯度下降,而是先將誤差反向傳播至隱層,然後再應用梯度下降,其中將誤差從末層往前傳遞的過程需要鏈式法則(Chain Rule)的幫助,因此反向傳播算法可以說是梯度下降在鏈式法則中的應用

二、完整流程

上邊的栗子從直觀角度瞭解了反向傳播,接下來就詳細的介紹其中兩個流程前向傳播與反向傳播,在介紹之前先統一一下標記。

3.1 數學標記

1552808297353453.pnguploading.4e448015.gif正在上傳…重新上傳取消

3.2 前向傳播

如何將輸入層的信號傳輸至隱藏層呢,以隱藏層節點c爲例,站在節點c上往後看(輸入層的方向),可以看到有兩個箭頭指向節點c,因此a,b節點的信息將傳遞給c,同時每個箭頭有一定的權重,因此對於c節點來說,輸入信號爲:

同理,節點d的輸入信號爲:

由於計算機善於做帶有循環的任務,因此我們可以用矩陣相乘來表示:

所以,隱藏層節點經過非線性變換後的輸出表示如下:

同理,輸出層的輸入信號表示爲權重矩陣乘以上一層的輸出:

同樣,輸出層節點經過非線性映射後的最終輸出表示爲:

輸入信號在權重矩陣們的幫助下,得到每一層的輸出,最終到達輸出層。可見,權重矩陣在前向傳播信號的過程中扮演着運輸兵的作用,起到承上啓下的功能。

3.3 反向傳播

既然梯度下降需要每一層都有明確的誤差才能更新參數,所以接下來的重點是如何將輸出層的誤差反向傳播給隱藏層。

其中輸出層、隱藏層節點的誤差如圖所示,輸出層誤差已知,接下來對隱藏層第一個節點c作誤差分析。還是站在節點c上,不同的是這次是往前看(輸出層的方向),可以看到指向c節點的兩個藍色粗箭頭是從節點e和節點f開始的,因此對於節點c的誤差肯定是和輸出層的節點e和f有關。

不難發現,輸出層的節點e有箭頭分別指向了隱藏層的節點c和d,因此對於隱藏節點e的誤差不能被隱藏節點c霸爲己有,而是要服從按勞分配的原則(按權重分配),同理節點f的誤差也需服從這樣的原則,因此對於隱藏層節點c的誤差爲:

同理,對於隱藏層節點d的誤差爲:

1552808299951117.pnguploading.4e448015.gif轉存失敗重新上傳取消

爲了減少工作量,我們還是樂意寫成矩陣相乘的形式:

你會發現這個矩陣比較繁瑣,如果能夠簡化到前向傳播那樣的形式就更好了。實際上我們可以這麼來做,只要不破壞它們的比例就好,因此我們可以忽略掉分母部分,所以重新成矩陣形式爲:

1552808299157654.pnguploading.4e448015.gif正在上傳…重新上傳取消

仔細觀察,你會發現這個權重矩陣,其實是前向傳播時權重矩陣w的轉置,因此簡寫形式如下:

不難發現,輸出層誤差在轉置權重矩陣的幫助下,傳遞到了隱藏層,這樣我們就可以利用間接誤差來更新與隱藏層相連的權重矩陣。可見,權重矩陣在反向傳播的過程中同樣扮演着運輸兵的作用,只不過這次是搬運的輸出誤差,而不是輸入信號(我們不生產誤差,只是誤差的搬運工(っ̯ -。))。

四、鏈式求導

第三部分大致介紹了輸入信息的前向傳播與輸出誤差的後向傳播,接下來就根據求得的誤差來更新參數。

首先對隱藏層的w11進行參數更新,更新之前讓我們從後往前推導,直到預見w11爲止:

1552808299306008.pnguploading.4e448015.gif正在上傳…重新上傳取消

因此誤差對w11求偏導如下:

求導得如下公式(所有值已知):

同理,誤差對於w12的偏導如下:

1552808300905723.pnguploading.4e448015.gif正在上傳…重新上傳取消

同樣,求導得w12的求值公式:

同理,誤差對於偏置求偏導如下:

帶入上述公式爲:

接着對輸入層的w11進行參數更新,更新之前我們依然從後往前推導,直到預見第一層的w11爲止(只不過這次需要往前推的更久一些):

1552808301257012.pnguploading.4e448015.gif正在上傳…重新上傳取消

因此誤差對輸入層的w11求偏導如下:

求導得如下公式(有點長(ฅ́˘ฅ̀)):

同理,輸入層的其他三個參數按照同樣的方法即可求出各自的偏導,在這不再贅述。

在每個參數偏導數明確的情況下,帶入梯度下降公式即可(不在重點介紹):

至此,利用鏈式法則來對每層參數進行更新的任務已經完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章