郭松林, 王朝暉
(黑龍江科技大學(xué) 電氣與控制工程學(xué)院, 哈爾濱 150022)
神經(jīng)網(wǎng)絡(luò)是當(dāng)今人工智能研究的主流內(nèi)容,在深度學(xué)習(xí)領(lǐng)域具有很強(qiáng)的潛力[1]。神經(jīng)網(wǎng)絡(luò)在迭代過程中主要采用的是梯度下降算法,隨著科技的進(jìn)步,梯度下降算法已經(jīng)有諸多優(yōu)秀的算法,如SGD、SGDM、CM、Adagrad和Adam等。
Adam算法是現(xiàn)今使用最多的深度學(xué)習(xí)算法,該算法容易跳過鞍點(diǎn),能夠自適應(yīng)調(diào)節(jié)學(xué)習(xí)率。但是梯度下降算法會導(dǎo)致代價(jià)函數(shù)陷入局部最小,造成收斂慢或不收斂的情況。對梯度下降算法的優(yōu)化[2],采用遺傳算法[3]、退火算法[4]、粒子群算法[5-6]等算法進(jìn)行改進(jìn),均取得了有效的進(jìn)展,但是,大多優(yōu)化是對網(wǎng)絡(luò)連接結(jié)構(gòu)、網(wǎng)絡(luò)初始值的優(yōu)化,并未從根本上改善迭代中發(fā)生的局部最小問題。
筆者基于梯度下降算法,將粒子群算法與之組合構(gòu)成新算法,其結(jié)合了粒子群算法不易陷入局部最小和Adam較強(qiáng)尋優(yōu)的特點(diǎn),以使模型收斂更快,精度更高。
神經(jīng)網(wǎng)絡(luò)包括輸入層、隱含層、輸出層。文中的網(wǎng)絡(luò)模型采用多輸入多輸出結(jié)構(gòu),拓?fù)浣Y(jié)構(gòu)如圖1所示,其中,x1,x2,…,x4為網(wǎng)絡(luò)輸入,b1,b2,…,b4為各神經(jīng)元偏置,y1,y1,y3為網(wǎng)絡(luò)輸出。
圖1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)Fig. 1 Network topology structure
式中,wij——隱含層權(quán)重,i=1,2,…,4,j=1,2,…,4。
通過隱含層的線性變換后,需要引入非線性激活函數(shù)g(θ),得到最終隱含層輸出函數(shù)為
隱含層到輸出層的映射關(guān)系為
與前一層的局部接受域相連,輸出層表示某一輸入數(shù)據(jù)的分類情況,即屬于各個(gè)類別的數(shù)值大小。
在現(xiàn)代神經(jīng)網(wǎng)絡(luò)架構(gòu)中,激活函數(shù)多種多樣,目的均是為了將線性映射變?yōu)榉蔷€性映射,用來增強(qiáng)模型的擬合能力,常見的非線性激活函數(shù)是ReLU和Logistic表達(dá)式為
文中采用的非線性激活函數(shù)是ReLU,相比之下,梯度容易求解,運(yùn)算速度快。而且神經(jīng)網(wǎng)絡(luò)在進(jìn)行參數(shù)訓(xùn)練時(shí),由于鏈?zhǔn)椒▌t,偏導(dǎo)數(shù)在反向傳播過程中絕對值會越來越小,幾乎為0。如果采用Logistic激活函數(shù),當(dāng)輸入絕對值很大的話會出現(xiàn)“飽和”的情況,即倒數(shù)趨近于0,而ReLU不會飽和,在激活的時(shí)候?qū)?shù)恒定為1,可以避免“梯度消失”。
softmax函數(shù),也稱歸一化指數(shù)函數(shù),目的是將有限項(xiàng)離散分布的數(shù)據(jù)進(jìn)行對數(shù)歸一化,使多分類的結(jié)果以概率值的形式展現(xiàn)出來。文中將softmax用于多分類任務(wù)中,將神經(jīng)網(wǎng)絡(luò)輸出的多個(gè)數(shù)值映射到(0,1)區(qū)間內(nèi)。
在n分類任務(wù)中,樣本x屬于第j個(gè)分類的概率為
(1)
由式(1)可知,指數(shù)函數(shù)的值域是非負(fù)數(shù),將神經(jīng)網(wǎng)絡(luò)的結(jié)果映射到指數(shù)函數(shù)上,可以保證概率的非負(fù)性。各種預(yù)測結(jié)果的概率之和為1。
交叉熵是信息論中的一個(gè)概念,主要用于計(jì)算兩類數(shù)據(jù)之間的差異性大小。在神經(jīng)網(wǎng)絡(luò)中,希望訓(xùn)練數(shù)據(jù)在模型上得到的數(shù)據(jù)值與真實(shí)數(shù)據(jù)值越接近越好,而這種數(shù)據(jù)間的差異性可以由交叉熵?fù)p失值表現(xiàn)出來,因此,文中選用交叉熵作為損失函數(shù),用來度量真實(shí)值和預(yù)測值之間距離。
損失函數(shù)為
式中:y——期望輸出,即有監(jiān)督訓(xùn)練的標(biāo)簽;
o——實(shí)際輸出,即經(jīng)過模型運(yùn)算給出的結(jié)果;
N——訓(xùn)練的總樣本數(shù)。
Adam是如今深度學(xué)習(xí)中使用最為廣泛的一種隨機(jī)梯度下降算法,它最大的特點(diǎn)是可以自適應(yīng)調(diào)節(jié)學(xué)習(xí)率,對參數(shù)的每個(gè)分量使用不同的學(xué)習(xí)率進(jìn)行更新,打破了所有參數(shù)使用同一學(xué)習(xí)率進(jìn)行迭代的束縛。待訓(xùn)練參數(shù)的不同分量使用不同的學(xué)習(xí)率進(jìn)行更新,可以減少震蕩,提高收斂效果,進(jìn)而識別出那些非常具有價(jià)值但易被忽略的微小特征。
Adam算法是基于動(dòng)量法的一種拓?fù)?。它在一階矩估計(jì)的基礎(chǔ)上加入了二階矩估計(jì)[8],計(jì)算公式為
mt=β1mt-1+(1-β1)gt,
式中:mt、ut——gt一階矩和二階矩的估計(jì)量;
β1、β2——衰減常數(shù),β1、β2∈[0,1)。
對mt和ut的偏差修正為
Adam的參數(shù)更新公式為
式中:θ——待訓(xùn)練參數(shù)值,即網(wǎng)絡(luò)中權(quán)重和偏置;
α——初始學(xué)習(xí)率;
ε——很小的正數(shù),為了避免分母為0的情況,一般取10-8。
對于自適應(yīng)學(xué)習(xí)率算法的性能問題,有關(guān)學(xué)者使用CIFAR-10數(shù)據(jù)集,對SGD、CM、Adagrad以及Adam 的實(shí)際性能進(jìn)行比較,結(jié)果表明,Adam算法在測試集與訓(xùn)練集中的優(yōu)化效率都是最高的。
粒子群算法(PSO)是通過對飛鳥群覓食行為的研究總結(jié)得來,1995年,Eberhart和Kennedy提出PSO算法。這種通過研究某一物種行為特性的算法在求解優(yōu)化問題中被廣泛使用,它的主要特點(diǎn)是,單個(gè)生物的動(dòng)作與行為往往比較單一,但是當(dāng)站在整個(gè)生物種群的角度時(shí),會發(fā)現(xiàn)往往會取得意想不到的結(jié)果。這與計(jì)算機(jī)單一且運(yùn)算能力龐大的特性十分吻合。
粒子群算法擁有良好的全局尋優(yōu)能力[7],其利用一種粒子來模擬每一只鳥類個(gè)體,粒子群中的每一個(gè)粒子都表示處于解空間中的一個(gè)潛在的解,每個(gè)粒子所處的位置即為待優(yōu)化問題的一個(gè)候選解,粒子的飛行過程即為個(gè)體的尋優(yōu)過程。根據(jù)粒子的最優(yōu)位置和種群的最優(yōu)位置對粒子的速度進(jìn)行實(shí)時(shí)調(diào)整,粒子的速度代表每次迭代粒子移動(dòng)的快慢。
個(gè)體極值是每一個(gè)粒子單獨(dú)搜尋得到的最優(yōu)解,全局最優(yōu)解是粒子群中最優(yōu)的個(gè)體極值。每次迭代,更新每個(gè)粒子速度和位置,達(dá)到終止條件后得到全局最優(yōu)解。
算法包括初始化,個(gè)體極值與全局最優(yōu)解,更新速度和位置的公式,終止條件。
(1)初始化。迭代開始前,要對粒子群算法的超參數(shù)進(jìn)行設(shè)置,包括最大迭代次數(shù)、粒子群中粒子的個(gè)數(shù)、粒子的初始位置和初始速度,整個(gè)搜索空間的范圍。
(2)個(gè)體極值與全局最優(yōu)解。定義適應(yīng)度函數(shù),用于求解每個(gè)粒子的極值,個(gè)體極值為每個(gè)粒子在適應(yīng)度函數(shù)上找到的最優(yōu)解,從這些所有粒子的最優(yōu)解中對比尋找全局極值,該數(shù)值所對應(yīng)的粒子為全局最優(yōu)解。每次迭代完成后,需要更新個(gè)體極值與全局最優(yōu)解。
(3)更新速度和位置的公式。在d維解空間中,第i個(gè)粒子的坐標(biāo)位置為xi=(xi1,xi2,…,xid),其移動(dòng)速度為vi=(vi1,vi2,…,vid),每個(gè)粒子當(dāng)前極值為pi=(pi1,pi2,…,pid),該種群當(dāng)前的全局極值為pg=(pg1,pg2,…,pgd),下一次迭代時(shí)粒子的位置和速度為
xi+1=xi+vi,
vi+1=wvi+c1R1(pi-xi)+c2R2(pg-xi),
式中:w——慣性權(quán)值;
c1、c2——加速因子;
R1、R2——均勻分布于[0,1]的隨機(jī)數(shù),且相互獨(dú)立。
(4)終止條件。在達(dá)到設(shè)定的迭代次數(shù)或相鄰迭代之間的差值滿足最小界限時(shí),迭代終止。此時(shí)選擇粒子群中全局最優(yōu)解對應(yīng)的粒子作為最優(yōu)解。
組合算法流程如圖2所示。
圖2 組合算法流程Fig. 2 Combined algorithm flow
首先,隨機(jī)初始各個(gè)神經(jīng)元的權(quán)重w和偏置b,并且確定粒子群算法中的粒子個(gè)數(shù)n和展開粒子群算法的空間大小。然后,將訓(xùn)練數(shù)據(jù)隨機(jī)排序,輸入神經(jīng)網(wǎng)絡(luò)開始進(jìn)行梯度下降訓(xùn)練,可得經(jīng)過訓(xùn)練后的各神經(jīng)元的權(quán)值和偏置,由式(2)可計(jì)算當(dāng)前損失函數(shù)大小。循環(huán)訓(xùn)練40步后,將更新后權(quán)值w和偏置b看作解向量代入式(3),在梯度下降解的基礎(chǔ)上用PSO算法進(jìn)行60次尋優(yōu),這里尋優(yōu)的解空間是以原解為中心,空間拓?fù)涑鰜淼囊粋€(gè)鄰域,該鄰域的大小是算法新引入的一個(gè)超參數(shù),與學(xué)習(xí)率類似,最后將PSO得到的最優(yōu)粒子(即神經(jīng)元的權(quán)重與偏置)重新代入梯度下降算法,以100步為周期進(jìn)行下一次循環(huán)訓(xùn)練。
實(shí)驗(yàn)在Window10,64位操作系統(tǒng)上搭建Tensorflow作為深度學(xué)習(xí)框架,軟件編程基于Python3.7.7的深度學(xué)習(xí)函數(shù)庫,內(nèi)置了深度學(xué)習(xí)和計(jì)算機(jī)視覺方面的很多通用算法。用來訓(xùn)練的CPU和GPU型號分別為Intel i5-7300HQ和Nvidia GTX1050。
實(shí)驗(yàn)共有數(shù)據(jù)150組,部分?jǐn)?shù)據(jù)見表1,每組包括四個(gè)特征參數(shù)(花萼長、花萼寬、花瓣長、花瓣寬)以及與該特征向量對應(yīng)的鳶尾花類別。類別分為三類,包括狗尾草鳶尾、雜色鳶尾、弗吉尼亞鳶尾,分別用數(shù)字0、1、2表示。
表1 鳶尾花數(shù)據(jù)集Table 1 Iris data set
每次訓(xùn)練之前,需將150組數(shù)據(jù)的順序隨機(jī)打亂,分割為訓(xùn)練集和測試集,其中,訓(xùn)練集為前120組,測試集為后30組。
設(shè)定初始學(xué)習(xí)率lr為0.001,粒子群解空間space為0.01,迭代次數(shù)n為500,批batch大小為30,將120組數(shù)據(jù)分為4批進(jìn)行訓(xùn)練,將每個(gè)批次計(jì)算出的損失值Loss累加求均值,這樣計(jì)算的Loss更準(zhǔn)確。
分別創(chuàng)建BP網(wǎng)絡(luò)模型和BP-PSO網(wǎng)絡(luò)模型,將兩種方法作比較。開始訓(xùn)練網(wǎng)絡(luò),利用算法最小化交叉熵?fù)p失Loss,優(yōu)化網(wǎng)絡(luò)連接權(quán)值。每次訓(xùn)練完成后保存參數(shù),將測試集數(shù)據(jù)輸入模型中進(jìn)行測試。
訓(xùn)練過程中的交叉熵?fù)p失Loss以及模型準(zhǔn)確率σ變化過程分別如圖3、4所示。
圖3 交叉熵?fù)p失Fig. 3 Cross entropy loss
圖4 模型準(zhǔn)確率Fig. 4 Model accuracy
通過對比損失函數(shù)Loss可以看到,BP-PSO算法收斂的速度更快一些,在訓(xùn)練達(dá)到500步左右,BP-PSO算法Loss值就趨于穩(wěn)定,損失值為0.024 93,而BP算法損失值為0.050 3,Loss值仍然處于較高值。組合算法損失值下降了49.54%,明顯優(yōu)于梯度下降算法。
模型準(zhǔn)確率是在30組測試集數(shù)據(jù)上統(tǒng)計(jì)的平均值,BP算法在達(dá)到300步之后將準(zhǔn)確率穩(wěn)定到100%,而BP-PSO算法在迭代131步之后達(dá)到穩(wěn)定,收斂速度提高了43.33%。
針對梯度下降算法容易出現(xiàn)的局部最小問題,提出了梯度下降法(BP)和粒子群算法(PSO)結(jié)合的組合訓(xùn)練算法,對神經(jīng)網(wǎng)絡(luò)中各神經(jīng)元的權(quán)重和偏置進(jìn)行尋優(yōu)計(jì)算。通過實(shí)驗(yàn)研究表明,該組合算法可以達(dá)到更高的精度和更快的收斂速度。但是,由于該方法在原始梯度下降中引入了粒子群算法,導(dǎo)致網(wǎng)絡(luò)模型中加入了額外的的超參數(shù),如粒子群數(shù)量和收索空間的大小等,使調(diào)參問題變得更加復(fù)雜,這將成為作者今后改進(jìn)和研究的方向。