黃 聰,常 滔,譚 虎,呂紹和,王曉東+
1.國防科技大學(xué) 并行與分布處理重點(diǎn)實(shí)驗(yàn)室,長沙 410073
2.武警新疆總隊(duì),烏魯木齊 830063
自AlexNet[1]奪得ILSVRC2012年冠軍以來,深度學(xué)習(xí)逐漸興起,在目標(biāo)檢測[2-4]、語音識別[5]、圖像描述生成[6]和機(jī)器翻譯[7]等多個AI任務(wù)中取得極大的進(jìn)展。這些進(jìn)展進(jìn)一步促進(jìn)深度學(xué)習(xí)蓬勃發(fā)展,從AlexNet到 VGG[6]再到 GoogleNet[7],趨勢是神經(jīng)網(wǎng)絡(luò)的層數(shù)越來越多,模型規(guī)模越來越大,計(jì)算量(浮點(diǎn)數(shù))和各項(xiàng)開銷也隨之上升。表1和表2顯示了各個網(wǎng)絡(luò)應(yīng)用于具體任務(wù)時硬件資源開銷和模型運(yùn)行時長都很大。
Table 1 Test of several standard networks based on face recognition表1 經(jīng)典網(wǎng)絡(luò)在人臉識別任務(wù)上的測試
當(dāng)前網(wǎng)絡(luò)是重型的,難以應(yīng)用到實(shí)際生活中對智能需求很大,實(shí)時性要求高的移動終端[8-9],因此網(wǎng)絡(luò)的輕型化逐漸成為人們研究的熱點(diǎn)問題。
深度網(wǎng)絡(luò)輕型化,即在確保網(wǎng)絡(luò)性能的前提下盡可能減小網(wǎng)絡(luò)各項(xiàng)開銷,已成為深度學(xué)習(xí)重要的研究方向。人們或是在已有網(wǎng)絡(luò)上進(jìn)行刪剪,如最優(yōu)節(jié)點(diǎn)消除(optimal brain damage)[10]與最優(yōu)節(jié)點(diǎn)剪切(optimal brain surgeon)[11],剪除不重要的權(quán)值,二者通過不同方法計(jì)算對網(wǎng)絡(luò)性能影響最小的點(diǎn);或是希望通過減小計(jì)算量對前向傳播過程進(jìn)行加速,比如奇異值分解(singular value decomposition,SVD)方法將權(quán)值矩陣分解為向量之間的乘積[12-15],以減少計(jì)算量和參數(shù)量;或是針對卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)的卷積層做加速,比如FFT方圖,這種方法不能減小計(jì)算量,但是可以加速計(jì)算。有人提出可分卷積的概念,將傳統(tǒng)意義上的標(biāo)準(zhǔn)卷積分為深度卷積和點(diǎn)卷積,有效減小了計(jì)算量[5,8]。還有專門針對全連接層的壓縮方法,如density-diversity[16-18]方法,它提出了density、diversity的概念,density是sparsity的對應(yīng)詞,希望weight盡量多的零;diversity是對quantization而言,希望值盡可能趨同。這種方法可以使得模型易于存儲和壓縮。
Table 2 Costs of deep neural networks on typical tasks表2 典型任務(wù)中深度神經(jīng)網(wǎng)絡(luò)的各項(xiàng)開銷
除了在原有網(wǎng)絡(luò)上提出修剪或是加速的方法外,人們還提出了許多新的網(wǎng)絡(luò)或是新的訓(xùn)練方法,如shallow網(wǎng)絡(luò),它的特點(diǎn)是深度小但是很寬,缺點(diǎn)在于難以設(shè)計(jì)和訓(xùn)練;此外還有人提出二值化網(wǎng)絡(luò)[19],將32位浮點(diǎn)數(shù)的參數(shù)改為二值(-1,+1)表示,從而大大減小網(wǎng)絡(luò)存儲空間;還有工作提出網(wǎng)絡(luò)訓(xùn)練只訓(xùn)練一部分參數(shù),其余的參數(shù)通過已有參數(shù)進(jìn)行“猜測”。還有人進(jìn)行了對比實(shí)驗(yàn),論證pooling層對神經(jīng)網(wǎng)絡(luò)的意義,結(jié)論是使用大步長的卷積層取代pooling層得到的網(wǎng)絡(luò)性能也很好[20]。
本文的思路和貢獻(xiàn)如下:考慮到經(jīng)典神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)中,計(jì)算主要集中在卷積層而參數(shù)主要是在全連接層,對卷積層做加速,將可分卷積和卷積層替代采樣層的思路結(jié)合起來,在原有基礎(chǔ)上構(gòu)建新的網(wǎng)絡(luò),探索了可分卷積在深層網(wǎng)絡(luò)不同卷積層的實(shí)際效果,實(shí)驗(yàn)表明分段卷積更適用于更深層的卷積層,并且在剪去采樣層后運(yùn)行時間有了明顯下降而模型性能保持不變;對全連接層單元做剪枝[21],主要思想是利用權(quán)值矩陣中權(quán)值向量之間的相似性合并,剪除全連接層的神經(jīng)元。還提出了一個超參數(shù)α以控制剪枝數(shù)目。實(shí)驗(yàn)結(jié)果表明,本文方法有效減少了運(yùn)行時間和參數(shù)量,能夠剪去超過90%的全連接層單元,而模型性能幾乎沒有下降。
卷積是神經(jīng)網(wǎng)絡(luò)中必不可少的組件,其意義在于提取圖像各個層次上的特征,卷積神經(jīng)網(wǎng)絡(luò)以卷積命名,可見其重要性。經(jīng)過發(fā)展,現(xiàn)在一個標(biāo)準(zhǔn)卷積通常包括一個卷積層、一個采樣層和一個正則化層。
在標(biāo)準(zhǔn)卷積中,輸入是多通道的特征圖,輸出也是多通道的特征圖,輸出通道數(shù)由濾波器的個數(shù)決定。設(shè)卷積層有K個輸入通道和L個輸出通道,輸入為X,輸出為Y,卷積核記為H。卷積核在卷積計(jì)算時與輸入特征圖做滑動窗口的點(diǎn)乘。
式中,*表示卷積操作。
設(shè)輸入特征圖大小為Gf×Gf,卷積核大小為Gn×Gn,則卷積層每個樣本做一次前向傳播時的計(jì)算量為:
在輸入維度保持不變時,若要加速計(jì)算,減少計(jì)算量,一種行之有效的思路是將標(biāo)準(zhǔn)卷積改為可分卷積,即使用一個深度卷積加一個點(diǎn)卷積來代替標(biāo)準(zhǔn)卷積。因?yàn)闃?biāo)準(zhǔn)卷積的計(jì)算過程其實(shí)是包含兩個操作:(1)對輸入的特征圖進(jìn)行濾波操作(提取特征);(2)將經(jīng)過濾波得到的特征圖進(jìn)行組合。這里,深度卷積是對輸入的每一張?zhí)卣鲌D濾波,點(diǎn)卷積則是對濾波結(jié)果進(jìn)行組合。
對深度卷積而言,輸入通道為K,卷積深度為D,新的卷積核大小為Gn′×Gn′,則輸出通道為K×D;對點(diǎn)卷積而言,輸入通道為K×D,輸出通道為L,并且滿足:
當(dāng)D=1,卷積步長為1(保持輸入輸出特征圖的大小不變)時,兩次卷積操作計(jì)算量:
則分解卷積核之后的計(jì)算量與分解前的計(jì)算量之比為:
可見,輸出通道L較大時,這種方法能有效減小參數(shù)量。
采樣層常見于神經(jīng)網(wǎng)絡(luò)中,通常構(gòu)建于卷積層之后,常見采樣有平均值采樣、極大值采樣和極小值采樣。設(shè)置采樣層是出于這樣的思路:特征圖在經(jīng)過卷積層后提取了諸多特征,特征量很大,會使得計(jì)算十分耗時,而圖像的相鄰像素點(diǎn)有相關(guān)性,間隔幾個點(diǎn)取一個點(diǎn),得到的圖片相對于原圖片尺寸下降了,計(jì)算量大大下降,但是能保留大部分信息。
一直以來都有工作在研究采樣層在神經(jīng)網(wǎng)絡(luò)中的作用。已被證實(shí)的作用包括:對特征圖降維,減小計(jì)算量;減小提取的特征數(shù),防止過擬合。
研究發(fā)現(xiàn)使用全卷積網(wǎng)絡(luò)也能獲得很好的實(shí)驗(yàn)性能,卷積輸出包含了局部信息,而采樣則是直接丟棄了部分信息,二者孰優(yōu)孰劣難以理論證明[20],為了減小計(jì)算量,現(xiàn)有的Xception、MobileNets等網(wǎng)絡(luò)已經(jīng)直接用步長為2的卷積層代替采樣層。
在實(shí)驗(yàn)中將一個標(biāo)準(zhǔn)卷積(含一個卷積層和一個采樣層)改為一個步長為2的深度卷積和一個點(diǎn)卷積。實(shí)驗(yàn)顯示運(yùn)算時間明顯下降。
考慮最簡單的全連接層,可以看作是一個帶有N個隱含層單元的多層感知機(jī)。如圖1,輸入為X,權(quán)值矩陣為[W1,W2,W3,W4],中間隱含層單元值:
設(shè)隱含層到輸出的權(quán)重為[a1,a2,a3,a4],激活函數(shù)為h,忽略偏置,則輸出Z可以表示為:
當(dāng)W1=W4時,左圖可以轉(zhuǎn)換為右圖,隱含層單元被去除了,相應(yīng)輸出為:
相應(yīng)地,考慮一般情況,隱含層有n個節(jié)點(diǎn)時:
此時假設(shè)Wi和Wj相等,可以進(jìn)行合并,則:
n變?yōu)?n-1),說明中間隱含層單元減少了一個,此時,新的網(wǎng)絡(luò)參數(shù)量和計(jì)算量都減少了。
當(dāng)Wi與Wj相差很小時,可以近似看作是相等,那么如何判定它們的相近程度呢?從結(jié)果出發(fā),要求這種權(quán)值向量的合并要使得上述兩個式子差值最小。由式(9)和式(10)可得:
神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù)為Relu和Sigmoid,通過推導(dǎo)易知Relu導(dǎo)數(shù)值不大于1,而Sigmoid函數(shù)導(dǎo)數(shù)值不大于1/4,因此:
由式(11)~(13)可以得到:
Fig.1 Multi-layer perceptron with a hidden layer圖1 帶有一個隱含層的多層感知機(jī)
根據(jù)柯西-施瓦茨不等式,由式(14)得:
X是輸入,和網(wǎng)絡(luò)結(jié)構(gòu)無關(guān),因此,直接設(shè)Si,j用以表示差異程度:
對于十分類問題,最后一個全連接層為10層,那么對于倒數(shù)第二個全連接層而言,輸出有10個。每個輸出單元都有一個差異值矩陣Si,j,針對每個Si,j,選取一個(i,j)對,對每個Si,j,計(jì)算Loss,其中K是S矩陣編號,n是S矩陣個數(shù)(十分類中為10),而后保留Loss最小的(i,j)對。
3.3 節(jié)詳細(xì)敘述了網(wǎng)絡(luò)剪枝的原理,但是針對一個網(wǎng)絡(luò),全連接層單元數(shù)是不定的,剪去多少單元合適呢?設(shè)定了一個超參數(shù)α用以控制網(wǎng)絡(luò)剪枝的比例1)本節(jié)提出了一種超參數(shù)用以控制剪枝單元數(shù),需要說明的是,為了使實(shí)驗(yàn)結(jié)果更加清晰明確,在實(shí)驗(yàn)中僅僅對這種全局參數(shù)進(jìn)行了嘗試性的使用而非在全部實(shí)驗(yàn)組中采用。。
單元合并的基礎(chǔ)在于兩個權(quán)值向量的相似,即:
不考慮X,當(dāng)i、j位置上的權(quán)值向量十分接近時,上式成立。如何度量i、j位置的權(quán)值向量接近程度呢?計(jì)算兩向量的二階范數(shù)平方除以j位置向量的二階范數(shù),作為度量方式。
設(shè)定超參數(shù)α為閾值Domain vaule。完整算法描述如下:
#輸入是倒數(shù)第二個全連接層的權(quán)值矩陣A,A由n個權(quán)值向量組成;最后兩個全連接層的權(quán)值矩陣B,十分類問題中由10個權(quán)值向量組成。
為了使實(shí)驗(yàn)具有代表性,采用了標(biāo)準(zhǔn)的mnist手寫體數(shù)字圖片集和cifar10圖片集。mnist包含60 000張訓(xùn)練集和10 000張測試集,cifar10是一個經(jīng)典的彩色圖像集,包含60 000張圖片共分為10類。
實(shí)驗(yàn)所用網(wǎng)絡(luò)結(jié)構(gòu)如表3和表4所示,來源是tensorflow官網(wǎng)的標(biāo)準(zhǔn)簡單卷積神經(jīng)網(wǎng)絡(luò)和進(jìn)階神經(jīng)網(wǎng)絡(luò)。
針對mnist數(shù)據(jù)集,由于圖片尺寸小,內(nèi)容簡單,因此只設(shè)計(jì)了全連接層的剪枝實(shí)驗(yàn)如表5。因篇幅有限表中只列出了部分剪枝結(jié)果。
Table 3 Pruning network structure of mnist表3 mnist剪枝網(wǎng)絡(luò)結(jié)構(gòu)
Table 4 Full-connected layer pruning and speeding network structure of cifar10表4 cifar10卷積加速和全連接剪枝網(wǎng)絡(luò)結(jié)構(gòu)
Table 5 Full-connected layer pruning results of mnist表5 mnist網(wǎng)絡(luò)全連接層剪枝(部分)
從表5中可以看出,在剪去800個單元后,模型fine-tune后仍有99%以上的準(zhǔn)確率。在準(zhǔn)確率沒有明顯下降的情況下,通過計(jì)算可以得到,參數(shù)量減少了76.83%,模型壓縮了4.4倍。
針對cifar10數(shù)據(jù)集,做了大量的對比實(shí)驗(yàn),因篇幅所限僅列出部分結(jié)果。表6將原網(wǎng)絡(luò)結(jié)構(gòu)作如下改動:卷積層改為步長為2的可分卷積,除pooling層;第二列是最后準(zhǔn)確率沒有明顯下降時的剪枝數(shù);第三列是最后準(zhǔn)確率;第四列是每次迭代前向運(yùn)行時間。
Table 6 Speeding and pruning results of cifar10表6 cifar10網(wǎng)絡(luò)加速和剪枝實(shí)驗(yàn)
從表6可以看到,就cifar10網(wǎng)絡(luò)結(jié)構(gòu)而言,將第二個卷積層改為可分卷積并去除pooling層時可以有效減小運(yùn)行時間,缺點(diǎn)是準(zhǔn)確率下降較多;將第一個卷積層改為可分卷積時,網(wǎng)絡(luò)的準(zhǔn)確率沒有明顯下降,模型的運(yùn)行時間也沒有下降(即網(wǎng)絡(luò)運(yùn)行消耗沒有減?。?,綜合最終準(zhǔn)確率和運(yùn)行時間,將最后一個卷積層分解并去除采樣層,而后剪除全連接層192個單元中的180個后取得相對最優(yōu)的結(jié)果。
本文在mnist和cifar10數(shù)據(jù)集上對標(biāo)準(zhǔn)的卷積神經(jīng)網(wǎng)絡(luò)做了大量實(shí)驗(yàn)??梢缘贸鋈缦陆Y(jié)論:
(1)全連接層有大量冗余單元,剪枝的空間很大,在多個網(wǎng)絡(luò)模型中都剪去全連接90%以上的單元,而性能沒有明顯下降;
(2)卷積層的加速并不適用于所有的卷積層,實(shí)驗(yàn)中卷積加速方法適用于深層的卷積層而非淺層的;
(3)每次剪枝后fine-tuned的準(zhǔn)確率都要相對于剪枝前有些許提升,這可以看作是訓(xùn)練的trick;
(4)網(wǎng)絡(luò)剪枝后的運(yùn)行時間并沒有明顯下降,可見神經(jīng)網(wǎng)絡(luò)中的計(jì)算大部分在卷積層。
卷積層可以看作是特殊的全連接層,只是在卷積的過程中卷積核只與卷積區(qū)域相連,與特征圖其他區(qū)域的點(diǎn)的連接權(quán)值為0,那么這種基于相似性的權(quán)值合并能否應(yīng)用于卷積層的剪枝呢?理論上是可行的,計(jì)劃在下一步工作中加以證明和實(shí)現(xiàn)。
實(shí)驗(yàn)中使用的網(wǎng)絡(luò)和數(shù)據(jù)集都是標(biāo)準(zhǔn)數(shù)據(jù)集,但是網(wǎng)絡(luò)相對于VGG等網(wǎng)絡(luò)層數(shù)還太少(接近AlexNet),下一步工作中采用AlexNet網(wǎng)絡(luò)和cifar-100數(shù)據(jù)集做更多的對比實(shí)驗(yàn)。