黃 聰,常 滔,譚 虎,呂紹和,王曉東+
1.國防科技大學 并行與分布處理重點實驗室,長沙 410073
2.武警新疆總隊,烏魯木齊 830063
自AlexNet[1]奪得ILSVRC2012年冠軍以來,深度學習逐漸興起,在目標檢測[2-4]、語音識別[5]、圖像描述生成[6]和機器翻譯[7]等多個AI任務中取得極大的進展。這些進展進一步促進深度學習蓬勃發展,從AlexNet到 VGG[6]再到 GoogleNet[7],趨勢是神經網絡的層數越來越多,模型規模越來越大,計算量(浮點數)和各項開銷也隨之上升。表1和表2顯示了各個網絡應用于具體任務時硬件資源開銷和模型運行時長都很大。

Table 1 Test of several standard networks based on face recognition表1 經典網絡在人臉識別任務上的測試
當前網絡是重型的,難以應用到實際生活中對智能需求很大,實時性要求高的移動終端[8-9],因此網絡的輕型化逐漸成為人們研究的熱點問題。
深度網絡輕型化,即在確保網絡性能的前提下盡可能減小網絡各項開銷,已成為深度學習重要的研究方向。人們或是在已有網絡上進行刪剪,如最優節點消除(optimal brain damage)[10]與最優節點剪切(optimal brain surgeon)[11],剪除不重要的權值,二者通過不同方法計算對網絡性能影響最小的點;或是希望通過減小計算量對前向傳播過程進行加速,比如奇異值分解(singular value decomposition,SVD)方法將權值矩陣分解為向量之間的乘積[12-15],以減少計算量和參數量;或是針對卷積神經網絡(convolutional neural network,CNN)的卷積層做加速,比如FFT方圖,這種方法不能減小計算量,但是可以加速計算。有人提出可分卷積的概念,將傳統意義上的標準卷積分為深度卷積和點卷積,有效減小了計算量[5,8]。還有專門針對全連接層的壓縮方法,如density-diversity[16-18]方法,它提出了density、diversity的概念,density是sparsity的對應詞,希望weight盡量多的零;diversity是對quantization而言,希望值盡可能趨同。這種方法可以使得模型易于存儲和壓縮。

Table 2 Costs of deep neural networks on typical tasks表2 典型任務中深度神經網絡的各項開銷
除了在原有網絡上提出修剪或是加速的方法外,人們還提出了許多新的網絡或是新的訓練方法,如shallow網絡,它的特點是深度小但是很寬,缺點在于難以設計和訓練;此外還有人提出二值化網絡[19],將32位浮點數的參數改為二值(-1,+1)表示,從而大大減小網絡存儲空間;還有工作提出網絡訓練只訓練一部分參數,其余的參數通過已有參數進行“猜測”。還有人進行了對比實驗,論證pooling層對神經網絡的意義,結論是使用大步長的卷積層取代pooling層得到的網絡性能也很好[20]。
本文的思路和貢獻如下:考慮到經典神經網絡的設計中,計算主要集中在卷積層而參數主要是在全連接層,對卷積層做加速,將可分卷積和卷積層替代采樣層的思路結合起來,在原有基礎上構建新的網絡,探索了可分卷積在深層網絡不同卷積層的實際效果,實驗表明分段卷積更適用于更深層的卷積層,并且在剪去采樣層后運行時間有了明顯下降而模型性能保持不變;對全連接層單元做剪枝[21],主要思想是利用權值矩陣中權值向量之間的相似性合并,剪除全連接層的神經元。還提出了一個超參數α以控制剪枝數目。實驗結果表明,本文方法有效減少了運行時間和參數量,能夠剪去超過90%的全連接層單元,而模型性能幾乎沒有下降。
卷積是神經網絡中必不可少的組件,其意義在于提取圖像各個層次上的特征,卷積神經網絡以卷積命名,可見其重要性。經過發展,現在一個標準卷積通常包括一個卷積層、一個采樣層和一個正則化層。
在標準卷積中,輸入是多通道的特征圖,輸出也是多通道的特征圖,輸出通道數由濾波器的個數決定。設卷積層有K個輸入通道和L個輸出通道,輸入為X,輸出為Y,卷積核記為H。卷積核在卷積計算時與輸入特征圖做滑動窗口的點乘。

