BP算法簡單的來說就是根據神經網絡實際的輸出和目标輸出(也就是輸入樣本對應的标記)之間的誤差計算神經網絡各個權值的過程。
下面的推導過程參考了《神經網絡設計》 Martin T. Hagan等著 戴葵等譯。
采用BP算法從輸出層、經過隐層再到輸入層進行層層計算的原因是如果直接計算誤差函數相對于各權值的偏導很難得到顯式的表達函數(最小均方算法或Widrow-Hoff學習算法),采用從後向前遞推的方式大幅度的利用了前期的計算值,也使得網絡具備了更多的靈活性。
使用均方誤差作為性能指數,那麼優化算法的目标就是調整網絡的參數使得均方誤差最小化。那麼根據最速下降算法的原理,第k次疊代計算得到的權值和偏移如下:
其中,m是層序号,i是神經元在層中序号,j則是一個神經元的輸入的序号,
是均方誤差。
前面就提到了,求這兩個偏導是很困難的事情,是以可以使用鍊式法則從最後一層向前計算。根據鍊式法則,可以将偏導分解如下:
其中
,
是m-1層神經元的輸出。
乘号後面的偏導數很容易求得,
,也就是上一層神經元的輸出,
。是以重要的是求出
很難直接求出,那麼也就考慮能不能夠用鍊式法則類似的遞推方式解決,但是注意這裡面,每一層裡面有多個神經元,而每個神經元都與上一層裡面的多個神經元相連,是以,像下面的這個表達式是錯誤的
,因為鍊式法則要求偏導的拆分,必須保證這個
能夠完全用中間變量
表示,而應該是一個向量
。從直覺上考慮,m層和m+1層的神經元個數也不一樣,是以也不能這樣表示。
是以,采用矩陣的表示方法來表示神經元的計算,如下面這個圖所示。
經過一系列推導可以得到,敏感性(《神經網絡設計》這本書中的例子)
的表達式(注意這是個向量),應該是
,這裡面的
是一個對角陣,其對角線的元素對應的是m層上的每個神經元激活函數
對應其輸入
的導數。
對于BP算法來說,最後一層的計算(第M層)是所有計算的開始。其矩陣形式的表達式為
。這裡面存在一個系數2,是因為使用的是均方誤差,平方求導會有系數2.
是以如果用矩陣形式表示,那麼權值和偏置值更新的表達式是:
是以,總的說來,反向傳播算法需要用到的資料是:
1. 學習率
2. 激活函數相對于其輸入的導數,用于計算
3. 上一層神經元的輸出
4. 每次疊代的權值和偏移