BP網(wǎng)絡(luò)(Back Propagation),是1986年由Rumelhart和McCelland為首的科學(xué)家小組提出,是一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。BP網(wǎng)絡(luò)能學(xué)習(xí)和存貯大量的輸入-輸出模式映射關(guān)系,而無需事前揭示描述這種映射關(guān)系的數(shù)學(xué)方程。
BP (Back Propagation)神經(jīng)網(wǎng)絡(luò),即誤差反向傳播算法的學(xué)習(xí)過程,由信息的正向傳播和誤差的反向傳播兩個過程組成。輸入層各神經(jīng)元負(fù)責(zé)接收來自外界的輸入信息,并傳遞給中間層各神經(jīng)元;中間層是內(nèi)部信息處理層,負(fù)責(zé)信息變換,根據(jù)信息變化能力的需求,中間層可以設(shè)計為單隱層或者多隱層結(jié)構(gòu);最后一個隱層傳遞到輸出層各神經(jīng)元的信息,經(jīng)進(jìn)一步處理后,完成一次學(xué)習(xí)的正向傳播處理過程,由輸出層向外界輸出信息處理結(jié)果。當(dāng)實(shí)際輸出與期望輸出不符時,進(jìn)入誤差的反向傳播階段。誤差通過輸出層,按誤差梯度下降的方式修正各層權(quán)值,向隱層、輸入層逐層反傳。周而復(fù)始的信息正向傳播和誤差反向傳播過程,是各層權(quán)值不斷調(diào)整的過程,也是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)訓(xùn)練的過程,此過程一直進(jìn)行到網(wǎng)絡(luò)輸出的誤差減少到可以接受的程度,或者預(yù)先設(shè)定的學(xué)習(xí)次數(shù)為止。
簡單的來說,
BP的傳播對象就是“誤差”,傳播目的就是得到所有層的估計誤差。
它的學(xué)習(xí)規(guī)則是:使用梯度下降法,通過反向傳播(就是一層一層往前傳)不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,最后使全局誤差系數(shù)最小。
它的學(xué)習(xí)本質(zhì)就是:對各連接權(quán)值的動態(tài)調(diào)整。
一、正向傳播和反向傳播
這里介紹三層神經(jīng)網(wǎng)絡(luò)的推導(dǎo)(一個輸入層、一個隱層和一個輸出層)
上圖描繪了神經(jīng)元 j 被它左邊的一層神經(jīng)元產(chǎn)生的一組函數(shù)信號所饋給。m是作用于神經(jīng)元 j 的所有輸入不包括偏置的個數(shù)。突觸權(quán)值 w_j0(n) 等于神經(jīng)元 j 的偏置 b_j。
1、正向傳播
正向傳播就是讓信息從輸入層進(jìn)入網(wǎng)絡(luò),依次經(jīng)過每一層的計算,得到最終輸出層結(jié)果的過程。
在神經(jīng)元 j 的激活函數(shù)輸入處產(chǎn)生的誘導(dǎo)局部域v_j(n)(即神經(jīng)元j 的輸入)是:

?_j 是激活函數(shù),則出現(xiàn)在神經(jīng)元j輸出處的函數(shù)信號(即神經(jīng)元j的輸出)y_j(n)是:

2、反向傳播
反向傳播的信息是誤差,也就是 輸出層(output )的結(jié)果 與 輸入信息 x 對應(yīng)的真實(shí)結(jié)果 之間的差距。
舉一個通俗的例子,猜數(shù)字:

隨機(jī)設(shè)定一個數(shù)值 X,讓你來猜,我會告訴你猜的數(shù)字是高了還是低了。你每次猜的數(shù)字相當(dāng)于一次信息正向傳播給我的結(jié)果,而我給你的提示就是反向傳播的信息,往復(fù)多次,你就可以猜到這個隨機(jī)設(shè)定的數(shù)值 X 。 這就是典型的反向傳播,即根據(jù)輸出的結(jié)果來反向的調(diào)整模型,只是在實(shí)際應(yīng)用中的Bp網(wǎng)絡(luò)更為復(fù)雜和數(shù)學(xué),但是思想很類似。
據(jù)圖一,y_j(n)與d_j(n)分別是神經(jīng)元j的實(shí)際輸出和期望輸出。
圖二:它表示輸出層神經(jīng)元k連接到隱層神經(jīng)元j的信號流圖
在這里下標(biāo)j表示隱層神經(jīng)元,下標(biāo)k表示輸出層神經(jīng)元。

