BP神经网络推导
BP神經網絡推導
一、BP算法的思想
BP算法的思想是,學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。
正向傳播時,輸入樣本從輸入層傳入,經各隱層逐層處理后,傳向輸出層。若輸出層的實際輸出與期望的輸出不符,則轉入誤差的反向傳播階段。
誤差反傳是將輸出誤差以某種形式通過隱層向輸入層逐層反傳,并將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各個單元權值的依據。
這種信號正向傳播與誤差反向傳播的各層權值調整過程是周而復始地進行的。權值的不斷調整的過程,也就是網絡的學習訓練過程。次過程一直進行到網絡輸出的誤差減小到可接受的程度,或進行到預先設定的學習次數為止。
二、BP網絡結構
三層神經網絡層:輸入層、隱藏層、輸出層
三層感知器中,輸入向量為X=(x1,x2,....xi,....xn)T圖中x0=?1是為隱層神經元引入閾值而設置的;隱層輸出向量為Y=(y1,y2,...yi,....ym)T圖中y0=?1是為輸出層神經元引入閾值而設置的輸出層輸出向量為O=(o1,o2,...,oi,,..ol)T期望輸出向量為d=(d1,d2,...,dk,...dl)T輸入層到隱層之前的權值矩陣用V表示,V=(V1,V2,...Vj,...Vm),其中列向量Vj為隱層第j個神經元對應的權向量隱層到輸出層之間的權重矩陣用W表示,W=(W1,W2,...Wk,..,Wi),其中列向量Wk為輸出層第k個神經元對應的權向量三層感知器中,輸入向量為X = (x_1, x_2, ....x_i,....x_n)^{T} \\ 圖中x_0=-1是為隱層神經元引入閾值而設置的;\\ 隱層輸出向量為Y=(y_1, y_2,...y_i,....y_m)^{T}\\ 圖中y_0=-1是為輸出層神經元引入閾值而設置的\\ 輸出層輸出向量為O = (o_1, o_2,...,o_i,,..o_l)^{T}\\ 期望輸出向量為d=(d_1, d_2,...,d_k,...d_l)^{T}\\ 輸入層到隱層之前的權值矩陣用V表示,V=(V_1,V_2,...V_j,...V_m),其中列向量V_j為隱層第j個神經元對應的權向量\\ 隱層到輸出層之間的權重矩陣用W表示,W=(W_1, W_2,...W_k,..,W_i),其中列向量W_k為輸出層第k個神經元對應的權向量 三層感知器中,輸入向量為X=(x1?,x2?,....xi?,....xn?)T圖中x0?=?1是為隱層神經元引入閾值而設置的;隱層輸出向量為Y=(y1?,y2?,...yi?,....ym?)T圖中y0?=?1是為輸出層神經元引入閾值而設置的輸出層輸出向量為O=(o1?,o2?,...,oi?,,..ol?)T期望輸出向量為d=(d1?,d2?,...,dk?,...dl?)T輸入層到隱層之前的權值矩陣用V表示,V=(V1?,V2?,...Vj?,...Vm?),其中列向量Vj?為隱層第j個神經元對應的權向量隱層到輸出層之間的權重矩陣用W表示,W=(W1?,W2?,...Wk?,..,Wi?),其中列向量Wk?為輸出層第k個神經元對應的權向量
下面分析各層信號之間的數學關系:
對于輸出層,有:
ok=f(netk)k=1,2,....,lo_k = f(net_k) \quad k=1,2,....,l ok?=f(netk?)k=1,2,....,l
netk=∑j=0mwjkyjk=1,2,...,lnet_k = \sum_{j=0}^{m}w_{jk}y_{j} \quad k=1,2,...,l netk?=j=0∑m?wjk?yj?k=1,2,...,l
對于隱層,有:
yj=f(netj)j=1,2,...,my_j = f(net_j) \quad j=1,2,...,m yj?=f(netj?)j=1,2,...,m
netj=∑i=0nvijxij=1,2,...,mnet_j = \sum_{i=0}^{n}v_{ij}x_{i} \quad j=1,2,...,m netj?=i=0∑n?vij?xi?j=1,2,...,m
以上兩式中,轉移函數f(x)均為單極性Sigmoid函數:
f(x)=11+e?xf(x) = \frac{1}{1+e^{-x}} f(x)=1+e?x1?
f(x)具有連續、可導的特點,且有:
f′(x)=f(x)[1?f(x)]f^\prime(x) = f(x)[1-f(x)] f′(x)=f(x)[1?f(x)]
根據應用需要,也可以采用雙極性Sigmoid函數
f(x)=1?e?x1+e?xf(x) = \frac{1-e^{-x}}{1+e^{-x}} f(x)=1+e?x1?e?x?
三、BP學習算法
3.1 網絡誤差定義與權值調整思路
當網絡輸出與期望輸出不等時,存在輸出誤差E,定義如下:
E=12(d?O)2=12∑k=1l(dk?ok)2E = \frac{1}{2}(\boldsymbol d- \boldsymbol O)^2 = \frac{1}{2}\sum_{k=1}^{l}(d_{k} - o_{k})^{2} E=21?(d?O)2=21?k=1∑l?(dk??ok?)2
將以上誤差定義式展開至隱層,有:
E=12∑k=1l(dk?f(netk))2=12∑k=1l(dk?f(∑j=0mwjkyj))2E = \frac{1}{2}\sum_{k=1}^{l}(d_k - f(net_k))^2 \\ = \frac{1}{2}\sum_{k=1}^{l}(d_k - f(\sum_{j=0}^{m}w_{jk}y_j))^2 E=21?k=1∑l?(dk??f(netk?))2=21?k=1∑l?(dk??f(j=0∑m?wjk?yj?))2
進一步展開至輸出層,有:
E=12∑k=1m(dk?f[∑j=0mwjkf(netj)])2=12∑k=1m(dk?f[∑j=0mwjkf(∑i=0nvijxi)])2E = \frac{1}{2}\sum_{k=1}^{m}(d_k - f[\sum_{j=0}^{m}w_{jk}f(net_{j})])^2 \\ = \frac{1}{2}\sum_{k=1}^{m}(d_k-f[\sum_{j=0}^{m}w_{jk}f(\sum_{i=0}^{n}v_{ij}x_i)])^2 E=21?k=1∑m?(dk??f[j=0∑m?wjk?f(netj?)])2=21?k=1∑m?(dk??f[j=0∑m?wjk?f(i=0∑n?vij?xi?)])2
由上式可知,網絡誤差是各層權值wjk、vij的函數,因此調整權值可以改變誤差E。
顯然,調整權值的原則是使錯誤不斷的減小,因此應使權值的調整量與誤差的梯度的下降成正比,即:
Δwjk=?η?E?wjkj=0,1,2,...,m;k=1,2,....,l\Delta w_{jk} = -\eta\frac{\partial E}{\partial w_{jk}} \quad j=0,1,2,...,m; k=1,2,....,l Δwjk?=?η?wjk??E?j=0,1,2,...,m;k=1,2,....,l
Δvij=?η?E?viji=0,1,2,...,n;j=1,2,...,m\Delta v_{ij} = -\eta\frac{\partial E}{\partial v_{ij}} \quad i=0,1,2,...,n;j=1,2,...,m Δvij?=?η?vij??E?i=0,1,2,...,n;j=1,2,...,m
式子中,負號表示梯度下降,常數η∈(0,1)表示比例系數,在訓練中反映了學習速率。可以看出,BP算法屬于δ學習規則類,這類算法常被稱為誤差的梯度下降算法。
3.2 BP算法推導
進行BP算法推導之前,先了解一下得了δ學習規則
δ學習規則
1986年,認知心理學家McClelland和Rumelhart在神經網絡訓練中引入了δ規則,該規則也可以稱為連續感知器學習規則。
δ學習規則是一種利用梯度下降法的一般性的學習規則。11
以二次代價函數為例:
E=12(t?y)2=12[t?f(WX)]2E = \frac{1}{2}(t-y)^{2} = \frac{1}{2}[t-f(WX)]^2 E=21?(t?y)2=21?[t?f(WX)]2
誤差E是權向量W的函數,我們可以使用梯度下降法來最小化E的值:
ΔW=?ηE′=ηXT(t?y)f′(WX)=ηXTδ\Delta W = -\eta E^\prime = \eta X^T(t-y)f^\prime(WX) = \eta X^T\delta ΔW=?ηE′=ηXT(t?y)f′(WX)=ηXTδ
Δwi=?ηE′=ηxi(t?y)f′(WX)=ηxiδ\Delta w_i = -\eta E^\prime = \eta x_i(t-y)f^\prime(WX)=\eta x_i\delta Δwi?=?ηE′=ηxi?(t?y)f′(WX)=ηxi?δ
BP算法推導
公式12僅是對權值調整思路的數學表達,而不是具體的權值調整的計算式。下面推導三層BP算法權值調整的計算式。事先約定,在全部推導過程中,對輸出層均有j=0, 1, 2,…,m,k=1,2,…,l;對隱層均有i=0,1,2,…n,j=1,2,…,m
對于輸出層,公式12可寫成
Δwjk=?η?E?wjk=?η?E?netk?netk?wjk\Delta w_{jk} = -\eta \frac{\partial E}{\partial w_{jk}} = -\eta \frac{\partial E}{\partial net_{k}}\frac{\partial net_{k}}{\partial w_{jk}} Δwjk?=?η?wjk??E?=?η?netk??E??wjk??netk??
對隱層,公式13可以寫成
Δvij=?η?E?vij=?η?E?netj?netj?vij\Delta v_{ij} = -\eta\frac{\partial E}{\partial v_{ij}} = -\eta \frac{\partial E}{\partial net_j}\frac{\partial net_{j}}{\partial v_{ij}} Δvij?=?η?vij??E?=?η?netj??E??vij??netj??
對輸出層和隱層各定義一個誤差信號,令:
δko=??E?netk\delta_{k}^{o} = -\frac{\partial E}{\partial net_k} δko?=??netk??E?
δjy=??E?netj\delta_j^y= -\frac{\partial E}{\partial net_j} δjy?=??netj??E?
綜合公式10和公式19,將公式17的權值調整公式改寫為:
Δwjk=ηδkoyj\Delta w_{jk} = \eta \delta_k^{o}y_j Δwjk?=ηδko?yj?
綜合公式11和公式20,將公式18的權值調整公式改寫為:
Δvij=ηδjyxi\Delta v_{ij} = \eta\delta_j^yxi Δvij?=ηδjy?xi
可以看出,只要計算出公式21和22中的誤差信號,權值調整量的計算推導即可完成
對于輸出層,δko可以展開為:
δko=??E?netk=??E?ok?ok?netk=??E?okf′(netk)\delta_k^{o} = -\frac{\partial E}{\partial net_k} = -\frac{\partial E}{\partial o_k}\frac{\partial o_k}{\partial net_k} = -\frac{\partial E}{\partial o_k}f^\prime(net_k) δko?=??netk??E?=??ok??E??netk??ok??=??ok??E?f′(netk?)
對于隱層,δjy可以展開為
δjy=??E?netj=??E?yj?yj?netj=??E?yjf′(netj)\delta_j^y = -\frac{\partial E}{\partial net_j} = -\frac{\partial E}{\partial y_j}\frac{\partial y_j}{\partial net_j} = -\frac{\partial E}{\partial y_j}f^\prime(net_j) δjy?=??netj??E?=??yj??E??netj??yj??=??yj??E?f′(netj?)
下面求式子23和24中網絡誤差對各層輸出的偏導。
對于輸出層,利用公式9,可得
?E?ok=?(dk?ok)\frac{\partial E}{\partial o_k} = -(d_k - o_k) ?ok??E?=?(dk??ok?)
對于隱層,利用公式10,可得
?E?yj=?∑k=1l(dk?ok)f′(netk)wjk\frac{\partial E}{\partial y_j} = -\sum_{k=1}^l(d_k - o_k)f^\prime(net_k)w_{jk} ?yj??E?=?k=1∑l?(dk??ok?)f′(netk?)wjk?
將結果帶入到公式23和公示24中,并利用公式7
δko=(dk?ok)f′(netk)=(dk?ok)ok(1?ok)\delta_k^o = (d_k-o_k)f^\prime(net_k) = (d_k-o_k)o_k(1-o_k) δko?=(dk??ok?)f′(netk?)=(dk??ok?)ok?(1?ok?)
δjy=[∑k=1l(dk?ok)f′(netk)wjk]f′(netj)=(∑k=1lδkowjk)yj(1?yj)\delta_j^y = [\sum_{k=1}^l(d_k -o_k)f^\prime(net_k)w_{jk}]f^\prime(net_j) = (\sum_{k=1}^l\delta_k^ow_{jk})y_j(1-y_j) δjy?=[k=1∑l?(dk??ok?)f′(netk?)wjk?]f′(netj?)=(k=1∑l?δko?wjk?)yj?(1?yj?)
至此,兩個誤差信號的推導已經完成,將式子27和28代回到公式21和22中,得到三層感知器的BP學習算法權值調整計算公式為
{Δwjk=ηδkoyj=η(dk?ok)ok(1?ok)yjΔvij=ηδjyxi=η(∑k=1lδkowjk)yj(1?yj)xi\begin{cases} \Delta w_{jk} = \eta \delta_k^{o}y_j = \eta(d_k-o_k)o_k(1-o_k)y_j\\ \Delta v_{ij} = \eta\delta_j^yxi = \eta(\sum_{k=1}^l\delta_k^ow_{jk})y_j(1-y_j)x_i \end{cases} {Δwjk?=ηδko?yj?=η(dk??ok?)ok?(1?ok?)yj?Δvij?=ηδjy?xi=η(∑k=1l?δko?wjk?)yj?(1?yj?)xi??
總結
- 上一篇: 非精确一维线搜索(Armijo-Gold
- 下一篇: react-hooks+Ant Desi