BP算法是迄今為止最為成功的神經網絡學習算法,下面主要以多層前饋神經網絡為例推導該算法。
1. M-P 神經元模型
圖1展示了一個經典的神經元模型。在這個模型中,該神經元收到其他神經元傳來的3個輸入信號,這些輸入信號通過帶權重的連接進行傳遞,神經元接收到的總輸入值將與神經元的閾值進行比較,然后通過“激活函數”處理以產生神經元的輸出。
圖 1 M-P 神經元模型
2. 激活函數
圖1中的神經元輸出可以表示為:
其中wi表示權重,θ表示閾值。為了方便后續的計算,這里將權重和閾值用一個矩陣Θ表示:
y=f(x) 就是激活函數。理想中的激活函數是圖2(a)所示的階躍函數,但由於不連續、不光滑等性質,因此常使用Sigmoid函數作為激活函數。
圖 2 典型的神經元激活函數
存在:
3. 正向傳播
圖3給出了一個多層前饋神經網絡,其中輸入層神經元僅接受輸入,不進行函數處理,隱層和輸出層包含功能神經元。因此,該網絡還可以稱為“兩層網絡”或“單隱層網絡”。
圖 3 一個多層前饋神經網絡示意圖
其中θ(1)表示隱層神經元的輸入權重和閾值,θ(2)表示輸出神經元的權重和閾值。a(i)表示第i層神經元的輸出,z(i)表示第i層神經元加權后的輸入。使用Sigmoid函數作為激活函數,具體過程如下:
可以把上面的 [1; a] 看做是一個完整的 a
這樣就完成了一次正向傳播,通過輸入的特征值x,得到預測的y值。
4. 反向傳播,BP算法
我們需要通過給定的訓練集 D={(x1,y1),(x2,y2),...,(xm,ym)} 來確定神經網絡中的參數,即各功能神經元的權重和閾值Θ。BP是一個迭代學習算法,在迭代的每一輪中采用廣義的感知機學習規則對參數進行更新和估計,任意參數θ的更新估計式為:
對訓練例 (xk,yk) , 假定神經網絡的輸出為a(3)=(a1(3) ,a2(3)) , 則網絡在該樣例上的均方誤差為:
通過該誤差對神經網絡上的參數進行調整。BP算法基於梯度下降策略,以目標的負梯度方向對參數進行調整,對誤差Ek,給定的學習率η,有:
可以看到在輸出層神經元中,θ(2) 先影響到 z(3), 再影響到輸出值 a(3), 最后影響到 Ek,有:
注意,h=0 時,a0(2)=1。輸出層的參數θ(2)就可以更新為:
同樣,隱層的參數θ(1)更新為:
其中在調整上一層參數時已經被計算了。
此時,圖3神經網絡上的參數通過BP算法完成一次迭代了,該迭代過程循環進行,直到達到某些停止條件為止。
5. BP算法流程
輸入:訓練集 D={(x1,y1),(x2,y2),...,(xm,ym)} ,學習率 η
輸出:所有神經元權重和閾值確定的多層前饋神經網絡
1)在 (0, 1) 范圍內隨機初始化所有權重和閾值,即參數θ
2)repeat
3) for all (xk,yk) ∈ D do
4) 根據當前參數及正向傳播理論,計算當前樣本的輸出
5) 計算各層神經元的梯度項e
6) 更新各層權重及閾值θ
7) end for
8) until 達到停止條件
以上內容主要參考吳恩達《機器學習》課程以及周志華《機器學習》