由神經(jīng)元 i 連接到神經(jīng)元 j 的突觸權(quán)值的修正值Δw_ji(n)按照delta法則定義如下:

(具體推導(dǎo)過程省略)
二、標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò)設(shè)計原則
(1)激活函數(shù):單極性S型函數(shù)和雙曲正切S型函數(shù)
(2)學(xué)習(xí)率:0<η<1
(3)停止準(zhǔn)則:網(wǎng)絡(luò)的均方誤差足夠小或者訓(xùn)練足夠的次數(shù)等
(4)初始權(quán)值:以均值等于0的均勻分布隨機(jī)挑選突觸權(quán)值
(5)隱層結(jié)構(gòu):理論證明一個隱層就能映射所有連續(xù)函數(shù) (隱藏層層數(shù)、隱藏層神經(jīng)元數(shù)量如何確定?);
BP神經(jīng)網(wǎng)絡(luò)的隱藏層節(jié)點(diǎn)數(shù)對BP神經(jīng)網(wǎng)絡(luò)預(yù)測精度有較大的影響:節(jié)點(diǎn)數(shù)太少,網(wǎng)絡(luò)不能很好地學(xué)習(xí),需要增加訓(xùn)練次數(shù),訓(xùn)練精度也受影響;節(jié)點(diǎn)數(shù)太多,訓(xùn)練時間增加,網(wǎng)絡(luò)容易過擬合。最佳隱藏層節(jié)點(diǎn)數(shù)選擇可以參考如下公式:
式中,n為輸入層節(jié)點(diǎn)數(shù);l為隱藏層節(jié)點(diǎn)數(shù);m為輸出層節(jié)點(diǎn)數(shù);a為0~10之間的常數(shù)。在實(shí)際問題中,隱藏層節(jié)點(diǎn)數(shù)的選擇首先是參考公式來確定大致的范圍,然后用試湊法確定最佳的節(jié)點(diǎn)數(shù)。對于某些問題來說,隱藏層節(jié)點(diǎn)數(shù)對輸出結(jié)果影響較小。
三、標(biāo)準(zhǔn)BP算法訓(xùn)練過程及流程圖
1、訓(xùn)練過程
(1)初始化網(wǎng)絡(luò)的突觸權(quán)值和閾值矩陣;
(2)訓(xùn)練樣本的呈現(xiàn);
(3)前向傳播計算;
(4)誤差反向傳播計算并更新權(quán)值;
(5)迭代,用新的樣本進(jìn)行步驟3和4,直至滿足停止準(zhǔn)則。
有很多的方法可以判斷算法是否已經(jīng)收斂,常見的有指定迭代的次數(shù),判斷相鄰的兩次誤差之間的差別是否小于指定的值等等。
2、流程圖

四、標(biāo)準(zhǔn)BP算法分析
由于標(biāo)準(zhǔn) BP 算法采用的是梯度下降法,BP 算法的 E-w 曲線圖如下:

因此標(biāo)準(zhǔn) BP 算法具有以下缺陷:
1、在誤差曲面上有些區(qū)域平坦,此時誤差對權(quán)值的變化不敏感,誤差下降緩慢,調(diào)整時間長,影響收斂速度。
2、存在多個極小點(diǎn),采用梯度下降法容易陷入極小點(diǎn)而無法得到全局最優(yōu)解。
3、學(xué)習(xí)率η越小,學(xué)習(xí)速度減慢,而η越大,雖然學(xué)習(xí)速度加快,卻容易使權(quán)值的變化量不穩(wěn)定,出現(xiàn)振蕩。
改進(jìn)方法:
1、增加動量項
2、可變學(xué)習(xí)速度的反向傳播
3、學(xué)習(xí)速率的自適應(yīng)調(diào)節(jié)
4、引入陡度因子——防止飽和
5、共軛梯度法、擬牛頓法等
五、實(shí)際應(yīng)用
bp神經(jīng)網(wǎng)絡(luò)解決iris分類問題
代碼和數(shù)據(jù)集:https://gitee.com/rao-wensheng/practise/tree/master/bp