式中,*表示卷積操作。
設輸入特征圖大小為Gf×Gf,卷積核大小為Gn×Gn,則卷積層每個樣本做一次前向傳播時的計算量為:

在輸入維度保持不變時,若要加速計算,減少計算量,一種行之有效的思路是將標準卷積改為可分卷積,即使用一個深度卷積加一個點卷積來代替標準卷積。因為標準卷積的計算過程其實是包含兩個操作:(1)對輸入的特征圖進行濾波操作(提取特征);(2)將經過濾波得到的特征圖進行組合。這里,深度卷積是對輸入的每一張特征圖濾波,點卷積則是對濾波結果進行組合。
對深度卷積而言,輸入通道為K,卷積深度為D,新的卷積核大小為Gn′×Gn′,則輸出通道為K×D;對點卷積而言,輸入通道為K×D,輸出通道為L,并且滿足:

當D=1,卷積步長為1(保持輸入輸出特征圖的大小不變)時,兩次卷積操作計算量:

則分解卷積核之后的計算量與分解前的計算量之比為:

可見,輸出通道L較大時,這種方法能有效減小參數量。
采樣層常見于神經網絡中,通常構建于卷積層之后,常見采樣有平均值采樣、極大值采樣和極小值采樣。設置采樣層是出于這樣的思路:特征圖在經過卷積層后提取了諸多特征,特征量很大,會使得計算十分耗時,而圖像的相鄰像素點有相關性,間隔幾個點取一個點,得到的圖片相對于原圖片尺寸下降了,計算量大大下降,但是能保留大部分信息。
一直以來都有工作在研究采樣層在神經網絡中的作用。已被證實的作用包括:對特征圖降維,減小計算量;減小提取的特征數,防止過擬合。
研究發現使用全卷積網絡也能獲得很好的實驗性能,卷積輸出包含了局部信息,而采樣則是直接丟棄了部分信息,二者孰優孰劣難以理論證明[20],為了減小計算量,現有的Xception、MobileNets等網絡已經直接用步長為2的卷積層代替采樣層。
在實驗中將一個標準卷積(含一個卷積層和一個采樣層)改為一個步長為2的深度卷積和一個點卷積。實驗顯示運算時間明顯下降。
考慮最簡單的全連接層,可以看作是一個帶有N個隱含層單元的多層感知機。如圖1,輸入為X,權值矩陣為[W1,W2,W3,W4],中間隱含層單元值:

設隱含層到輸出的權重為[a1,a2,a3,a4],激活函數為h,忽略偏置,則輸出Z可以表示為:

當W1=W4時,左圖可以轉換為右圖,隱含層單元被去除了,相應輸出為:

相應地,考慮一般情況,隱含層有n個節點時:

此時假設Wi和Wj相等,可以進行合并,則:

n變為(n-1),說明中間隱含層單元減少了一個,此時,新的網絡參數量和計算量都減少了。
當Wi與Wj相差很小時,可以近似看作是相等,那么如何判定它們的相近程度呢?從結果出發,要求這種權值向量的合并要使得上述兩個式子差值最小。由式(9)和式(10)可得:

神經網絡中常用的激活函數為Relu和Sigmoid,通過推導易知Relu導數值不大于1,而Sigmoid函數導數值不大于1/4,因此:

由式(11)~(13)可以得到:


Fig.1 Multi-layer perceptron with a hidden layer圖1 帶有一個隱含層的多層感知機
根據柯西-施瓦茨不等式,由式(14)得:

X是輸入,和網絡結構無關,因此,直接設Si,j用以表示差異程度:

對于十分類問題,最后一個全連接層為10層,那么對于倒數第二個全連接層而言,輸出有10個。每個輸出單元都有一個差異值矩陣Si,j,針對每個Si,j,選取一個(i,j)對,對每個Si,j,計算Loss,其中K是S矩陣編號,n是S矩陣個數(十分類中為10),而后保留Loss最小的(i,j)對。

