,
(化工部長(zhǎng)沙設(shè)計(jì)研究院 沈陽(yáng)分院,遼寧 沈陽(yáng) 110026)
BP網(wǎng)絡(luò)是目前最為普遍使用的一種神經(jīng)網(wǎng)絡(luò),它是一種采用誤差反向傳播算法進(jìn)行有監(jiān)督訓(xùn)練的多層神經(jīng)元網(wǎng)絡(luò)[1]。
BP網(wǎng)絡(luò)可以通過(guò)學(xué)習(xí)、訓(xùn)練、對(duì)非線性系統(tǒng)進(jìn)行很好的辨識(shí),廣泛應(yīng)用于函數(shù)逼近、故障診斷,分類等領(lǐng)域。
通過(guò)對(duì)非線性對(duì)象的仿真研究,證明BP網(wǎng)絡(luò)具有較全面的系統(tǒng)辨識(shí)能力。雖然計(jì)算時(shí)間長(zhǎng),易陷入局部極小值一直是它不易克服的缺點(diǎn)。但只要選取合適的BP網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練BP算法,并選取辨識(shí)網(wǎng)絡(luò)輸入、輸出、隱層節(jié)點(diǎn)的個(gè)數(shù),BP網(wǎng)絡(luò)還是具有相當(dāng)高的精度,對(duì)非線性系統(tǒng)辨識(shí)也是一種切實(shí)可行的方法[2]。
BP網(wǎng)絡(luò)主要包含輸出輸入層和隱層,建立BP網(wǎng)絡(luò)首先要選擇好網(wǎng)絡(luò)的層數(shù)和每層的節(jié)點(diǎn)數(shù)。輸入輸出層的節(jié)點(diǎn)數(shù)是根據(jù)要分析的變量數(shù)而定,當(dāng)要分析非線性模擬信號(hào)量時(shí),一般采用按時(shí)序采樣的方式選取數(shù)點(diǎn)作為輸入層節(jié)點(diǎn)數(shù)。輸出層節(jié)點(diǎn)數(shù)要根據(jù)實(shí)際需要考慮輸出數(shù)據(jù)的類型和數(shù)據(jù)大小來(lái)決定。
網(wǎng)絡(luò)的層數(shù)一般時(shí)預(yù)先設(shè)定的,確定網(wǎng)絡(luò)層數(shù)就是確定有幾個(gè)隱層,理論上,一個(gè)隱層在不限制隱層節(jié)點(diǎn)數(shù)的情況下,網(wǎng)絡(luò)可以實(shí)現(xiàn)任何在閉區(qū)間內(nèi)的一個(gè)連續(xù)函數(shù)的映射。
隱層節(jié)點(diǎn)數(shù)的選擇較為復(fù)雜,沒(méi)有固定解析式來(lái)解決。要結(jié)合輸入輸出節(jié)點(diǎn)數(shù)以及設(shè)計(jì)者的經(jīng)驗(yàn),多次嘗試來(lái)確定??梢宰裱脑瓌t是,當(dāng)隱節(jié)點(diǎn)過(guò)多,學(xué)習(xí)時(shí)間過(guò)長(zhǎng),當(dāng)隱節(jié)點(diǎn)過(guò)少,學(xué)習(xí)能力差。以下三公式可以參考。
(1)
(2)
m為輸出神經(jīng)元數(shù),n為輸入單元數(shù),a為[1,10]之間的常數(shù)。
(3)
n為輸入單元數(shù)。
以三層神經(jīng)網(wǎng)絡(luò)為例,具體步驟如下:
(2)初始化權(quán)系數(shù)為小的隨機(jī)數(shù)。
(4)根據(jù)梯度法,將誤差E反向傳播,修改權(quán)值及閾值。
對(duì)輸出層權(quán)系數(shù):
對(duì)隱層權(quán)系數(shù):
(5)所有Q對(duì)訓(xùn)練樣本作用一次后,判斷總誤差 是否小于EMAX,小于退出程序。大于或等于則檢查訓(xùn)練次數(shù)是否到達(dá)最大訓(xùn)練次數(shù),是則退出程序,否則返回步驟2。定義:
(Eq為Q對(duì)樣本的誤差)樣本的獲得:選擇輸入信號(hào)p(k),p(k)可以是階躍、斜坡、正弦波或偽隨機(jī)信號(hào),加到系統(tǒng)上。采集實(shí)際系統(tǒng)輸出t(k)。借助Matlab的SIMULINK實(shí)現(xiàn)。這樣可以得到Q對(duì)樣本值,以用于BP算法的系統(tǒng)辨識(shí)。
為了加快訓(xùn)練速度,避免陷入局部極小值,加強(qiáng)魯棒性,避免過(guò)擬合和,采取改進(jìn)BP算法,改進(jìn)BP算法應(yīng)從加快收斂和減少震蕩兩方面來(lái)考慮。加快收斂的主要方法就是優(yōu)化學(xué)習(xí)速率的選取。學(xué)習(xí)速率決定每一次循環(huán)訓(xùn)練中所產(chǎn)生的權(quán)值變化量,大的學(xué)習(xí)速率可能導(dǎo)致的不穩(wěn)定,可能出現(xiàn)振蕩,但小的學(xué)習(xí)速率導(dǎo)致較長(zhǎng)時(shí)間,可能收斂很慢。一般情況下傾向于選取較小的學(xué)習(xí)速率以保證系統(tǒng)的穩(wěn)定性。學(xué)習(xí)速率的選取范圍在0.01~0.8之間。對(duì)于一個(gè)特定的問(wèn)題,要選擇適當(dāng)?shù)膶W(xué)習(xí)速率并不是一件容易的事情,為了減少尋找學(xué)習(xí)速率的訓(xùn)練次數(shù)以及訓(xùn)練時(shí)間,比較合適的方法是采用變化的自適應(yīng)調(diào)整學(xué)習(xí)速率。自適應(yīng)調(diào)整學(xué)習(xí)速率法的好處是除可以加快收斂以外還可以在一定程度上克服算法陷于局部極小點(diǎn)的問(wèn)題[4]。
采用一個(gè)三層BP網(wǎng)絡(luò),其中各層神經(jīng)元個(gè)數(shù)為:輸入層有兩個(gè),隱層有三個(gè),輸出有一個(gè)。訓(xùn)練目標(biāo)是0.0001。隱含層采用tansig函數(shù),輸出層采用purelin函數(shù),訓(xùn)練函數(shù)為traingd。
圖1 訓(xùn)練誤差曲線(訓(xùn)練函數(shù)為traingd)
圖2 網(wǎng)絡(luò)的輸出(訓(xùn)練函數(shù)為traingd)
由上圖可知,當(dāng)隱層節(jié)點(diǎn)數(shù)為3時(shí),網(wǎng)絡(luò)誤差目標(biāo)沒(méi)有被滿足,而且通過(guò)觀察網(wǎng)絡(luò)的輸出曲線,如圖2所示,網(wǎng)絡(luò)的實(shí)際輸出與期望輸出存在很大誤差。當(dāng)隱層節(jié)點(diǎn)數(shù)為10時(shí),網(wǎng)絡(luò)目標(biāo)雖然被滿足,但是網(wǎng)絡(luò)的實(shí)際輸出與期望輸出較隱層節(jié)點(diǎn)數(shù)為5時(shí)誤差大。
若將訓(xùn)練函數(shù)改為trainlm,隱層節(jié)點(diǎn)數(shù)為5時(shí),其它條件不變。
圖3 訓(xùn)練誤差曲線(訓(xùn)練函數(shù)為trainlm)
圖4 網(wǎng)絡(luò)的輸出(訓(xùn)練函數(shù)為trainlm)
由上圖可以分析出,采用隱層為5,訓(xùn)練函數(shù)為trainlm時(shí)收斂速度較快,其輸出誤差也比較小,誤差曲線滿足要求,
通過(guò)MATLAB仿真實(shí)驗(yàn)可以看出,應(yīng)用BP神經(jīng)網(wǎng)絡(luò)方法進(jìn)行系統(tǒng)辨識(shí)是切實(shí)可行的。由仿真結(jié)果表明,用BP網(wǎng)絡(luò)辨識(shí)非線性系統(tǒng),只要算法選擇恰當(dāng),層節(jié)點(diǎn)數(shù)選擇合理,辨識(shí)具有相當(dāng)高的精度。
非線性系統(tǒng)辨識(shí)和BP神經(jīng)網(wǎng)絡(luò)的特點(diǎn)出發(fā),討論了利用BP網(wǎng)絡(luò)進(jìn)行非線性動(dòng)態(tài)系統(tǒng)辨識(shí)。仿真實(shí)例說(shuō)明,BP神經(jīng)網(wǎng)絡(luò)能對(duì)函數(shù)進(jìn)行很好的系統(tǒng)辨識(shí)。應(yīng)對(duì)不同的實(shí)際情況,應(yīng)選擇適當(dāng)?shù)碾[層節(jié)點(diǎn)數(shù)量、合適的網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練函數(shù),BP網(wǎng)絡(luò)算法對(duì)非線性系統(tǒng)可以進(jìn)行辨識(shí)。