王金哲, 王澤儒, 王紅梅
(長春工業(yè)大學 計算機科學與工程學院, 吉林 長春 130012)
近年來,伴隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,人工智能已經(jīng)應(yīng)用到生活的不同方面,其中自然語言處理、機器人學、人臉識別、人工神經(jīng)網(wǎng)絡(luò)、圖像理解和智能搜索等是目前人工智能領(lǐng)域的研究熱點。由于卷積神經(jīng)網(wǎng)絡(luò)(CNN)可以很好地應(yīng)用于這些領(lǐng)域,因此,針對CNN性能的改進成為許多學者關(guān)注的焦點[1]。CNN通過局部感知與參數(shù)共享,有效降低網(wǎng)絡(luò)復雜度。該設(shè)計在針對圖像識別、變形、扭曲、傾斜等變形形式具有較高的適應(yīng)性和優(yōu)越性[2],通過將圖像直接輸入,避免了特征提取和圖像重建等過程。因而CNN在語音識別、圖像分析和文本分類等很多問題中表現(xiàn)出色,而且在很多具體的領(lǐng)域得到了普及應(yīng)用。
CNN結(jié)構(gòu)特點如下:
1)CNN包含卷積層、池化層、全連接層這三層基本網(wǎng)絡(luò)結(jié)構(gòu),卷積層運算后,池化層開始進行,兩者是交替進行計算的,同時將特征提取和分類過程相互結(jié)合在一起,有效地簡化了傳統(tǒng)算法中特征提取的步驟;
2)CNN使用局部連接,單個的神經(jīng)元僅僅和一小部分神經(jīng)元相連,通過權(quán)重共享機制,可以有效地減少訓練權(quán)重的數(shù)目,一定程度上防止過擬合問題;
3)多層感知器包括輸入層、隱含層和輸出層這三個重要層,多層感知器對于圖像平移、縮放、扭曲有良好的魯棒性。
改進CNN算法[3]通過使用GPU來提升運算速度,但在CPU與GPU之間數(shù)據(jù)切換和進程的調(diào)度可能會出現(xiàn)進程中斷的情況;文獻[4]對于原有CNN訓練時間較長和過擬合等問題提出基于免疫系統(tǒng)改進CNN網(wǎng)絡(luò),但是,這種改進在數(shù)據(jù)集測試僅有81.6%識別率;文獻[5]對MLP-CNN這一經(jīng)典模型進行改進,通過使用梯度下降算法和增加神經(jīng)元特征數(shù)等來提高模型性能,但是這種改進會出現(xiàn)誤差收斂緩慢的情況;文獻[6]提出在CNN中加入波爾茲曼機制,并進行圖像分類,該方法提升了圖像分類的準確率,但是對系統(tǒng)內(nèi)存要求比較高;文獻[7]對正則化策略進行微調(diào),以偵聽卷積的濾波器和非線性激活函數(shù),將會在一定程度上使得訓練的時間有所增加;文獻[8]在CNN中引入了雙線性插值,可以對圖像進行預(yù)測和分類,不過針對圖片集過擬合現(xiàn)象沒有提出切實可行的方案。
CNN算法一般存在以下問題[9]:
1) CNN采用梯度下降算法,在反向傳播中的調(diào)節(jié)網(wǎng)絡(luò)連接權(quán)重的過程中,誤差將會緩慢下降,網(wǎng)絡(luò)的收斂速度會受到不小的影響;
2)Sigmoid激活函數(shù)使原來在較大范圍內(nèi)變化的輸入數(shù)據(jù)映射到[0,1]內(nèi)輸出,在數(shù)據(jù)集的規(guī)模逐漸增大時,參數(shù)不易得到很好的訓練,網(wǎng)絡(luò)權(quán)重不能及時更新,從而減緩收斂的速度;
3)CNN中常采用的weight decay方法與提前停止的方式緩解過擬合問題,不過解決過擬合現(xiàn)象的能力會隨著學習層數(shù)目的增多逐漸下降。針對上述問題,為了可以讓誤差反傳方法具有可靠的的理論意義和重要的實用價值,采用PSO算法進行優(yōu)化,提高CNN收斂速度,同時基于Dropout的改進CNN算法在很大程度上能夠減少過擬合現(xiàn)象的發(fā)生。
PSO是一種比較經(jīng)典的群體優(yōu)化算法,它通過模仿鳥群行為來找尋最優(yōu)值。PSO算法中每個求解問題的解都作為多維搜尋空間的一個粒子,設(shè)定適應(yīng)值函數(shù),根據(jù)單個粒子自身獲得的最優(yōu)解,以及整體群簇所找尋到的最優(yōu)值,通過不停地改變各粒子的位置和速度,最后通過迭代獲得最優(yōu)解。PSO算法具有搜索速度快、算法易實現(xiàn)、精度較高等特點?;綪SO公式如下:
c2·rand()·(pgj-xij) (1)
1.2卷積神經(jīng)網(wǎng)絡(luò)(CNN)
CNN一般由輸入層、卷積層、激勵層、池化層、全連接層和輸出層組成。它通過卷積運算和降采樣等方法實現(xiàn)對有用信息的提取[11]。
輸入層,將所要用到的數(shù)據(jù)或者圖像進行輸入,為方便卷積層運算,需要對輸入數(shù)據(jù)做預(yù)處理。
卷積層,卷積層的卷積核主要對輸入信息進行特征提取。
激勵層,激活函數(shù)主要對運算的結(jié)果進行平滑處理,同時激活函數(shù)可以對網(wǎng)絡(luò)稀疏化,清除冗余數(shù)據(jù),保留數(shù)據(jù)主要特征。
池化層,整理卷積層輸出信息,減少網(wǎng)絡(luò)計算量,另外對特征進行壓縮,提取更為重要的特征,防止過擬合現(xiàn)象。
全連接層,通過特征變換,將有用信息進行整合,對提取結(jié)果進行分類和預(yù)測等處理。
輸出層,將前面運算的所得結(jié)果進行輸出處理。
2.1.1 CNN 算法前向傳播
首先CNN 進行前向傳播,包含卷積和池化操作,對于卷積層的計算:
(3)
式中:Mj----輸入特征圖集;
f()----激活函數(shù),使用Sigmoid函數(shù);
卷積層與池化層進行交替計算,卷積層之后是池化層,對于池化層的計算為:
(4)
輸出層得到結(jié)果前,在n層的卷積神經(jīng)中,作為輸入樣本,用fn表示各層池化的激活函數(shù),w(n)表示每個層的連接權(quán)重,這個過程的計算可以表示為:
y=fn(…(f2(f1(x·w1)w2))…)wn(5)
計算出前向傳播的結(jié)果,和已給出的養(yǎng)殖的標簽值作誤差計算,誤差函數(shù)表示為:
(6)
式中:N----CNN輸入圖像訓練樣本數(shù);
C----網(wǎng)絡(luò)輸出層神經(jīng)元數(shù);
yji----第i個樣本的第j個輸出節(jié)點的實際輸出值。
2.1.2 CNN算法的后向傳播
CNN算法的后向傳播是為了在計算期望輸出和實際輸出的誤差后,將需要運算的參數(shù)作為PSO算法的粒子,利用式(6)獲得粒子的局部最優(yōu)Pbest和全局最優(yōu)值Gbest,然后使用式(1)和式(2)來更新粒子。迭代運算后,更新后的粒子是CNN權(quán)值,再對CNN網(wǎng)絡(luò)重新進行前向傳播,直至誤差閾值收斂到最小范圍之內(nèi),然后停止算法。
算法的實現(xiàn)過程如下:
輸入:m(粒子個數(shù)),c1(加速常數(shù)),c2(加速常數(shù)),w(慣性權(quán)重),x(粒子的位置),v(粒子的速度)。
輸出:cw[](優(yōu)化后的權(quán)值)。
1)對于群體內(nèi)的每一個粒子,在CNN前向傳播中使用式(5)計算,再由式(6)計算誤差。
2)如果已經(jīng)達到誤差閾值的小值,停止算法,如果沒有收斂,則執(zhí)行式(1)與式(2)對粒子進行更新:
①將更新的粒子的信息傳回CNN中,同時更新需要訓練的權(quán)值,再次進行前向傳播誤差計算;
②回到2)。
2.2.1 CNN結(jié)構(gòu)設(shè)計
構(gòu)建的9層CNN模型如圖1所示。
圖1 神經(jīng)網(wǎng)絡(luò)模型設(shè)計
圖1由輸入層、5個由卷積層和池化層構(gòu)成的隱含層、全連接層、Dropout層和輸出層組成。在這個新模型中,為了改善過擬合問題,將Dropout層添加到全連接層的后面,通過概率p摒棄神經(jīng)元結(jié)點。
2.2.2 基于Dropout防止過擬合問題
為了提升網(wǎng)絡(luò)的范化能力,將會在CNN網(wǎng)絡(luò)中增加Dropout層,在網(wǎng)絡(luò)的訓練過程中,對于神經(jīng)網(wǎng)絡(luò)中任意的一個神經(jīng)元,它都是使用相同的概率p將其從網(wǎng)絡(luò)中臨時拋棄,從而減小了網(wǎng)絡(luò)的大小,其公式為:
(7)
式中:pa----樣本a生成1的概率;
Ba----第i類神經(jīng)元中屬于樣本a的數(shù)量。
文中所提出的改進CNN結(jié)構(gòu),具體算法如下:
輸入:訓練集,測試集;
輸出:識別結(jié)果。
1)對神經(jīng)網(wǎng)絡(luò)濾波器進行訓練,同時初始化濾波器尺寸像素為P1*P2;
2)對圖片集進行訓練,將訓練集中的圖片經(jīng)過處理,轉(zhuǎn)換成尺寸大小一致的圖片,同時把圖片讀入到數(shù)據(jù)矩陣P中;
4)使用式(4)中所給的公式對第一層卷積特征矩陣P(1)進行計算;
5)通過調(diào)用PSO算法,來對權(quán)值wi進行更新,從而獲得特征矩陣P(2);
6)通過4)與5)進行第二次卷積計算,這樣會得到一個新的特征矩陣P(3);
7)將特征矩陣P(3)作為一個列向量神經(jīng)元,輸入到全連接層,而后將這個輸入乘以權(quán)重矩陣w,然后添加偏置,對其運用激活函數(shù),從而獲得特征向量b1;
8)將全連接層得到的結(jié)果作為Dropout層的輸入,通過式(7)運算獲得神經(jīng)元在Dropout層中的輸出概率,得到特征向量b2;
9)將8)得到的特征向量b2作為輸出層的輸入,通過輸出層Softmax分類器進行分類,最后輸出識別結(jié)果。
為了評估所改進算法的性能,在ubuntu16.04的操作系統(tǒng)中采用Python3語言編程來實現(xiàn)文中所提出PD-CNN算法。測試平臺為6臺相同配置的電腦,配置為:AMD10CPU@2.5 GHz,GPU為AMD Radeon HD 8670M+AMD Radeon HD 8610G,8.00 GB內(nèi)存。文中使用的測試數(shù)據(jù)集包括MNIST手寫體數(shù)據(jù)集與HCL200書寫漢字數(shù)據(jù)集。實驗次數(shù)為10次。
文中改進算法和WCNN算法、MLP-CNN算法及SVM-ELM算法進行比較。其中WCNN算法為最近鄰規(guī)則的神經(jīng)網(wǎng)絡(luò)模型。為了實現(xiàn)對輸入的處理,使用了多個卷積層和池化層,并在連接層和輸出結(jié)果之間建立了映射關(guān)系,最后使用聚類算法對特征分類。算法MLP-CNN主要是增加網(wǎng)絡(luò)特征數(shù)和使用梯度下降算法進行優(yōu)化,來提高網(wǎng)絡(luò)模型的識別能力。SVM-ELM是基于支持向量機的優(yōu)化算法,可以減少隱層節(jié)點數(shù),通過SVM優(yōu)化每個結(jié)點的線性決策函數(shù)。以上3個算法都是比較經(jīng)典的CNN改進算法,通過與以上3個CNN改進算法進行測試比較,可以有效地說明文中提出的改進算法在性能上有很大的提高。
針對MNIST訓練數(shù)據(jù)集運行10次,在不同數(shù)據(jù)規(guī)模下各算法的識別結(jié)果如圖2所示。
圖2 各算法針對MNIST數(shù)據(jù)集的識別結(jié)果
由圖2可知,PD-CNN算法對于不同的數(shù)據(jù)規(guī)模識別率高于SVM-ELM、MLP-CNN與WCNN算法。數(shù)據(jù)規(guī)模的增長,使得MLP-CNN算法對圖片的識別率影響較大,識別性能波動幅度增加。當數(shù)據(jù)集的規(guī)模小于等于3.6×104時,隨著數(shù)據(jù)規(guī)模的增大,WCNN算法與PD-CNN算法識別率呈上升趨勢,但是,當數(shù)據(jù)規(guī)模大于3.6×104時,識別率有下降趨勢,隨著數(shù)據(jù)集的增大,WCNN算法與MLP-CNN算法識別率波動大于PD-CNN算法,說明了PD-CNN算法具有較好的魯棒性。
對每個測試數(shù)據(jù)集運行10次,在最小識別率RM、最大識別率RX、平均識別率R與運行時間t進行比較算法性能結(jié)果統(tǒng)計。
算法性能統(tǒng)計結(jié)果見表1。
表1 算法性能統(tǒng)計結(jié)果
通過觀察表1可知,在數(shù)據(jù)集MNIST上,相比較于WCNN、MLP-CNN和SVM-ELM算法,PD-CNN算法在最小識別率RM、最大識別率RX與平均識別率R上最高,表明了文中改進算法的可行性以及正確性。使用PSO算法在梯度下降中訓練CNN,在識別精度與收斂速度高于常規(guī)的訓練方法,通過在模型上添加一層Dropout層,防止可能出現(xiàn)的過擬合問題,同時可以使得CNN的正確率得到較大的提升。最后在運行時間上與另外三個CNN改進算法進行比較,可以看到PD-CNN算法時間小于三種算法的時間,說明PSO算法在反向傳播中提高了收斂速度。
針對CNN算法的收斂速度較慢、過擬合等問題,將PSO算法中需要訓練的參數(shù)作為粒子進行優(yōu)化,將更新的參數(shù)用于CNN算法的前向傳播,調(diào)整網(wǎng)絡(luò)連接權(quán)矩陣迭代,直到誤差收斂,停止算法。同時設(shè)計新的神經(jīng)網(wǎng)絡(luò)模型,將一層Dropout層添加到輸出層與全連接層之間,用于緩解過擬合風險,在識別率上得到了不小的提升,同時具有良好的魯棒性。最后,通過與經(jīng)典改進CNN算法WCNN、MLPCNN和SVM-ELM算法在數(shù)據(jù)集MNIST與HCL200進行實驗比較,PD-CNN算法在識別率、收斂速度均高于另外三個算法,證明了改進算法的正確性。