高 磊,范冰冰,黃 穗
(華南師范大學(xué) 計(jì)算機(jī)學(xué)院,廣州 510631)
圖像分類(lèi)一直是深度學(xué)習(xí)的熱門(mén)研究課題之一,卷積神經(jīng)網(wǎng)絡(luò)是近些年發(fā)展起來(lái),并引起重視的一種高效識(shí)別算法.卷積神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)的一種,是深度學(xué)習(xí)的一個(gè)重要算法,特別是在模式分類(lèi)領(lǐng)域,由于該網(wǎng)絡(luò)避免了對(duì)圖像的復(fù)雜前期預(yù)處理,可以直接輸入原始圖像,因此得到廣泛的應(yīng)用.20世紀(jì)60年代,Hubel 和Wiesel 在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)元時(shí),發(fā)現(xiàn)其獨(dú)特的網(wǎng)絡(luò)結(jié)構(gòu)可以有效的降低反饋神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,繼而提出了卷積神經(jīng)網(wǎng)絡(luò)[1-4](Convolutional Neural Networks,簡(jiǎn)稱(chēng)CNN).
與一般神經(jīng)網(wǎng)絡(luò)相比,從構(gòu)造上看,卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)包括兩層,其一為特征提取層,其二為特征映射層.從模型特征上看,卷積神經(jīng)網(wǎng)絡(luò)有兩個(gè)特殊性,其一為神經(jīng)元之間的連接是非全連接的,其二為同一層中的某些神經(jīng)元之間的連接的權(quán)重是共享的,從而降低了模型的復(fù)雜度.卷積神經(jīng)網(wǎng)絡(luò)的特殊結(jié)構(gòu)在語(yǔ)音識(shí)別和圖像處理方面有著獨(dú)特的優(yōu)越性,因此卷積神經(jīng)網(wǎng)絡(luò)主要用來(lái)識(shí)別位移,縮放以及其他形式扭曲不變性的二維圖形.隨著研究學(xué)者對(duì)卷積神經(jīng)網(wǎng)絡(luò)的研究和優(yōu)化,提出了各種優(yōu)秀的卷積神經(jīng)網(wǎng)絡(luò)的模型,并在圖像處理上取得了不錯(cuò)的效果.
早在1998年,LEcun Yann,Bottou Leon 就提出了LeNet-5 模型[5],這個(gè)模型是一種典型的用來(lái)識(shí)別數(shù)字的卷積網(wǎng)絡(luò),當(dāng)年美國(guó)大多數(shù)銀行就是用它識(shí)別支票上面的手寫(xiě)數(shù)字的.LeNet-5 是早期的卷積神經(jīng)網(wǎng)絡(luò)模型,其結(jié)構(gòu)一共有7 層,每層都包含不同數(shù)量的訓(xùn)練參數(shù),主要有2 個(gè)卷積層,2 個(gè)池化層,3 個(gè)全連接層.
Alex Krizhevsky 提出的AlexNet 模型[6]是卷積網(wǎng)絡(luò)進(jìn)入大范圍應(yīng)用的經(jīng)典網(wǎng)絡(luò)模型,其結(jié)構(gòu)包括5 個(gè)卷積層和3 個(gè)全連接層,其主要的優(yōu)勢(shì)在于:(1)使用ReLU 激活函數(shù),ReLU 與Sigmoid 相比,其優(yōu)勢(shì)是訓(xùn)練速度更快,因?yàn)镾igmoid 的導(dǎo)數(shù)在飽和區(qū)會(huì)變得很小,導(dǎo)致權(quán)重幾乎沒(méi)有更新,從而造成梯度消失;(2)創(chuàng)造性的提出了Dropout 層,Dropout 層主要是防止過(guò)擬合的.每個(gè)全連接層后面使用一個(gè)Dropout 層,從而減少過(guò)擬合.其主要的缺點(diǎn)在于當(dāng)時(shí)人們的觀念是卷積和越大,則感受野越大,從而看到圖片的信息越多,因此獲得的特征越好,因此AlexNet 模型中使用了一些非常大的卷積核,比如11×11,5×5 卷積核,造成了計(jì)算量的增加,降低了計(jì)算性能,并且不利于模型深度的增加.
VGGNet[7]是由牛津大學(xué)的視覺(jué)幾何組(Visual Geometry Group)提出的,VGGNet 相比于AlexNet 模型最大的改進(jìn)就是采用連續(xù)多個(gè)3×3 的卷積核替代了AlexNet 模型中的大卷積核,同時(shí)增加非線性變換的能力,保證可以增加深度從而學(xué)習(xí)更復(fù)雜的模式,從而提升模型的效果.
GoogLeNet[8]是2014年Christian Szegedy 提出的一種卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),其主要的貢獻(xiàn)就是提出了inception 模塊[8],多個(gè)inception 模塊構(gòu)成了inception 網(wǎng)絡(luò)結(jié)構(gòu).其相對(duì)于AlexNet 模型,GoogLeNet 模型也采用了小卷積核,而相對(duì)于VGGNet 模型,GoogLeNet 模型采用了多個(gè)尺寸進(jìn)行卷積再聚合的方式,其優(yōu)勢(shì)是獲取了更多的特征,豐富的特征會(huì)讓結(jié)果的判斷更為準(zhǔn)確.
ResNet[9]是MSRA 何凱明團(tuán)隊(duì)提出的,在深度網(wǎng)絡(luò)中存在以下問(wèn)題:(1)深度學(xué)習(xí)的網(wǎng)絡(luò)越深,常規(guī)的網(wǎng)絡(luò)堆疊效果越不好;(2)網(wǎng)絡(luò)越深,梯度消失現(xiàn)象越來(lái)越明顯,網(wǎng)絡(luò)的訓(xùn)練效果也不會(huì)很好.(3)而淺層的網(wǎng)絡(luò)又無(wú)法明顯提升網(wǎng)絡(luò)的識(shí)別效果.因此ResNet 模型引入了殘差結(jié)構(gòu),其主要優(yōu)點(diǎn)就在于解決了極深度條件下深度卷積神經(jīng)網(wǎng)絡(luò)的性能退化功能.
本文圖像分類(lèi)的模型,就是借鑒上述模型的優(yōu)點(diǎn),提出了一種基于殘差的改進(jìn)卷積神經(jīng)網(wǎng)絡(luò),進(jìn)一步提升訓(xùn)練效果.本文主要在一下方面進(jìn)行改進(jìn):
(1)對(duì)ReLU 激活函數(shù),使用更新的SELU[10]激活函數(shù)進(jìn)行替換,形成新的殘差結(jié)構(gòu).
(2)對(duì)傳統(tǒng)深度殘差網(wǎng)絡(luò)的數(shù)據(jù)池化層進(jìn)行改進(jìn).
(3)通過(guò)卷積的方式進(jìn)行維度補(bǔ)償.
(4)學(xué)習(xí)率隨迭代次數(shù)進(jìn)行減小.
ResNet 的提出背景是解決或者緩解深層的神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的梯度消失問(wèn)題,假設(shè)有一個(gè)N層的深度神經(jīng)網(wǎng)絡(luò),另外有一個(gè)N+K層的神經(jīng)網(wǎng)絡(luò),直觀上來(lái)說(shuō),即使第二個(gè)深度神經(jīng)網(wǎng)絡(luò)效果比較差,但是也不會(huì)比第一個(gè)深度神經(jīng)網(wǎng)絡(luò)差.
根據(jù)神經(jīng)網(wǎng)絡(luò)的反向傳播原理,先通過(guò)正向傳播計(jì)算出結(jié)果output,然后與樣本比較得出誤差值E,根據(jù)誤差結(jié)果,利用“鏈?zhǔn)椒▌t”求偏導(dǎo),使結(jié)果誤差反向傳播從而得出權(quán)重w調(diào)整的梯度.通過(guò)不斷迭代對(duì)參數(shù)矩陣進(jìn)行不斷調(diào)整后,使得輸出結(jié)果誤差值更小,從而與輸出結(jié)果與事實(shí)更加接近.從上面的過(guò)程可以看出,神經(jīng)網(wǎng)絡(luò)在反向傳播的過(guò)程中要不斷的傳播梯度,當(dāng)神經(jīng)網(wǎng)絡(luò)加深時(shí),梯度會(huì)在傳播過(guò)程中逐漸消失,導(dǎo)致無(wú)法對(duì)前面網(wǎng)絡(luò)層的權(quán)重進(jìn)行有效的調(diào)整.對(duì)于上述問(wèn)題,研究學(xué)者給出了解決方法,正則初始化和中間的正則化層,但是這樣也僅僅可以訓(xùn)練幾十層網(wǎng)絡(luò).
而ResNet 引入了殘差網(wǎng)絡(luò)結(jié)構(gòu)[11,12],通過(guò)殘差網(wǎng)絡(luò),可以將網(wǎng)絡(luò)層做的很深.殘差網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,殘差網(wǎng)絡(luò)的本質(zhì)就是解決層次比較深的時(shí)候無(wú)法訓(xùn)練的問(wèn)題,殘差網(wǎng)絡(luò)借鑒了Highway Network 思想,通過(guò)對(duì)網(wǎng)絡(luò)結(jié)構(gòu)添加shortcut 連接,使得輸入可以直達(dá)輸出,ResNet 的思想是假設(shè)我們涉及一個(gè)網(wǎng)絡(luò)層,存在最優(yōu)化的網(wǎng)絡(luò)層次,那么往往我們?cè)O(shè)計(jì)的深層次網(wǎng)絡(luò)是有很多網(wǎng)絡(luò)層為冗余層的.那么我們希望這些冗余層能夠完成恒等映射,保證經(jīng)過(guò)該恒等層的輸入和輸出完全相同.圖1中的殘差模塊的輸入由原來(lái)的F(x)變?yōu)镠(x)=F(x)+x,如果這些網(wǎng)絡(luò)層是冗余的,那么只需要令F(x)=0,即可完成恒等映射.
圖1 殘差模塊結(jié)構(gòu)
激活函數(shù)[13,14]在神經(jīng)網(wǎng)絡(luò)中主要解決線性不可分問(wèn)題,通過(guò)對(duì)每一層線性變換后疊加一個(gè)非線性激活函數(shù),從而獲得更強(qiáng)大的學(xué)習(xí)和擬合能力.而ReLU[15,16]激活函數(shù)則是其中的佼佼者.從計(jì)算角度上來(lái)說(shuō)ReLU 計(jì)算簡(jiǎn)單,只需要一個(gè)閾值就可以計(jì)算得到激活值,其次ReLU 的非飽和性可以有效的解決梯度消失的問(wèn)題,以提供相對(duì)寬的激活邊界,最后,ReLU 的單側(cè)抑制提供了網(wǎng)絡(luò)的稀疏表達(dá)能力.但是ReLU 仍然有其局限性,根據(jù)ReLU 公式(1)可看出,由于其函數(shù)在負(fù)半軸上直接置0,由此導(dǎo)致負(fù)梯度經(jīng)過(guò)ReLU 單元時(shí)不被激活,導(dǎo)致該神經(jīng)元死亡.其次ReLU 函數(shù)在正半軸導(dǎo)數(shù)恒為1,導(dǎo)致梯度過(guò)小的時(shí)候,經(jīng)過(guò)該函數(shù)時(shí),容易導(dǎo)致梯度消失.
SELU 激活函數(shù)就是解決上述問(wèn)題而產(chǎn)生的,如式(2),SELU 激活函數(shù)的正半軸導(dǎo)數(shù)是大于1 的,這樣可以使方差過(guò)小的時(shí)候讓它讓增大,同時(shí)防止了梯度消失;而在負(fù)半軸不再簡(jiǎn)單置0,從而解決神經(jīng)元死亡問(wèn)題,又因?yàn)槠淦露容^為平緩,以便盡量保證ReLU 中的單側(cè)抑制優(yōu)勢(shì).
采用兩層的殘差結(jié)構(gòu),通過(guò)SELU 激活函數(shù)替代其ReLU 激活函數(shù),并進(jìn)行數(shù)據(jù)批量歸一化.改進(jìn)后的殘差網(wǎng)絡(luò)結(jié)構(gòu)如圖2
圖2 改進(jìn)后的殘差結(jié)構(gòu)
Inception 模塊是GoogLetNet 神經(jīng)網(wǎng)絡(luò)中采用的優(yōu)化模塊,其主要思想就是將一些大的卷積層替換成小卷積,這樣能夠大大減少權(quán)值參數(shù)數(shù)量.在傳統(tǒng)深度殘差網(wǎng)路中,數(shù)據(jù)輸入部分的池化層是通過(guò)的卷積層以及池化層實(shí)現(xiàn)的,為了更快的提高訓(xùn)練速度,減少權(quán)值參數(shù),因此在數(shù)據(jù)池化層引入Inception 模塊,通過(guò)構(gòu)建一個(gè)個(gè)更小的卷積網(wǎng)絡(luò)然后將卷積結(jié)果進(jìn)行批量正則化后,作為層數(shù)進(jìn)行維度上的合并.將的卷積層拆分為三個(gè)的卷積層,改進(jìn)后的數(shù)據(jù)池化層如圖3.
圖3 改進(jìn)后的數(shù)據(jù)池化層結(jié)構(gòu)
改進(jìn)一:通過(guò)卷積網(wǎng)絡(luò)將原始數(shù)據(jù)映射到新的空間,實(shí)現(xiàn)維度拓展.
在設(shè)計(jì)殘差網(wǎng)絡(luò)時(shí)應(yīng)遵循的規(guī)則有兩點(diǎn):
(1)對(duì)于輸出feature map 相同的層,有相同數(shù)量的通道.
(2)當(dāng)feature map 進(jìn)行池化的時(shí)候,feature map 減半,通道數(shù)則會(huì)翻倍.
而對(duì)于殘差網(wǎng)絡(luò)來(lái)說(shuō),維度匹配的shortcut 連接直接相加即可,對(duì)于維度不匹配的時(shí)候,需要將數(shù)據(jù)映射為相同維度的數(shù)據(jù).而在傳統(tǒng)殘差網(wǎng)絡(luò)中直接通過(guò)0 進(jìn)行填充.本文采用的是將數(shù)據(jù)乘以W 矩陣投影到新的空間,實(shí)際實(shí)現(xiàn)是通過(guò)1 ×1 卷積操作,直接改變1 ×1 卷積的通道數(shù)據(jù),從而實(shí)現(xiàn)通道數(shù)增加.
改進(jìn)二:學(xué)習(xí)率優(yōu)化方式[17,18]
學(xué)習(xí)率決定了參數(shù)移動(dòng)到最優(yōu)值的速度快慢,如果學(xué)習(xí)率過(guò)大,很可能越過(guò)最優(yōu)值,反而如果學(xué)習(xí)率過(guò)小,優(yōu)化效率過(guò)低,會(huì)導(dǎo)致算法長(zhǎng)時(shí)間無(wú)法收斂,因此學(xué)習(xí)率對(duì)于算法性能的表現(xiàn)至關(guān)重要,本文通過(guò)隨迭代次數(shù)減小的優(yōu)化方式,對(duì)學(xué)習(xí)率進(jìn)行優(yōu)化.
本文通過(guò)在標(biāo)準(zhǔn)數(shù)據(jù)集上做實(shí)驗(yàn)來(lái)驗(yàn)證本文網(wǎng)絡(luò)的性能.FashionMNIST[19]是一個(gè)替代MNIST 手寫(xiě)數(shù)字集的圖像數(shù)據(jù)集,其涵蓋了來(lái)自10 種類(lèi)別的共7 萬(wàn)個(gè)不同商品的正面圖片.FashionMNIST 數(shù)據(jù)集的大小以及劃分和MNIST 數(shù)據(jù)集一致,因此,可以直接測(cè)試算法性能,不需要改動(dòng)源代碼.
實(shí)驗(yàn)平臺(tái)包括PC 機(jī),InterCore i7,顯卡型號(hào)GTX1060,6 GB 顯存,Ubuntu 操作系統(tǒng),PyTorch[20]深度學(xué)習(xí)框架.在實(shí)驗(yàn)中,本文改進(jìn)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)為:首先采用改進(jìn)后的數(shù)據(jù)池化層結(jié)構(gòu)(圖3),替換傳統(tǒng)深度殘差網(wǎng)絡(luò)中最開(kāi)始的卷積池化層;其后為4 個(gè)殘差網(wǎng)絡(luò)層,每個(gè)殘差網(wǎng)絡(luò)層都包含多個(gè)殘差網(wǎng)絡(luò),第一個(gè)殘差網(wǎng)絡(luò)層包含3 個(gè)殘差塊,第二個(gè)殘差網(wǎng)絡(luò)層包含4 個(gè)殘差塊,第三個(gè)殘差網(wǎng)絡(luò)層包含6 個(gè)殘差塊,第四個(gè)殘差網(wǎng)絡(luò)層包含3 個(gè)殘差塊,每個(gè)殘差塊都使用SELU 激活函數(shù)替代ReLU 激活函數(shù)(圖2),同時(shí)進(jìn)行批量歸一化處理.最后通過(guò)均值池化和線性分類(lèi)器得到輸入結(jié)果.具體的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)見(jiàn)表1.
在本文提出的模型訓(xùn)練中,損失函數(shù)采用交叉熵?fù)p失函數(shù),采用Adam 算法作為優(yōu)化器進(jìn)行優(yōu)化.
表1 改進(jìn)后的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
本文通過(guò)控制變量,在同一臺(tái)機(jī)器上分別運(yùn)行算法,對(duì)每一個(gè)改進(jìn)進(jìn)行檢測(cè),最后將所有改進(jìn)進(jìn)行整合后檢測(cè),由于機(jī)器性能不足,因此只進(jìn)行了10 次迭代,但是為了防止結(jié)果的隨機(jī)性,因此每個(gè)算法進(jìn)行了十次實(shí)驗(yàn),最后取得平均值.
(1) 優(yōu)化學(xué)習(xí)率對(duì)準(zhǔn)確率的影響
在僅僅優(yōu)化學(xué)習(xí)率的情況下,在數(shù)據(jù)集Fashion-MNIST 上測(cè)試分類(lèi)結(jié)果,實(shí)驗(yàn)結(jié)果如表2所示.
表2 學(xué)習(xí)率優(yōu)化的結(jié)果比較(%)
從表中可以看到:在進(jìn)行學(xué)習(xí)率優(yōu)化后,迭代10 次的平均準(zhǔn)確率提高了0.1%,但是迭代20 次的平均準(zhǔn)確率提高了0.61%.可以看出之所以在迭代10 次的效果不明顯,在于迭代次數(shù)較少,原因是迭代次數(shù)會(huì)增加模型的細(xì)化程度,因此準(zhǔn)確率會(huì)上升.其次學(xué)習(xí)率優(yōu)化后的結(jié)果要比未優(yōu)化的效果好,原因是學(xué)習(xí)率優(yōu)化后,可以使模型更快收斂,損失函數(shù)波動(dòng)更小,如圖4和圖5所示.
(2) 使用SELU 激活函數(shù)替換ReLU 激活函數(shù)
在僅僅使用SELU 激活函數(shù)替換ReLU 激活函數(shù)的情況下,在數(shù)據(jù)集FashionMNIST 上測(cè)試分類(lèi)結(jié)果,實(shí)驗(yàn)結(jié)果如表3所示.
從表中可以看到:在僅優(yōu)化激活函數(shù)的條件下,模型的準(zhǔn)確率提高了0.23%.但是可以從圖6中可以看到,SELU 比ReLU 的收斂速度要快很多.
(3) 基于Inception 模塊優(yōu)化改進(jìn)的神經(jīng)網(wǎng)絡(luò)
在僅僅使用Inception 模塊替換第一層的卷積池化層,在數(shù)據(jù)集FashionMNIST 上測(cè)試分類(lèi)結(jié)果,實(shí)驗(yàn)結(jié)果 如表4所示.
圖4 沒(méi)有經(jīng)過(guò)學(xué)習(xí)率優(yōu)化的損失變化曲線
圖5 經(jīng)過(guò)學(xué)習(xí)率優(yōu)化的損失變化曲線
表3 激活函數(shù)優(yōu)化結(jié)果比較(%)
圖6 SELU 和ReLU 激活函數(shù)收斂速度
表4 Inception 模塊優(yōu)化結(jié)果比較(%)
從表中可以看到:相比傳統(tǒng)殘差網(wǎng)絡(luò),準(zhǔn)確率提高了1.76%,原因在于,通過(guò)多個(gè)小的卷積核,可以獲得更豐富的特征,從而使結(jié)果更為準(zhǔn)確.
(4) 基于所有優(yōu)化方式的結(jié)合的神經(jīng)網(wǎng)絡(luò)
綜上所有優(yōu)化方式,最終的訓(xùn)練結(jié)果,在數(shù)據(jù)集FashionMNIST 上如表5所示.
表5 最終的模型優(yōu)化后的結(jié)果比較(%)
從表中可以看到:準(zhǔn)確率比傳統(tǒng)深度殘差網(wǎng)絡(luò)準(zhǔn)確率提高了2.92%,因此,多種優(yōu)化方式對(duì)于提高深度殘差網(wǎng)絡(luò)的準(zhǔn)確性是有積極意義的.
針對(duì)卷積神經(jīng)網(wǎng)絡(luò),本文在傳統(tǒng)殘差網(wǎng)絡(luò)的基礎(chǔ)上進(jìn)行了進(jìn)一步的優(yōu)化,通過(guò)對(duì)數(shù)據(jù)池化層,激活函數(shù)和學(xué)習(xí)率的優(yōu)化,提升網(wǎng)絡(luò)的準(zhǔn)確率.實(shí)驗(yàn)結(jié)果表明,改進(jìn)后的深度殘差網(wǎng)絡(luò)比傳統(tǒng)深度殘差網(wǎng)絡(luò)表現(xiàn)要好,因此,本文在深度殘差網(wǎng)絡(luò)優(yōu)化方面有一定的參考價(jià)值,當(dāng)然,深度殘差網(wǎng)絡(luò)依然還有其他改進(jìn)方式,例如其他方式的維度填充,其他損失函數(shù)或者優(yōu)化器對(duì)訓(xùn)練模型的影響等方面,這將是下一步的研究方向.