天天看點

反向傳播算法”過程及公式推導

反向傳播算法”過程及公式推導

 考研對資訊的擷取至關重要,此公衆号會發表計算機考研(初複試資訊)、夏令營等資料,友善考研人對資訊的擷取,節約自身查找資料的時間

目錄

前言(扯犢子)

定義

算法講解(耐心看)

CASE 1(圖示講解,看不太懂沒關系,看第二組圖)

CASE 2(具體計算舉例,嫌麻煩的可直接看這個,強烈推薦!!!!!)

References

前言(扯犢子)

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

前向傳遞輸入信号直至輸出産生誤差,反向傳播誤差資訊更新權重矩陣。這兩句話很好的形容了資訊的流動方向,權重得以在資訊雙向流動中得到優化。

至于為什麼會提出反向傳播算法,我直接應用梯度下降(Gradient Descent)不行嗎?想必大家肯定有過這樣的疑問。答案肯定是不行的,縱然梯度下降神通廣大,但卻不是萬能的。梯度下降可以應對帶有明确求導函數的情況,或者說可以應對那些可以求出誤差的情況,比如邏輯回歸(Logistic Regression),我們可以把它看做沒有隐層的網絡;但對于多隐層的神經網絡,輸出層可以直接求出誤差來更新參數,但其中隐層的誤差是不存在的,是以不能對它直接應用梯度下降,而是先将誤差反向傳播至隐層,然後再應用梯度下降,其中将誤差從末層往前傳遞的過程需要鍊式法則(Chain Rule)的幫助,是以反向傳播算法可以說是梯度下降在鍊式法則中的應用。

定義

首先來一個反向傳播算法的定義(轉自維基百科):反向傳播(英語:Backpropagation,縮寫為BP)是“誤差反向傳播”的簡稱,是一種與最優化方法(如梯度下降法)結合使用的,用來訓練人工神經網絡的常見方法。 該方法對網絡中所有權重計算損失函數的梯度。 這個梯度會回報給最優化方法,用來更新權值以最小化損失函數。(誤差的反向傳播)

算法講解(耐心看)

如果去問一下了解BP算法的人“BP算法怎推導?”,大機率得到的回答是“不就是鍊式求導法則嘛”,我覺得這種答案對于提問題的人來說沒有任何幫助。BP的推導需要鍊式求導不錯,但提問者往往想得到的是直覺的回答,畢竟了解才是王道。直覺的答案,非圖解莫屬了。

注:下圖的确是反向傳播算法,但不是深度學習中的backprop,不過backward的大體思想是一樣的,畢竟誤差沒法從前往後計算啊。(在深度學習中操作的是計算圖—Computational graph),如果暫時不了解上面那句話,你可以當我沒說過,不要緊~(手動?)

下面通過兩組圖來進行神經網絡前向傳播和反向傳播算法的講解,第一組圖來自國外某網站,配圖生動形象。如果對你來說,單純的講解了解起來比較費勁,那麼可以參考第二組圖——一個具體的前向傳播和反向傳播算法的例子。通過本篇部落格,相信就算是剛剛入門的小白(隻要有一點點高等數學基礎知識),也一定可以了解反向傳播算法!

CASE 1(圖示講解,看不太懂沒關系,看第二組圖)

首先拿一個簡單的三層神經網絡來舉例,如下:

反向傳播算法”過程及公式推導

每個神經元由兩部分組成,第一部分(e)是輸入值和權重系數乘積的和,第二部分(f(e))是一個激活函數(非線性函數)的輸出, y=f(e)即為某個神經元的輸出,如下:

反向傳播算法”過程及公式推導

下面是前向傳播過程:

反向傳播算法”過程及公式推導

-----------手動分割-----------

反向傳播算法”過程及公式推導

-----------手動分割-----------

反向傳播算法”過程及公式推導

到這裡為止,神經網絡的前向傳播已經完成,最後輸出的y就是本次前向傳播神經網絡計算出來的結果(預測結果),但這個預測結果不一定是正确的,要和真實的标簽(z)相比較,計算預測結果和真實标簽的誤差( δ \delta δ),如下:

反向傳播算法”過程及公式推導

