朱雪晨,陳三林,蔡 剛,黃志洪
(1.中國科學(xué)院空天信息創(chuàng)新研究院,北京 100094; 2.中國科學(xué)院大學(xué),北京 100049)
卷積神經(jīng)網(wǎng)絡(luò)具有平移不變性以及權(quán)值共享的結(jié)構(gòu),相比于傳統(tǒng)算法,可避免復(fù)雜的數(shù)據(jù)預(yù)處理以及特征提取過程。目前卷積神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用到各個領(lǐng)域[1-3],尤其在計算機(jī)視覺方面獲得了巨大的成功。隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,很多設(shè)備需要智能處理圖片或視頻[4],具有精準(zhǔn)目標(biāo)識別功能的移動端在市場上具有巨大的需求潛力[5]。移動端對網(wǎng)絡(luò)模型參數(shù)敏感,然而卷積神經(jīng)網(wǎng)絡(luò)模型規(guī)模日益擴(kuò)增,參數(shù)規(guī)模越來越大,需要消耗大量的計算和存儲資源[6],使其難以集成到資源有限的移動終端內(nèi),例如手機(jī)、平板電腦等[7]。
卷積神經(jīng)網(wǎng)絡(luò)模型參數(shù)壓縮方法能很好地解決卷積神經(jīng)網(wǎng)絡(luò)龐大的參數(shù)量與有限的資源之間的矛盾[8-10],目前被廣泛應(yīng)用的模型參數(shù)壓縮方法有權(quán)重參數(shù)量化、SVD分解法等[11]。
權(quán)重參數(shù)量化可通過降低權(quán)重的精度達(dá)到降低資源消耗的目的。比如在常見的開發(fā)框架中,神經(jīng)網(wǎng)絡(luò)的激活和權(quán)重通常由浮點(diǎn)數(shù)據(jù)表示,采用低位定點(diǎn)數(shù)據(jù)甚至一小部分訓(xùn)練值代替浮點(diǎn)數(shù)據(jù)有助于減少神經(jīng)網(wǎng)絡(luò)處理系統(tǒng)的帶寬和存儲需求[12-15]。缺點(diǎn)是數(shù)據(jù)精度的降低造成了分類準(zhǔn)確率的降低,同時壓縮效果很難有更高的提升。
SVD分解法則通過減少權(quán)重的數(shù)量來達(dá)到降低資源消耗的目的。文獻(xiàn)[16]通過奇異值分解壓縮全連接層的權(quán)重矩陣W。一個m×n的權(quán)重矩陣W被大小為m×p的權(quán)重矩陣A和大小為p×n的權(quán)重矩陣B的乘積代替[16]。雖然通過減小p的值達(dá)到了減少參數(shù)數(shù)量的目的,但并不能徹底解決全連接層參數(shù)眾多而容易產(chǎn)生過擬合的問題。為了解決上述問題,文獻(xiàn)[17]提出了一種代替全連接層的全局平均池化算法,之后全局平均池化算法被廣泛應(yīng)用到各種網(wǎng)絡(luò),GoogleNet便采用了該算法減小網(wǎng)絡(luò)訓(xùn)練規(guī)模。GoogleNet移除全連接層并沒有影響到圖像識別的精度,在ImageNet中識別精度達(dá)到了93.3%。與此同時,文獻(xiàn)[18]提出了1×1的卷積核,之后也成功應(yīng)用到GoogleNet[19]和ResNet[20]中,起到了降低參數(shù)量的作用。
全局平均池化算法解決了全連接層參數(shù)眾多的問題,在應(yīng)用此算法的基礎(chǔ)上仍需對卷積層參數(shù)進(jìn)行壓縮來進(jìn)一步減小參數(shù)規(guī)模。
卷積層參數(shù)壓縮的2種方式分別為減少輸入特征圖的數(shù)量以及壓縮卷積核大小。分組卷積最早在AlexNet中出現(xiàn),訓(xùn)練AlexNet時將特征圖分給多個GPU進(jìn)行處理[21],最后把多個GPU的結(jié)果進(jìn)行融合,有效地減少了輸入特征圖的數(shù)量,解決了硬件資源有限的難題。卷積拆分則是壓縮卷積核大小的有效方法。通過將大卷積核拆分成小卷積核的方式可以降低卷積核的參數(shù)量。
本文對卷積神經(jīng)網(wǎng)絡(luò)模型參數(shù)進(jìn)行分析,參數(shù)的數(shù)量主要與全連接層以及卷積層有關(guān),因此本文在原有卷積神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)上,應(yīng)用分組卷積代替標(biāo)準(zhǔn)卷積并采用卷積拆分的方法來減少卷積層的參數(shù)量,同時采用全局平均池化層代替全連接層的方法來解決全連接層參數(shù)量大的問題。使用上述壓縮方法對LeNet5和AlexNet模型進(jìn)行壓縮,進(jìn)行最大壓縮后的LeNet5模型參數(shù)規(guī)模減少了97%,識別準(zhǔn)確率降低了不到2個百分點(diǎn),而壓縮后的AlexNet模型參數(shù)規(guī)??蓽p少95%,識別準(zhǔn)確率提高了6.72個百分點(diǎn),表明該方法的有效性。
LeNet5是最經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)模型之一,最初被應(yīng)用于手寫英文字符識別,圖1為LeNet5模型的架構(gòu)示意圖。
圖1 LeNet5模型架構(gòu)示意圖
AlexNet在LeNet5的基礎(chǔ)上加深了網(wǎng)絡(luò),并在2012年ImageNet大賽上贏得冠軍,使得卷積神經(jīng)網(wǎng)絡(luò)成為圖像識別分類方面的核心算法模型,圖2為AlexNet模型的架構(gòu)示意圖。
圖2 AlexNet模型架構(gòu)示意圖
卷積神經(jīng)網(wǎng)絡(luò)主要由卷積層、池化層、全連接層以及激活函數(shù)組成。池化層處于卷積層之后,常用的池化函數(shù)有最大池化和平均池化,用以縮減特征圖的尺寸,降低下一層待處理的數(shù)據(jù)量。
激活函數(shù)處于卷積層之后,池化層之前,不僅可以限制輸出的范圍,還可以增強(qiáng)網(wǎng)絡(luò)的表達(dá)能力。常用的激活函數(shù)包括sigmoid、tanh以及ReLU。ReLU函數(shù)即線性整流函數(shù),是一個嚴(yán)格的分段函數(shù),閾值為0。ReLU計算與收斂速度快且在正區(qū)間解決了梯度消失的問題。本文采用ReLU激活函數(shù),如式(1):
f(z)=ReLU=max(z,0)
(1)
由于池化層與激活函數(shù)均不涉及模型參數(shù),卷積神經(jīng)網(wǎng)絡(luò)的模型參數(shù)只與卷積層和全連接層的參數(shù)有關(guān)。
卷積層的運(yùn)算主要是對輸入特征圖做二維卷積運(yùn)算,即將卷積核與被卷積信號的對應(yīng)項(xiàng)進(jìn)行相乘后求和,其運(yùn)算如式(2):
(2)
其中,s、t分別為矩陣C的行數(shù)和列數(shù),m、n分別為矩陣A的行數(shù)和列數(shù)。
卷積層的卷積運(yùn)算本質(zhì)上就是大量的乘累加運(yùn)算。假設(shè)一個卷積層的輸入特征圖的數(shù)量為P,輸出特征圖的數(shù)量為D,卷積核的大小為m×n。則該卷積層運(yùn)算需要的權(quán)重參數(shù)數(shù)量S滿足:
S=P×D×(m×n)+D
(3)
由式(3)可知,卷積層權(quán)重參數(shù)數(shù)量S與輸入輸出特征圖數(shù)量P和D以及卷積核大小m和n有關(guān),因此可以通過減小卷積核的大小和減少輸入輸出特征圖數(shù)量的方法來壓縮模型參數(shù)。
全連接層把所有神經(jīng)節(jié)點(diǎn)連接關(guān)聯(lián),使之具有全局特性。全連接層層數(shù)加深以及神經(jīng)元的個數(shù)增加可以提高模型的非線性表達(dá)能力,但會使模型的復(fù)雜度提升,也會導(dǎo)致模型的參數(shù)變多,需要更多訓(xùn)練集的同時也增加了訓(xùn)練時間,影響模型效率,另一方面模型的學(xué)習(xí)能力過好會出現(xiàn)過擬合問題。
假設(shè)全連接層的輸入向量是(x1,x2,x3,…,xn),下一層的神經(jīng)元節(jié)點(diǎn)是(y1,y2,y3,…,ym),則計算過程如式(4)所示。從式(4)可以看出全連接層運(yùn)算是類似于卷積層的乘累加運(yùn)算,權(quán)重參數(shù)矩陣W包含參數(shù)眾多,現(xiàn)有研究主要集中在如何實(shí)現(xiàn)并行優(yōu)化,但無法解決全連接層參數(shù)眾多的問題。本文通過全局平均池化層代替全連接層的方法可以大幅降低模型參數(shù)數(shù)量。
(4)
通過對卷積層和全連接層的權(quán)重參數(shù)進(jìn)行分析后可知:卷積層參數(shù)量與輸入輸出特征圖數(shù)量以及卷積核大小有關(guān),而全連接層參數(shù)數(shù)量眾多且難以大幅減少。因此本文通過分組卷積減少輸入輸出特征圖數(shù)量,通過卷積拆分減小卷積核大小,通過全局平均池化層代替全連接層解決全連接層參數(shù)眾多的問題。
卷積拆分是將大卷積核拆分成小卷積核的一種模型壓縮方法。當(dāng)LeNet5的輸入特征圖尺寸為28×28時,為得到尺寸為24×24的輸出特征圖,可將一個5×5的卷積核拆分為2個3×3的卷積核,而一個5×5的卷積核的權(quán)重數(shù)目為25,2個3×3的卷積核的參數(shù)數(shù)目為18。因此通過卷積拆分的方法可以降低卷積核的參數(shù)數(shù)量。
分組卷積是對輸入特征圖分組后進(jìn)行卷積運(yùn)算。對于標(biāo)準(zhǔn)卷積運(yùn)算,假設(shè)輸入特征圖的大小為H×W×c1,卷積核的大小為h1×w1×c1,輸出特征圖的大小為h×w×c2,則標(biāo)準(zhǔn)卷積層的參數(shù)量S滿足:
S=(h1×w1×c1)×c2
(5)
對于分組卷積運(yùn)算,假設(shè)輸入特征圖被分成g組,則每組輸入特征圖的大小為H×W×c1/g,對應(yīng)的卷積核大小為h1×w1×c1/g,每組輸出特征圖的大小為h×w×c2/g。結(jié)果拼接以后,得到的輸出特征圖的大小為h×w×c2。則分組卷積層的參數(shù)量S滿足:
(6)
比較式(5)和式(6)可以看出,標(biāo)準(zhǔn)卷積參數(shù)量為分組卷積參數(shù)量的g倍。采用分組卷積的方法可以起到壓縮參數(shù)數(shù)量的作用。
圖3所示為標(biāo)準(zhǔn)卷積與分組卷積結(jié)構(gòu)圖,其中圖3(a)為標(biāo)準(zhǔn)卷積結(jié)構(gòu),圖3(b)為分組卷積結(jié)構(gòu)。
圖3 標(biāo)準(zhǔn)卷積與分組卷積結(jié)構(gòu)
全局平均池化算法是對最后一層特征圖進(jìn)行整張圖的一個均值池化操作,每張?zhí)卣鲌D經(jīng)過均值池化后形成一個特征點(diǎn),所有特征點(diǎn)組成的特征向量被送入分類層中進(jìn)行分類。圖4為全連接層和全局平均池化層的結(jié)構(gòu)示意圖,通過采用全局平均池化層代替?zhèn)鹘y(tǒng)卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)中所有全連接層的方法可以大幅壓縮模型的大小,減少參數(shù)數(shù)量,從而減少存儲與計算的開銷。
圖4 全連接層和全局平均池化層結(jié)構(gòu)圖
本文將上述模型參數(shù)壓縮方法應(yīng)用于LeNet5和AlexNet模型,形成如圖5和圖6所示的模型架構(gòu)。相比而言,壓縮后的模型架構(gòu)更簡單且參數(shù)量大幅度減少。
圖5 壓縮后的LeNet5模型架構(gòu)
圖6 壓縮后的AlexNet模型架構(gòu)
為了解決模型收斂速度慢、訓(xùn)練時間長的問題,本文在模型訓(xùn)練過程中使用了BN算法。BN(Batch Normalization)是批規(guī)范化的簡稱[22],通過將輸出信號規(guī)范化來加快網(wǎng)絡(luò)的收斂速度,提高網(wǎng)絡(luò)的穩(wěn)定性。
BN算法的快速收斂性解決了梯度下降法需要人為調(diào)參而導(dǎo)致浪費(fèi)大量時間的問題,通過選擇適當(dāng)?shù)膶W(xué)習(xí)率,使得訓(xùn)練速度快速增長。
本文實(shí)驗(yàn)平臺采用聯(lián)想筆記本電腦,運(yùn)行環(huán)境為Win10 64位操作系統(tǒng)。采用MINST手寫數(shù)字?jǐn)?shù)據(jù)集以及CIFAR-10數(shù)據(jù)集作為模型的訓(xùn)練測試數(shù)據(jù)集。采用Pytroch深度學(xué)習(xí)算法網(wǎng)絡(luò)框架進(jìn)行訓(xùn)練。
3.2.1 LeNet5模型壓縮方案
LeNet5網(wǎng)絡(luò)模型參數(shù)量只與卷積層和全連接層有關(guān)。本文設(shè)計4種模型壓縮方案并分別利用MNIST手寫數(shù)字?jǐn)?shù)據(jù)集和CICAR-10數(shù)據(jù)集進(jìn)行對比實(shí)驗(yàn)。由于MNIST數(shù)據(jù)集訓(xùn)練樣本和測試樣本均為28×28,故在采用MNIST數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)時需要將輸入層改為28×28。
方案1對LeNet5的第二層卷積層進(jìn)行分組卷積,組數(shù)為2。方案2對LeNet5的第一層卷積層進(jìn)行卷積拆分,用2個3×3的卷積層替代一個5×5的卷積層以減少卷積層的參數(shù)數(shù)量。方案3通過增加一個1×1的卷積層以及全局平均池化層來代替LeNet5的全連接層。方案4為方案1、方案2和方案3的組合。LeNet5及壓縮模型的架構(gòu)參數(shù)對比如表1所示,表中的Conv為卷積層的縮寫,F(xiàn)C為全連接層的縮寫,GAP為全局平均池化層的縮寫,后綴數(shù)字表示層的序號。
表1 LeNet5及壓縮模型的架構(gòu)參數(shù)對比
第一層卷積層采用卷積拆分的方法壓縮了卷積核的大小,減少了卷積層的參數(shù)量,但是參數(shù)減少的效果并不明顯。第二層卷積層采用分組卷積的方法減少輸入特征圖的數(shù)量,雖然參數(shù)總量減少不多,但該卷積層的參數(shù)量壓縮了2倍。因此分組卷積方法適于推廣應(yīng)用到具有多層卷積層的深度卷積神經(jīng)網(wǎng)絡(luò)中。而通過增加一個1×1的卷積層以及全局平均池化層來代替LeNet5的全連接層,則大幅度降低了卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量。去除全連接層成為卷積神經(jīng)網(wǎng)絡(luò)發(fā)展的趨勢。
方案4為方案1、方案2和方案3的組合。通過使用組合壓縮方法對LeNet5模型進(jìn)行最大壓縮后,參數(shù)規(guī)模大幅降低。
3.2.2 LeNet5模型訓(xùn)練
在LeNet5采用MNIST數(shù)據(jù)集進(jìn)行對比實(shí)驗(yàn)的訓(xùn)練中,均采用隨機(jī)梯度下降算法(SGD),設(shè)置的學(xué)習(xí)速率為0.15,訓(xùn)練批尺寸設(shè)置為200,即每次從訓(xùn)練集中隨機(jī)抽取200張圖片用于神經(jīng)網(wǎng)絡(luò)一次迭代的參數(shù)更新,迭代次數(shù)設(shè)置為1000,需要更新1000次神經(jīng)網(wǎng)絡(luò)參數(shù)。另外訓(xùn)練完畢后,進(jìn)行測試時設(shè)置測試組數(shù)為50,每組隨機(jī)抽取1000張圖片,計算50組測試結(jié)果準(zhǔn)確度平均值,可較為客觀地反映出模型在測試集上的效果。模型壓縮前后的卷積網(wǎng)絡(luò)進(jìn)行訓(xùn)練過程如下。
對LeNet5模型訓(xùn)練迭代次數(shù)與準(zhǔn)確率變化曲線如圖7所示,測試準(zhǔn)確度平均值達(dá)到了98.8%。
圖7 LeNet5訓(xùn)練過程及測試結(jié)果
對壓縮后的卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,收斂速度分析如圖8所示。當(dāng)?shù)螖?shù)達(dá)到400次時,訓(xùn)練的模型基本完成收斂,因此,在迭代次數(shù)為0~400的區(qū)間內(nèi)對訓(xùn)練模型的收斂速度進(jìn)行分析。從收斂速度分析圖中可以清楚的看到,用全局平均池化層代替全連接層,模型收斂速度變慢,增加了模型訓(xùn)練的時間,但是該方法大幅壓縮了參數(shù)量,在卷積神經(jīng)網(wǎng)絡(luò)推理過程,可以減少硬件存儲資源以及計算資源的消耗。
圖8 訓(xùn)練模型的收斂速度分析
利用MNIST數(shù)據(jù)集測試樣本對壓縮后的模型架構(gòu)進(jìn)行測試,方案1壓縮模型測試準(zhǔn)確度平均值達(dá)到了98.1%,方案2壓縮模型測試準(zhǔn)確度平均值達(dá)到了98.2%。方案3壓縮模型測試準(zhǔn)確度平均值達(dá)到了97.8%,方案4壓縮模型測試準(zhǔn)確度平均值達(dá)到了97.0%。
在LeNet5采用CIFAR-10數(shù)據(jù)集進(jìn)行對比實(shí)驗(yàn)的訓(xùn)練中,均采用隨機(jī)梯度下降算法,設(shè)置的學(xué)習(xí)速率為0.01,訓(xùn)練批尺寸設(shè)置為64,迭代次數(shù)設(shè)置為200,另外訓(xùn)練完畢后,進(jìn)行測試時設(shè)置測試組數(shù)為200,每組隨機(jī)抽取10000張圖片,計算200組測試結(jié)果準(zhǔn)確度平均值。
壓縮模型為LeNet5采用方案4使用組合壓縮方法進(jìn)行最大壓縮后的模型。LeNet5及壓縮模型訓(xùn)練迭代次數(shù)與準(zhǔn)確率變化曲線如圖9所示,LeNet5測試準(zhǔn)確度平均值達(dá)到了63.95%。而壓縮模型的測試準(zhǔn)確度平均值達(dá)到了59.29%。
從圖9可以看到采用CIFAR-10數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)的LeNet5及其壓縮模型的測試準(zhǔn)確度平均值低于MNIST數(shù)據(jù)集,這是由于LeNet5對較為復(fù)雜的圖片識別準(zhǔn)確度不高。但是通過對比壓縮前后的LeNet5模型訓(xùn)練測試結(jié)果可以看出,在大幅降低參數(shù)數(shù)量的情況下,準(zhǔn)確度僅下降了4.66個百分點(diǎn),表明壓縮方法的有效性。
(a) LeNet5 損失函數(shù)變化曲線
3.3.1 AlexNet模型壓縮方案
與LeNet5模型類似,AlexNet模型參數(shù)量只與卷積層和全連接層有關(guān)。本文設(shè)計模型壓縮方案并利用CIFAR-10數(shù)據(jù)集進(jìn)行對比實(shí)驗(yàn)。
由于AlexNet模型采用3×3的卷積核,因此不必采用卷積拆分的方法。方案5采用分組卷積以及全局平均池化層代替全連接層的方法,在AlexNet模型的基礎(chǔ)上,對第2層到第5層共計4層卷積層進(jìn)行分組卷積,組數(shù)為2。同時,采用全局平均池化層代替AlexNet的前2層全連接層。AlexNet及壓縮模型的架構(gòu)參數(shù)對比如表2所示,表中C為卷積層縮寫,F(xiàn)為全連接層縮寫,G為全局平均池化層縮寫,后綴數(shù)字表示層的序號。
表2 AlexNet及壓縮模型的架構(gòu)參數(shù)對比
3.3.2 AlexNet模型訓(xùn)練
在AlexNet對比實(shí)驗(yàn)的訓(xùn)練中,均采用隨機(jī)梯度下降算法,設(shè)置的學(xué)習(xí)速率為0.001,訓(xùn)練批尺寸設(shè)置為500,迭代次數(shù)設(shè)置為200。另外進(jìn)行測試時設(shè)置測試組數(shù)為200,每組隨機(jī)抽取10000張圖片,計算200組測試結(jié)果準(zhǔn)確度平均值。
AlexNet及壓縮模型訓(xùn)練迭代次數(shù)與準(zhǔn)確率變化曲線如圖10所示,AlexNet測試準(zhǔn)確度平均值達(dá)到了74.43%。而壓縮模型的測試準(zhǔn)確度平均值達(dá)到了81.15%,測試準(zhǔn)確率平均值比ALexNet模型提高了6.72個百分點(diǎn)。
(a) AlexNet 損失函數(shù)變化曲線
將LeNet5和AlexNet以及對應(yīng)的壓縮模型方案進(jìn)行對比如表3所示,其中,LeNet5-M及方案1~方案4均為采用MNIST數(shù)據(jù)集的測試結(jié)果,方案1、方案2、方案3各為LeNet5采用一種模型參數(shù)壓縮方法的測試結(jié)果,方案4為LeNet5采用3種模型參數(shù)壓縮方法組合的測試結(jié)果。LeNet5-C及方案6均為采用CIFAR-10數(shù)據(jù)集的測試結(jié)果,方案6為LeNet5采用3種模型參數(shù)壓縮方法組合的測試結(jié)果。方案5為AlexNet采用2種模型參數(shù)壓縮方法組合的測試結(jié)果。
表3 壓縮模型的參數(shù)壓縮率及準(zhǔn)確率對比
從表3可以看出,在對LeNet5模型進(jìn)行最大程度壓縮后訓(xùn)練模型的準(zhǔn)確率下降不多,而且參數(shù)量大幅度減少,僅為壓縮前模型參數(shù)量的2.3%。而對AlexNet進(jìn)行壓縮后,參數(shù)規(guī)模僅為壓縮前的4.9%,識別準(zhǔn)確率提高了6.72個百分點(diǎn)。
本文提出了卷積拆分、分組卷積以及全局平均池化層代替全連接層的模型壓縮方法,并應(yīng)用于LeNet5和AlexNet算法分別進(jìn)行對比實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,通過使用組合壓縮方法對LeNet5模型進(jìn)行最大壓縮后,參數(shù)規(guī)??蓽p少97%,識別準(zhǔn)確率降低了不到2個百分點(diǎn),對AlexNet模型進(jìn)行壓縮后,參數(shù)規(guī)??蓽p少95%,識別準(zhǔn)確率提高了6.72個百分點(diǎn),在保證較高的識別準(zhǔn)確率的前提下,大幅降低了參數(shù)規(guī)模。