簡介神經(jīng)網(wǎng)絡(luò)中經(jīng)典的感知器模型,請參考我寫的這篇博客[ http://blog.csdn.net/ws_20100/article/details/48929383] 本篇博客是在感知器模型之后,討論由1986年由Rumelhart和McCelland提出的反向傳播學(xué)習(xí)算法。 ------------------------------------------------------------------------------------------------------------------ 反向傳播學(xué)習(xí)的BP算法對于感知器模型,最初只能解決兩層神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)訓(xùn)練問題,對于多層網(wǎng)絡(luò)(例如三層),便不能確定中間層的參數(shù)該如何調(diào)整。直到1986年,Rumelhart和McCelland等人提出了基于反向傳播的學(xué)習(xí)算法,用于前饋多層神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)訓(xùn)練。由于“反向傳播”的英文叫做Back-Propagation,所以這個算法也常常被學(xué)者簡稱為BP算法。后來,人們對BP算法不斷改進(jìn),以加快其訓(xùn)練速度,產(chǎn)生了很多版本的BP算法,例如Levenberg-Marquatdt算法等等。
1.)BP算法原理如下圖,是一個多層神經(jīng)網(wǎng)絡(luò)的示意圖,網(wǎng)絡(luò)相鄰層之間的單元采用全連接方法連接。
每個單元的輸入用U表示,輸出用X表示,權(quán)值用W表示。 式一:第k層第i個神經(jīng)元的輸出,是由該神經(jīng)元的輸入經(jīng)過激活函數(shù)(Activition Function)得到:
式二:第k層第i個神經(jīng)元的輸入,是由上一層神經(jīng)元的輸出和權(quán)值向量內(nèi)積得到:
式三:第m層(最終輸出層)第i個神經(jīng)元輸出的誤差計算公式,采用LMS方式計算
以下的數(shù)學(xué)表示中的求導(dǎo)運算,均是由這三個基本公式推導(dǎo)而來。
2.)BP算法的步驟反向傳播算法分為兩步進(jìn)行: 正向傳播:輸入的樣本從輸入層經(jīng)過隱單元一層一層進(jìn)行處理,通過所有的隱層之后,傳向輸出層。 反向傳播:把誤差信號按原來正向傳播的通路反向傳回,并對每個隱層的各個神經(jīng)元的權(quán)系數(shù)進(jìn)行修改,以使誤差信號趨向最小。
3.)BP算法的數(shù)學(xué)表示BP算法的實質(zhì)是,求取誤差函數(shù)最小值問題。 (1)而采用的方法是非線性規(guī)劃中的最速下降法,按照誤差函數(shù)的負(fù)梯度方向修改權(quán)系數(shù)。即
而
所以有,
(2)由于誤差的梯度,僅僅是“記為”符號,并未給出明確計算公式:
所以,我們將求取上式中第k層第i個單元的誤差梯度:
這需要分類討論: 1.當(dāng)?shù)趉層為輸出層(k=m)時,
2.當(dāng)?shù)趉層不是輸出層(k<m)時,
(3)所以最終的權(quán)系數(shù)修改公式:
其中,
(4)有時,為了加快收斂速度,也考慮上一次權(quán)值的修改量:
------------------------------------------------------------------------------------------------------------------ 總結(jié)Back Propagation Algorithm,后向傳播算法,可以解決多層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練問題。但是經(jīng)過多年的研究顯示也存在著很多瓶頸,比如學(xué)習(xí)速度過慢,學(xué)習(xí)率難以確定,可能進(jìn)入局部極小點,以及過擬合問題等等。
如有任何疑問,歡迎一起討論。 如要轉(zhuǎn)載本文,請注明出處:http://blog.csdn.net/ws_20100/ |
|