3.3 節詳細敘述了網絡剪枝的原理,但是針對一個網絡,全連接層單元數是不定的,剪去多少單元合適呢?設定了一個超參數α用以控制網絡剪枝的比例1)本節提出了一種超參數用以控制剪枝單元數,需要說明的是,為了使實驗結果更加清晰明確,在實驗中僅僅對這種全局參數進行了嘗試性的使用而非在全部實驗組中采用。。
單元合并的基礎在于兩個權值向量的相似,即:

不考慮X,當i、j位置上的權值向量十分接近時,上式成立。如何度量i、j位置的權值向量接近程度呢?計算兩向量的二階范數平方除以j位置向量的二階范數,作為度量方式。

設定超參數α為閾值Domain vaule。完整算法描述如下:
#輸入是倒數第二個全連接層的權值矩陣A,A由n個權值向量組成;最后兩個全連接層的權值矩陣B,十分類問題中由10個權值向量組成。

為了使實驗具有代表性,采用了標準的mnist手寫體數字圖片集和cifar10圖片集。mnist包含60 000張訓練集和10 000張測試集,cifar10是一個經典的彩色圖像集,包含60 000張圖片共分為10類。
實驗所用網絡結構如表3和表4所示,來源是tensorflow官網的標準簡單卷積神經網絡和進階神經網絡。
針對mnist數據集,由于圖片尺寸小,內容簡單,因此只設計了全連接層的剪枝實驗如表5。因篇幅有限表中只列出了部分剪枝結果。

Table 3 Pruning network structure of mnist表3 mnist剪枝網絡結構

Table 4 Full-connected layer pruning and speeding network structure of cifar10表4 cifar10卷積加速和全連接剪枝網絡結構

Table 5 Full-connected layer pruning results of mnist表5 mnist網絡全連接層剪枝(部分)
從表5中可以看出,在剪去800個單元后,模型fine-tune后仍有99%以上的準確率。在準確率沒有明顯下降的情況下,通過計算可以得到,參數量減少了76.83%,模型壓縮了4.4倍。
針對cifar10數據集,做了大量的對比實驗,因篇幅所限僅列出部分結果。表6將原網絡結構作如下改動:卷積層改為步長為2的可分卷積,除pooling層;第二列是最后準確率沒有明顯下降時的剪枝數;第三列是最后準確率;第四列是每次迭代前向運行時間。

Table 6 Speeding and pruning results of cifar10表6 cifar10網絡加速和剪枝實驗
從表6可以看到,就cifar10網絡結構而言,將第二個卷積層改為可分卷積并去除pooling層時可以有效減小運行時間,缺點是準確率下降較多;將第一個卷積層改為可分卷積時,網絡的準確率沒有明顯下降,模型的運行時間也沒有下降(即網絡運行消耗沒有減小),綜合最終準確率和運行時間,將最后一個卷積層分解并去除采樣層,而后剪除全連接層192個單元中的180個后取得相對最優的結果。
本文在mnist和cifar10數據集上對標準的卷積神經網絡做了大量實驗。可以得出如下結論:
(1)全連接層有大量冗余單元,剪枝的空間很大,在多個網絡模型中都剪去全連接90%以上的單元,而性能沒有明顯下降;
(2)卷積層的加速并不適用于所有的卷積層,實驗中卷積加速方法適用于深層的卷積層而非淺層的;
(3)每次剪枝后fine-tuned的準確率都要相對于剪枝前有些許提升,這可以看作是訓練的trick;
(4)網絡剪枝后的運行時間并沒有明顯下降,可見神經網絡中的計算大部分在卷積層。
卷積層可以看作是特殊的全連接層,只是在卷積的過程中卷積核只與卷積區域相連,與特征圖其他區域的點的連接權值為0,那么這種基于相似性的權值合并能否應用于卷積層的剪枝呢?理論上是可行的,計劃在下一步工作中加以證明和實現。
實驗中使用的網絡和數據集都是標準數據集,但是網絡相對于VGG等網絡層數還太少(接近AlexNet),下一步工作中采用AlexNet網絡和cifar-100數據集做更多的對比實驗。