趙建民, 王雨萌
(東北石油大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院, 大慶 163318)
1943年,Warren Mc Culloch 和 Walter Pitts 提出了神經(jīng)網(wǎng)絡(luò)層次結(jié)構(gòu)模型[1],確立為神經(jīng)網(wǎng)絡(luò)的計(jì)算模型理論,從而為機(jī)器學(xué)習(xí)的發(fā)展奠定了基礎(chǔ)。1950年“人工智能之父”圖靈發(fā)提出了著名的“圖靈測(cè)試”,使人工智能成為了計(jì)算機(jī)科學(xué)領(lǐng)域一個(gè)重要的研究課題[2]。
人工智能已成為全球新一輪科技革命和產(chǎn)業(yè)變革的著力點(diǎn)[3],其推廣和應(yīng)用獲得了極大的成功,并逐漸成為一種極其重要的工程技術(shù)[4]。隨著人工智能技術(shù)的日益成熟和不斷深入,研究人員發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)愈發(fā)體現(xiàn)出其優(yōu)越的性能,神經(jīng)網(wǎng)絡(luò)是人工智能發(fā)展中所使用的重要方法,也是當(dāng)前類(lèi)腦智能研究中的有效工具[5]。而B(niǎo)P神經(jīng)網(wǎng)絡(luò)(Back Propagation Neural Networks,BPNN)[6]則是應(yīng)用普及程度最高的一項(xiàng)神經(jīng)網(wǎng)絡(luò)內(nèi)容[7-8],BP神經(jīng)網(wǎng)絡(luò)已廣泛應(yīng)用于非線(xiàn)性建摸、函數(shù)逼近、系統(tǒng)辨識(shí)等方面[9]。
本文將對(duì)標(biāo)準(zhǔn)的BP神經(jīng)網(wǎng)絡(luò)算法進(jìn)行改進(jìn),通過(guò)驗(yàn)證異或問(wèn)題并結(jié)合模式識(shí)別[10]中的手寫(xiě)模式識(shí)別[11],將變化學(xué)習(xí)率應(yīng)用于經(jīng)典的BP神經(jīng)網(wǎng)絡(luò),用以解決固定學(xué)習(xí)率在訓(xùn)練模型時(shí)所出現(xiàn)的易越過(guò)全局極小值點(diǎn)、模型收斂速度慢[12]的問(wèn)題。
BP神經(jīng)網(wǎng)絡(luò)是一種信號(hào)由正向傳播,誤差按逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò),BP神經(jīng)網(wǎng)絡(luò)具有非線(xiàn)性映射能力強(qiáng),容錯(cuò)能力強(qiáng),泛化能力強(qiáng)等優(yōu)點(diǎn)。標(biāo)準(zhǔn)的BP神經(jīng)網(wǎng)絡(luò)模型包含三層,分別是輸入層、隱藏層和輸出層.在正向傳播過(guò)程中,輸入樣本從輸入層傳入,傳向輸出層。中間過(guò)程為,輸入信號(hào)經(jīng)隱層逐層傳遞,根據(jù)輸出層的實(shí)際輸出是否與期望輸出不符的判別條件,轉(zhuǎn)入誤差的反向傳播[13],其目的為將誤差分?jǐn)偨o各層所有單元,用各層單元的誤差信號(hào)修正各單元的權(quán)值,BP神經(jīng)網(wǎng)絡(luò)模型如圖1所示。
1) 定義BP訓(xùn)練所需函數(shù):
損失函數(shù),定義為式(1)。
(1)
其中,E表示損失函數(shù),l表示樣本總數(shù),Yk表示輸出值,Dk表示輸出值。
激活函數(shù),定義為式(2)。
圖1 BP神經(jīng)網(wǎng)絡(luò)模型
(2)
激活函數(shù)的作用是將每一層的輸出轉(zhuǎn)換成為非線(xiàn)性元素,本文實(shí)驗(yàn)選擇的是傳統(tǒng)的三層BP神經(jīng)網(wǎng)絡(luò),激活函數(shù)選取的是Sigmoid激活函數(shù)[14],Sigmoid函數(shù)的優(yōu)點(diǎn)在于輸出的取值范圍為(0,1),故函數(shù)可以將每層加權(quán)后的輸出映射到(0,1)的區(qū)間,可以很容易的抑制相差比較大的誤差,并且在神經(jīng)網(wǎng)絡(luò)反向傳播誤差優(yōu)化參數(shù)時(shí),需要對(duì)激活函數(shù)進(jìn)行求導(dǎo),Sigmoid函數(shù)導(dǎo)數(shù)可以用自身函數(shù)表達(dá)式來(lái)表示,Sigmoid函數(shù)導(dǎo)數(shù)表達(dá)式,為式(3)。
f′(x)=f(x)(1-f(x))
(3)
Sigmoid函數(shù)圖像如圖2所示。
圖2 Sigmoid函數(shù)
2) BP神經(jīng)網(wǎng)絡(luò)定義如下:
輸入層的輸入向量為:X=(X1,X2,… ,Xn);
隱藏層輸出向量為:H=(H1,H2,… ,Hm);
輸出層輸出向量為:Y=(Y1,Y2,… ,Yl);
期望輸出向量為:D=(D1,D2,… ,Dl);
輸入層到隱藏層權(quán)值矩陣為:V=(V1,V2,…,Vj,…,Vm);
隱藏層到輸出層權(quán)值矩陣為:W=(W1,W2,…,Wk,…,Wl)。
3) 正向傳播輸入信號(hào)過(guò)程
隱藏層輸入為式(4)—式(7)。
(i=1,2,…,n)
(4)
隱藏層輸出為:
Hj=f(netj) (j=1,2,…,m)
(5)
輸出層輸入為:
(j=1,2,…,m)
(6)
輸出層輸出為:
Yk=f(netk) (k=1,2,…,l)
(7)
4) 誤差的反向傳播過(guò)程
輸出層損失函數(shù)為式(8)。
(8)
將損失函數(shù)反向傳播回隱藏層為式(9)。
(9)
將誤差反向傳播回輸入層為式(10)。
(10)
誤差對(duì)輸出層各神經(jīng)元權(quán)值的偏導(dǎo)數(shù)為式(11)。
(11)
誤差對(duì)隱藏層各神經(jīng)元權(quán)值的偏導(dǎo)數(shù)為式(12)。
(12)
設(shè)置學(xué)習(xí)率為η,對(duì)隱藏層到輸出層權(quán)重進(jìn)行更新為式(13)、(14)。
(13)
(14)
對(duì)輸入層到隱藏層權(quán)重進(jìn)行更新為式(15)、(16)。
(15)
(16)
神經(jīng)網(wǎng)絡(luò)的性能主要取決于三個(gè)因素:一是用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的樣本的特征選擇方法,二是神經(jīng)網(wǎng)絡(luò)的優(yōu)化算法,最后是神經(jīng)網(wǎng)絡(luò)隱層節(jié)點(diǎn)的選擇方法[15]。
本文選取第二種因素神經(jīng)網(wǎng)絡(luò)的優(yōu)化算法對(duì)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化改進(jìn),BP神經(jīng)網(wǎng)絡(luò)的核心在于計(jì)算前向傳播最后的輸出結(jié)果與預(yù)期輸出的誤差的偏導(dǎo)數(shù)[16],利用這個(gè)偏導(dǎo)數(shù)和隱藏層進(jìn)行加權(quán)求和,一層層向后傳播,直到傳到輸入層,最后利用每個(gè)節(jié)點(diǎn)求出的偏導(dǎo)數(shù)更新權(quán)重。而使用梯度下降法的實(shí)質(zhì),是不斷更新參數(shù),對(duì)于步長(zhǎng)的選取通??梢詻Q定神經(jīng)網(wǎng)絡(luò)的收斂速度以及結(jié)果的準(zhǔn)確率,步長(zhǎng)選取過(guò)大,模型易越過(guò)全局極小值點(diǎn),步長(zhǎng)選取過(guò)小,模型收斂速度慢,相比于固定學(xué)習(xí)率,變化學(xué)習(xí)率在模型訓(xùn)練時(shí)體現(xiàn)出其極大的優(yōu)勢(shì)。
在模型訓(xùn)練中,當(dāng)η大于0.2且為固定值時(shí),從第一次迭代起誤差函數(shù)值就會(huì)幾乎不下降 ,且其值都很相近,原因?yàn)殡S機(jī)權(quán)值與系統(tǒng)真實(shí)權(quán)值相差較大,由此隨機(jī)權(quán)得出的誤差值必然較大[17]。
本文針對(duì)BP神經(jīng)網(wǎng)絡(luò)算法提出一種改進(jìn)的變化學(xué)習(xí)率為式(17)。
(17)
其中Δw為誤差對(duì)各層神經(jīng)元權(quán)值的偏導(dǎo)數(shù)。
相比于固定學(xué)習(xí)率,變化學(xué)習(xí)率不僅可以加快模型收斂速度,更可以隨著每次迭代的損失函數(shù)調(diào)整步長(zhǎng),有效的預(yù)防了模型發(fā)散的問(wèn)題,將優(yōu)化的學(xué)習(xí)率用于BP神經(jīng)網(wǎng)絡(luò)的步驟如下:
對(duì)隱藏層到輸出層進(jìn)行權(quán)重更新為式(18)。
(18)
對(duì)輸入層到隱藏層進(jìn)行權(quán)重更新為式(19)。
(19)
本文采用Python編程技術(shù),集成開(kāi)發(fā)環(huán)境采用Anaconda3中的juypter notebook,Anaconda是一個(gè)主要面向科學(xué)計(jì)算的Python開(kāi)源發(fā)行版本,Anaconda集成了計(jì)算、可視化和程序設(shè)計(jì)等強(qiáng)大的功能,預(yù)裝了大量的Python第三方庫(kù),例如Numpy、Scipy、Matplotlib等,為本文的實(shí)驗(yàn)提供了便利。
本實(shí)驗(yàn)的目的是為了驗(yàn)證改進(jìn)的變化學(xué)習(xí)率運(yùn)用在BP神經(jīng)網(wǎng)絡(luò)算法的有效性。本文設(shè)計(jì)了兩個(gè)實(shí)驗(yàn)來(lái)進(jìn)行驗(yàn)證,實(shí)驗(yàn)一是利用BP神經(jīng)網(wǎng)絡(luò)解決異或問(wèn)題的對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)二是利用Python第三方模塊sklearn中的手寫(xiě)數(shù)字識(shí)別數(shù)據(jù)集對(duì)固定學(xué)習(xí)率和本文提出變化學(xué)習(xí)率的對(duì)比實(shí)驗(yàn)。
4.2.1 實(shí)驗(yàn)一
實(shí)驗(yàn)一運(yùn)用三層BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)異或問(wèn)題來(lái)證明本算法的有效性。
首先運(yùn)用傳統(tǒng)的固定學(xué)習(xí)率的三層神經(jīng)網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn),每迭代五百次記錄一次誤差信息,實(shí)驗(yàn)結(jié)果如下:
time:1500 Error:0.458404517166
time:2000 Error:0.360931277441
time:2500 Error:0.229372589968
time:3000 Error:0.155475012087
time:3500 Error:0.118675634533
time:4000 Error:0.0975626246316
time:4500 Error:0.0839069786167
time:5000 Error:0.0743082823057
time:5500 Error:0.0671542277731
time:6000 Error:0.0615890525893
time:6500 Error:0.0571173479187
time:7000 Error:0.0534323355973
time:7500 Error:0.0503336484737
time:8000 Error:0.0476846679439
time:8500 Error:0.0453888887144
從實(shí)驗(yàn)結(jié)果可以看出在訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)時(shí)學(xué)習(xí)率設(shè)置為固定學(xué)習(xí)率時(shí),迭代1500次時(shí)訓(xùn)練的誤差約為是45.84%,而在迭代8500次誤差達(dá)到4.53%。
進(jìn)行對(duì)比試驗(yàn),對(duì)比實(shí)驗(yàn)的神經(jīng)網(wǎng)絡(luò)中的其他參數(shù)不變,步長(zhǎng)設(shè)置為本文提出的優(yōu)化后的變化學(xué)習(xí)率,實(shí)驗(yàn)結(jié)果如下:
time:1500 Error:0.160769081427
time:2000 Error:0.096897464958
time:2500 Error:0.0728406727105
time:3000 Error:0.0599997421748
time:3500 Error:0.0518647863821
time:4000 Error:0.0461737143615
time:4500 Error:0.0419278562032
time:5000 Error:0.0386145218412
time:5500 Error:0.0359417347153
time:6000 Error:0.0337301230737
time:6500 Error:0.0318629342354
time:7000 Error:0.030260631329
time:7500 Error:0.0288669969007
time:8000 Error:0.0276410690144
time:8500 Error:0.0265522297624
由實(shí)驗(yàn)結(jié)果可以看出,在對(duì)學(xué)習(xí)率進(jìn)行優(yōu)化后,迭代1500次時(shí)訓(xùn)練的誤差就已經(jīng)降低到16.07%,而在迭代8500次誤差降低到2.66%,模型的收斂速度有了明顯的提高。
4.2.2 實(shí)驗(yàn)二
本文同時(shí)進(jìn)行手寫(xiě)識(shí)別實(shí)驗(yàn)證明改進(jìn)學(xué)習(xí)率后的BP神經(jīng)網(wǎng)絡(luò)的泛化能力,此次實(shí)驗(yàn)隱藏層定義了六十個(gè)神經(jīng)元,所選用數(shù)據(jù)集來(lái)自sklearn模塊的手寫(xiě)識(shí)別數(shù)據(jù)集。
同樣首先采用固定學(xué)習(xí)率的BP神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,每迭代五百次記錄數(shù)據(jù)一次訓(xùn)練結(jié)果的準(zhǔn)確率,并且手寫(xiě)識(shí)別實(shí)驗(yàn)采用數(shù)據(jù)分批訓(xùn)練的方式在不影響模型準(zhǔn)確率的前提下提升訓(xùn)練速度,實(shí)驗(yàn)結(jié)果如下:
time:11500 acc:0.848888888889
time:12000 acc:0.851111111111
time:12500 acc:0.851111111111
time:13000 acc:0.853333333333
time:13500 acc:0.853333333333
time:14000 acc:0.857777777778
time:14500 acc:0.857777777778
time:15000 acc:0.882222222222
time:15500 acc:0.966666666667
time:16000 acc:0.966666666667
time:16500 acc:0.971111111111
time:17000 acc:0.962222222222
time:17500 acc:0.964444444444
time:18000 acc:0.973333333333
time:18500 acc:0.971111111111
time:19000 acc:0.975555555556
time:19500 acc:0.975555555556
time:20000 acc:0.975555555556
從實(shí)驗(yàn)結(jié)果可以看出利用BP神經(jīng)網(wǎng)絡(luò)識(shí)別手寫(xiě)數(shù)字時(shí),學(xué)習(xí)率未優(yōu)化時(shí),迭代11500次時(shí)訓(xùn)練的準(zhǔn)確率約為84.89%,而在迭代20000次訓(xùn)練的準(zhǔn)確率才達(dá)到97.56%,模型收斂速度較慢。
將優(yōu)化后的變化學(xué)習(xí)率用在BP神經(jīng)網(wǎng)絡(luò)識(shí)別手寫(xiě)數(shù)字實(shí)驗(yàn)時(shí),實(shí)驗(yàn)結(jié)果如下:
time:5500 acc:0.957777777778
time:6000 acc:0.951111111111
time:6500 acc:0.962222222222
time:7000 acc:0.968888888889
time:7500 acc:0.96
time:8000 acc:0.964444444444
time:8500 acc:0.962222222222
time:9000 acc:0.962222222222
time:9500 acc:0.968888888889
time:10000 acc:0.966666666667
time:10500 acc:0.964444444444
time:11000 acc:0.982222222222
從實(shí)驗(yàn)結(jié)果可以看出使用優(yōu)化后的變化學(xué)習(xí)率未優(yōu)化時(shí),在迭代5500次時(shí)訓(xùn)練的準(zhǔn)確率就已經(jīng)達(dá)到95.78%,模型的收斂速度相較以及準(zhǔn)確率使用固定學(xué)習(xí)率的BP神經(jīng)網(wǎng)絡(luò)有了較大幅度的提升。
本文運(yùn)用經(jīng)典的BP神經(jīng)網(wǎng)絡(luò),對(duì)其傳統(tǒng)的固定學(xué)習(xí)率進(jìn)行優(yōu)化改進(jìn),并通過(guò)優(yōu)化后的神經(jīng)網(wǎng)絡(luò)解決異域問(wèn)題以及手寫(xiě)模式識(shí)別兩個(gè)實(shí)驗(yàn),證明了改進(jìn)算法確實(shí)對(duì)模型的收斂速度以及準(zhǔn)確度有了一定程度的提高,證明了改進(jìn)后算法的有效性。