王麗萍
(長安大學,陜西 西安 710054)
BP神經網絡,通常由輸入層、輸出層和隱含層構成,相鄰層節點之間通過權連接,同層神經元之間沒有聯系,每一層神經元的狀態只影響下一層的神經元的輸入和輸出。
根據Kolmogorov定理,在隱層使用S形傳輸函數,在輸出層中使用線形傳輸函數的三層神經網絡,幾乎可以以任意精度逼近任何連續函數,只要隱層中有足夠的單元可用。隱含層節點數的選取至今沒有確切的方法和理論,一般情況下根據學習樣本和測試樣本誤差的學習和修改來選取的。通常情況下隱含層神經元個數太少,網絡所能獲取的用來解決問題的信息太少;隱含層神經元個數太多,使得訓練時間增大,不能夠在人們接受的時間內完成訓練,更重要是隱含層神經元過多,可能引起所謂的“過擬合”現象,即把網絡訓練集里一些無關緊要、非本質的東西也學會。一個典型的3層BP神經網絡模型結構如圖1所示。
BP算法的基本思想是,學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。正向傳播時,輸入樣本從輸入層傳入,經隱含層處理后,傳向輸出層。若輸出層的實際輸出與期望的輸出不符,則轉入誤差的反向傳播階段。誤差反傳是將輸出誤差以某種形式通過隱層向輸入層逐層反傳將誤差信號沿原來的神經元連接通路返回,返回過程中逐一修改各層神經元連接的權值。
學習步驟如下:
設BP網絡的輸入層、隱含層和輸出層分別有I、J和K個神經元,
輸入層第i個神經元的輸入和輸入層第i個神經元的輸出分別為:xi和 oi;
隱含層第j個神經元的輸入:

圖1 3層BP神經網絡模型結構圖

式中,wij為輸入層中第i個神經元到隱含層第j個神經元的權值,θj為隱含層第j個神經元的閾值;
隱含層第j個神經元的輸出:

其中g( )為正切S型傳遞函數;
式中,wkj為隱含層中第j個神經元到輸出層第k個神經元的權值,θk為輸出層第k個神經元的閾值;輸出層第k個神經元的輸出:ok=g(netk)=netk(k=1,2,···k),其中 g( )為線性傳輸函數;
BP網絡的學習過程按使誤差函數減小最快的方向調整加權系數,目標是使網絡輸出與訓練樣本的均方誤差最小。
設訓練樣本為 P 個,輸入向量為 x1,x2,···xp,實際輸出向量為 o1,o2,···op,期望的輸出向量為 t1,t2,···tp。
輸出層神經元系數的修正公式:
△wkj=ηδpkopj=ηopj(tpk-okp)(1-okp)okp
隱含層權系數的調整:

