楊 揚(yáng),藍(lán)章禮,陳 巍
(重慶交通大學(xué) 信息科學(xué)與工程學(xué)院,重慶 400074)
2012年Hiton[1]構(gòu)建的深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet才在圖像分類領(lǐng)域取得了驚人的成績(jī),卷積神經(jīng)網(wǎng)絡(luò)(CNN)在計(jì)算機(jī)視覺(jué)領(lǐng)域包括圖像分類[1],目標(biāo)檢測(cè)[2]、圖像語(yǔ)義分割[3]、視頻分類[4]得到了廣泛的應(yīng)用[5].之后,層數(shù)更多、更加精細(xì)設(shè)計(jì)的深度卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)相繼被提出,比如VggNet[6]、GoogLenet[7]、ResNet[8]在ImageNet[9]上取得了更好的成績(jī).除此之外,卷積神經(jīng)網(wǎng)絡(luò)在人工智能[10],自然語(yǔ)言處理[11],故障診斷[12]有著廣闊的應(yīng)用前景.這些深度卷積神經(jīng)網(wǎng)絡(luò)模型參數(shù)越來(lái)越多,運(yùn)算量越來(lái)越大,對(duì)運(yùn)算設(shè)備的內(nèi)存、CPU、GPU的配置要求越來(lái)越高.當(dāng)需要在運(yùn)算和存儲(chǔ)資源有限的微型設(shè)備上[13],比如手機(jī)、嵌入式設(shè)備上使用卷積神經(jīng)網(wǎng)絡(luò)時(shí),除了準(zhǔn)確率,計(jì)算效率和模型的大小也是至關(guān)重要的.
模型壓縮最早的研究為OBD[14](Optimal Brain Surgeon)和OBS[15](Optimal Brain Surgeon),通過(guò)泰勒展開(kāi),分析參數(shù)的擾動(dòng)對(duì)損失函數(shù)的影響,以此確定參數(shù)的重要性,決定參數(shù)保留或者裁剪.Han等人[16]通過(guò)裁剪、量化、壓縮卷積神經(jīng)網(wǎng)絡(luò)模型參數(shù),大幅度減少模型的大小,并且沒(méi)有降低模型的準(zhǔn)確率.文獻(xiàn)[17]指出非結(jié)構(gòu)的稀疏無(wú)法利用現(xiàn)有的硬件進(jìn)行加速,提出了一種在目標(biāo)函數(shù)上增加group lasso進(jìn)行結(jié)構(gòu)化稀疏的學(xué)習(xí)方式.文獻(xiàn)[18]通過(guò)一個(gè)訓(xùn)練好的較大的模型來(lái)訓(xùn)練一個(gè)較小的模型,將較大的模型學(xué)到的知識(shí)遷移到較小的模型中.Network in Network[19]除了對(duì)卷積層進(jìn)行了改進(jìn),還提出了全局平均化的方法,解決了全連接層參數(shù)數(shù)量多的問(wèn)題,并被GoogleNet和ResNet等采用.目前卷積層的卷積核大小、卷積核數(shù)量對(duì)于不同的數(shù)據(jù)集參數(shù)設(shè)置不同,需要大量實(shí)驗(yàn),有一定經(jīng)驗(yàn)成分,卷積層用一般包含了足夠多數(shù)目的卷積核,存在冗余,已有相關(guān)文獻(xiàn)通過(guò)實(shí)驗(yàn)證明在裁剪部分不重要的卷積核后,再訓(xùn)練整個(gè)卷積神經(jīng)網(wǎng)絡(luò)(或者逐層裁剪、逐層訓(xùn)練)可以在盡量不損失準(zhǔn)的條件下對(duì)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮[20–22].Wen[20]等人通過(guò)定義APoZ(Average Percentage of Zeros)來(lái)統(tǒng)計(jì)每一個(gè)卷積核中激活為0的比例,以為評(píng)估一個(gè)卷積核是否重要,主要是用在最后一層卷積層,以此減少全連接層的參數(shù)數(shù)量.文獻(xiàn)[21]通過(guò)將一定樣本輸入卷積神經(jīng)網(wǎng)絡(luò),計(jì)算特征圖的各類參數(shù),對(duì)活性低的特征圖通道裁剪.文獻(xiàn)[22]通過(guò)將卷積核參數(shù)的L1范數(shù)作為評(píng)價(jià)一個(gè)卷積核重要性的依據(jù),將不重要的卷積核裁剪.
由于文獻(xiàn)[19]提出的全局平均池化在一定會(huì)程度上解決了傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)參數(shù)多的問(wèn)題.本文的主要解決的是卷積層的壓縮,在調(diào)研了卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中的規(guī)律的基礎(chǔ)上,提出了基于卷積核的標(biāo)準(zhǔn)差作為卷積核重要性指標(biāo)進(jìn)行卷積核裁剪的方法,并和文獻(xiàn)[22]相結(jié)合的方法,通過(guò)實(shí)驗(yàn),本文提出的方法能和文獻(xiàn)[22]互補(bǔ),綜合兩種評(píng)價(jià)指標(biāo)綜合進(jìn)行卷積核裁剪能保留對(duì)分類更有作用的卷積核.
1958年,Hubel和Wiesel等人[23]發(fā)現(xiàn)了生物視覺(jué)系統(tǒng)的信息處理方式,視覺(jué)信息從視網(wǎng)膜傳遞到大腦是通過(guò)多層的感受野激活完成的.1998年,Lecun等人[24]提出的LeNet-5,如圖1所示,LeNet-5由兩層卷積層和兩層池化層交替將輸入圖像轉(zhuǎn)換成一系列特征圖,再連接三層全連接層對(duì)提取的特征分類.卷積層的卷積核實(shí)現(xiàn)了局部感受野和特征提取的功能,將局部區(qū)域信息通過(guò)卷積核的卷積運(yùn)算,再經(jīng)過(guò)激活函數(shù)、池化,將低層的激活信息傳遞到高層.以往的人工設(shè)計(jì)的特征有良好的特征表達(dá)能力,例如HOG[25],SIFT[26],但這些人工設(shè)計(jì)的特征缺乏良好的泛化能力.池化層也稱下采樣層,能在一定程度上保持特征的尺度不變性并對(duì)特征圖降維.Lenet提出后,在圖像分類領(lǐng)域沒(méi)有取得實(shí)質(zhì)的進(jìn)展和突破,直到2012年Hiton及其學(xué)生Alex構(gòu)建的深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet在ImageNet上取得了顯著的成績(jī),主要原因是訓(xùn)練的改進(jìn),在網(wǎng)絡(luò)的訓(xùn)練中加入了權(quán)重衰減、Droupout[27]、Batch Normalization[28]等技術(shù),更關(guān)鍵的是計(jì)算機(jī)計(jì)算能力的提升,GPU加速技術(shù)的發(fā)展,使得在計(jì)算機(jī)可以高效地實(shí)現(xiàn)卷積的運(yùn)算.之后,更復(fù)雜,準(zhǔn)確率更高的深度卷積神經(jīng)網(wǎng)絡(luò)被提出.
圖1 LeNet-5結(jié)構(gòu)圖
如圖2所示,為一個(gè)5×5×3的卷積核作用在一個(gè)32×32×3的圖像(也可能為32×32×3的特征圖)上,5×5×3的卷積核與圖像的5×5×3區(qū)域點(diǎn)乘再加上偏置(bias)經(jīng)過(guò)激活函數(shù),產(chǎn)生一個(gè)運(yùn)算結(jié)果,即圖中的小圓球.卷積核在圖像的所有局部區(qū)域以步長(zhǎng)為1滑動(dòng)并卷積,得到一個(gè)28×28×1的特征圖(feature map).
圖2 一個(gè)卷積核作用在圖像或者特征圖上
同理,如圖3所示,32×32×3的圖像經(jīng)過(guò)一個(gè)有6個(gè)5×5×3的卷積核的卷積層,產(chǎn)生了28×28×6的特征圖.在實(shí)際中,滑動(dòng)的步長(zhǎng)不一定為1,有時(shí)為了保持卷積后特征圖大小不變或者取整,會(huì)對(duì)特征圖的邊界進(jìn)行填充(padding),特征圖通過(guò)卷積層后,會(huì)接著通過(guò)池化層(pooling layer),將得到的特征圖輸入到下一層卷積層.
圖3 6個(gè)卷積核作用在圖像或者特征圖上
近年來(lái),為了讓卷積神經(jīng)網(wǎng)絡(luò)達(dá)到更好的效果,卷積神經(jīng)網(wǎng)絡(luò)朝著更深更復(fù)雜的方向發(fā)展.而另一方面,增強(qiáng)深度神經(jīng)網(wǎng)絡(luò)的運(yùn)算效率,在不損失精度的情況下,對(duì)深度學(xué)習(xí)訓(xùn)練得到的模型進(jìn)行優(yōu)化壓縮也有著大量的研究.本文參照文獻(xiàn)[21,22]提出的卷積核裁剪方式,針對(duì)已經(jīng)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型,對(duì)卷積層中數(shù)個(gè)不重要的卷積核裁剪,同時(shí)裁剪對(duì)應(yīng)的特征圖,最后對(duì)裁剪后的模型進(jìn)行再訓(xùn)練,恢復(fù)模型的性能.
為了便于說(shuō)明裁剪卷積核的方式,如圖4所示,Xk∈RHK×WK×NK代表第k層的特征圖,Hk、Wk、Nk分別是其高、寬、維度,Convk∈Rs×s×NK×NK+1為第k層卷積層,Fi,j∈Rsk×sk為其中一個(gè)2D的單層卷積核,i=1,2,…,Nk,j=1,2,…,Nk+1,sk為第k層卷積層卷積核的高和寬,Nk、Nk+1分別為上一層的特征圖的維度和下一層特征圖的維度.Xk層特征圖通過(guò)第k層卷積層Conv k得到了k+1層特征圖Xk+1,假設(shè)在卷積層中刪除第j個(gè)卷積核,即圖中Convk的j列(灰色),同時(shí)也裁剪了Xk+1層特征圖的第j個(gè)特征圖.減少的參數(shù),減少的計(jì)算量為,在k+2層特征圖Xk+2的計(jì)算過(guò)程中額外將少的乘法運(yùn)算量為Nk+2×s2k+1×Hk+2×Wk+2.當(dāng)在第k層卷積層中裁剪m(0≦m<nk+1)個(gè)卷積核時(shí),減少的參數(shù)為,減少的乘法運(yùn)算量為Hk+1.
為了決定一個(gè)卷積層中某個(gè)卷積核的重要程度,文獻(xiàn)[20]通過(guò)定義APoZ(Average Percentage of Zeros),即一個(gè)卷積核中來(lái)統(tǒng)計(jì)每一個(gè)卷積核中激活為0的比例,以為評(píng)估一個(gè)卷積核是否重要,主要是用在最后一層卷積層,以此減少全連接層的參數(shù)數(shù)量.文獻(xiàn)[21]通過(guò)輸入樣本,通過(guò)計(jì)算特征圖的相關(guān)參數(shù)確定卷積核的重要程度,認(rèn)為對(duì)不同樣本得到類似特征圖的卷積核為冗余的卷積核.通過(guò)文獻(xiàn)[22]在提出以卷積核的L1作為卷積核重要程度的評(píng)價(jià)指標(biāo),認(rèn)為裁剪L1范數(shù)較小的卷積核對(duì)整個(gè)模型影響較小.
圖4 卷積核的裁剪方式
卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中,卷積層中參數(shù)的標(biāo)準(zhǔn)差(或方差)逐漸增大,分布范圍逐漸擴(kuò)大,參數(shù)之間的差異性逐漸明顯,如圖5、圖6所示.
圖5 Conv 2參數(shù)在訓(xùn)練過(guò)程中的分布
本文認(rèn)為,卷積神經(jīng)網(wǎng)絡(luò)通過(guò)訓(xùn)練,標(biāo)準(zhǔn)差或者方差更大的卷積核學(xué)習(xí)到了更明顯的局部特征,因此提出了基于標(biāo)準(zhǔn)差的卷積核裁剪方法,克服了文獻(xiàn)[20,21]需要輸入樣本,統(tǒng)計(jì)特征圖各類參數(shù)需要額外大量計(jì)算量的缺點(diǎn),同時(shí)也避免了文獻(xiàn)[22]只保留L1范數(shù)較大的卷積核,而沒(méi)有考慮到卷積核提取特征的能力與參數(shù)的分布有關(guān).本文了還將以卷積核標(biāo)準(zhǔn)差作為卷積核重要性指標(biāo)與文獻(xiàn)[22]提出的以卷積核L1范數(shù)作為卷積核重要性指標(biāo)相結(jié)合,即將卷積核的L1范數(shù)和標(biāo)準(zhǔn)差結(jié)合作為卷積核重要性的評(píng)價(jià)指標(biāo),對(duì)卷積核進(jìn)行裁剪.
圖6 Conv 2參數(shù)在訓(xùn)練過(guò)程中的統(tǒng)計(jì)直方圖
式(1)為一個(gè)卷積層中第j個(gè)卷積核的標(biāo)準(zhǔn)差計(jì)算公式,代表對(duì)Fi,j中s×s個(gè)元素進(jìn)行求和.式(2)為卷積層第j個(gè)卷積核的L1范數(shù)計(jì)算公式,代表對(duì)Fi,j中s×s個(gè)元素的絕對(duì)值進(jìn)行求和,即Fi,j的L1范數(shù),nk個(gè)單層卷積核Fi,j的L1范數(shù)和即為卷積核Fj的L1范數(shù).式(3)同時(shí)考慮了卷積核的L1范數(shù)和標(biāo)準(zhǔn)差,為了防止L1范數(shù)和標(biāo)準(zhǔn)差計(jì)算結(jié)果相差過(guò)大,對(duì)卷積核L1范數(shù)和標(biāo)準(zhǔn)差進(jìn)行了歸一化處理,參數(shù)λ調(diào)節(jié)卷積核L1范數(shù)和標(biāo)準(zhǔn)差的相對(duì)重要程度.當(dāng)λ=1時(shí),表示卷積核L1范數(shù)和標(biāo)準(zhǔn)差同等重要,當(dāng)λ<1時(shí),表示卷積核標(biāo)準(zhǔn)差比L1范數(shù)更重要,當(dāng)λ>1時(shí),表示卷積核L1范數(shù)比標(biāo)準(zhǔn)差更重要.
為了驗(yàn)證本文所提出的卷積核裁剪方法的正確性和有效性,本文在MNIST和Cifar-10數(shù)據(jù)集上分別設(shè)計(jì)了有兩層卷積層和三層卷積層的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行了實(shí)驗(yàn).實(shí)驗(yàn)環(huán)境:Ubuntu 16.04,Python3.6,Tensorflow 1.2,計(jì)算機(jī)CPU為6700 hq,GPU為GTX 960 m(4 G顯存),內(nèi)存為8 G.
對(duì)MNIST數(shù)據(jù)集和Cifar-10數(shù)據(jù)集分別設(shè)計(jì)了兩層卷積層和三層全連接、三層卷積層和三層全連接層結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡(luò),如表1所示,Conv k代表第k層卷積層,(3,3,1,32)代表該層有32個(gè)3×3×1的卷積核.FC k代表第k層全連接層,(3136,200)代表輸入一個(gè)3136維的數(shù)組,輸出一個(gè)200維的數(shù)組.由于cifar-10數(shù)據(jù)集更復(fù)雜,所以在訓(xùn)練過(guò)程中采用了數(shù)據(jù)增強(qiáng)和權(quán)重衰減.兩個(gè)卷積神經(jīng)網(wǎng)絡(luò)都采用了交叉熵?fù)p失函數(shù)計(jì)算代價(jià)函數(shù).在訓(xùn)練完成后,在MNIST數(shù)據(jù)集上的正確率達(dá)到了99.02%,在Cifar-10上的正確率達(dá)到了86.56%.
表1 所設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
從圖7和圖8可以看出,在用MNIST數(shù)據(jù)集訓(xùn)練得到的帶有兩層卷積層的神經(jīng)網(wǎng)絡(luò)中,裁剪標(biāo)準(zhǔn)差較小的卷積核能比裁剪標(biāo)準(zhǔn)較大的卷積核保留的準(zhǔn)確率更高,即標(biāo)準(zhǔn)差較大的卷積核比方差較小的卷積核更重要,證實(shí)了本文的設(shè)想,即標(biāo)準(zhǔn)差較大的卷積核在訓(xùn)練的過(guò)程中學(xué)到了更為重要的局部特征.
圖7 裁剪針對(duì)MNIST訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)第一層卷積層中的卷積核
圖8 裁剪針對(duì)MNIST訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)第二層卷積層中的卷積核
如圖9-圖11可以得出,在Cifar-10上也有著類似的結(jié)果,在針對(duì)MNIST數(shù)據(jù)集設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)中,在裁剪甚至50%的卷積核時(shí),準(zhǔn)確率沒(méi)有明顯降低.而針對(duì)Cifar-10數(shù)據(jù)集設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò),裁剪少數(shù)卷積核準(zhǔn)確率也會(huì)明顯降低.一方面是因?yàn)镸NIST數(shù)據(jù)集較為簡(jiǎn)單,Cifar-10數(shù)據(jù)集較為復(fù)雜,其次是因?yàn)獒槍?duì)MNIST數(shù)據(jù)集設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)卷積核設(shè)置得較多,這也說(shuō)明了,在訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型中,如果在一個(gè)卷積層中裁剪一定的卷積核而準(zhǔn)確率沒(méi)有明顯降低,說(shuō)明這一層的卷積核設(shè)置的過(guò)多,可以對(duì)卷積核進(jìn)行裁剪.
圖9 裁剪針對(duì)Cifar-10訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)第一層卷積層中的卷積核
為了驗(yàn)證本文提出的方法的有效性,本文在分別針對(duì)MNIST和Cifar-10訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型與其他的裁剪方式進(jìn)行了對(duì)比,式(3)中λ取值為1.卷積神經(jīng)網(wǎng)絡(luò)在裁剪后,性能會(huì)有一定的下降,為了恢復(fù)性能,一般會(huì)在對(duì)裁剪后的模型進(jìn)行再訓(xùn)練,再訓(xùn)練的迭代次數(shù)一般沒(méi)有從初始狀態(tài)訓(xùn)練多.24-48代表經(jīng)過(guò)裁剪,第一層卷積層的卷積核保留的個(gè)數(shù)為24,第二層保留的個(gè)數(shù)為48,其余情況以類似的方式表示.
圖10 裁剪針對(duì)Cifar-10訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)第二層卷積層中的卷積核
圖11 裁剪針對(duì)Cifar-10訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)第三層卷積層中的卷積核
通過(guò)表2可以看出,對(duì)MNIST數(shù)據(jù)集設(shè)計(jì)的兩層卷積神經(jīng)網(wǎng)絡(luò)分別裁剪后,通過(guò)方差作為評(píng)價(jià)卷積核的裁剪能保留更多的準(zhǔn)確率,同時(shí)通過(guò)再訓(xùn)練后得到的準(zhǔn)確率也比文獻(xiàn)[22]的方式高.通過(guò)表3可以看出,針對(duì)Cifar-10設(shè)計(jì)的三層卷積神經(jīng)網(wǎng)絡(luò)中,在48-64-64這種方式裁剪時(shí),文獻(xiàn)[22]提出的L1范數(shù)作為卷積核的評(píng)價(jià)指標(biāo)保留了較大的準(zhǔn)確率,而在32-48-48這種裁剪方式時(shí),本文提出的方法保留了較高的準(zhǔn)確率,而通過(guò)再訓(xùn)練準(zhǔn)確率會(huì)有所損失.選取L1+std作為卷積核的評(píng)價(jià)指標(biāo)進(jìn)行裁剪時(shí),裁剪后的準(zhǔn)確率在L1和std之間.因此,式(3)中的參數(shù)λ可以通過(guò)卷積核裁剪的比例動(dòng)態(tài)動(dòng)態(tài)調(diào)整,在裁剪卷積核數(shù)量過(guò)多時(shí),適當(dāng)增大λ,可以保留更高的準(zhǔn)確率.
表2 裁剪針對(duì)MNIST數(shù)據(jù)集訓(xùn)練的兩層卷積層神經(jīng)網(wǎng)絡(luò)
表3 裁剪針對(duì)Cifar-10數(shù)據(jù)集訓(xùn)練的三層卷積層神經(jīng)網(wǎng)絡(luò)
本文從卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中參數(shù)的統(tǒng)計(jì)特征出發(fā),提出了一種基統(tǒng)計(jì)分析裁剪卷積核的卷積神經(jīng)網(wǎng)絡(luò)模型壓縮方法.通過(guò)在針對(duì)MNIST和Cifar-10所設(shè)計(jì)的兩個(gè)卷積神經(jīng)網(wǎng)絡(luò)中進(jìn)行裁剪實(shí)驗(yàn),本文提出的標(biāo)準(zhǔn)差較大的卷積學(xué)習(xí)到了更顯著的局部特征的設(shè)想是正確的,在與類似的裁剪方式的對(duì)比中,本文提出的方法在裁剪較多的卷積核時(shí)保留更高的準(zhǔn)確率,根據(jù)裁剪的比例動(dòng)態(tài)調(diào)整卷積核L1范數(shù)和標(biāo)準(zhǔn)差的相對(duì)重要程度,可以使得裁剪的結(jié)果更穩(wěn)定.在后續(xù)的研究中,將進(jìn)一步研究卷積核通道間的裁剪和利用特征圖使得裁剪結(jié)果最優(yōu).