一. 概述
多層網絡的學習擬合能力比單層網絡要強大很多。所以想要訓練多層網絡,前面的簡單感知機學習方法顯然有些不足,需要擬合能力更加強大的算法。反向傳播算法( Back Propagation,BP)是其中的經典方法,它可以說是現今最成功的神經網絡算法,現實當中使用到神經網絡時,大多是使用BP算法訓練的。BP算法不僅可以用於多層前饋神經網絡,還可以用於其他類型神經網絡,例如LSTM模型,通常所說的BP網絡,一般是用BP算法訓練的多層前饋網絡。
二. BP算法
我們可以先通過BP網絡的走向圖大致掌握以下反向傳播算法的主要用處,從輸入層開始,數據進入到網絡中經過每一層的計算變化,最終得出實際輸出。然后和期望輸出做比較計算損失值,此時的損失值將按照反方向逐漸向前傳播計算,通過梯度下降的方式優化網絡中的參數,求取出符合要求的網絡模型。如圖1中所示:
圖1:BP網絡結構圖
接下來我們將通過公式計算逐步的展示BP網絡的基本結構。最開始要假設我們有一個固定訓練集合{(x1,y1),…,(xm,ym)},它的樣本總數為m。這樣我們就可以利用批量梯度下降法來求解參數,也屬於有監督學習方法。具體到每個樣本(x,y),其代價函數為下式:
對於給定有m個樣本的數據集,我們可以定義整體的代價函數為:
上式中的第一項J(w,b)是均方差項。而第二項則是規則化項,是用來約束解以達到結構風險最小化( Structural risk minimization,SRM),目的是防止模型出現過擬合( over fitting)。
我們利用梯度下降法,每一次迭代都按照下面的公式對參數W和b進行更新:
其中α是學習速率。關鍵步驟在於計算偏導數。我們現在開始反向傳播算法的介紹,它是計算偏導數的一種有效方法。
首先了解一下如何使用反向傳播算法來計算和
,這兩項是單個樣例(x,y)的代價函數J(W,b;x,y)的偏導數。只有我們求出該偏導數,后面才可以推導出整體代價函數J(W,b)的偏導數:
以上兩行公式稍有不同,第一行比第二行多出一項,因為權重衰減是作用於W而不是b。
BP算法的總體流程:首先對每個樣本數據,進行前向傳播計算,依次計算出每層每個單元的激活值。接着計算出第l層的每個節點i的“殘差”值δ,該值直接體現了這個單元對最終的輸出有多大的影響力。最后一層輸出層則可以直接獲得最終結果和輸出結果的差值,我們定義為δ(,而對於中間的隱藏層的殘差,我們則通過加權平均下層(l+1層)殘差來計算。
BP算法的具體推導過程如下:
1)前饋網絡傳導的計算,逐層算出L2到最后一層的每層節點的激活值。
2)計算各節點的殘差值,對於輸出層,使用如下公式:
上式子中的推導過程如下:
3)從最后一層依次向前推導到第2層,第l層的殘差為:
推導可得出:
依照上面只需將nl替換為l就可以推導到中間層l與l=1的殘差關系。可以更新所需的偏導數:
最后得出BP算法的描述:
在下面的偽代碼中,ΔW0是一個與矩陣W維度相同的矩陣,△b0是一個與b0維度相同的向量。注意這里“ΔW”是一個矩陣。下面,我們實現批量梯度下降法中的一次迭代:
1)對於所有l,令△W0:=0,Δb0:=0(設置為全零矩陣或全零向量)。
2)對於i=1到m,
a)使用反向傳播算法計算和
。
b)計算。
c)計算。
3)更新權重參數:
現在,我們可以重復梯度下降法的迭代步驟來減小代價函數J(w,b)的值,進而求解我們的神經網絡。
三. 總結
整體來說BP網絡就是一種具有自我更新參數能力,還具有一定的容錯性和抗干擾性。反向傳播算法的基本思想:學習過程由數據集信號的正向傳播和誤差的反向傳播兩個過程組成,數據集從輸入層輸入,經隱層處理以后,傳向輸出層。如果輸出層的實際輸出和期望輸出不符合,就進入誤差的反向傳播階段。反向傳播階段接收損失值逐步前向求偏導,進行梯度下降更新參數,最后使得輸出的結果符合我們的要求,模型訓練完成。