摘? 要: MATLAB軟件及其BP神經(jīng)網(wǎng)絡(luò)工具箱函數(shù)的應(yīng)用,結(jié)合一個(gè)實(shí)際的例子詳細(xì)闡述了基于BP神經(jīng)網(wǎng)絡(luò)的函數(shù)逼近過(guò)程及其MATLAB實(shí)現(xiàn)方法。
關(guān)鍵詞: 函數(shù)逼近? BP神經(jīng)網(wǎng)絡(luò)? MATLAB軟件
?
數(shù)值計(jì)算方法已經(jīng)在各個(gè)學(xué)科領(lǐng)域得到了廣泛應(yīng)用,并且促使新的有效數(shù)值方法不斷出現(xiàn),。計(jì)算工具的使用為科學(xué)計(jì)算帶來(lái)了很大的方便,但由于計(jì)算機(jī)字長(zhǎng)的限制,許多復(fù)雜的,、大規(guī)模的計(jì)算問(wèn)題需簡(jiǎn)化,。神經(jīng)網(wǎng)絡(luò)是對(duì)生物神經(jīng)系統(tǒng)的模擬,其信息處理功能是由網(wǎng)絡(luò)單元(神經(jīng)元)的輸入輸出特性(激活特性)、網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)(神經(jīng)元的連接方式),、連接權(quán)的大小(突觸聯(lián)系強(qiáng)度)和神經(jīng)元的閾值(視作特殊的連接權(quán))所決定的,。在神經(jīng)網(wǎng)絡(luò)的實(shí)際應(yīng)用中,絕大部分的神經(jīng)網(wǎng)絡(luò)模型使用的是BP神經(jīng)網(wǎng)絡(luò)或其變化形式,它也是前饋神經(jīng)網(wǎng)絡(luò)的核心部分。BP神經(jīng)網(wǎng)絡(luò)的主要特點(diǎn)是非線性映射能力,這種能力使其能夠?qū)θ我?a class="innerlink" href="http://forexkbc.com/tags/非線性函數(shù)" title="非線性函數(shù)" target="_blank">非線性函數(shù)進(jìn)行很好的逼近,。鑒于函數(shù)逼近及BP神經(jīng)網(wǎng)絡(luò)的這些特點(diǎn),本文提出了基于BP神經(jīng)網(wǎng)絡(luò)的函數(shù)逼近方法,。此外,本文開(kāi)創(chuàng)性地遺棄了C、C++,、VC等傳統(tǒng)的高級(jí)編程語(yǔ)言,采用功能強(qiáng)大的MATLAB語(yǔ)言編程,直接調(diào)用MATLAB軟件包中的BP神經(jīng)網(wǎng)絡(luò)工具箱函數(shù),使程序簡(jiǎn)捷明了,達(dá)到了事半功倍的效果,。
1? BP神經(jīng)網(wǎng)絡(luò)及其函數(shù)逼近能力
BP神經(jīng)網(wǎng)絡(luò)是一種單向傳播的多層前饋網(wǎng)絡(luò),網(wǎng)絡(luò)除了有輸入輸出節(jié)點(diǎn)外,還有一層或多層的隱含層節(jié)點(diǎn),同層節(jié)點(diǎn)中沒(méi)有任何連接,層間節(jié)點(diǎn)中實(shí)行全連接,。輸入信號(hào)從輸入層節(jié)點(diǎn)依次傳過(guò)各隱含層節(jié)點(diǎn),最后傳到輸出層節(jié)點(diǎn)。每層節(jié)點(diǎn)的輸出只影響下一層節(jié)點(diǎn)的輸出,。各層節(jié)點(diǎn)的傳遞函數(shù)通常為雙曲正切S型(sigmoid)函數(shù),但輸出層節(jié)點(diǎn)的傳遞函數(shù)有時(shí)為線性函數(shù),。
BP神經(jīng)網(wǎng)絡(luò)可以看作是一個(gè)從輸入到輸出的高度非線性映射,即F:Rn→Rm,f(X)=Y。對(duì)于樣本集合:輸入xi(∈Rn)和輸出yi(∈Rm),可認(rèn)為存在某一映射g使得g(xi)=yi(i=1,2,∧n)成立?,F(xiàn)要求出一個(gè)映射f,使得在某種意義下(通常是最小二乘意義下),f是g的最佳逼近,。BP神經(jīng)網(wǎng)絡(luò)通過(guò)對(duì)簡(jiǎn)單的非線性函數(shù)進(jìn)行數(shù)次復(fù)合,可以近似復(fù)雜的函數(shù)。Kolmogorov定理(即映射網(wǎng)絡(luò)存在定理)保證任一連續(xù)函數(shù)可由一個(gè)三層前向網(wǎng)絡(luò)實(shí)現(xiàn),但它沒(méi)有提供任何構(gòu)造這樣一個(gè)網(wǎng)絡(luò)的可行方法,。通過(guò)BP定理可知,只要用一個(gè)三層BP神經(jīng)網(wǎng)絡(luò)就可在任意希望的精度上實(shí)現(xiàn)任意的連續(xù)函數(shù),。但實(shí)際上,還要使用更多層的BP神經(jīng)網(wǎng)絡(luò),其原因是用三層BP神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)往往需要大量的隱含層節(jié)點(diǎn),而使用更多層的BP神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)可減少隱含層節(jié)點(diǎn)的數(shù)目。如何選取隱含層的層數(shù)和節(jié)點(diǎn)數(shù),至今還沒(méi)有確切的方法和理論,通常是憑借對(duì)學(xué)習(xí)樣本和測(cè)試樣本的誤差交叉評(píng)價(jià)的試錯(cuò)法選取,。
BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程由正向和反向傳播二部分組成,。在正向傳播過(guò)程中,每一層神經(jīng)元的狀態(tài)只影響到下一層神經(jīng)元網(wǎng)格。如果輸出層不能得到期望輸出,就是實(shí)際輸出值和期望輸出值之間存在誤差,從而轉(zhuǎn)入反向傳播過(guò)程,將誤差信號(hào)沿原來(lái)的連接通路返回,。通過(guò)修改各層神經(jīng)元的權(quán)值,逐次地向輸入層傳播并進(jìn)行計(jì)算,再進(jìn)行正向傳播,。這二個(gè)過(guò)程的反復(fù)運(yùn)用,使得誤差信號(hào)最小。實(shí)際上,誤差達(dá)到人們所希望的要求時(shí),網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程就結(jié)束,。
2? MATLAB軟件及其BP神經(jīng)網(wǎng)絡(luò)工具箱函數(shù)
為了解決數(shù)值計(jì)算與計(jì)算機(jī)仿真之間的矛盾,美國(guó)Math Works公司推出了一套高性能的數(shù)值計(jì)算和可視化軟件包MATLAB,。它集數(shù)值計(jì)算、圖形計(jì)算,、語(yǔ)言設(shè)計(jì),、計(jì)算機(jī)仿真等于一體,具有極高的編程效率。更具特色的是MATLAB集中了許多領(lǐng)域?qū)<覍W(xué)者的智慧,成功地?cái)U(kuò)展了30多個(gè)專業(yè)領(lǐng)域工具箱,如生物醫(yī)學(xué)工程,、圖像處理,、模糊控制、神經(jīng)網(wǎng)絡(luò)等,。其中,神經(jīng)網(wǎng)絡(luò)工具箱是MATLAB環(huán)境下開(kāi)發(fā)出來(lái)的許多工具箱之一,它是以神經(jīng)網(wǎng)絡(luò)理論為基礎(chǔ),用MATLAB語(yǔ)言構(gòu)造出典型神經(jīng)網(wǎng)絡(luò)的工具函數(shù),。MATLAB中專門(mén)編制了大量有關(guān)BP神經(jīng)網(wǎng)絡(luò)的工具箱函數(shù),為BP神經(jīng)網(wǎng)絡(luò)的應(yīng)用研究提供了強(qiáng)有力的工具。本文用到的主要工具箱函數(shù)有:(1)神經(jīng)元傳遞函數(shù):purelin()為一線性傳遞函數(shù),利用BP算法訓(xùn)練的輸出層神經(jīng)元經(jīng)常采用它;tansig()為一雙曲正切S型(sigmoid)傳遞函數(shù),用于將神經(jīng)元上范圍為(-∞,+∞)的輸入值映射到區(qū)間(-1,+1)上,利用BP算法訓(xùn)練的隱含層神經(jīng)元中經(jīng)常采用它,。(2)網(wǎng)絡(luò)建立函數(shù):newff()用于建立一個(gè)前饋BP神經(jīng)網(wǎng)絡(luò),。(3)網(wǎng)絡(luò)訓(xùn)練函數(shù):train()用于訓(xùn)練建立的BP神經(jīng)網(wǎng)絡(luò)。(4)網(wǎng)絡(luò)仿真函數(shù):sim()用于仿真訓(xùn)練前后的BP神經(jīng)網(wǎng)絡(luò),。
3? 基于BP神經(jīng)網(wǎng)絡(luò)的函數(shù)逼近過(guò)程及其MATLAB實(shí)現(xiàn)
下面將結(jié)合一個(gè)實(shí)例詳細(xì)闡述基于BP神經(jīng)網(wǎng)絡(luò)的函數(shù)逼近過(guò)程及其MATLAB實(shí)現(xiàn)方法,。設(shè)要逼近的非線性函數(shù)為:。
(1)網(wǎng)絡(luò)建立:使用“net=newff(minmax(x),[20,1],{′tansig′′purelin′});”語(yǔ)句建立一個(gè)前饋BP神經(jīng)網(wǎng)絡(luò),。該BP神經(jīng)網(wǎng)絡(luò)只含一個(gè)隱含層,且神經(jīng)元的個(gè)數(shù)為20。隱含層和輸出層神經(jīng)元的傳遞函數(shù)分別為tansig和purelin,。其他參數(shù)默認(rèn),。
(2)網(wǎng)絡(luò)訓(xùn)練:使用“net=train(net,x,y);”語(yǔ)句訓(xùn)練建立好的BP神經(jīng)網(wǎng)絡(luò),。當(dāng)然在網(wǎng)絡(luò)訓(xùn)練之前必須設(shè)置好訓(xùn)練參數(shù)。如設(shè)定訓(xùn)練時(shí)間為50個(gè)單位時(shí)間,訓(xùn)練目標(biāo)的誤差小于0.01,用“net.trainParam.epochs=50;net.trainParam.goal=0.01;”語(yǔ)句實(shí)現(xiàn),。其他參數(shù)默認(rèn),。
(3)網(wǎng)絡(luò)仿真:使用“y1=sim(net,x);y2=sim(net,x);”語(yǔ)句仿真訓(xùn)練前后的BP神經(jīng)網(wǎng)絡(luò)。
程序1是該例程的源代碼,。由程序可知,采用功能強(qiáng)大的MATLAB語(yǔ)言編程,可直接調(diào)用MATLAB軟件包中的BP神經(jīng)網(wǎng)絡(luò)工具箱函數(shù),。圖1為原函數(shù)與網(wǎng)絡(luò)訓(xùn)練前后的仿真結(jié)果比較圖。由圖1可知,用工具箱函數(shù)newff建立網(wǎng)絡(luò)時(shí),對(duì)權(quán)值和閾值的初始化是隨機(jī)的,所以未訓(xùn)練網(wǎng)絡(luò)的仿真輸出效果很差,并且每次運(yùn)行的結(jié)果也不相同,。訓(xùn)練網(wǎng)絡(luò)的仿真輸出曲線和原始曲線非常接近,這說(shuō)明訓(xùn)練后的網(wǎng)絡(luò)對(duì)非線性函數(shù)的逼近效果很好,。網(wǎng)絡(luò)訓(xùn)練過(guò)程中誤差隨訓(xùn)練時(shí)間的變化迅速減少,在經(jīng)過(guò)5個(gè)單位時(shí)間以后,網(wǎng)絡(luò)的誤差就達(dá)到了逼近要求(圖略)。
?
程序1:MATLAB程序源代碼
4? 結(jié)? 論
BP神經(jīng)網(wǎng)絡(luò)最強(qiáng)大的應(yīng)用之一就是函數(shù)逼近,即從訓(xùn)練樣本出發(fā),對(duì)未知函數(shù)進(jìn)行非線性逼近,。而網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)直接影響網(wǎng)絡(luò)對(duì)函數(shù)的逼近能力和效果,。因此,在實(shí)際應(yīng)用中,應(yīng)根據(jù)具體問(wèn)題,選擇一個(gè)合適的網(wǎng)絡(luò)結(jié)構(gòu)。應(yīng)用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行函數(shù)逼近,不僅在純數(shù)學(xué)和應(yīng)用數(shù)學(xué)領(lǐng)域有意義,而且在工程和物理學(xué)領(lǐng)域也非常有用,。這種逼近方式已被廣泛地應(yīng)用于系統(tǒng)辨識(shí)與建模,、信號(hào)處理及模式識(shí)別等多個(gè)方面。
?
參考文獻(xiàn)
1? 飛思科技產(chǎn)品研發(fā)中心編著.MATLAB6.5輔助神經(jīng)網(wǎng)絡(luò)分析與設(shè)計(jì).北京:電子工業(yè)出版社,2003
2? 廖寧放.BP神經(jīng)網(wǎng)絡(luò)用于函數(shù)逼近的最佳隱層結(jié)構(gòu).北京理工大學(xué)學(xué)報(bào),1998;(8)
3? 王美玲.一種用于非線性函數(shù)逼近的小波神經(jīng)網(wǎng)絡(luò)算法仿真.北京理工大學(xué)學(xué)報(bào),2002;(6)
4? 王強(qiáng).利用人工神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)函數(shù)逼近.計(jì)算機(jī)仿真,2002;(9)
5? 劉延年.多層前向BP網(wǎng)絡(luò)函數(shù)逼近能力的研究.南京航空航天大學(xué)學(xué)報(bào),1994;(1)