假設一個三層的神經網絡結構圖如下:
對於一個單獨的訓練樣本x其二次代價函數可以寫成:
C = 1/2|| y - aL||2 = 1/2∑j(yj - ajL)2
ajL=σ(zjL)
zjl = ∑kωjklakl-1 + bjl
代價函數C是ajL的函數,ajL又是zjL的函數,zjL又是ωjkL的函數,同時又是akL-1的函數......
證明四個基本方程(BP1-BP4),所有這些都是多元微積分的鏈式法則的推論
δjL = (∂C/∂ajL)σ'(zjL) (BP1)
δjl = ∑k ωkjl+1δkl+1σ'(zjl) (BP2)
∂C/∂ωjkl = δjlakl-1 (BP3)
∂C/∂bjl = δjl (BP4)
1.讓我們從方程(BP1)開始,它給出了輸出誤差δL的表達式。
δjL = ∂C/∂zjL
應用鏈式法則,我們可以就輸出激活值的偏導數的形式重新表示上面的偏導數:
δjL = ∑k (∂C/∂akL)(∂akL/∂zjL)
這里求和是在輸出層的所有神經元k上運行的,當然,第kth個神經元的輸出激活值akL只依賴於當k=j時第jth個神經元的帶權輸入zjL。所以當k≠j
時,∂akL/∂zjL=0。結果簡化為:
δjL = (∂C/∂ajL)(∂ajL/∂zjL)
由於ajL=σ(zjL),右邊第二項可以寫成σ'(zjL),方程變成
δjL = (∂C/∂ajL)σ‘(zjL)
2.證明BP2,它給出了下一層誤差δl+1的形式表示誤差δl。為此我們要以δkl+1=∂C/∂zkl+1的形式重寫 δjl = ∂C/∂zjl
δjl = ∂C/∂zjl
=∑k (∂C/∂zkl+1)(∂zkl+1/∂zjl)
=∑k (∂zkl+1/∂zjl)δkl+1
這里最后一行我們交換了右邊的兩項,並用δkl+1的定義帶入。為此我們對最后一行的第一項求值,
注意:
zkl+1 = ∑jωkjl+1ajl + bkl+1 = ∑jωkjl+1σ(zjl) + bkl+1
做微分得到
∂zkl+1 /∂zjl = ωkjl+1σ'(zjl)
帶入上式:
δjl = ∑k ωkjl+1δkl+1σ'(zjl)
3.證明BP3。計算輸出層∂C/∂ωjkL:
∂C/∂ωjkL = ∑m (∂C/∂amL)(∂amL/∂ωjkL )
這里求和是在輸出層的所有神經元k上運行的,當然,第kth個神經元的輸出激活值amL只依賴於當m=j時第jth個神經元的輸入權重ωjkL。所以當k≠j
時,∂amL/∂ωjkL=0。結果簡化為:
∂C/∂ωjkL = (∂C/∂ajL)(∂ajL/∂zjL)*(∂zjL/∂ωjkL)
= δjLakL-1
計算輸入層上一層(L-1):
∂C/∂ωjkL-1= (∑m(∂C/∂amL)(∂amL/∂zmL)(∂zmL/∂ajL-1))(/∂ajL-1/∂zjL-1)(∂zjL-1/∂ωjkL-1)
= (∑mδmLωmjL)σ'(zjL-1)akL-2
= δjL-1akL-2
對於處輸入層的任何一層(l):
∂C/∂ωjkl = (∂C/∂zjl )(∂zjl/∂ωjkl ) = δjlakl-1
4.證明BP4。計算輸出層∂C/∂bjL:
∂C/∂bjL = ∑m (∂C/∂amL)(∂amL/∂bjL )
這里求和是在輸出層的所有神經元k上運行的,當然,第kth個神經元的輸出激活值amL只依賴於當m=j時第jth個神經元的輸入權重bjL。所以當k≠j
時,∂amL/∂bjL=0。結果簡化為:
∂C/∂bjL = (∂C/∂ajL)(∂ajL/∂zjL)*(∂zjL/∂bjL)
= δjL
計算輸入層上一層(L-1):
∂C/∂bjL-1= (∑m(∂C/∂amL)(∂amL/∂zmL)(∂zmL/∂ajL-1))(/∂ajL-1/∂zjL-1)(∂zjL-1/∂bjL-1)
= (∑mδmLωmjL)σ'(zjL-1)
= δjL-1
對於處輸入層的任何一層(l):
∂C/∂bjl = (∂C/∂zjl )(∂zjl/∂bjl) = δjl
參考文獻
[1]]神經網絡基礎
[2]Neural Networks and Deep Learning. Michael A. Nielsen
[3] 一文弄懂神經網絡中的反向傳播法