高宇航
?。暇┼]電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210003)
摘要:BP神經(jīng)網(wǎng)絡(luò)目前被廣泛應(yīng)用,但是其收斂速度慢、預(yù)測(cè)精度不高的缺點(diǎn)卻一直被人所詬病,因此,在傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)中使用附加動(dòng)量項(xiàng)法以及動(dòng)態(tài)學(xué)習(xí)速率法,并以兩者的融合為基礎(chǔ)提出了陡峭因子可調(diào)激活函數(shù)法來改進(jìn)BP神經(jīng)網(wǎng)絡(luò)。以非線性函數(shù)擬合為實(shí)例,從收斂速度和預(yù)測(cè)精度兩方面對(duì)比分析兩種方法,實(shí)驗(yàn)證明所提出的改進(jìn)方法明顯提高BP神經(jīng)網(wǎng)絡(luò)的收斂速度以及精度。
關(guān)鍵詞:BP神經(jīng)網(wǎng)絡(luò);附加動(dòng)量項(xiàng);動(dòng)態(tài)學(xué)習(xí)速率;陡峭因子可調(diào)激活函數(shù)
中圖分類號(hào):TP183文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.06.017
引用格式:高宇航. 一種改善BP神經(jīng)網(wǎng)絡(luò)性能的方法研究[J].微型機(jī)與應(yīng)用,2017,36(6):53-57,61.
0引言
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network, ANN)是一種以信息處理的方式對(duì)人的大腦神經(jīng)元網(wǎng)絡(luò)進(jìn)行模仿、簡(jiǎn)化并簡(jiǎn)單抽象,而非精確逼真地描述的一種非線性動(dòng)態(tài)系統(tǒng)。BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是一種信號(hào)正向傳播、誤差反向傳播的多層前饋網(wǎng)絡(luò)[1],BP神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)如圖1所示。
由于BP神經(jīng)網(wǎng)絡(luò)具有自適應(yīng)、自組織、實(shí)時(shí)學(xué)習(xí)的特點(diǎn),目前被廣泛應(yīng)用于模式識(shí)別、自動(dòng)控制、預(yù)測(cè)估計(jì)、信號(hào)處理、專家系統(tǒng)等領(lǐng)域。但因?yàn)槠鋵W(xué)習(xí)規(guī)則是基于梯度下降算法,因此就會(huì)存在著諸如收斂速度較慢、預(yù)測(cè)精度不高、不能到全局最小點(diǎn)(即易陷入局部最小點(diǎn))等問題[2]。所以如何有效地改進(jìn)BP神經(jīng)網(wǎng)絡(luò)成為一個(gè)值得研究的重要問題。研究表明影響B(tài)P神經(jīng)網(wǎng)絡(luò)性能的因素有很多,本文從其中幾個(gè)方面展開來探究改進(jìn)BP神經(jīng)網(wǎng)絡(luò)的方法。
1BP神經(jīng)網(wǎng)絡(luò)的改進(jìn)
1.1附加動(dòng)量項(xiàng)方法
BP神經(jīng)網(wǎng)絡(luò)從網(wǎng)絡(luò)誤差的負(fù)梯度方向修正權(quán)值和閾值,這個(gè)過程中并沒有考慮以前經(jīng)驗(yàn)的積累,從而造成震蕩的趨勢(shì)和陷入局部極小值的可能性[3]。因此本文提出采用附加動(dòng)量項(xiàng),即在誤差的反向傳播的過程中給當(dāng)前權(quán)值附加一個(gè)與之前一次權(quán)值變化量相關(guān)的值。附加動(dòng)量的權(quán)值公式為:
w(n)=w(n-1)+Δw(n)+η[w(n-1)-w(n-2)](1)
式中,w(n)、w(n-1)、w(n-2)分別表示n、n-1、n-2時(shí)刻的權(quán)值,η代表動(dòng)量的學(xué)習(xí)率。
1.2動(dòng)態(tài)學(xué)習(xí)速率法
傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)采取固定學(xué)習(xí)速率η,取值范圍一般為[0,1],如果η選擇過小,則會(huì)導(dǎo)致學(xué)習(xí)時(shí)間過長(zhǎng);如果η選擇過大,雖然可以加快學(xué)習(xí)速率,但會(huì)使權(quán)值修改過程產(chǎn)生震蕩現(xiàn)象,以致全局誤差達(dá)不到期望值。
為了改進(jìn)以上問題,根據(jù)梯度下降法逼近極小點(diǎn)的路線是鋸齒狀的、越靠近極小點(diǎn)收斂速度越慢的特征,提出動(dòng)態(tài)學(xué)習(xí)速率法來達(dá)到縮短訓(xùn)練時(shí)間的目的。具體步驟如下: 首先設(shè)置初始學(xué)習(xí)速率η,然后檢查修改之后的權(quán)值能否減小誤差,如果可以,則說明學(xué)習(xí)速率設(shè)置較小,需要加大學(xué)習(xí)速率η;如果未能減小誤差,則說明調(diào)整過度,需要降低學(xué)習(xí)速率η。將對(duì)動(dòng)態(tài)學(xué)習(xí)速率η的調(diào)整公式定義如下:
η(n+1)=1.04η(n),Ε(η+1)<Ε(η)
0.6η(n),Ε(η+1)>1.03(η)
η(n),其他情況(2)
1.3選擇適當(dāng)?shù)募せ詈瘮?shù)
在神經(jīng)網(wǎng)絡(luò)中,一個(gè)神經(jīng)元的激活函數(shù)是用來執(zhí)行復(fù)雜的映射功能,其決定了這個(gè)神經(jīng)元節(jié)點(diǎn)的輸出[4]。FESAURO G指出BP神經(jīng)網(wǎng)絡(luò)的收斂速度受激活函數(shù)直接影響[5]。
激活函數(shù)的作用主要體現(xiàn)在為多層神經(jīng)網(wǎng)絡(luò)引入非線性因素[6]。因?yàn)榫€性模型的表達(dá)能力是十分欠缺的,倘若神經(jīng)網(wǎng)絡(luò)中全是線性部件,輸出都是輸入的線性組合,與沒有隱層效果相當(dāng),這種情況就是最原始的感知機(jī)(Perceptron)。非線性是神經(jīng)網(wǎng)絡(luò)的核心,一旦引入了非線性,BP神經(jīng)網(wǎng)絡(luò)就可以有效地逼近任意連續(xù)函數(shù),能夠解決線性模型所不能解決的非線性問題[7]。
目前常用的激活函數(shù)有Sigmoid函數(shù)和雙曲正切函數(shù)兩種。
?。?)Sigmoid函數(shù): Sigmoid函數(shù)的函數(shù)圖形為s形,函數(shù)定義為:f(net)=11+e-net,它是一種有界可微的實(shí)函數(shù),在每一點(diǎn)導(dǎo)數(shù)的值始終是正數(shù),其導(dǎo)數(shù)為:f′(net)=e-net(1+e-net)2。Sigmoid函數(shù)圖像及其導(dǎo)數(shù)圖像如圖2所示。
它的輸出范圍有限,可以將輸入的數(shù)值映射到0和1之間,所以數(shù)據(jù)在傳遞過程中不易發(fā)散。函數(shù)趨向于負(fù)無窮時(shí)極限為0,函數(shù)趨向于正無窮時(shí)極限為1。 Sigmoid函數(shù)可以輕而易舉地將非線性引入到網(wǎng)絡(luò)中[8]。但是Sigmoid函數(shù)也有著如下兩個(gè)較為致命的缺點(diǎn):
?、亠柡蜁r(shí)梯度消失。當(dāng)輸入值很大或很小的情況下,Sigmoid函數(shù)的這些區(qū)域的梯度幾乎為0,即梯度消失。而對(duì)于BP神經(jīng)網(wǎng)絡(luò)而言,如果梯度過小的話,則會(huì)導(dǎo)致權(quán)值的修改量很小或者幾乎為0,從而導(dǎo)致整個(gè)網(wǎng)絡(luò)難以學(xué)習(xí)。
?、赟igmoid函數(shù)的輸出值不是零均值化的。這會(huì)導(dǎo)致下一層神經(jīng)元將本層非零均值化的輸出信號(hào)作為輸入。試想一下如果數(shù)據(jù)輸入神經(jīng)元是恒正的,那么所得出的梯度也會(huì)是恒正的數(shù),而從產(chǎn)生鋸齒現(xiàn)象而導(dǎo)致收斂速度變慢。
?。?)雙曲正切函數(shù):又稱為Tanh函數(shù),其函數(shù)可以表達(dá)為:f(net)=21+e-2net-1,其導(dǎo)數(shù)為:f′(net)=1-f(net)2。Tanh函數(shù)圖像及其導(dǎo)數(shù)圖像如圖3所示??梢詫⑤斎氲臄?shù)值映射到-1與1之間,圖像過原點(diǎn)且穿越I、III象限,Tanh函數(shù)是一個(gè)嚴(yán)格單調(diào)遞增函數(shù)。函數(shù)趨向于負(fù)無窮時(shí)極限為-1,函數(shù)趨向于正無窮時(shí)極限為1[9]。Tanh函數(shù)針對(duì)Sigmoid函數(shù)輸出值非零均值化做出了改進(jìn),但是飽和時(shí)梯度消失的問題依舊存在[10]。
為了對(duì)比Sigmoid函數(shù)與Tanh函數(shù)作為激活函數(shù)的性能,以經(jīng)典非線性問題——異或問題(XOR)作為研究對(duì)象,分別用兩種函數(shù)作為激活函數(shù),將最大訓(xùn)練次數(shù)設(shè)為1 000次,訓(xùn)練的預(yù)期均方誤差(MSE)精度設(shè)為0.000 1,Sigmoid與Tanh的迭代次數(shù)對(duì)比如表1所示。表1Sigmoid與Tanh的迭代次數(shù)的對(duì)比激活函數(shù)SigmoidTanhMSE精度0.000 10.000 1實(shí)際MSE精度0.000 094 5460.000 091 367迭代次數(shù)10720
根據(jù)表1可以得知,Tanh函數(shù)作為激活函數(shù)時(shí)BP網(wǎng)絡(luò)的收斂速度要優(yōu)于Sigmoid作為激活函數(shù)的收斂速度,其性能大約為Sigmoid的5倍。
1.4改進(jìn)激活函數(shù)
傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)中,只有連接神經(jīng)元之間的權(quán)值以及作用在激活函數(shù)上的閾值是可調(diào)整的,而激活函數(shù)則是固定不變的,這樣一來就制約了BP神經(jīng)網(wǎng)絡(luò)的非線性映射能力,繼而影響網(wǎng)絡(luò)的精度以及收斂速度[11]。為了改進(jìn)上述問題,有學(xué)者提出了針對(duì)Sigmoid函數(shù)的垂直、水平位置的改進(jìn)[12],但是根據(jù)上文可以得知Tanh函數(shù)作為激活函數(shù)要優(yōu)于Sigmoid函數(shù),BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)規(guī)則是基于梯度下降法的特征以及實(shí)際上激活函數(shù)的性能與函數(shù)的陡峭程度的關(guān)聯(lián)更緊密的結(jié)論[1314],在為了達(dá)到優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的同時(shí),沒有必要將其變得更加復(fù)雜?;谝陨纤枷氡疚奶岢鋈缦滦问降亩盖鸵蜃訁?shù)可調(diào)Tanh函數(shù):
f(net)=21+e-2αx-1(3)
其中,α為陡峭因子,其決定函數(shù)的陡峭程度。本文中xj代表輸入層的第j個(gè)節(jié)點(diǎn)的輸入,假設(shè)輸入層有m個(gè)節(jié)點(diǎn),那么j=1,…,m;wji為輸入層第j個(gè)節(jié)點(diǎn)到隱層第i個(gè)節(jié)點(diǎn)之間的連接權(quán)值;ψi表示隱層第i個(gè)節(jié)點(diǎn)的閾值;f1(α1 net)為隱層的激活函數(shù),其中α1是隱層激活函數(shù)的可調(diào)節(jié)陡峭因子;win代表隱層第i個(gè)節(jié)點(diǎn)與輸出層第n個(gè)節(jié)點(diǎn)之間的連接權(quán)值,假設(shè)隱層存在q個(gè)節(jié)點(diǎn),則n=1,…,q;θn表示輸出層第n個(gè)節(jié)點(diǎn)的閾值;f2(α2net)為輸出層的激活函數(shù),α2是輸出層激活函數(shù)的可調(diào)節(jié)陡峭因子;on代表輸出層第n個(gè)節(jié)點(diǎn)的輸出,假設(shè)輸出層存在l個(gè)節(jié)點(diǎn),n=1,…,l。
根據(jù)以上規(guī)定,改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)的前向傳播過程為:
隱層第i個(gè)節(jié)點(diǎn)的輸入為:
neti=∑wjixj-ψi(4)
隱層第i個(gè)節(jié)點(diǎn)的輸出記為:
yi=f1(α1neti)=f1(α1∑mi=1wjixj-ψi)(5)
輸出層第n個(gè)節(jié)點(diǎn)的輸入為:
netn=∑qn=1winyi-θi=∑qn=1winf1(α1∑mi=1wjixj-ψi)-θi(6)
那么,輸出層上第n個(gè)節(jié)點(diǎn)的輸出值就可以用以下形式表示:
on=f2(α2netn)=f2(α2∑qn=1winyi-θi)=f2∑qn=1winf1(α1∑mi=1wjixj-ψi)-θi(7)
改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)誤差的反向傳播過程如下:
每個(gè)樣本p的二次型誤差準(zhǔn)則函數(shù)為:
Ep=12∑ln=1(tn-on)2(8)
設(shè)系統(tǒng)中共有P個(gè)訓(xùn)練樣本,則系統(tǒng)總誤差準(zhǔn)則函數(shù)為:
E=12∑Pp=1∑ln=1(tn-on)2(9)
根據(jù)BP神經(jīng)網(wǎng)絡(luò)反向傳播的原理,為了使得連接權(quán)值沿著E的梯度下降的方向改善,需要依次計(jì)算Δwin、Δwji、Δα2、Δα1,可以利用以下公式來計(jì)算出需要的值,其中η為增益因子。
改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)的輸出層權(quán)值調(diào)整公式為:
改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)的隱層權(quán)值調(diào)整公式為:
改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)的輸出層激活函數(shù)陡峭因子調(diào)整公式為:
改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)的隱層激活函數(shù)陡峭因子調(diào)整公式為:
根據(jù)求導(dǎo)法則,可以求得:
經(jīng)過整理,最后得到如下公式:
最后將計(jì)算出的值帶入如下更新公式中,其中t表示某一時(shí)刻:
win(t+1)=win(t)+Δwin(17)
wji(t+1)=wji(t)+Δwji(18)
α2(t+1)=α2(t)+Δα2(19)
α1(t+1)=α1(t)+Δα1(20)
2實(shí)驗(yàn)結(jié)果與分析
為了驗(yàn)證改進(jìn)之后BP神經(jīng)網(wǎng)絡(luò)的性能,使用MATLAB工具對(duì)非線性函數(shù)z=x2+y2進(jìn)行擬合,從其1 800組輸入輸出數(shù)據(jù)中隨機(jī)選取1 700組作為訓(xùn)練數(shù)據(jù),用于BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,剩余100組作為測(cè)試數(shù)據(jù)用來測(cè)試網(wǎng)絡(luò)的擬合性能[15]。
分別對(duì)采用Tanh函數(shù)作為激活函數(shù)的傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)以及采用附加動(dòng)量項(xiàng)方法與動(dòng)態(tài)學(xué)習(xí)速率及參數(shù)可調(diào)Tanh激活函數(shù)結(jié)合的方法改進(jìn)的算法對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,最后對(duì)兩種方法的結(jié)果進(jìn)行比較分析。
2.1網(wǎng)絡(luò)初始化
在網(wǎng)絡(luò)初始化階段需要確定輸入層神經(jīng)元節(jié)點(diǎn)的個(gè)數(shù)nI、輸出層神經(jīng)元節(jié)點(diǎn)的個(gè)數(shù)nO、隱層神經(jīng)元節(jié)點(diǎn)的個(gè)數(shù)nH。根據(jù)需要擬合的非線性函數(shù)的特征,將輸入層神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)nI設(shè)定為2,輸出層神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)nO設(shè)置為1, 隱層神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)nH可根據(jù)如下公式得到:
nH=nI+nO+a
其中a為0~10之間的常數(shù)。根據(jù)以上設(shè)定,最終構(gòu)造的BP神經(jīng)網(wǎng)絡(luò)的輸入層神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)為2,隱層神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)為10,輸出層神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)為1。接下來則需要對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行隨機(jī)初始化:連接權(quán)值∈(-0.5,0.5);閾值∈(-0.5,0.5);陡峭因子∈(0.7,1.5)。
2.2數(shù)據(jù)預(yù)處理
參數(shù)隨機(jī)初始化之后,需要對(duì)待輸入至網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行歸一化處理,這樣可以減小各維數(shù)據(jù)間數(shù)量級(jí)的差別,從而避免因?yàn)檩斎胼敵鰯?shù)據(jù)數(shù)量級(jí)差別較大而造成網(wǎng)絡(luò)收斂慢、訓(xùn)練時(shí)間長(zhǎng)的問題。
MATLAB中對(duì)應(yīng)歸一化代碼如下:
[inputn,inputps]=mapminmax(input_train);
?。踥utputn,outputps]=mapminmax(output_train);
2.3對(duì)比試驗(yàn)
針對(duì)傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)以及采用附加動(dòng)量項(xiàng)方法與動(dòng)態(tài)學(xué)習(xí)速率以及參數(shù)可調(diào)Tanh激活函數(shù)結(jié)合的方法改進(jìn)的網(wǎng)絡(luò)分別進(jìn)行訓(xùn)練,指定訓(xùn)練的目標(biāo)均方誤差分別取值為0.000 01與0.000 001,最大迭代次數(shù)設(shè)置為10 000次。
最后,以100組作為測(cè)試的數(shù)據(jù)分別針對(duì)迭代次數(shù)與誤差精度兩個(gè)方面來分析傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)與改進(jìn)后的BP神經(jīng)網(wǎng)絡(luò)的擬合性能,結(jié)果如下。
從迭代次數(shù)的角度來分析,如圖4與圖5所示,當(dāng)系統(tǒng)目標(biāo)均方誤差設(shè)置為0.000 01時(shí),傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)到達(dá)該精度需要迭代70次,而改進(jìn)之后的BP神經(jīng)網(wǎng)絡(luò)只需要迭代33次就能達(dá)到該精度。
系統(tǒng)目標(biāo)均方誤差為0.000 001時(shí),如圖6與圖7所示,該精度要求下傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)迭代了193次才完成,反觀改進(jìn)后的BP神經(jīng)網(wǎng)絡(luò)則只用迭代72次就輕松的達(dá)到了均方誤差精度的要求。
接著,從學(xué)習(xí)精度方面來分析。限于篇幅,從100個(gè)測(cè)試數(shù)據(jù)中隨機(jī)抽取出10個(gè)數(shù)據(jù)作為樣本,將目標(biāo)均方誤差精度為0.000 01時(shí)傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)值記為A1,改進(jìn)后的BP神經(jīng)網(wǎng)絡(luò)記為A2;將目標(biāo)均方誤差精度為0.000 001時(shí)傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)值記為B1,改進(jìn)后的BP神經(jīng)網(wǎng)絡(luò)記為B2,結(jié)果的表2所示。從表2可以觀察出改進(jìn)后的BP神經(jīng)網(wǎng)絡(luò)較之于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)精度方面亦有著較為明顯的改善。
3結(jié)論
針對(duì)傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)收斂速度較慢、預(yù)測(cè)精度不高、極易陷入局部最小點(diǎn)的缺點(diǎn),本文提出了一種將平滑權(quán)值變化的值附加動(dòng)量項(xiàng)方法與動(dòng)態(tài)學(xué)習(xí)速率方法以及陡峭因子參數(shù)可調(diào)激活函數(shù)結(jié)合起來的改進(jìn)方法,并與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行了以非線性函數(shù)擬合為實(shí)驗(yàn)的對(duì)比分析,證明了本文改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)具有更快的收斂速度以及更高的精度。
參考文獻(xiàn)
?。?] 周志華,曹存根. 神經(jīng)網(wǎng)絡(luò)及其應(yīng)用[M]. 北京:清華大學(xué)出版社,2004.
[2] ABRAHAM A. Meta learning evolutionary artificial neural networks[J]. Neurocomputing, 2004, 56: 1-38.
?。?] 張雨濃, 曲璐, 陳俊維, 等. 多輸入 Sigmoid 激勵(lì)函數(shù)神經(jīng)網(wǎng)絡(luò)權(quán)值與結(jié)構(gòu)確定法[J]. 計(jì)算機(jī)應(yīng)用研究, 2012, 29(11): 4113-4151.
?。?] Wu Ailong, Zeng Zhigang. Global exponential stability in Lagrange sense for periodic neural networks with various activation functions [J]. Neurocomputing, 2011, 74(5):831-837.
?。?] DEBES K, KOENIG A, GROSS H M. Transfer functions in artificial neural networksa simulationbased tutorial[J]. Brains, Minds and Media, 2005(1).
?。?] MHASKAR H N, MICCHELLI C A. How to choose an activation function[J]. Advances in Neural Information Processing Systems, 1994: 319.
?。?] GULCEHRE C, MOCZULSKI M, DENIL M, et al. Noisy activation functions[J]. arXiv preprint arXiv:1603.00391, 2016.
?。?] 王雪光, 郭艷兵, 齊占慶. 激活函數(shù)對(duì) BP 網(wǎng)絡(luò)性能的影響及其仿真研究[J]. 自動(dòng)化技術(shù)與應(yīng)用, 2002,21(4): 15-17.