反向傳播演算法
bp (backpropagation algorithm) 演算法所關注的是神經網路中損失函式 c (cost function) 與每乙個權重 和偏置 的偏導。bp 不僅僅是乙個快速的演算法,其同時為我們提供了乙個視角,讓我們觀察權值和偏置是如何影響網路輸出的。
譯者注:本文中所描述的網路以層為單位,如果把層當做圖的節點,資料流向作為圖的有向邊,那麼本文所描述的網路所抽象出的圖一定是有向無環的。本文並沒有翻譯原文所有內容。
反向傳播演算法簡介(bp)
1. 熱身:利用矩陣實現網路計算
2. 損失函式的兩個特點
3. hadamard 積,
4. bp 演算法所依賴的四個方程
4.1 bp1:輸出層損失值計算
4.2 bp2:使用 計算
4.3 bp3:偏置值對網路損失值的影響
4.4 bp4:權值對網路損失值的影響
先介紹一種網路權重的數學標記法:,這個數學標記表示神經網路中第 層的第 個元素和第 層第 個元素之間的權重。同樣, 表示網路第 層第 個元素的偏置值, 表示 層第 個元素的啟用函式輸出值。利用這種數學標記法, 可以表示為:
其中 為神經元的啟用函式,使用矩陣形式表示上述表示式:
定義 為神經元啟用函式的輸入值則可以將上面表示式 表示為:
bp 演算法用於計算網路中所有權重 和偏置 關於損失函式 的偏導數 和。為了使 bp 演算法正常執行,損失函式需要滿足兩個條件。在給出這兩個條件前,我們先介紹一種常用的均方差損失函式,如式所示:
表示式 中變數分別為: 是訓練網路的樣本個數; 是訓練樣本 的期望值(也就是樣本的標籤值); 表示網路的層數; 是網路在輸入為 時輸出層的輸出。
現在描述我們對損失函式的要求。首先,損失函式可以寫成所有訓練樣本損失值均值的形式: 。
我們做上面的要求是因為訓練的過程中我們常常使用批訓練的方式,而不是每次只使用乙個樣本訓練網路。批訓練之後我們求當前批次樣本損失值的平均數來更新權重和偏置,所以損失函式要滿足疊加定理。
其次,損失函式可以使用網路輸出層的輸出作為引數:, 是網路輸出層的輸出,如果不滿足這個要求我們將不能定量分析網路的效能(因為無法計算網路的損失值)。以均方差損失函式為例,當樣本為 時,網路的損失值為:
上式中所有元素的值都是已知的, 是標籤、 是網路輸出層的輸出。
hadamardd 積(哈達瑪積)表示矩陣按對應元素做乘法:,例如:
bp 演算法用於計算網路中權值與偏置關於網路損失值的偏導,也就是計算:和 。在計算偏導前我們先引入乙個中間變數 ,這個變數表示網路第 層第 個元素的輸入值()對整個網路損失的影響。bp 演算法可以幫我們計算出 ,然後我們就可以通過 得到和 。
為了便於理解,這裡我們假設網路中的某個神經元(第 層第 個)旁邊住著乙個小惡魔,它可以幫我們調整神經元的輸入()。小惡魔不出手時這個神經元的輸入為:,小惡魔出手後,當前神經元的輸入為:,其中 是小惡魔做的調整,此時這個神經元的輸出為 。小惡魔對當前神經元的調整最終將影響整個網路的輸出,小惡魔出手後對整個網路損失值的影響為:。
如果這是乙個善良的小惡魔,那麼它可以幫我們調整輸入以減少網路的損失值。如果 的值不為0,那麼調整,將減小整個網路的損失值( 是學習率,是個比較小的小數)。如果 的值為0,那麼小惡魔的調整對網路損失的貢獻就非常小,因為導數為 0,再大的調整對網路都沒有影響(這裡暫不考慮捨入誤差)。
我們定義 如下:
式的矩陣表示方法為:。bp 演算法可以幫助我們計算網路中每一層的 。
網路輸出層 的計算方式為:
bp1 等號右側偏導部分表示網路輸出層最後的輸出對網路損失的影響強度, 的導數表示這個神經元輸入對整個網路損失的影響強度(下有證明)。
需要注意的是對於最後一層而言,bp1 的結果是很容易計算的。依賴於損失函式的形式。舉個例子,如果我們使用式中的均方差作為最終的損失函式,那麼。
以矩陣的形式表示:
如果損失函式還是均方差的話,那麼 ,從而可得:
證明:
先給出公式:
是網路第層權值矩陣的轉置。結合和,我們可以計算出網路中所有層的。
證明:
寫成矩陣形式即為式 。
譯者注:
如果將神經網路的每一層都看做乙個函式 , 為當前層的輸入, 是當前層的輸出,則輸入對輸出影響的強度即為函式的導數:。
神經網路一般有很多層,每一層的輸入都是前一層的輸出(這裡只考慮簡單的網路,每一層的輸入只和相鄰的前一層相關),那麼乙個含有兩個隱藏層的網路可以用函式 表示。其中 是整個網路的輸入, 表示第一層網路, 表示第二層網路, 為整個網路的輸出。
在已知第二層網路輸入的前提下,。在已知網路第一層輸入 的前提下,求 需要使用微積分中的鏈式求導法則,即:
式中所包含的思想和式是相同的,在已知 的前提下 也是已知的。因為 和 的函式形式是已知的故其導數形式也是已知的。
綜上所述,所有層的 都是可以通過鏈式求導法則進行計算的。
網路中偏置值 的變化對網路損失值的影響可以使用如下表示式進行計算:
結合可證式:
從式可知,我們可以使用來計算偏置值關於損失函式的梯度。
告訴我們,我們可以使用前一層網路的輸出和 來計算權值關於損失函式的梯度,而這些值都是已知的。
證明:
觀察上面幾個方程,對於輸出層而言,如果非常大且我們使用的啟用函式為,那麼,此時,網路是無法更新權重與偏置的,即網路失去了學習能力。
隨著網路層數的增加,位於左側的層其權值與偏置也將非常難以更新,因為 值向左傳播的過程中會越來越接近於0。因此,好的啟用函式對網路的訓練是有益的,而且網路的層數也不是越多越好,跨層連線(如resnet)對網路的訓練也是有益的。
bp所依賴的四個方程總結如下:
反向傳播演算法
首先我們對數學符號做一些約定。我們首先考慮簡單的情況 前饋神經網路,如圖 所示。我們先假設任意兩層之間沒有權值共享。方向傳播演算法本質上就是梯度下降演算法,所以我們要對損失函式關於每個引數求導。設單個輸入例項 x 損失函式為 j x 那麼我們要求解 j wi 和 j bi i 1,2,n 對 j 關...
反向傳播演算法
反向傳播演算法的工作機制為對 錯誤的神經元施以懲罰。從輸出層開始,向上層次查詢 錯誤的神經元,微調這些神經元輸入值的權重,以達到修復輸出錯誤的目的。神經元之所以給出錯誤的 原因在於它前面為其提供輸入的神經元,更確切地說是由兩個神經元之間的權重及輸入值決定的。我們可以嘗試對權重進行微調。每次調整的幅度...
反向傳播演算法
看了很多有關神經網路的資料,一直對於反向傳播演算法總是不理解,對於其過程也是覺得很複雜,讓人想放棄,寫一篇部落格來從頭到尾來擼一遍反向傳播,讓這個黑盒子變透明。主要涉及到的數學方法,就是求偏導數,鏈式法則,沒有其他的複雜的數學公式了 當然求偏導的原理,是利用梯度下降法 因為是要將誤差減小,那麼就需要...