η為學習率。
MATLAB神經網絡工具箱以人工神經網絡為基礎,根據自己的需要調用相關函數,就可以完成網絡設計、權值初始化、網絡訓練等,MATLAB神經網絡工具箱包括的網絡有感知器、線性網絡、BP神經網絡、徑向基網絡、自組織網絡和回歸網絡,BP神經網絡工具箱主要包括newff,sim和train三個神經網絡函數。
(1)newff:BP 神經網絡參數設置函數
函數功能:構建一個BP神經網絡。
函 數 形 式 :net= newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
P:輸入數據矩陣
T:輸出數據矩陣
S:隱含層節點數
TF:節點傳遞函數,包括硬限幅傳遞函數hardlim,對稱硬限幅傳遞函數hardlims,線性傳遞函數purelin,正切S型傳遞函數tansig,對數S型傳遞函數logsig
BTF:訓練函數,包括梯度下降BP算法訓練函數traingd,動量反傳的梯度下降BP算法訓練函數traingdm,動態自適應學習率的梯度下降BP算法訓練函數traingda,動量反傳和動態自適應學習率的梯度下降BP算法訓練函數traingdx,Levenberg_Marquardt的BP算法訓練函數trainlm
BLF:網絡學習函數,包括BP學習規則learngd,帶動量項的BP學習規則learngdm
PF:性能分析函數,包括均值絕對誤差性能分析函數mae,均方差性能分析函數mse
IPF:輸入處理函數
OPF:輸出處理函數
DDF:驗證數據劃分函數
一般在使用過程中設置前六個參數,后四個參數采用系統默認參數。
(2)train:BP 神經網絡訓練函數
函數功能:用訓練數據訓練BP神經網絡。
函數形式:[net,tr]=train(NET,X,T,Pi,Ai)
NET:待訓練網絡
X:輸入數據矩陣
T:輸出數據矩陣
Pi:初始化輸入層條件
Ai:初始化輸出層條件
net:訓練好的網絡
tr:訓練過程記錄
一般在使用過程中設置前三個參數,后兩個參數采用系統默認參數。
(3)sim:BP 神經網絡預測函數
函數功能:用訓練好的BP神經網絡預測函數輸出
函數形式:y=sim(net,x)
net:訓練好的網絡
x:輸入數據
y:網絡預測數據
設要逼近的非線性函數為:
y=8+2*exp(1-x.^2).*cos(2*pi*x),-0.4 (1)網絡建立:使用net=newff(x,y,20,{'tansig','purelin'},'trainlm','learngdm');語句建立一個前饋BP神經網絡。該BP神經網絡只含有一個隱含層,神經元的個數為20,隱層傳遞函數tansig,輸出層傳遞函數purelin,訓練函數為Levenberg_Marquardt的BP算法訓練函數trainlm,網絡學習函數是帶動量項的BP學習規則learngdm。 (2)網絡訓練:使用net=train(net,x,y);語句訓練建立喊的BP神經網絡。在訓練網絡之前設置好訓練參數。 用“net.trainParam.epochs=50;net.trainParam.goal=0.01;net.train-Param.lr=0.01; net.trainParam.show=10;”語句實現。其他參數默認。 (3)網絡仿真:使用“y1=sim(net,x);y2=sim(net,x);”語句仿真訓練前后的BP神經網絡。 程序1:MATLAB程序源代碼 x=[-0.4:0.04:3.6]; y=8+2*exp(1-x.^2).*cos(2*pi*x); net=newff(x,y,20,{'tansig','purelin'},'trainlm','learngdm'); y1=sim(net,x);%未訓練前進行仿真 net.trainParam.epochs=50; net.trainParam.goal=0.01; net.trainParam.lr=0.01; net.trainParam.show=10; net=train(net,x,y); %訓練函數 y2=sim(net,x); figure(1) >>plot(x,y,'-',x,y1,'--',x,y2,'+') title('原函數與網絡訓練前后的仿真結果比較') >>xlabel('x');ylabel('y') >>text(2,33,'-原函數y') >>text(2,30,'--未訓練網絡的仿真結果y1') >>text(2,27,'+訓練網絡的仿真結果y2') 原函數與網絡訓練前后的仿真結果比較 圖2 原函數與網絡訓練前后的仿真結果比較 圖3 訓練誤差 由程序知直接調用MATLAB軟件包中的神經網絡工具箱函數。圖2為原函數與網絡訓練前后的仿真結果比較圖。由圖可知,用工具箱函數建立網絡時,對權值和閾值的初始化是隨機的,所以未訓練網絡的仿真效果很差,并且每次運行結果也不同。訓練后網絡的仿真輸出曲線和原函數的曲線非常接近,這說明訓練后的網絡對非線性函數的逼近效果很好。網絡訓練過程中誤差隨訓練時間的變化迅速減少,在經過4個單位時間以后,網絡的誤差就達到了逼近要求(圖3)。 Matlab軟件包中的BP工具箱函數在數學計算、圖形計算、計算機仿真等方面為研究和設計神經網絡提供了便利的工具,BP神經網絡最強大的應用之一就是函數逼近。BP工具箱函數克服了計算機高級語言編程的復雜性問題,語言簡單,調試方便,程序運行效率極高,具有重要的推廣應用前景. [1]王偉.人工神經網絡原理入門及應用[M].北京:北京航空航天大學出社,1995. [2]李國勇.神經網絡控制及其Matlab實現[M].北京:電子工業出版社,2005. [3]周開利,康耀紅.神經網路模型及其Matlab仿真程序設計[M].北京:清華大學出版社,2005. [4]飛思科技產品研發中心.神經網絡理論與Matlab7實現[M].北京:電子工業出版社,2005. [5]叢爽.面向MATLAB工具箱的神經網絡理論與應用[M].合肥:中國科學技術大學出版社,1998. [6]聞新,周露,等.Matlab神經網絡應用設計[M].北京:科學出版社,2001. [7]閔惜琳,劉國華.用MATLAB神經網絡工具箱開發BP網絡應用[J].計算機應用,2001,21(8):163-164.

5 結論