在感知器神經網路模型與線性神經網路模型學習演算法中,理想輸出與實際輸出之差被用來估計神經元串連權值誤差。當解決線性不可分問題而引入多級網路後,如何估計網路隱含層神經元的誤差就成了一大難題。因為在實際中,無法知道隱含層的任何神經元的理想輸出值。1985年Rumelhart、McClelland提出了BP網路的誤差反向後傳(BP)學習演算法,實現了Minsky設想的多層神經網路模型。
BP演算法在於利用輸出後的誤差來估計輸出層的直接前置層的誤差,再用這個誤差估計更前一層的誤差,如此一層一層的反傳下去,就獲得了所有其他各層的誤差估計。使用BP演算法進行學習的多級肺迴圈網路稱為BP網路,屬於前向神經網路類型。雖然這種誤差估計本身的精度會隨著誤差本身“向後傳播”而不斷降低,但它還是給多層網路的訓練提供了比較有效辦法,加之多層前向神經網路能逼近任意非線性函數。 BP神經網路模型
構成BP網路的神經元仍然是神經元。按照BP演算法的要求,這些神經元所用的啟用函數必須處處可導。一般都使用S型函數。對一個神經元來說,它的網路輸入可以表示為: net=x→⋅ω→
其中 x→ 表示該神經元所接受的輸入, ω→ 表示神經元對應的串連權值。
該神經元的輸出為: y=f(net)=11+e−net
進一步地,我們可以求y關於net的導數:
f′(net)=e−net(1+e−net)2=1+e−net−1(1+e−net)2=11+e−net−1(1+e−net)2=y(1−y)
顯然地 我們可以注意到 limnet→+∞11+e−net=1limnet→−∞1(1+e−net)2=0
根據S型啟用函數可知,y的範圍為(0, 1), 從而,f’(net)的範圍為(0, 0.25),而且是在y=0.5時,f’(x)有最大值。 BP網路的標準學習演算法
標準BP演算法是基於梯度下降法的學習演算法,學習過程是通過調整權值和閾值,使刪除期望值和神經網路實際輸出值的均方誤差地區最小而實現的,但是它只用到均方誤差函數對權值和閾值的一階導數(梯度)的資訊,使得演算法存在收斂速度緩慢、容易陷入局部極小等缺陷。
定義:
* 輸入向量 x→
* 隱含層輸入向量 hi→
* 隱含層輸出向量 ho−→
* 輸出層輸入向量 yi→
* 輸出層輸出向量 yo→
* 期望輸出向量 d→
* 輸入層與隱含層的串連權值 ωih
* 隱含層與輸出層的串連權值 ωho
* 隱含層各神經元的閾值 bh
* 輸出層各神經元的閾值 bo
* 樣本資料個數 k
* 啟用函數 f(⋅)
BP標準演算法具體實現步驟如下:
1. 網路初始化,給 wih who bh bo 分別賦一個區間(-1, 1)內的隨機數,並設定誤差函數為
e=12∑o=1q(do(k)−yo(k))2 給定計算精度值 ε 和最大學習次數M
2. 隨機選取第k個輸入樣本 x(k)−→− 以及對應的期望輸出 d(k)−→−
3. 計算隱含層各神經元的輸入 hih(k) ,然後用輸入以及啟用Function Compute隱含層各神經元的輸出 hoh(k)
hih(k)=∑inwihxi(k)−bhhoh(k)=f(hih(k))yio(k)=∑hpwhohoh(k)−boyoo(k)=f(yio(k))
4. 利用網路期望輸出向量 d(k)−→− 網路的實際輸出 yoo(k) ,計算誤差函數對輸出層各神經元的偏導數 δo(k)
δo(k)=(do(k)−yoo(k))yoo(k)(1−yoo(k))
5. 利用隱含層到輸出曾的串連權值 who(k) 、輸出層的 δo(k) 和隱含層的輸出 hoh(k) 計算誤差函數對隱含層各神經元的偏導數 δh(k)
δh(k)=[∑o=1qδo(k)who]hoh(k)(1−hoh(k))
6. 利用輸出層各神經元的 δo(k) 和隱含層各神經元的輸出 hoh(k) 來修正串連權值 who(k) 和閾值 bo(k) :
wN+1ho(k)=wNho(k)+ηδo(k)hoh(k)bN+1o(k)=bNo(k)+ηδo(k)
N為調整前,N+1為調整後, η 為學習率, 在(0, 1) 之間取值。
7. 使用隱含層各神經元的 δh(k) 和輸入層各神經元的輸入 xi(k) 修正串連權和閾值 wN+1ih=wNih+ηδh(k)xi(k)bN+1h(k)=bN+1h(k)+ηδh(k)
8. 計算全域誤差E E=12m∑k=1m∑o=1q(do(k)−yo(k))2
9. 判斷網路誤差是否滿足要求,當 E<ε 或學習次數大於設定的最大次數M,則演算法結束。否則,隨機選取下一個學習樣本及對應年的期望輸出,返回到第三步,進入下一輪的學習過程。