下面開始計算每個神經元的誤差( δ \delta δ):

反向傳播算法”過程及公式推導

(If propagated errors came from few neurons they are added. The illustration is below: )

反向傳播算法”過程及公式推導

下面開始利用反向傳播的誤差,計算各個神經元(權重)的導數,開始反向傳播修改權重(When the error signal for each neuron is computed, the weights coefficients of each neuron input node may be modified. In formulas below d f ( e ) d e \dfrac {df\left( e\right) }{de} dedf(e)​ represents derivative of neuron activation function (which weights are modified). ):

反向傳播算法”過程及公式推導
反向傳播算法”過程及公式推導

-----------手動分割-----------

反向傳播算法”過程及公式推導

-----------手動分割-----------

反向傳播算法”過程及公式推導

Coefficient η \eta η affects network teaching speed.

到此為止,整個網絡的前向,反向傳播和權重更新已經完成,推薦參考上面給出的本教程的連結,如果對純理論講解較難接受,沒關系,強烈推薦第二組圖的例子!!!

CASE 2(具體計算舉例,嫌麻煩的可直接看這個,強烈推薦!!!!!)

首先明确,“正向傳播”求損失,“反向傳播”回傳誤差。同時,神經網絡每層的每個神經元都可以根據誤差信号修正每層的權重,隻要能明确上面兩點,那麼下面的例子,隻要會一點鍊式求導規則,就一定能看懂!

BP算法,也叫 δ \delta δ算法,下面以3層的感覺機為例進行舉例講解。

反向傳播算法”過程及公式推導

上圖的前向傳播(網絡輸出計算)過程如下:(此處為網絡的整個誤差的計算,誤差E計算方法為mse)

反向傳播算法”過程及公式推導

上面的計算過程并不難,隻要耐心一步步的拆開式子,逐漸分解即可。現在還有兩個問題需要解決:

  1. 誤差E有了,怎麼調整權重讓誤差不斷減小?
  2. E是權重w的函數,何如找到使得函數值最小的w。

解決上面問題的方法是梯度下降算法(簡單圖示如下),大家如有不太懂的可先行查閱别的資料,隻要能達到了解線性回歸梯度下降算法的水準即可,這裡不再贅述。

反向傳播算法”過程及公式推導

劃重點,劃重點,劃重點!!!

BP算法的具體例子來喽!!

就算上面的所有東西你都看的迷迷糊糊,通過下面的例子,相信絕大多數人也能很輕松的了解BP算法。如圖是一個簡單的神經網絡用來舉例:

反向傳播算法”過程及公式推導

下面是前向(前饋)運算(激活函數為sigmoid):

反向傳播算法”過程及公式推導

下面是反向傳播(求網絡誤差對各個權重參數的梯度):

我們先來求最簡單的,求誤差E對w5的導數。首先明确這是一個“鍊式求導”過程,要求誤差E對w5的導數,需要先求誤差E對out o1的導數,再求out o1對net o1的導數,最後再求net o1對w5的導數,經過這個鍊式法則,我們就可以求出誤差E對w5的導數(偏導),如下圖所示:(下面第一個公式從右往左看)

反向傳播算法”過程及公式推導

導數(梯度)已經計算出來了,下面就是反向傳播與參數更新過程:

反向傳播算法”過程及公式推導

上面的圖已經很顯然了,如果還看不懂真的得去閉門思過了(開玩笑~),耐心看一下上面的幾張圖,一定能看懂的。

如果要想求誤差E對w1的導數,誤差E對w1的求導路徑不止一條,這會稍微複雜一點,但換湯不換藥,計算過程如下所示:

反向傳播算法”過程及公式推導

至此,“反向傳播算法”及公式推導的過程總算是講完了啦!個人感覺,尤其是第二組圖,還算是蠻通俗易懂的,希望能幫助到大家,共同進步!

感覺本篇講的有點啰嗦了,直接放第二組圖可能會更簡潔,以後争取改進。

以上(麻煩大家 點贊 + 關注 一波啊)

References

http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

https://www.cnblogs.com/charlotte77/p/5629865.html

https://blog.csdn.net/han_xiaoyang

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

繼續閱讀