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