反向傳播算法簡介

<!doctype html>



反向傳播算法


css

反向傳播算法簡介(BP)

原文地址:http://neuralnetworksanddeeplearning.com/chap2.htmlhtml

BP (Backpropagation algorithm) 算法所關注的是神經網絡中損失函數 C (cost function) 與每個權重 和偏置 的偏導。BP 不只僅是一個快速的算法,其同時爲咱們提供了一個視角,讓咱們觀察權值和偏置是如何影響網絡輸出的。node

譯者注:本文中所描述的網絡以層爲單位,若是把層當作圖的節點,數據流向做爲圖的有向邊,那麼本文所描述的網絡所抽象出的圖必定是有向無環的。本文並無翻譯原文全部內容web

1. 熱身:利用矩陣實現網絡計算

先介紹一種網絡權重的數學標記法: ,這個數學標記表示神經網絡中第 層的第 個元素和第 層第 個元素之間的權重。一樣, 表示網絡第 層第 個元素的偏置值, 表示 層第 個元素的激活函數輸出值。利用這種數學標記法, 能夠表示爲:canvas

其中 爲神經元的激活函數,使用矩陣形式表示上述表達式:windows

定義 爲神經元激活函數的輸入值則能夠將上面表達式 表示爲:網絡

2. 損失函數的兩個特色

BP 算法用於計算網絡中全部權重 和偏置 關於損失函數 的偏導數 。爲了使 BP 算法正常運行,損失函數須要知足兩個條件。在給出這兩個條件前,咱們先介紹一種經常使用的均方差損失函數,如式 所示:app

表達式 中變量分別爲: 是訓練網絡的樣本個數; 是訓練樣本 的指望值(也就是樣本的標籤值); 表示網絡的層數; 是網絡在輸入爲 時輸出層的輸出。less

如今描述咱們對損失函數的要求。首先,損失函數能夠寫成全部訓練樣本損失值均值的形式:

咱們作上面的要求是由於訓練的過程當中咱們經常使用批訓練的方式,而不是每次只使用一個樣本訓練網絡。批訓練以後咱們求當前批次樣本損失值的平均數來更新權重和偏置,因此損失函數要知足疊加定理。

其次,損失函數可使用網絡輸出層的輸出做爲參數: 是網絡輸出層的輸出,若是不知足這個要求咱們將不能定量分析網絡的性能(由於沒法計算網絡的損失值)。以均方差損失函數爲例,當樣本爲 時,網絡的損失值爲:

上式中全部元素的值都是已知的, 是標籤、 是網絡輸出層的輸出。

3. Hadamard 積,

Hadamardd 積(哈達瑪積)表示矩陣按對應元素作乘法: ,例如:

4. BP 算法所依賴的四個方程

BP 算法用於計算網絡中權值與偏置關於網絡損失值的偏導,也就是計算: 。在計算偏導前咱們先引入一箇中間變量 ,這個變量表示網絡第 層第 個元素的輸入值( )對整個網絡損失的影響。BP 算法能夠幫咱們計算出 ,而後咱們就能夠經過 獲得

爲了便於理解,這裏咱們假設網絡中的某個神經元(第 層第 個)旁邊住着一個小惡魔,它能夠幫咱們調整神經元的輸入( )。小惡魔不出手時這個神經元的輸入爲: ,小惡魔出手後,當前神經元的輸入爲: ,其中 是小惡魔作的調整,此時這個神經元的輸出爲 。小惡魔對當前神經元的調整最終將影響整個網絡的輸出,小惡魔出手後對整個網絡損失值的影響爲:

若是這是一個善良的小惡魔,那麼它能夠幫咱們調整輸入以減小網絡的損失值。若是 的值不爲0,那麼調整 ,將減少整個網絡的損失值( 是學習率,是個比較小的小數)。若是 的值爲0,那麼小惡魔的調整對網絡損失的貢獻就很是小,由於導數爲 0,再大的調整對網絡都沒有影響(這裏暫不考慮舍入偏差)。

咱們定義 以下:

的矩陣表示方法爲: 。BP 算法能夠幫助咱們計算網絡中每一層的

4.1 BP1:輸出層損失值計算

網絡輸出層 的計算方式爲:

BP1 等號右側偏導部分表示網絡輸出層最後的輸出對網絡損失的影響強度, 的導數表示這個神經元輸入對整個網絡損失的影響強度(下有證實)。

須要注意的是對於最後一層而言,BP1 的結果是很容易計算的。 依賴於損失函數的形式。舉個例子,若是咱們使用式 中的均方差做爲最終的損失函數,那麼

以矩陣的形式表示

若是損失函數仍是均方差的話,那麼 ,從而可得:

證實:

4.2 BP2:使用 計算

先給出公式:

是網絡第 層權值矩陣的轉置。結合 ,咱們能夠計算出網絡中全部層的

證實:

使

寫成矩陣形式即爲式

譯者注

若是將神經網絡的每一層都看作一個函數 爲當前層的輸入, 是當前層的輸出,則輸入對輸出影響的強度即爲函數的導數:

神經網絡通常有不少層,每一層的輸入都是前一層的輸出(這裏只考慮簡單的網絡,每一層的輸入只和相鄰的前一層相關),那麼一個含有兩個隱藏層的網絡能夠用函數 表示。其中 是整個網絡的輸入, 表示第一層網絡, 表示第二層網絡, 爲整個網絡的輸出。

在已知第二層網絡輸入的前提下, 。在已知網絡第一層輸入 的前提下,求 須要使用微積分中的鏈式求導法則,即:

中所包含的思想和式 是相同的,在已知 的前提下 也是已知的。由於 的函數形式是已知的故其導數形式也是已知的。

綜上所述,全部層的 都是能夠經過鏈式求導法則進行計算的。

4.3 BP3:偏置值對網絡損失值的影響

網絡中偏置值 的變化對網絡損失值的影響可使用以下表達式進行計算:

結合 可證式

從式 可知,咱們可使用 來計算偏置值關於損失函數的梯度。

4.4 BP4:權值對網絡損失值的影響

告訴咱們,咱們可使用前一層網絡的輸出和 來計算權值關於損失函數的梯度,而這些值都是已知的。

證實:

觀察上面幾個方程,對於輸出層而言,若是 很是大且咱們使用的激活函數爲 ,那麼 ,此時 ,網絡是沒法更新權重與偏置的,即網絡失去了學習能力。

隨着網絡層數的增長,位於左側的層其權值與偏置也將很是難以更新,由於 值向左傳播的過程當中會愈來愈接近於0。所以,好的激活函數對網絡的訓練是有益的,並且網絡的層數也不是越多越好,跨層鏈接(如ResNet)對網絡的訓練也是有益的。

BP所依賴的四個方程總結以下:

相關文章
相關標籤/搜索