【轉載】反向傳播算法解釋

https://www.jianshu.com/p/964345dddb70算法

 

1、前言網絡

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

前向傳遞輸入信號直至輸出產生偏差,反向傳播偏差信息更新權重矩陣。這兩句話很好的形容了信息的流動方向,權重得以在信息雙向流動中獲得優化,這讓我想到了北京城的夜景,車輛川流不息,車水馬龍,你來我往(* ॑꒳ ॑* )⋆*。學習

至於爲何會提出反向傳播算法,我直接應用梯度降低(Gradient Descent)不行嗎?想必你們確定有過這樣的疑問。答案確定是不行的,縱然梯度降低神通廣大,但卻不是萬能的。梯度降低能夠應對帶有明確求導函數的狀況,或者說能夠應對那些能夠求出偏差的狀況,好比邏輯迴歸(Logistic Regression),咱們能夠把它看作沒有隱層的網絡;但對於多隱層的神經網絡,輸出層能夠直接求出偏差來更新參數,但其中隱層的偏差是不存在的,所以不能對它直接應用梯度降低,而是先將偏差反向傳播至隱層,而後再應用梯度降低,其中將偏差從末層往前傳遞的過程須要鏈式法則(Chain Rule)的幫助,所以反向傳播算法能夠說是梯度降低在鏈式法則中的應用。優化

2、舉個栗子3d

爲了幫助較好的理解反向傳播概念,對它有一個直觀的理解,接下來就拿猜數字遊戲舉個栗子。orm

2.1 兩人猜數字blog

這一過程類比沒有隱層的神經網絡,好比邏輯迴歸,其中小黃帽表明輸出層節點,左側接受輸入信號,右側產生輸出結果,小藍貓則表明了偏差,指導參數往更優的方向調整。因爲小藍貓能夠直接將偏差反饋給小黃帽,同時只有一個參數矩陣和小黃帽直接相連,因此能夠直接經過偏差進行參數優化(實縱線),迭代幾輪,偏差會下降到最小。遊戲

 
 

2.2 三人猜數字深度學習

這一過程類比帶有一個隱層的三層神經網絡,其中小女孩表明隱藏層節點,小黃帽依然表明輸出層節點,小女孩左側接受輸入信號,通過隱層節點產生輸出結果,小藍貓表明了偏差,指導參數往更優的方向調整。因爲小藍貓能夠直接將偏差反饋給小黃帽,因此與小黃帽直接相連的左側參數矩陣能夠直接經過偏差進行參數優化(實縱線);而與小女孩直接相連的左側參數矩陣因爲不能獲得小藍貓的直接反饋而不能直接被優化(虛棕線)。但因爲反向傳播算法使得小藍貓的反饋能夠被傳遞到小女孩那進而產生間接偏差,因此與小女孩直接相連的左側權重矩陣能夠經過間接偏差獲得權重更新,迭代幾輪,偏差會下降到最小。

 
 

3、完整流程

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

3.1 數學標記

 
 
 
 

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的偏差爲:

 
 

爲了減小工做量,咱們仍是樂意寫成矩陣相乘的形式:

 
 

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

 
 

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

 
 

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

4、鏈式求導

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

 
 

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

 
 

所以偏差對w11求偏導以下:

 
 

求導得以下公式(全部值已知):

 
 

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

 
 

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

 
 

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

 
 

帶入上述公式爲:

 
 

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

 
 

所以偏差對輸入層的w11求偏導以下:

 

 
 

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

 

 
 

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

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

 
 

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

5、引入delta

利用鏈式法則來更新權重你會發現其實這個方法簡單,但過於冗長。因爲更新的過程能夠看作是從網絡的輸入層到輸出層從前日後更新,每次更新的時候都須要從新計算節點的偏差,所以會存在一些沒必要要的重複計算。其實對於已經計算完畢的節點咱們徹底能夠直接拿來用,所以咱們能夠從新看待這個問題,從後往前更新。先更新後邊的權重,以後再在此基礎上利用更新後邊的權重產生的中間值來更新較靠前的參數。這個中間變量就是下文要介紹的delta變量,一來簡化公式,二來減小計算量,有點動態規劃的趕腳。

接下來用事實說話,你們仔細觀察一下在第四部分鏈式求導部分偏差對於輸出層的w11以及隱藏層的w11求偏導以及偏置的求偏導的過程,你會發現,三個公式存在相同的部分,同時隱藏層參數求偏導的過程會用到輸出層參數求偏導的部分公式,這正是引入了中間變量delta的緣由(其實紅框的公式就是delta的定義)。

 
 

你們看一下經典書籍《神經網絡與深度學習》中對於delta的描述爲在第l層第j個神經元上的偏差,定義爲偏差對於當前帶權輸入求偏導,數學公式以下:

 
 

所以輸出層的偏差能夠表示爲(上圖紅色框公式):

 
 

隱藏層的偏差能夠表示爲(上圖藍色框公式):

 
 

同時對於權重更新的表示爲(上圖綠色框公式):

 
 

其實對於偏置的更新表示爲(上圖紅色框):

 
 

上述4個公式其實就是《神經網絡與深度學習》書中傳說的反向傳播4大公式(詳細推導證實可移步此書):

 
 

仔細觀察,你會發現BP1與BP2相結合就能發揮出最大功效,能夠計算出任意層的偏差,只要首先利用BP1公式計算出輸出層偏差,而後利用BP2層層傳遞,就無敵了,這也正是偏差反向傳播算法的原因吧。同時對於權重w以及偏置b咱們就能夠經過BP3和BP4公式來計算了。

至此,咱們介紹了反向傳播的相關知識,一開始看反向傳播資料的時候總以爲相對獨立,這個教材這麼講,另外一篇博客又換一個講法,始終不能很好的理解其中的含義,到目前爲止,思路相對清晰。咱們先從大體流程上介紹了反向傳播的前因後果,接着用鏈式求導法則來計算權重以及偏置的偏導,進而咱們推出了跟經典著做同樣樣兒的結論,所以本人以爲較爲詳細,應該對初學者有必定的借鑑意義,但願對你們有所幫助

做者:張小磊啊 連接:https://www.jianshu.com/p/964345dddb70 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索