高新成,李 強,王莉利,杜功鑫,柯 璇
(1.東北石油大學(xué) 現(xiàn)代教育技術(shù)中心,黑龍江 大慶 163318; 2.東北石油大學(xué) 計算機與信息技術(shù)學(xué)院,黑龍江 大慶 163318; 3.東北石油大學(xué) 地球科學(xué)學(xué)院,黑龍江 大慶 163318)
深度學(xué)習(xí)[1]是一種能夠?qū)W習(xí)層次化特征表達(dá)的表示學(xué)習(xí)方法,通過無監(jiān)督或有監(jiān)督的方式,表現(xiàn)出高效強大的分類能力和特征學(xué)習(xí)能力。作為近幾十年來的研究熱點,許多深度學(xué)習(xí)模型相繼被研究開發(fā)出來,包括自編碼器模型[2]、受限波爾茲曼機模型[3]、深度信念網(wǎng)絡(luò)模型[4]、卷積神經(jīng)網(wǎng)絡(luò)模型(Convolutional Neural Networks,CNN)[5]等。CNN作為近年來深度學(xué)習(xí)的主導(dǎo)技術(shù),在圖像識別任務(wù)中取得了顯著的成績,并且還在人臉檢測[6]、語音識別[7]、表情識別[8]、情態(tài)意識識別[9]、性別識別[10]等現(xiàn)實計算機視覺應(yīng)用中表現(xiàn)優(yōu)異。CNN的性能高度依賴于其網(wǎng)絡(luò)模型結(jié)構(gòu)的設(shè)計[11],自LeNet-5[12]被提出以來,人們研究出了CNN的各種改進(jìn)模型,包括AlexNet[13]、VGGNet[14]、GoogleNet[15]、ResNet[16]、DenseNet[17]等,每一種都有不同的網(wǎng)絡(luò)結(jié)構(gòu),并在圖像分類任務(wù)中顯著提高了分類準(zhǔn)確性。然而,開發(fā)研究這樣的網(wǎng)絡(luò)結(jié)構(gòu)并設(shè)置一些重要的參數(shù),需要對CNN有深入的研究,并且針對所要解決的問題有豐富的經(jīng)驗知識[18]。
為了突破CNN結(jié)構(gòu)設(shè)計和參數(shù)設(shè)置過度依賴經(jīng)驗知識的局限性,許多專家學(xué)者針對進(jìn)化計算方法在神經(jīng)網(wǎng)絡(luò)上的應(yīng)用展開了一系列研究。Esfahanian等人[19]采用了三種獨立的遺傳進(jìn)化方案進(jìn)行對比試驗,驗證了遺傳算法優(yōu)化CNN的可行性。Luo等人[20]提出了基于特征提取和遺傳算法增強的自適應(yīng)深度神經(jīng)網(wǎng)絡(luò),并將其成功應(yīng)用于實際辦公建筑的能源測量中。Sun等人[21]利用遺傳算法自動設(shè)計CNN結(jié)構(gòu),取得了比人工設(shè)計CNN更好的圖像分類準(zhǔn)確性。席亮等人[22]提出自適應(yīng)遺傳算法并用于BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)化,提高了網(wǎng)絡(luò)模型的收斂性。
基于以上研究,通過改進(jìn)遺傳算法求解問題的過程,分析CNN結(jié)構(gòu)和參數(shù)對分類精度的影響,該文提出了基于改進(jìn)遺傳算法(Genetic Algorithm,GA)的自適應(yīng)卷積神經(jīng)網(wǎng)絡(luò)算法(GA-CNN)。CNN結(jié)構(gòu)經(jīng)過選擇、交叉和變異一系列進(jìn)化過程后,使網(wǎng)絡(luò)調(diào)優(yōu)過程自動化,特征參數(shù)得到充分有效的訓(xùn)練,最終確定最優(yōu)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),提高了分類準(zhǔn)確性,并且通過MNIST、Fashion-MNIST、CIFAR-10數(shù)據(jù)集驗證了該算法的有效性和可行性。
CNN是一種被設(shè)計用來識別二維圖像的特殊多層感知器模型,在整體架構(gòu)上多采用固定的構(gòu)建模式,將卷積層和池化層作為特征提取器完成圖片不同層次語義的提取,通過全連接層完成分類,再依靠數(shù)據(jù)樣本的訓(xùn)練不斷擬合調(diào)整網(wǎng)絡(luò)參數(shù)。但對于當(dāng)前的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計,大多數(shù)都需要具有豐富領(lǐng)域知識的相關(guān)研究人員來完成,針對不同的圖像分類任務(wù),無法自適應(yīng)地調(diào)整網(wǎng)絡(luò)結(jié)構(gòu),導(dǎo)致卷積神經(jīng)網(wǎng)絡(luò)分類性能的顯著差異。
該文將卷積神經(jīng)網(wǎng)絡(luò)初始結(jié)構(gòu)設(shè)計為頭模塊和尾模塊。頭模塊包括兩層卷積層和一層池化層,完成基本的特征提取功能。尾模塊主要由全連接層以及防止過擬合的網(wǎng)絡(luò)層組成,如Dropout層、Flatten層和BatchNormalization層。
利用改進(jìn)遺傳算法對卷積神經(jīng)網(wǎng)絡(luò)初始結(jié)構(gòu)進(jìn)行優(yōu)化,逐步自適應(yīng)調(diào)整網(wǎng)絡(luò)結(jié)構(gòu),在自適應(yīng)模塊中進(jìn)行變異操作,確定整個網(wǎng)絡(luò)中的網(wǎng)絡(luò)層及其參數(shù),最終得到一個最優(yōu)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
傳統(tǒng)遺傳算法是一種具有自適應(yīng)能力的啟發(fā)式搜索算法,主要模擬了自然環(huán)境中自然選擇、遺傳進(jìn)化的思想,具有充足可靠的理論依據(jù)和良好的全局搜索能力。因此,該文通過構(gòu)建合理的適應(yīng)度函數(shù),改進(jìn)選擇、交叉和變異策略,以提高最優(yōu)解的質(zhì)量。
1.2.1 編碼和適應(yīng)度函數(shù)選擇
該文采用可變長編碼策略,直接將整個卷積神經(jīng)網(wǎng)絡(luò)編碼成一條染色體,在具有多目標(biāo)參數(shù)、大規(guī)模、復(fù)雜的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化的過程中,能充分發(fā)揮算法效率,減少計算復(fù)雜性,簡化編碼操作。
適應(yīng)度函數(shù)對于評價個體優(yōu)劣,驅(qū)動遺傳算法尋找最優(yōu)解發(fā)揮著重要作用。該文注重于自動調(diào)整卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)來解決圖像分類問題,因此將分類誤差L和網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜度C作為評價適應(yīng)度值的依據(jù)。分類交叉熵?fù)p失函數(shù)L的計算方式如下:
(1)
網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜度C表示如下:
C=Δp/p
(2)
式中,Δp為自動調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)過程中增加的參數(shù)量,p為初始網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)量。
適應(yīng)度函數(shù)表示如下:
Fitness=1/(αL+βC)
(3)
式中,α和β取值范圍為(0,1)區(qū)間,分別表示分類誤差和網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜度所占的權(quán)重。適應(yīng)度值越大,表示卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和分類效果越好。
1.2.2 選擇策略改進(jìn)
遺傳算法的尋優(yōu)過程是一個隨機過程,在隨機搜索中保存最優(yōu)的解,通過不斷迭代逼近函數(shù)的最優(yōu)解。其中,后代選擇策略是影響遺傳算法尋優(yōu)的關(guān)鍵因素。比例選擇和最優(yōu)保存策略是目前被廣泛采用的一種選擇策略[23],但單獨使用這種策略也有一定的缺陷。一方面,若群體個體數(shù)量很少,比例選擇生成的隨機數(shù)將不能很好地反映當(dāng)前個體的適應(yīng)度值,會產(chǎn)生一定的誤差。另一方面,最優(yōu)保存根據(jù)適應(yīng)度值尋找最優(yōu)的染色體進(jìn)行交叉變異,容易導(dǎo)致局部收斂,并且不利于改善種群多樣性。
為了提高種群的多樣性和最終種群的平均適應(yīng)度值,該文將比賽選擇、期望值選擇、比例選擇以及最優(yōu)保存策略進(jìn)行結(jié)合。算法進(jìn)行選擇操作時,利用概率隨機選擇一種方式,避免單一選擇方式使搜索空間陷入局部極小值。
1.2.3 交叉策略改進(jìn)
該算法是對卷積神經(jīng)結(jié)構(gòu)進(jìn)行編碼操作,在最佳網(wǎng)絡(luò)結(jié)構(gòu)深度未知的情況下,進(jìn)行交叉操作的個體染色體長度不一定相同,因此采用可變長兩點交叉操作。兩點交叉方式操作較簡單,并且不會破壞卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的局部完整性。通過對個體進(jìn)行可變長兩點交叉操作后,得到不同長度的個體,即不同深度的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),進(jìn)而提高搜索空間的多解性。
1.2.4 變異策略改進(jìn)
變異算子主要通過模仿生物界遺傳進(jìn)化中的變異思想,對個體的某一部分進(jìn)行改變,防止算法出現(xiàn)早熟,提高群體多樣性以及局部搜索能力。該文提出層變異和變異概率自適應(yīng)[24]的參數(shù)變異兩種方式。首先通過層變異調(diào)整卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),增強初始進(jìn)化時的算法全局尋優(yōu)能力,加快進(jìn)化速度。再通過變異概率自適應(yīng)的參數(shù)變異對神經(jīng)網(wǎng)絡(luò)參數(shù)進(jìn)行調(diào)整,以盡量有效保存種群的優(yōu)良個體。
GA-CNN算法的本質(zhì)是在初始CNN的頭模塊和尾模塊之間增加自適應(yīng)模塊,通過適應(yīng)度函數(shù)對分類結(jié)果精度和網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行評價,利用遺傳算法中改進(jìn)的遺傳操作,結(jié)合層變異和參數(shù)變異不斷調(diào)整網(wǎng)絡(luò)的結(jié)構(gòu)和參數(shù),提高特征提取的精度。
自適應(yīng)模塊的設(shè)計主要通過層變異和參數(shù)變異對網(wǎng)絡(luò)進(jìn)行調(diào)整。層變異主要對卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行調(diào)整,通過在個體S的編碼中選擇自適應(yīng)模塊,對其進(jìn)行添加層、移除層和對修改選擇層操作。層變異的實現(xiàn)方式如算法1所示。
算法1:層變異
輸入:個體S
輸出:變異后的個體S’
從個體S的編碼中選擇自適應(yīng)模塊A;
隨機選擇一種層操作方式;
如果執(zhí)行層添加操作:
(1)向塊A中添加卷積層;
(2)向塊A中添加池化層;
如果執(zhí)行層修改操作(從塊A中按概率隨機選擇層f):
如果隨機選擇層f是卷積層:
復(fù)制f得到f’,將f’中的特征映射數(shù)量減半,并置于后面;
如果隨機選擇層f是池化層:
建立步長為2的新卷積層f’替換f;
如果執(zhí)行層刪除操作:
從塊A中隨機移除一層網(wǎng)絡(luò)層;
對選擇層進(jìn)行修改操作,分為以下兩種情況:
(1)如果選擇層為卷積層,則將其特征映射數(shù)量減半,然后進(jìn)行復(fù)制,并放到該層后面;
(2)如果選擇層為池化層,則將其替換為一個步長為2的卷積層,完成池化層下采樣的作用;用步長為2的卷積層替代尺寸2×2的池化層,可以更好地提取圖像特征[25],不會損失卷積神經(jīng)網(wǎng)絡(luò)的分類效果。算法按概率進(jìn)行層修改操作,在迭代后期網(wǎng)絡(luò)中仍可能保留池化層。
參數(shù)變異可作用于網(wǎng)絡(luò)層(包括頭模塊、自適應(yīng)模塊和尾模塊)中的所有參數(shù)。參數(shù)變異概率可以隨適應(yīng)度進(jìn)行一定的調(diào)整,有助于在迭代后期保存優(yōu)良個體。自適應(yīng)參數(shù)變異對于不同類型網(wǎng)絡(luò)層中的參數(shù),表達(dá)效果不同,主要分為以下四種情況:
(1)卷積層參數(shù)變異:對卷積層中的特征映射數(shù)量擴大2倍或減半,改變填充類型(SAME或VALID);
(2)池化層參數(shù)變異:改變池化方式(最大池化或平均池化)以及填充類型(SAME或VALID);
(3)Dropout層參數(shù)變異:對于其參數(shù)rate值的大小增大或減小0.1;
(4)全連接層參數(shù)變異:將神經(jīng)元數(shù)量擴大2倍或減半。
卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建和調(diào)優(yōu)過程類似黑盒測試[26],需要根據(jù)網(wǎng)絡(luò)訓(xùn)練的最終結(jié)果,憑借人為經(jīng)驗對卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行調(diào)參,嚴(yán)重影響網(wǎng)絡(luò)的精度和效率。為此,該文提出GA-CNN算法,改進(jìn)遺傳算法的進(jìn)化操作,自動調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù),通過全局尋優(yōu)能力搜索卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)空間中的最優(yōu)網(wǎng)絡(luò)結(jié)構(gòu)。遺傳算法優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)的算法步驟如下:
Step1:建立多個基本卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),并初始化卷積神經(jīng)網(wǎng)絡(luò)中各層連接方式以及對應(yīng)的參數(shù);
Step2:將各個神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)編碼為染色體,確定種群個體;
Step3:初始化種群,使用數(shù)據(jù)集訓(xùn)練各個神經(jīng)網(wǎng)絡(luò),根據(jù)適應(yīng)度函數(shù)計算各卷積神經(jīng)網(wǎng)絡(luò)的適應(yīng)度值;
Step4:判斷遺傳代數(shù)和個體適應(yīng)度是否達(dá)到算法停止條件,若達(dá)到算法停止條件,則執(zhí)行Step5;否則返回Step3,并對種群繼續(xù)進(jìn)行遺傳算法進(jìn)化操作,獲得子卷積神經(jīng)網(wǎng)絡(luò)群體;
Step5:獲取最優(yōu)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)以及訓(xùn)練分類的結(jié)果。
實驗選用Intel Xeon Sliver 4210 CPU 2.20 GHz處理器,GeForce RTX 2080顯卡,顯存容量為8 GB,操作系統(tǒng)為Ubuntu 18.04,采用Tensorflow2.1.0開源框架,Python3.6解釋器。
在MNIST、Fashion-Mnist、CIFAR-10數(shù)據(jù)集上對GA-CNN算法性能進(jìn)行評估。由于CIFAR-10數(shù)據(jù)集包含現(xiàn)實世界中的真實物體,數(shù)據(jù)噪聲大并且特征識別困難,因此實驗以CIFAR-10數(shù)據(jù)集為例具體展開研究。
遺傳算法的有效性取決于參數(shù)的選擇(如種群大小和后代數(shù)量)。在所提出的算法中,實驗參數(shù)的選擇充分考慮了最優(yōu)解的質(zhì)量、可用的計算資源以及數(shù)據(jù)集大小,在算法尋優(yōu)結(jié)果達(dá)到要求的情況下,盡可能保證算法效率。算法實驗中的參數(shù)設(shè)置如表1所示。
表1 實驗中的參數(shù)設(shè)置
實驗所用的基礎(chǔ)卷積神經(jīng)結(jié)構(gòu)參考了AlexNet和VGGNet兩種網(wǎng)絡(luò)結(jié)構(gòu),在尾模塊中預(yù)添加了Dropout層、Flatten層和BatchNormalization層來防止卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)在優(yōu)化過程中出現(xiàn)的過擬合問題。實驗使用Relu激活函數(shù)減少計算量,并在所有卷積層中使用大小3×3 filter尺寸,使用大小為2×2 kernel尺寸的池化層,保持網(wǎng)絡(luò)結(jié)構(gòu)簡潔的同時增加網(wǎng)絡(luò)的特征學(xué)習(xí)能力以提升網(wǎng)絡(luò)模型的分類精度。
由于AlexNet和VGGNet10的網(wǎng)絡(luò)深度與GA-CNN相差較小,因此該文使用GA-CNN與AlexNet和VGGNet10進(jìn)行實驗。所有網(wǎng)絡(luò)均采用CIAFAR-10數(shù)據(jù)集訓(xùn)練,得到訓(xùn)練集損失值、驗證集損失值、訓(xùn)練集精確度以及驗證集精確度四個曲線的實驗結(jié)果。
圖1為GA-CNN和AlexNet、VGGNet10訓(xùn)練CIFAR-10的實驗效果對比。在訓(xùn)練集上的對比結(jié)果如圖1(a)和圖1(c)所示,通過損失值和精確度曲線可以看出,GA-CNN在迭代10次后損失值和精確度值開始趨于穩(wěn)定,并且訓(xùn)練速度比AlexNet和VGGNet10更快,取得了良好的訓(xùn)練效果。圖1(b)和圖1(d)為神經(jīng)網(wǎng)絡(luò)在驗證集上的表現(xiàn),通過損失值曲線可以看出,AlexNet和VGGNet10收斂效果較差,并呈現(xiàn)出過擬合趨勢。在驗證集精確度上,GA-CNN表現(xiàn)出更優(yōu)秀的特征提取能力,精確度達(dá)到了87.6%,分別比AlexNet和VGGNet10提高了13%和5%左右。
圖1 GA-CNN和VGGNet10、AlexNet的實驗效果對比
綜上所述,通過GA-CNN和傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的進(jìn)行實驗對比,該算法構(gòu)建的卷積神經(jīng)網(wǎng)絡(luò)取得了比人工構(gòu)建神經(jīng)網(wǎng)絡(luò)更好的效果。由表2可以看出,在網(wǎng)絡(luò)深度相似的情況下,GA-CNN的抗噪能力和特征提取能力更強,并且在訓(xùn)練速度和分類精度上優(yōu)于手動調(diào)參的神經(jīng)網(wǎng)絡(luò),證明了該算法在解決不同復(fù)雜度的分類問題時仍具有良好的性能。
表2 3種神經(jīng)網(wǎng)絡(luò)的精確度對比 %
該文提出了一種利用改進(jìn)遺傳算法構(gòu)建自適應(yīng)卷積神經(jīng)網(wǎng)絡(luò)的算法,針對遺傳算法中的選擇、交叉和變異策略等進(jìn)行了改進(jìn),并利用算法不斷自動調(diào)整網(wǎng)絡(luò)中的卷積層和池化層數(shù)量,優(yōu)化網(wǎng)絡(luò)層中的參數(shù),最終得到最優(yōu)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。通過在MNIST、Fashion-MNIST和CIFAR-10數(shù)據(jù)集上進(jìn)行實驗,驗證了改進(jìn)遺傳算法優(yōu)化得到的卷積神經(jīng)網(wǎng)絡(luò)分類精度更高。此外,該算法具有較強的靈活性,針對不同的問題和不同的數(shù)據(jù)集均可適用,避免了對神經(jīng)網(wǎng)絡(luò)反復(fù)調(diào)參的過程。
然而,當(dāng)利用遺傳算法優(yōu)化非常復(fù)雜和更深層次的卷積神經(jīng)網(wǎng)絡(luò)時,會偶爾發(fā)生梯度消失的情況,因此在下一步的研究中,考慮加入跳層連接,增加網(wǎng)絡(luò)模型的深度,進(jìn)一步提高網(wǎng)絡(luò)模型的擬合能力和精確度。