李國(guó)強(qiáng),張 露
(燕山大學(xué) 河北省工業(yè)計(jì)算機(jī)控制工程重點(diǎn)實(shí)驗(yàn)室,河北 秦皇島 066004)
近年來(lái),深度學(xué)習(xí)在語(yǔ)音識(shí)別[1,2],自然語(yǔ)言處理[3]和計(jì)算機(jī)視覺(jué)[4,5]等許多領(lǐng)域取得了很大成就,也吸引了越來(lái)越多的研究者關(guān)注到深度學(xué)習(xí)這個(gè)領(lǐng)域.深度學(xué)習(xí)起源于人類對(duì)大腦的研究,研究深度學(xué)習(xí)的目的就是讓機(jī)器通過(guò)建立模型來(lái)像人類大腦一樣具有學(xué)習(xí)的能力.為了進(jìn)一步發(fā)展深度學(xué)習(xí),研究人員提出了各種深度學(xué)習(xí)算法和模型來(lái)解決不同的問(wèn)題,其中一些最流行的深度學(xué)習(xí)模型包括卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)[4,5],深度信念網(wǎng)絡(luò)(Deep Belief Networks,DBN)[6,7],遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)[8]和生成性對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Network,GAN)[9]等.
卷積神經(jīng)網(wǎng)絡(luò)作為一種典型的深度學(xué)習(xí)模型,有局部連接和權(quán)值共享的特點(diǎn),擅長(zhǎng)提取局部特征,而且具有比其他神經(jīng)網(wǎng)絡(luò)模型更少的參數(shù).卷積神經(jīng)網(wǎng)絡(luò)最早是在20世紀(jì)90年代由LeCun[10]等人提出的,他們?cè)O(shè)計(jì)了一個(gè)名為L(zhǎng)eNet-5的多層卷積神經(jīng)網(wǎng)絡(luò),實(shí)現(xiàn)了對(duì)手寫(xiě)數(shù)字的分類.LeNet-5為CNN在圖像識(shí)別中的應(yīng)用奠定了基礎(chǔ).2012年,Krizhevsky等人[4]在LeNet-5基礎(chǔ)上提出AlexNet并且實(shí)現(xiàn)了對(duì)ImageNet數(shù)據(jù)集的分類,AlexNet網(wǎng)絡(luò)使用了與LeNet-5不同的relu激活函數(shù),加入了數(shù)據(jù)增強(qiáng)和dropout[11]兩種防止過(guò)擬合的方法,實(shí)驗(yàn)中在多個(gè)GPU上進(jìn)行訓(xùn)練.但是這樣的卷積神經(jīng)網(wǎng)絡(luò)也依然存在很多問(wèn)題,例如隨機(jī)梯度下降算法隨著網(wǎng)絡(luò)復(fù)雜度的增加難以優(yōu)化并且容易陷入局部最優(yōu);隨著網(wǎng)絡(luò)層數(shù)的增加,網(wǎng)絡(luò)的復(fù)雜度和計(jì)算量也大量增加;如何在提高網(wǎng)絡(luò)識(shí)別效果的同時(shí)減少計(jì)算成本成為研究的目標(biāo).針對(duì)這個(gè)目標(biāo),研究人員提出了一些卷積神經(jīng)網(wǎng)絡(luò)模型,典型的如VGGNet[5],GoogLeNet[12]和殘差神經(jīng)網(wǎng)絡(luò)(Resnet)[13].這些網(wǎng)絡(luò)的結(jié)構(gòu)變得越來(lái)越深,效果也越來(lái)越好.
Resnet是2015年由何凱明等人提出的,此前的卷積神經(jīng)網(wǎng)絡(luò)都是讓網(wǎng)絡(luò)學(xué)習(xí)輸入數(shù)據(jù)和輸出數(shù)據(jù)之間的函數(shù)關(guān)系,而殘差網(wǎng)絡(luò)是用學(xué)習(xí)差值函數(shù)代替直接學(xué)習(xí)輸入輸出間的函數(shù)關(guān)系,這樣學(xué)習(xí)起來(lái)更容易.殘差網(wǎng)絡(luò)的層數(shù)可以達(dá)到數(shù)百層,解決了層數(shù)比較深的時(shí)候無(wú)法訓(xùn)練的問(wèn)題.殘差網(wǎng)絡(luò)的提出改變了原始卷積網(wǎng)絡(luò)的結(jié)構(gòu),此后很多殘差網(wǎng)絡(luò)的改進(jìn)結(jié)構(gòu)被提出.Sergey Zagoruyko和Nikos Komodak[14]認(rèn)為在訓(xùn)練非常深的殘差網(wǎng)絡(luò)時(shí)存在一個(gè)特征重用的問(wèn)題,這使得這些網(wǎng)絡(luò)訓(xùn)練非常慢,所以他們提出了一種更淺但更寬的結(jié)構(gòu),稱為寬殘差網(wǎng)絡(luò)(Wide Residual Network,WRN),并且在數(shù)據(jù)集(CIFAR,SVHN,COCO和 ImageNet)上證明了WRN的有效性.Saining Xie等人[15]提出了ResNeXt,用組卷積替換原始Resnet的三層卷積單元,并擴(kuò)展了卷積層的輸入和輸出通道的數(shù)量.ResNeXt中的這些改進(jìn)在沒(méi)有顯著增加網(wǎng)絡(luò)參數(shù)的情況下提高了準(zhǔn)確度.Huang G等[16]提出了密集連接卷積網(wǎng)絡(luò)(Densely Connected Convolutional Networks,Densenet),用密集連接單元代替了殘差單元,密集單元中的每一層都從前面所有的層獲得額外的輸入,并將每層的輸出都傳遞給所有后續(xù)層.此外還有許多先進(jìn)的Resnet改進(jìn)網(wǎng)絡(luò),例如Dual Path Networks[17].
本文在三個(gè)數(shù)據(jù)集(MNIST,CIFAR-10和CIFAR-100)上對(duì)FCM-Resnet模型進(jìn)行了評(píng)估.結(jié)果表明,所提出的網(wǎng)絡(luò)比Resnet,InceptionV3[18],InceptionResnetV2[19]和Densenet121[16]具有更好的分類精度和泛化能力.
本文的具體結(jié)構(gòu)如下:第2節(jié)回顧了殘差神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和算法,分析了該結(jié)構(gòu)存在的缺點(diǎn).第3節(jié)提出了全卷積多并聯(lián)殘差神經(jīng)網(wǎng)絡(luò),分析了該網(wǎng)絡(luò)的優(yōu)勢(shì).為了測(cè)試FCM-Resnet的性能,在第4節(jié)中給出了實(shí)驗(yàn)的結(jié)果.第5節(jié)總結(jié)了本文.
殘差神經(jīng)網(wǎng)絡(luò)作為卷積神經(jīng)網(wǎng)絡(luò)一個(gè)典型模型,遵循傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)原則和結(jié)構(gòu),也是由卷積層,池化層和分類層組成的.與傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的主要區(qū)別在于Resnet引入了輸出和輸入之間的跨層連接,如圖1所示,在每幾個(gè)卷積層之間引入跨層連接就相當(dāng)于把網(wǎng)絡(luò)拆成了殘差塊的結(jié)構(gòu),由之前的網(wǎng)絡(luò)學(xué)習(xí)輸入輸出函數(shù)改成了學(xué)習(xí)每個(gè)殘差單元輸入輸出的差值函數(shù),這樣的結(jié)構(gòu)使得網(wǎng)絡(luò)的層數(shù)可以設(shè)計(jì)地很深而且更容易學(xué)習(xí).
圖1 殘差單元 Fig 1 Resnet unit
在結(jié)構(gòu)上,Resnet由相同連接形狀的殘差單元組成,每個(gè)殘差單元由若干卷積層組成.輸入的圖片由這些卷積層提取特征,之后再被送入到一個(gè)平均池化層和最后的分類層.殘差單元的基本結(jié)構(gòu)如圖1所示,每個(gè)殘差單元可由公式(1)表示:
xl+1=xl+F(xl)
(1)
式中xl和xl+1分別代表第l個(gè)殘差單元的輸入和輸出,F(xiàn)(?)是殘差函數(shù).
根據(jù)公式(1)可以得到:
xl+2=xl+1+F(xl+1)
=xl+F(x1)+F(xl+1)
(3)
式中xL表示第L個(gè)殘差單元的輸出.
從公式(3)可以看出,任何一個(gè)殘差單元的輸出xL都可以由任何之前的殘差單元的輸入計(jì)算得出.進(jìn)而,當(dāng)網(wǎng)絡(luò)輸入一張圖片時(shí),可以根據(jù)上面的公式計(jì)算得到最后一個(gè)殘差單元的輸出,然后再把該輸出送到一個(gè)平均池化層和分類層.最后的分類結(jié)果與理想值之間根據(jù)損失函數(shù)計(jì)算得到損失值,再由損失值反向傳播調(diào)整權(quán)值.
(4)
(5)
公式(5)與公式(4)相比可以看出,任何殘差單元除了最后一個(gè)卷積層的梯度信息可以直接獲得以外,其他的卷積層均不能直接從最后的梯度獲得,這將減少原始梯度信息的傳遞.當(dāng)每個(gè)殘差單元的卷積層數(shù)增多時(shí),會(huì)有更多的卷積層不能直接獲得梯度信息.針對(duì)這個(gè)問(wèn)題,在下一節(jié)提出全卷積多并聯(lián)殘差神經(jīng)網(wǎng)絡(luò).
在本節(jié)中,提出了一種全卷積多并聯(lián)殘差網(wǎng)絡(luò)(FCM-Resnet),以進(jìn)一步改善原始梯度信息的傳遞,其結(jié)構(gòu)如圖2所示.FCM-Resnet在殘差神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上增加了更多的跨層連接,有效改善了網(wǎng)絡(luò)的性能.在Resnet中,只有一部分卷積層在反向傳播中直接得到原始梯度信息,而在FCM-Resnet中,每個(gè)卷積層的特征將被送到平均池化層,原始梯度信息也可以直接傳遞給任何卷積層.
圖2 全卷積多并聯(lián)殘差神經(jīng) 網(wǎng)絡(luò)的結(jié)構(gòu) Fig 2 Structure of FCM-Resnet
由圖2可以清楚地看出FCM-Resnet的結(jié)構(gòu),該結(jié)構(gòu)可以看做是由有兩個(gè)部分組成,一個(gè)是由卷積層組成的若干殘差單元,這部分用來(lái)提取圖片的特征.另一個(gè)是平均池化層和分類層,所有卷積層提取的特征都連接到平均池化層以獲得更多的信息,最后再由分類層得到網(wǎng)絡(luò)輸出.每個(gè)殘差單元通常由兩個(gè)或三個(gè)卷積層組成[14],如圖3所示.圖3(a)是由三個(gè)卷積層組成的殘差單元,兩個(gè)1×1卷積包圍一個(gè)3×3卷積,圖3(b)是兩個(gè)3×3卷積組成的殘差單元.本文采用第二種方法.
前向傳播過(guò)程中,殘差單元的計(jì)算過(guò)程如公式(1)-公式(3).殘差單元中的每個(gè)卷積層除了輸出到它的下一層還輸出到了平均池化層.由于每一層輸出的特征圖大小不同,為了實(shí)現(xiàn)后續(xù)的計(jì)算,每一個(gè)卷積層的輸出在輸入到平均池化層之前要先進(jìn)行統(tǒng)一化,規(guī)則如下:
圖3 常用的兩種殘差單元 Fig 3 Two general residual units
1)當(dāng)該卷積層的輸出維度與最后一個(gè)殘差單元的輸出維度相同時(shí),使用公式(6).
f(xi)=xi
(6)
2)當(dāng)該卷積層的輸出維度與最后一個(gè)殘差單元的輸出維度不相同時(shí),使用公式(7).
f(xi)=conv(xi)
(7)
式中conv(?)代表核為1×1的卷積運(yùn)算.
本文采用直接相加的方法把每個(gè)卷積層得到的特征圖匯聚到平均池化層,平均池化層的輸入xave為:
公式(8)中,xi是第i個(gè)卷積層的輸出,n是網(wǎng)絡(luò)中卷積層的個(gè)數(shù).g(·)由公式(6)和公式(7)決定.
由公式(1)-公式(3)和公式(8)可以得到:
(9)
把相加得到的特征圖xave經(jīng)過(guò)平均池化運(yùn)算最后連接到分類層.從公式(9)可以看出FCM-Resnet在前向傳播中保留了更多原始信息.
(10)
(11)
從公式(10)和公式(11)可以看出,每個(gè)殘差單元里的所有卷積層的梯度計(jì)算方法相同,均有直接傳遞的梯度信息,解決了Resnet網(wǎng)絡(luò)存在的只有一部分卷積層直接獲得原始梯度信息的問(wèn)題.
為了測(cè)試FCM-Resnet的有效性和分類能力,將所提出的方法與Resnet在三個(gè)數(shù)據(jù)集(MNIST,CIFAR-10,CIFAR-100)上進(jìn)行比較.
MNIST[11]是圖像分類問(wèn)題中最經(jīng)典的數(shù)據(jù)集,由6萬(wàn)張訓(xùn)練圖片和1萬(wàn)張測(cè)試圖片組成,每張都28×28是大小的黑白圖片,表示從0到9的數(shù)字.
CIFAR數(shù)據(jù)集[20]是一個(gè)彩色圖片分類數(shù)據(jù)集,大小為32×32,CIFAR包含CIFAR10[1]和CIFAR-100.CIFAR10由10類(每類6000張)組成,CIFAR-100數(shù)據(jù)集分為100類(每類600張),其中5萬(wàn)張圖片進(jìn)行訓(xùn)練,其余的1萬(wàn)張進(jìn)行測(cè)試.
本實(shí)驗(yàn)平臺(tái)為一個(gè)Nvidia TITAN Xp GPU(12GB),編程環(huán)境為python3.6,使用的深度學(xué)習(xí)框架為T(mén)ensorFlow[21].實(shí)驗(yàn)中的批次大小設(shè)置為128,采用adam[22]和momentum優(yōu)化方法,實(shí)驗(yàn)結(jié)果在有限次的迭代中得到.
本文對(duì)MNIST和CIFAR數(shù)據(jù)集設(shè)計(jì)了兩個(gè)FCM-Resnet網(wǎng)絡(luò)結(jié)構(gòu),分別是用于數(shù)據(jù)集MNIST和CIFAR-10的56層FCM-Resnet-56網(wǎng)絡(luò),另一個(gè)是用于CIFAR-10和CIFAR-100的110層FCM-Resnet-110,兩種結(jié)構(gòu)如表1所示.網(wǎng)絡(luò)的卷積部分分成三個(gè)塊(如表1中的block1、block2和block3),每個(gè)塊包含9個(gè)或18個(gè)殘差單元.每個(gè)殘差單元的具體過(guò)程:一個(gè)卷積(Conv),一個(gè)Relu計(jì)算,然后是一個(gè)卷積(Conv)和批量歸一化(BN)[23],最后添加輸入和輸出之間的連接.為了對(duì)比改進(jìn)前后的效果,每個(gè)FCM-Resnet網(wǎng)絡(luò)對(duì)應(yīng)一個(gè)相同參數(shù)設(shè)置的Resnet網(wǎng)絡(luò).
表1 FCM-Resnet的兩個(gè)網(wǎng)絡(luò)模型
Table 1 Two network models of FCM-Resnet
networkFCM-Resnet-56FCM-Resnet-110convolution3×3conv3×3convblock13×3stride=13×3stride=1 ×93×3stride=13×3stride=1 ×18block23×3stride=13×3stride=1 ×8,3×3stride=23×3stride=1 ×13×3stride=13×3stride=1 ×17,3×3stride=23×3stride=1 ×1block33×3stride=13×3stride=1 ×8,3×3stride=23×3stride=1 ×13×3stride=13×3stride=1 ×17,3×3stride=23×3stride=1 ×1averagepoolingbatch_size×64batch_size×256classificationbatch_size×num_clasessbatch_size×num_clasess
(方括號(hào)內(nèi)部是殘差單元的形狀,外部是殘差單元的數(shù)量)
(Inside the brackets are the shape of a residual unit,the outside is the number of stacked units)
實(shí)驗(yàn)中除了FCM-Resnet網(wǎng)絡(luò)和Resnet網(wǎng)絡(luò)的對(duì)比之外,還與其他三個(gè)網(wǎng)絡(luò)的結(jié)果進(jìn)行對(duì)比,三個(gè)網(wǎng)絡(luò)模型分別是110層的Inceptionv3,256層的InceptionResnetV2和121層的Densenet121.由于這三個(gè)網(wǎng)絡(luò)的層數(shù)較多,為了在MNIST和CIFAR-10數(shù)據(jù)集上實(shí)現(xiàn)更好的分類效果,在實(shí)驗(yàn)時(shí)將輸入圖片大小先變?yōu)?39×139,再輸入網(wǎng)絡(luò)進(jìn)行訓(xùn)練和測(cè)試.
如表2所示,在7個(gè)網(wǎng)絡(luò)上對(duì)MNIST和CIFAR- 10數(shù)據(jù)集進(jìn)行實(shí)驗(yàn).在2000次迭代時(shí),對(duì)于MNIST數(shù)據(jù)集,F(xiàn)CM-Resnet-56的測(cè)試精度達(dá)到99.57%,而Resnet-56的準(zhǔn)確度為99.54%,提高了約0.03個(gè)百分點(diǎn).FCM-Resnet-110的測(cè)試精度為99.63%,而Resnet-110的準(zhǔn)確度為99.61%,提高了約0.02個(gè)百分點(diǎn).FCM-Resnet與Resnet相比顯示出更好的結(jié)果.此外,F(xiàn)CM-Resnet-56與InceptionV3,InceptionResnet-V2和Densenet121三個(gè)網(wǎng)絡(luò)相比,分別提高了0.36個(gè)、0.35個(gè)和0.67個(gè)百分點(diǎn).FCM-Resnet-110與InceptionV3,InceptionResnetV2和Densenet121三個(gè)網(wǎng)絡(luò)相比,分別提高了0.42個(gè)、0.41個(gè)和0.73個(gè)百分點(diǎn).對(duì)于CIFAR10,迭代5萬(wàn)次時(shí)的測(cè)試精度均在表2中列出,可以看出,F(xiàn)CM-Resnet與Resnet,InceptionV3,InceptionResnetV2和Densenet121相比有更高的準(zhǔn)確率.隨著迭代次數(shù)的增加,損失越來(lái)越小,CI-FAR10在Resnet-110和FCM-Resnet-110網(wǎng)絡(luò)上的損失曲線如圖4所示,從圖中可以看出FCM-Resnet-110的損失下降的速度更快,而且損失值也最低.在Resnet-110和FCM-Resnet-110兩個(gè)網(wǎng)絡(luò)上對(duì)CIFAR100數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),迭代5萬(wàn)次得到的損失曲線如圖5所示,準(zhǔn)確率如表3和圖6所示.對(duì)于CIFAR100,Resnet-110的top1準(zhǔn)確率僅達(dá)到72.48%,而FCM-Resnet-110達(dá)到74.11%,提高了約 1.63 個(gè)百分點(diǎn).Resnet-110的top5準(zhǔn)確率為91.11%,而FCM-Resnet-110為91.50%,提高了約 0.39個(gè)百分點(diǎn).從圖5中也可以看出FCM- Resnet-110的損失下降的速度更快,而且損失值也最低.總而言之,F(xiàn)CM-Resnet實(shí)現(xiàn)了更高的準(zhǔn)確率和更好的泛化能力.
表2 MNIST和CIFAR10的測(cè)試正確率
Table 2 Test accuracy on MNIST and CIFAR10
MNIST(%)CIFAR10(%)InceptionV399.2188.00Inception-ResnetV299.2287.87Densenet12198.9088.31Resnet-5699.5489.70FCM-Resnet-5699.5790.19Resnet-11099.6190.39FCM-Resnet-11099.6390.58
圖4 FCM-Resnet-110和Resnet-110在CIFAR-10 數(shù)據(jù)集上的損失曲線Fig.4 Loss curve of FCM-Resnet-110 and Resnet-110 on CIFAR-10 dataset
圖5 FCM-Resnet-110和Resnet-110在CIFAR-100 數(shù)據(jù)集上的損失曲線Fig.5 Loss curves of FCM-Resnet-110 and Resnet-110 on the CIFAR-100 dataset
表3 CIFAR100數(shù)據(jù)集的測(cè)試正確率
Table 3 Test accuracy on CIFAR100 dataset
CIFAR100top1(%)CIFAR100top5(%)Resnet-11072.4891.11FCM-Resnet-11074.1191.50
圖6 FCM-Resnet-110和Resnet-110在CIFAR-100 數(shù)據(jù)集上的準(zhǔn)確率曲線Fig.6 Accuracy curves of FCM-Resnet-110 and Resnet-110 on the CIFAR-100 dataset
本文簡(jiǎn)單回顧了Resnet網(wǎng)絡(luò),并分析了其優(yōu)缺點(diǎn),針對(duì)Resnet的反向傳播過(guò)程只有一部分卷積層可以直接獲得梯度信息這一問(wèn)題,提出了FCM- Resnet,有效改善了梯度問(wèn)題,使網(wǎng)絡(luò)的分類性能得到提高.實(shí)驗(yàn)結(jié)果表明,所提出的模型可以獲得比Resnet更好的分類結(jié)果.但是,在未來(lái)的工作探索中仍然存在一些問(wèn)題.一個(gè)問(wèn)題是如何進(jìn)一步提高FCM-Resnet的穩(wěn)定性,另一個(gè)具有挑戰(zhàn)性的問(wèn)題是如何在保證較高正確率的前提下減少網(wǎng)絡(luò)參數(shù)和訓(xùn)練時(shí)間.