侯小毛,馬 凌,趙月愛(ài)
(1.湖南信息學(xué)院 電子信息學(xué)院,湖南 長(zhǎng)沙 410151;2.太原師范學(xué)院 計(jì)算機(jī)系,山西 晉中 030619)
深度神經(jīng)網(wǎng)絡(luò)是一種多層的非線性映射深層網(wǎng)絡(luò)結(jié)構(gòu),能夠完成復(fù)雜的非線性函數(shù)逼近[1]。在許多工程領(lǐng)域中,深度學(xué)習(xí)技術(shù)的實(shí)際性能超越了傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)[2]。深度神經(jīng)網(wǎng)絡(luò)(deep neural networks, DNN)主要有前饋神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)兩種結(jié)構(gòu),前饋神經(jīng)網(wǎng)絡(luò)[3]通過(guò)逐層學(xué)習(xí)獲取輸入數(shù)據(jù)的主要驅(qū)動(dòng)變量,該結(jié)構(gòu)對(duì)分類(lèi)問(wèn)題和目標(biāo)檢測(cè)問(wèn)題的性能較好;遞歸神經(jīng)網(wǎng)絡(luò)[4]的每層均含有反饋回路,能夠?qū)W習(xí)時(shí)間無(wú)關(guān)的數(shù)據(jù),如自然語(yǔ)言理解。雖然深度神經(jīng)網(wǎng)絡(luò)具有巨大的性能優(yōu)勢(shì),但是深度神經(jīng)網(wǎng)絡(luò)含有許多結(jié)構(gòu)參數(shù),針對(duì)特定的應(yīng)用場(chǎng)景確定合適的網(wǎng)絡(luò)模型是一個(gè)難題。
通過(guò)試錯(cuò)法搜索深度神經(jīng)網(wǎng)絡(luò)的參數(shù)需要消耗大量的時(shí)間[5],因此快速準(zhǔn)確地搜索深度神經(jīng)網(wǎng)絡(luò)的參數(shù)成為目前的一個(gè)研究熱點(diǎn)。進(jìn)化神經(jīng)網(wǎng)絡(luò)(evolutionary neural networks, ENN)[6]是將進(jìn)化計(jì)算和神經(jīng)網(wǎng)絡(luò)兩者融合產(chǎn)生的一種全新神經(jīng)網(wǎng)絡(luò)模型,ENN能夠成功實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的權(quán)重進(jìn)化處理,但其計(jì)算時(shí)間較長(zhǎng)。拓?fù)浼訖?quán)進(jìn)化神經(jīng)網(wǎng)絡(luò)(topology and weight evolving artificial neural network, TWEANN)[7]支持對(duì)網(wǎng)絡(luò)結(jié)構(gòu)和權(quán)重參數(shù)同時(shí)進(jìn)行進(jìn)化處理,該網(wǎng)絡(luò)一般包含兩個(gè)循環(huán)體:測(cè)試新網(wǎng)絡(luò)結(jié)構(gòu)的結(jié)果搜索程序和優(yōu)化權(quán)重的結(jié)構(gòu)開(kāi)發(fā)程序。ENN和TWEANN優(yōu)化深度神經(jīng)網(wǎng)絡(luò)的過(guò)程均需要較長(zhǎng)的處理時(shí)間。近期文獻(xiàn)[8,9]在保證深度神經(jīng)網(wǎng)絡(luò)性能的前提下,成功降低了網(wǎng)絡(luò)參數(shù)的搜索時(shí)間。evoCNN[8]使用遺傳算法搜索卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks, CNN)的網(wǎng)絡(luò)結(jié)構(gòu),該算法設(shè)計(jì)了新的交叉算子和變異算子,加快了參數(shù)搜索的過(guò)程。EUDNN[9]使用一個(gè)基礎(chǔ)向量編碼神經(jīng)網(wǎng)絡(luò)的權(quán)重和連接,在每次迭代中需要對(duì)編碼進(jìn)行多次轉(zhuǎn)化,導(dǎo)致該算法對(duì)于高維數(shù)據(jù)的處理速度依然較慢。
文獻(xiàn)[10]的研究成果表明,采用粒子群優(yōu)化算法(particle swarm optimization, PSO)訓(xùn)練ANN的速度快于遺傳算法,而引力搜索算法(gravitational search algorithm, GSA)的收斂速度優(yōu)于PSO[11],受此啟發(fā),本文利用GSA訓(xùn)練CNN網(wǎng)絡(luò)。GSA具有收斂速度快的優(yōu)勢(shì),但是容易陷入局部最優(yōu),因此本文設(shè)計(jì)了GSA的增強(qiáng)機(jī)制,采用對(duì)數(shù)衰減函數(shù)建模引力常量,并且設(shè)計(jì)了交叉算子和變異算子防止陷入局部極值。此外,解的編碼格式對(duì)于訓(xùn)練的效率具有極大的影響,本文設(shè)計(jì)了直接的深度神經(jīng)網(wǎng)絡(luò)表示形式,并且給出了agent各個(gè)屬性的更新方法。最終將訓(xùn)練的深度卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于圖像分類(lèi)問(wèn)題,實(shí)驗(yàn)結(jié)果表明本文方法在實(shí)現(xiàn)較高分類(lèi)精度的情況下,成功加快了深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度。
CNN的數(shù)學(xué)模型定義為
(1)
式中:i為神經(jīng)網(wǎng)絡(luò)的深度,X為輸入數(shù)據(jù),fi()為第i層的激活函數(shù),gi()為第i層的加權(quán)算子,Zi為第i層加權(quán)運(yùn)算的結(jié)果,Wi為第i層的權(quán)重向量,Oi為第i層的輸出。深度神經(jīng)網(wǎng)絡(luò)主要有3種網(wǎng)絡(luò)層:卷積層、池化層和全連接層,3種網(wǎng)絡(luò)層的輸出為
(2)
卷積層的輸出是輸入和權(quán)重卷積(“*”)運(yùn)算的結(jié)果,卷積層一般由卷積核或者卷積濾波器實(shí)現(xiàn)。池化層包括最大池化和平均池化兩種類(lèi)型,對(duì)r×c的池化窗口做下采樣處理,減少輸出參數(shù)。全連接層的輸出為權(quán)重向量和輸入相乘的結(jié)果。
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目標(biāo)是最小化訓(xùn)練目標(biāo)和網(wǎng)絡(luò)預(yù)測(cè)輸出之間的誤差。卷積神經(jīng)網(wǎng)絡(luò)大多采用交叉熵?fù)p失作為評(píng)價(jià)指標(biāo),使用梯度下降法和后向傳播法對(duì)交叉熵?fù)p失進(jìn)行最小化處理。CNN存在大量的結(jié)構(gòu)參數(shù),通過(guò)試錯(cuò)法確定CNN結(jié)構(gòu)需要極高的時(shí)間成本。
假設(shè)一個(gè)n維的搜索空間內(nèi)包含N個(gè)agent,第i個(gè)解的位置表示為向量Xi
(3)
式中:i=1,2,…,N,每個(gè)向量的值表示agenti在該維度的位置。agenti的質(zhì)量和適應(yīng)度之間滿足以下的關(guān)系
(4)
式中:Mi(t)和fiti(t)分別為第t次迭代agenti的質(zhì)量和適應(yīng)度,Agwor(t)表示第t次迭代適應(yīng)度最低的agent。
GSA根據(jù)當(dāng)前位置和下一次迭代的速度計(jì)算agent下一次迭代的位置,計(jì)算方法為
Xi(t+1)=Xi(t)+vi(t+1)
(5)
式中:下一次迭代的速度計(jì)算為
vi(t+1)=r×vi(t)+ai(t)
(6)
式中:r是(0,1)范圍內(nèi)的一個(gè)隨機(jī)變量。agenti的加速度計(jì)算為agenti所受的總引力除以其質(zhì)量
(7)
式中:q為(0,1)范圍內(nèi)的隨機(jī)變量,F(xiàn)ij(t)表示在第t次迭代agentj對(duì)agenti的引力。Fij計(jì)算為
(8)
式中:G為引力常量,R為agentj和agenti間的距離。G一般設(shè)為衰減函數(shù),其初值記為G(G0,t)。算法1所示是GSA的偽代碼。
算法1:GSA優(yōu)化算法
輸入:Tser[],d,τ,h
輸出:Tpdf[]
(1)初始化候選目標(biāo)Xi(i=1,2,…,N)
(2)while 未達(dá)到結(jié)束條件 do
(3) 計(jì)算所有目標(biāo)的適應(yīng)度
(4) 計(jì)算最優(yōu)解目標(biāo)Mi和最差目標(biāo)Mj
(5) 更新重引力因子G(t)
(6) 計(jì)算引力Fij; //式(8)
(7) 更新加速度; //式(7)
(8) 更新速度; //式(6)
(9) 更新位置; //式(5)
(10)endwhile
為增強(qiáng)GSA的局部開(kāi)發(fā)能力和全局搜索能力,本文對(duì)GSA提出3點(diǎn)修改:①采用對(duì)數(shù)衰減函數(shù)代替GSA引力常量的線性遞減函數(shù)。②設(shè)計(jì)了交叉算子強(qiáng)化GSA的全局搜索能力。③設(shè)計(jì)了變異算子防止GSA收斂于局部極值。
(1)加速收斂過(guò)程
GSA中引力常量G的作用是權(quán)衡全局搜索和局部開(kāi)發(fā),式(9)是GSA的G值線性變化函數(shù)
(9)
開(kāi)始階段G值較大,agent以較大的步長(zhǎng)移動(dòng),在迭代過(guò)程中逐漸縮小agent的移動(dòng)步長(zhǎng)。迭代次數(shù)越多,agent的質(zhì)量增加,搜索速度變慢,該性質(zhì)對(duì)GSA的收斂速度具有負(fù)面的影響。為了解決該問(wèn)題,采用對(duì)數(shù)衰減函數(shù)
(10)
式中:G0為初始化的引力常量,Gmin和Gmax分別為引力常量的最小值和最大值,ΔG=Gmax-Gmin,a為加速度,t為當(dāng)前的迭代次數(shù),T為總迭代次數(shù)。
(2)交叉算子設(shè)計(jì)
GSA利用目標(biāo)質(zhì)量控制搜索的趨勢(shì),質(zhì)量大的agent慢于質(zhì)量小的agent,優(yōu)質(zhì)解的移動(dòng)慢于劣質(zhì)解,所以低適應(yīng)度agent搜索未知區(qū)域的能力更強(qiáng)。為了提高GSA對(duì)未知區(qū)域的搜索能力,引入交叉算子來(lái)產(chǎn)生新解,增強(qiáng)GSA的全局搜索能力。
首先,為GSA設(shè)立一個(gè)全局最優(yōu)agent,記為gopt,gopt類(lèi)似于灰狼優(yōu)化算法的頭狼α。每次迭代按適應(yīng)度值將agent降序排列,將后一半(N/2)的所有agent均和gopt進(jìn)行交叉操作,產(chǎn)生N/2個(gè)新解,種群規(guī)模變?yōu)镹+N/2。然后從(N+N/2)個(gè)解中選擇N個(gè)最優(yōu)解作為下一次迭代的種群。交叉算子能夠增強(qiáng)GSA算法的搜索能力,降低早熟收斂的概率,交叉算子的流程如圖1所示,圖中虛線框是本文主要修改的模塊。
圖1 交叉算子的流程
(3)變異算子設(shè)計(jì)
本文GSA算法記錄每個(gè)最優(yōu)解的迭代次數(shù),檢查是否陷入局部最優(yōu)。本文設(shè)計(jì)了變異算子使gopt跳出局部最優(yōu),變異算子的流程如圖2所示。變異算子生成一個(gè)新的變異解,變異算子對(duì)變異agent的處理方式分為3種情況:如果它的適應(yīng)度超過(guò)gopt,那么變異agent變?yōu)楫?dāng)前的gopt。每次迭代將種群按照agent的適應(yīng)度升序排列,X(1)為最優(yōu)解,X(N)為最差解。變異算子有助于GSA跳出局部極值點(diǎn),防止陷入早熟收斂。
圖2 變異算子的流程
算法2是本文GSA_DNN的總程序,算法的輸入數(shù)據(jù)包括:訓(xùn)練數(shù)據(jù)集和CNN的結(jié)構(gòu)參數(shù)。GSA_DNN將GSA的全局最優(yōu)解作為CNN的結(jié)構(gòu)參數(shù),是一種自動(dòng)參數(shù)優(yōu)化算法。訓(xùn)練程序的網(wǎng)絡(luò)參數(shù)并未重新初始化,而是將優(yōu)質(zhì)的參數(shù)集由全局最優(yōu)agent傳遞至下一次迭代中。GSA_DNN包含6個(gè)關(guān)鍵的模塊:CNN的表示、種群初始化、適應(yīng)度評(píng)價(jià)函數(shù)、兩個(gè)agent間的差異度量、計(jì)算agent的速度和更新agent的位置。
算法2:GSA_DNN算法
輸出:CNN的最優(yōu)網(wǎng)絡(luò)結(jié)構(gòu)。
(1)S={P1,…,PN}=initswarm(N,lmax,kmax,nmax,nout);
(2)P1_popt=P1;
(3)P1_loss=computeloss(P1,X,etrain);
(4)P1_popt_loss=computeloss(P1,X,etrain);
(5)gopt=P1; //初始化全局最優(yōu)解
(6)gopt_loss=P1_loss;
(7)fori=2 toNdo
“您所撥打的手機(jī)實(shí)名登記機(jī)主已被人民法院發(fā)布為失信被執(zhí)行人,請(qǐng)督促其盡快履行生效法律文書(shū)確定的義務(wù)?!弊罱?,只要有人撥打南昌市民黃某的電話,就會(huì)聽(tīng)到法院為黃某“量身訂制”的彩鈴。
(8)P1_popt=Pi;
(9)P1_loss=computeloss(P1,X,etrain);
(10)P1_popt_loss=computeloss(P1,X,etrain);
(11) ifPi_loss≤goptlossthen
(12)gopt=Pi;
(13) endif
(14)endfor
(15)foriter=1 toitermaxdo
(16) fori=1 toNdo
(17)Pi_vel=update_velocity( );
(18)Pi=updateAgent(Pi);
(19)Pi_loss=computeLoss(Pi,X,etrain);
(20) ifPi_loss≤Pi_popt_lossthen
(21)Pi_popt=Pi;
(22)Pi_popt_loss=Pi_loss;
(23) ifPi_popt_loss≤gopt_lossthen
(24)gopt=Pi;
(25)gopt_loss=Pi_loss;
(26) endif
(27) endif
(28) endfor
(29)endfor
(30)gopt=computeloss(gopt,X,etest);
(31)returngopt;
設(shè)計(jì)了直接的CNN結(jié)構(gòu)編碼方案。CNN有4種分層:卷積層、最大池化層、平均池化層和全連接層。本文GSA_DNN是4層的神經(jīng)網(wǎng)絡(luò)模型,如圖3所示。
圖3 GSA_DNN的神經(jīng)網(wǎng)絡(luò)模型
假設(shè)C、P和FC分別表示卷積層、池化層和全連接層,將神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)表示為向量形式,向量的每個(gè)位置包含了該層的類(lèi)型及其超參數(shù)。向量中卷積層的超參數(shù)為輸出特征圖(feature map)的數(shù)量,全連接層的超參數(shù)為神經(jīng)元的數(shù)量,卷積層或池化層的超參數(shù)均為核的大小。本文所設(shè)計(jì)的agent編碼方法無(wú)需將編碼信息轉(zhuǎn)化為數(shù)值形式,直接描述了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和超參數(shù)。
算法2的initswarm()函數(shù)為種群初始化方法,initswarm()函數(shù)產(chǎn)生N個(gè)隨機(jī)CNN結(jié)構(gòu)作為初始化agent。算法3所示是initswarm()函數(shù)的偽代碼,每個(gè)agent的網(wǎng)絡(luò)層數(shù)為隨機(jī)值,其范圍為[3,lmax]。每個(gè)agent的第1層和最后1層分別為卷積層和全連接層。卷積層和池化層之間包含F(xiàn)C層會(huì)增加CNN的參數(shù)數(shù)量,所以初始化程序需要保證FC層之后的每層都是FC層。池化層能夠有效地減少輸出的規(guī)模,因此池化層和FC層連接,能夠有效地減少FC層的神經(jīng)元數(shù)量。
算法3:初始化種群算法
輸入:種群大小N,最大層數(shù)lmax,特征圖最大數(shù)量fmapmax,卷積核大小kmax,全連接層神經(jīng)元數(shù)量nmax,輸出層節(jié)點(diǎn)數(shù)量nout。
輸出: agent集合S={P1,…,PN}
(1)fori=1 toNdo
(2)Pi_depth=random(3,depth); //隨機(jī)確定特征圖數(shù)量
(3) forj=1 toPi_depthdo
(4) ifj==1 then
(5)layerlist[j]=addConv(kmax,fmapmax);
(6) else ifj==Pi_depththen
(7)layerlist[j]=addFC(nout);
(8) else iflayerlist[j-1]為全連接層 then
(9)layerlist[j]=addFC(nmax);
(10) else
(11)layertype=random(1, 3);
(12) iflayertype==1 then
(13)layerlist[j]=addConv(kmax,fmapmax);
(14) else iflayertype==2 then
(15)layerlist[j]=addPool();
(16) else
(17)layerlist[j]=addFC(nmax);
(18) endif
(19) endif
(20) endfor
(21)Pi_layerlist=layerlist;
(22)endfor
算法3的addConv()函數(shù)對(duì)agent的網(wǎng)絡(luò)結(jié)構(gòu)增加一個(gè)卷積層,特征圖的數(shù)量是[1,fmapmax]范圍的隨機(jī)值,卷積核大小是[3×3,kmax×kmax]范圍的隨機(jī)值,kmax表示卷積核的最大值,卷積核的滑動(dòng)步長(zhǎng)固定為1×1。add-Pool()函數(shù)隨機(jī)選擇一個(gè)最大池化層或者平均池化層加入agent的網(wǎng)絡(luò)結(jié)構(gòu),池化窗口大小為3×3,滑動(dòng)步長(zhǎng)為2×2。addFC()函數(shù)對(duì)agent的網(wǎng)絡(luò)結(jié)構(gòu)增加一個(gè)全連接層,隱藏神經(jīng)元的數(shù)量為[1,nmax]范圍的隨機(jī)值。所有層的激活函數(shù)均采用線性整流函數(shù)(rectified linear unit, ReLU),池化層的層數(shù)受輸入數(shù)據(jù)的大小約束,如果輸入大小為28×28,最多增加3層池化層。
算法2的computeloss()函數(shù)為適應(yīng)度的評(píng)價(jià)函數(shù)。將agent的網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)具體的CNN,訓(xùn)練CNN的所有epo-ch,計(jì)算每個(gè)agent的損失函數(shù)來(lái)評(píng)價(jià)其適應(yīng)度。本文采用交叉熵?fù)p失作為損失函數(shù),算法目標(biāo)是搜索損失最小的agent。使用Adam方法[12]訓(xùn)練CNN網(wǎng)絡(luò),使用Xavier方法[13]初始化CNN的權(quán)重。
針對(duì)本文的直接編碼方法設(shè)計(jì)了專(zhuān)門(mén)的agent差異度量方法。圖4是比較agent Ag1和Ag2之間差異,圖中P表示池化層,C表示卷積層,F(xiàn)表示全連接層,0表示無(wú)差異,-1表示刪除該層,+F表示增加F層。因?yàn)閍gent網(wǎng)絡(luò)結(jié)構(gòu)的卷積層、池化層和全連接層可能不對(duì)齊,所以獨(dú)立地比較agent的全連接層??紤]4種不同的情況:①如果兩個(gè)agent的第2層均為卷積層,那么兩者的差異為0,說(shuō)明在agent結(jié)構(gòu)的更新過(guò)程中,該層的位置不會(huì)改變,并且保留兩個(gè)agent的超參數(shù)。②如果兩個(gè)agent的網(wǎng)絡(luò)層類(lèi)型不同,那么將保留前一個(gè)agent的超參數(shù)。③如果前一個(gè)agent的神經(jīng)層數(shù)少于后一個(gè)agent,那么對(duì)最終的差異-1,表示該位置應(yīng)當(dāng)被刪除。④如果前一個(gè)agent的神經(jīng)層數(shù)多于后一個(gè)agent,那么對(duì)最終的差異+L,L表示增加的神經(jīng)層類(lèi)型。
圖4 比較agent Ag1和Ag2之間差異
基于全局最優(yōu)gopt和局部最優(yōu)lopt之間的差異決定agentAg的速度,因此每次迭代需要計(jì)算兩個(gè)差異值gopt-Ag和popt-Ag。算法2的update_velocity()函數(shù)為agent的速度計(jì)算方法。圖5是一個(gè)計(jì)算agent速度,圖中P表示池化層,C表示卷積層,F(xiàn)表示全連接層,0表示無(wú)差異,-1表示刪除該層,+F表示增加F層。第1行和第2行列表分別為gopt-Ag和lopt-Ag。產(chǎn)生一個(gè)[0,1)范圍的隨機(jī)數(shù)r,比較r和閾值Cg的大小,如果r≤Cg,則選擇gopt-Ag,否則,選擇lopt-Ag。閾值Cg的作用是控制agent的收斂速度。
圖5 計(jì)算agent速度
因?yàn)樗俣鹊挠?jì)算過(guò)程僅僅比較了神經(jīng)層的類(lèi)型,而一個(gè)agent的神經(jīng)層類(lèi)型可能和gopt和lopt均完全相同,本文方法計(jì)算的速度結(jié)果將為一個(gè)全0的列表。該情況下本文算法基于Cg從gopt和lopt選擇速度,并將gopt的超參數(shù)作為agent的超參數(shù)。
算法2的updateagent()函數(shù)為更新agent的方法。圖6是更新agent結(jié)構(gòu),圖中P表示池化層,C表示卷積層,F(xiàn)表示全連接層,0表示無(wú)差異,-1表示刪除該層,+F表示增加F層。算法根據(jù)agent的速度對(duì)agent的網(wǎng)絡(luò)結(jié)構(gòu)增加或者刪除神經(jīng)層。更新過(guò)程中需要檢查池化層的數(shù)量,使其滿足輸入數(shù)據(jù)的約束,如果更新的結(jié)果中池化層的數(shù)量大于約束值,則從最后一個(gè)池化層依次刪除,使其滿足約束的層數(shù)。
圖6 更新agent結(jié)構(gòu)
采用GPU處理器Nvidia GTX 1080測(cè)試GSA_DNN,GPU的顯存為8 GB,該顯存足夠容納兩百萬(wàn)個(gè)神經(jīng)網(wǎng)絡(luò)的參數(shù)。采用分類(lèi)準(zhǔn)確率和分類(lèi)錯(cuò)誤率作為圖像分類(lèi)性能的評(píng)價(jià)指標(biāo)。
采用4個(gè)基于深度學(xué)習(xí)的圖像分類(lèi)算法作為對(duì)比方法:RandNet-2[14]、evoCNN[15]、MCCNN[16]、HEp-2[17],Rand-Net-2和evoCNN是兩個(gè)經(jīng)典的神經(jīng)網(wǎng)絡(luò)參數(shù)優(yōu)化算法,MCCNN和HEp-2則是近期圖像分類(lèi)領(lǐng)域性能較為突出的兩個(gè)神經(jīng)網(wǎng)絡(luò)模型。RandNet-2將主成分分析和卷積神經(jīng)網(wǎng)絡(luò)結(jié)合,具有較強(qiáng)的非線性學(xué)習(xí)能力,本文模型也以卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ),通過(guò)RandNet-2能夠反映本文方法對(duì)卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)化效果。evoCNN是一種基于遺傳算法的卷積神經(jīng)網(wǎng)絡(luò)演化優(yōu)化方法,該方法得到了廣泛的應(yīng)用。MCCNN設(shè)計(jì)了多通道的卷積神經(jīng)網(wǎng)絡(luò)來(lái)提取具有時(shí)空域不變性的特征,對(duì)圖像進(jìn)行分類(lèi)處理。HEp-2針對(duì)細(xì)胞圖像設(shè)計(jì)了半自動(dòng)的CNN參數(shù)搜索方案,并且在一般的圖像分類(lèi)數(shù)據(jù)集上也完成了性能驗(yàn)證。
采用5個(gè)圖像分類(lèi)領(lǐng)域內(nèi)常用的公開(kāi)數(shù)據(jù)集完成仿真實(shí)驗(yàn):MNIST、MNIST-RD、MNIST-RB、MNIST-BI、MNIST-Fashion。圖7是5個(gè)圖像數(shù)據(jù)集的實(shí)例,表1是5個(gè)數(shù)據(jù)集的基本屬性。MNIST數(shù)據(jù)集由250個(gè)人手寫(xiě)的數(shù)字構(gòu)成,MNIST-RD數(shù)據(jù)集由旋轉(zhuǎn)的手寫(xiě)數(shù)字構(gòu)成,MNIST-RB數(shù)據(jù)集的背景加入了隨機(jī)噪聲,MNIST-BI數(shù)據(jù)集在背景加入了圖像,MNIST-Fashion數(shù)據(jù)集包含了10種不同的服裝。
圖7 5個(gè)實(shí)驗(yàn)圖像數(shù)據(jù)集的實(shí)例
表1 實(shí)驗(yàn)數(shù)據(jù)集的基本屬性
GSA_DNN的參數(shù)分為3組:GSA相關(guān)參數(shù)、CNN初始化參數(shù)和CNN訓(xùn)練的相關(guān)參數(shù)。表2是本文實(shí)驗(yàn)的具體參數(shù)取值。
表2 實(shí)驗(yàn)的參數(shù)設(shè)置
本文GSA_DNN模型獨(dú)立地訓(xùn)練10次,將10次的CNN模型對(duì)測(cè)試數(shù)據(jù)集獨(dú)立地進(jìn)行分類(lèi)實(shí)驗(yàn),統(tǒng)計(jì)10次實(shí)驗(yàn)結(jié)果的平均分類(lèi)準(zhǔn)確率和平均分類(lèi)錯(cuò)誤率。RandNet-2、evoCNN、MCCNN和HEp-2均提供了平均分類(lèi)錯(cuò)誤率結(jié)果,因此首先比較了GSA_DNN的分類(lèi)錯(cuò)誤率,如圖8所示。本文方法對(duì)于MNIST、MNIST-RD、MNIST-RB、MNIST-BI這4個(gè)數(shù)據(jù)集的錯(cuò)誤率均明顯地低于RandNet-2、MCCNN和HEp-2這3個(gè)模型,略低于evoCNN模型。MNIST-Fashion數(shù)據(jù)集類(lèi)別之間的界限更為明顯,所以5個(gè)深度神經(jīng)網(wǎng)絡(luò)對(duì)MNIST-Fashion數(shù)據(jù)集的分類(lèi)錯(cuò)誤率均較低,其中GSA_DNN和evoCNN的結(jié)果幾乎相等,可見(jiàn)本文方法獲得了理想的分類(lèi)性能。
圖8 圖像平均分類(lèi)錯(cuò)誤率
根據(jù)相關(guān)研究人員的分析[18],分類(lèi)錯(cuò)誤率即可以反映圖像分類(lèi)的準(zhǔn)確性,RandNet-2、evoCNN、MCCNN和HEp-2未提供圖像分類(lèi)準(zhǔn)確率的數(shù)據(jù),因此本文僅統(tǒng)計(jì)了GSA_DNN的分類(lèi)準(zhǔn)確率,如圖9所示。圖中可看出,GSA_DNN對(duì)MNIST、MNIST-RD、MNIST-RB和MNIST-Fashion的分類(lèi)準(zhǔn)確率均高于0.97,對(duì)MNIST-BI數(shù)據(jù)集的分類(lèi)準(zhǔn)確率接近0.94,實(shí)現(xiàn)了理想的分類(lèi)性能。
圖9 GSA_DNN的圖像平均分類(lèi)準(zhǔn)確率
表3是本文GSA算法訓(xùn)練5個(gè)數(shù)據(jù)集所獲得的最佳網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)。
表3 GSA_DNN搜索的最佳網(wǎng)絡(luò)參數(shù)
運(yùn)用群體智能算法搜索CNN的最佳參數(shù)是一個(gè)極為耗時(shí)的任務(wù),因此,本文的核心目標(biāo)是在保證優(yōu)化效果的前提下,提高CNN模型的訓(xùn)練效率。文獻(xiàn)[19]的實(shí)驗(yàn)結(jié)果顯示,evoCNN訓(xùn)練MNIST數(shù)據(jù)集需要大約4天,該實(shí)驗(yàn)采用的NVIDIA Tesla P100 GPU是極為強(qiáng)大的服務(wù)器集群處理器。本文GSA_DNN對(duì)MNIST數(shù)據(jù)集獨(dú)立地完成了10次訓(xùn)練,最優(yōu)訓(xùn)練時(shí)間、平均訓(xùn)練時(shí)間和最差運(yùn)行時(shí)間分別為9.67 h、14.89 h和22.33 h,而且本文實(shí)驗(yàn)的Nvidia GTX 1080 GPU計(jì)算能力也大幅度地弱于NVIDIA Tesla P100 GPU,所以本文設(shè)計(jì)的GSA_DNN方法成功加快了深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時(shí)間。
本文為GSA設(shè)計(jì)了交叉算子和變異算子,利用增強(qiáng)的GSA解決深度卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練問(wèn)題。本文為CNN結(jié)構(gòu)設(shè)計(jì)了直接編碼策略,使其和GSA算法實(shí)現(xiàn)了較好地結(jié)合。實(shí)驗(yàn)結(jié)果表明,本文的GSA_DNN僅需要30個(gè)agent和20次迭代即可搜索出最佳的CNN結(jié)構(gòu),明顯快于基于遺傳算法的evoCNN方法。雖然本文實(shí)驗(yàn)在圖像分類(lèi)問(wèn)題上進(jìn)行了驗(yàn)證,但是GSA_DNN能夠應(yīng)用于其它的復(fù)雜學(xué)習(xí)任務(wù)。
GSA_DNN中每個(gè)agent均需要對(duì)全部的訓(xùn)練集進(jìn)行完整訓(xùn)練,這是導(dǎo)致訓(xùn)練時(shí)間長(zhǎng)的關(guān)鍵原因。未來(lái)將研究把本文GSA應(yīng)用于殘差神經(jīng)網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò)等模型的訓(xùn)練工作,并針對(duì)不同類(lèi)型的網(wǎng)絡(luò),調(diào)節(jié)每個(gè)agent的訓(xùn)練量,從而進(jìn)一步降低訓(xùn)練的時(shí)間。