BP算法是一種最有效的多層神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)方法,其主要特點是信號前向傳遞,而誤差后向傳播,通過不斷調(diào)節(jié)網(wǎng)絡(luò)權(quán)重值,使得網(wǎng)絡(luò)的最終輸出與期望輸出盡可能接近,以達到訓(xùn)練的目的。
一、多層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及其描述
下圖為一典型的多層神經(jīng)網(wǎng)絡(luò)。
通常一個多層神經(jīng)網(wǎng)絡(luò)由L層神經(jīng)元組成,其中:第1層稱為輸入層,最后一層(第L層)被稱為輸出層,其它各層均被稱為隱含層(第2層~第L-1層)。
令輸入向量為:
x =[x1x2…xi…xm],i=1,2,…,m
輸出向量為:
y =[y1y2…yk…yn],k=1,2,…,n
第l隱含層各神經(jīng)元的輸出為:
h(l)=[h(l)1h(l)2…h(l)j…h(l)sl],j=1,2,…,sl
其中,sl為第l層神經(jīng)元的個數(shù)。
設(shè)W(l)ij為從l-1層第j個神經(jīng)元與l層第i個神經(jīng)元之間的連接權(quán)重;b(l)i為第l層第i個神經(jīng)元的偏置,那么:
h(l)i=f(net(l)i)
net(l)i=∑j=1sl1W(l)ijh(l1)j+b(l)i
其中,net(l)i為l層第i個神經(jīng)元的輸入,f()為神經(jīng)元的激活函數(shù)。通常在多層神經(jīng)網(wǎng)絡(luò)中采用非線性激活函數(shù),而不是用線性激活函數(shù),因為采用基于線性激活函數(shù)的多層神經(jīng)網(wǎng)絡(luò)本質(zhì)上還是多個線性函數(shù)的疊加,其結(jié)果仍然為一個線性函數(shù)。
二、激活函數(shù)
BP神經(jīng)網(wǎng)絡(luò)通常使用下面兩種非線性激活函數(shù):
f(x)=11+ex
f(x)=1ex1+ex
第一種稱為sigmod函數(shù)或者logistics函數(shù),第二種為雙曲正切函數(shù)。
Sigmod函數(shù)的圖像如下圖所示,它的變化范圍為(0, 1),其導(dǎo)數(shù)為f′=f(1f)。
雙曲正切函數(shù)的圖像如下圖所示,它的變化范圍為(-1, 1),其導(dǎo)數(shù)為f′=1f2。
三、BP算法推導(dǎo)過程
假定我們有m個訓(xùn)練樣本{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},其中d(i)為對應(yīng)輸入x(i)的期望輸出。BP算法通過最優(yōu)化各層神經(jīng)元的輸入權(quán)值以及偏置,使得神經(jīng)網(wǎng)絡(luò)的輸出盡可能地接近期望輸出,以達到訓(xùn)練(或者學(xué)習(xí))的目的。
采用批量更新方法,對于給定的m個訓(xùn)練樣本,定義誤差函數(shù)為:
E=1m∑i=1mE(i)
其中,E(i)為單個樣本的訓(xùn)練誤差:
E(i)=12∑k=1n(dk(i)yk(i))2
因此,
E=12m∑i=1m∑k=1n(dk(i)yk(i))2
BP算法每一次迭代按照以下方式對權(quán)值以及偏置進行更新:
W(l)ij=W(l)ijαEW(l)ij
b(l)i=b(l)iαEb(l)i
其中,α為學(xué)習(xí)速率,它的取值范圍為(0, 1)。BP算法的關(guān)鍵在于如何求解W(l)ij和b(l)i的偏導(dǎo)數(shù)。
對于單個訓(xùn)練樣本,輸出層的權(quán)值偏導(dǎo)數(shù)計算過程:
E(i)W(L)kj=W(L)kj(12∑k=1n(dk(i)yk(i))2)=W(L)kj(12(dk(i)yk(i))2)=(dk(i)yk(i))yk(i)W(L)kj=(dk(i)yk(i))yk(i)net(L)knet(L)kW(L)kj=(dk(i)yk(i))f(x)′|x=net(L)knet(L)kW(L)kj=(dk(i)yk(i))f(x)′|x=net(L)kh(L1)j
即:
E(i)W(L)kj=(dk(i)yk(i))f(x)′|x=net(L)kh(L1)j
同理可得,
E(i)b(L)k=(dk(i)yk(i))f(x)′|x=net(L)k
令:
δ(L)k=(dk(i)yk(i))f(x)′|x=net(L)k
則:
E(i)W(L)kj=δ(L)kh(L)j
E(i)b(L)k=δ(L)k
對隱含層L-1層:
E(i)W(L1)ji=W(L1)ji(12∑k=1n(dk(i)yk(i))2)=W(L1)ji(12∑k=1n(dk(i)f(∑j=1sL1W(L)kjh(L1)j+b(L)k))2)=W(L1)ji(12∑k=1n(dk(i)f(∑j=1sL1W(L)kjf(∑i=1sL2W(L2)jih(L2)i+b(L1)j)+b(L)k))2)=∑k=1n(dk(i)yk(i))f(x)′|x=net(L)knet(L)kW(L1)ji
因為,
net(L)k=∑j=1sL1W(L)kjh(L1)j+b(L)k=∑j=1sL1W(L)kjf(∑i=1sL2W(L2)jih(L2)i+b(L1)j)+b(L)k=∑j=1sL1W(L)kjf(net(L1)j)
所以,
E(i)W(L1)ji=∑k=1n(dk(i)yk(i))f(x)′|x=net(L)knet(L)kW(L1)ji=∑k=1n(dk(i)yk(i))f(x)′|x=net(L)knet(L)kf(net(L1)j)f(net(L1)j)net(L1)jnet(L1)jW(L1)ji=∑k=1n(dk(i)yk(i))f(x)′|x=net(L)kW(L)kjf(x)′|x=net(L1)jh(L2)i
同理,
E(i)b(L1)j=∑k=1n(dk(i)yk(i))f(x)′|x=net(L)kW(L)kjf(x)′|x=net(L1)j
令:
δ(L1)j=∑k=1n(dk(i)yk(i))f(x)′|x=net(L)kW(L)kjf(x)′|x=net(L1)j=∑k=1nW(L)kjδ(L)kf(x)′|x=net(L1)j
E(i)W(L1)ji=δ(L1)jh(L2)i
E(i)b(L1)j=δ(L1)j
由上可推,第l層(2≤l≤L1)的權(quán)值和偏置的偏導(dǎo)可以表示為:
E(i)W(l)ji=δ(l)jh(l1)i
E(i)b(l)j=δ(l)j
其中,
δ(l)j=∑k=1sl+1W(l+1)kjδ(l+1)kf(x)′|x=net(l)j
四、BP算法過程描述
采用批量更新方法對神經(jīng)網(wǎng)絡(luò)的權(quán)值和偏置進行更新:
- 對所有的層2≤l≤L,設(shè)ΔW(l)=0,Δb(l)=0,這里ΔW(l)和Δb(l)分別為全零矩陣和全零向量;
For i = 1:m,
- 使用反向傳播算法,計算各層神經(jīng)元權(quán)值和偏置的梯度矩陣W(l)(i)和向量和b(l)(i);
- 計算ΔW(l)=W(l)(i);
- 計算Δb(l)=b(l)(i)。
更新權(quán)值和偏置:
- 計算W(l)=W(l)+1mΔW(l);
- 計算b(l)=b(l)+1mΔb(l)。