CNN模型壓縮與加速算法綜述
XNOR-Net中一個(gè)典型的卷積單元如圖6所示,與傳統(tǒng)單元不同,各模塊的順序有了調(diào)整。為了減少二值化帶來(lái)的精度損失,對(duì)輸入數(shù)據(jù)首先進(jìn)行BN歸一化處理,BinActiv層用于對(duì)輸入做二值化,接著進(jìn)行二值化的卷積操作,最后進(jìn)行pooling。
本文引用地址:http://m.butianyuan.cn/article/201807/383798.htm圖5 BWN訓(xùn)練過(guò)程
圖6 傳統(tǒng)卷積單元與XNOR-Net卷積單元對(duì)比
3.3 實(shí)驗(yàn)結(jié)果
表5 ImageNet上二值網(wǎng)絡(luò)與AlexNet結(jié)果對(duì)比
與ALexNet相比,BWN網(wǎng)絡(luò)能夠達(dá)到精度基本不變甚至略好,XNOR-Net由于對(duì)輸入也做了二值化,性能稍降。
四、Distilling
Distilling算法是Hinton等人在論文Distilling the Knowledge in a Neural Network中提出的一種類似網(wǎng)絡(luò)遷移的學(xué)習(xí)算法。
4.1 基本思想
Distilling直譯過(guò)來(lái)即蒸餾,其基本思想是通過(guò)一個(gè)性能好的大網(wǎng)絡(luò)來(lái)教小網(wǎng)絡(luò)學(xué)習(xí),從而使得小網(wǎng)絡(luò)能夠具備跟大網(wǎng)絡(luò)一樣的性能,但蒸餾后的小網(wǎng)絡(luò)參數(shù)規(guī)模遠(yuǎn)遠(yuǎn)小于原始大網(wǎng)絡(luò),從而達(dá)到壓縮網(wǎng)絡(luò)的目的。
其中,訓(xùn)練小模型(distilled model)的目標(biāo)函數(shù)由兩部分組成
1) 與大模型(cumbersome model)的softmax輸出的交叉熵(cross entropy),稱為軟目標(biāo)(soft target)。其中,softmax的計(jì)算加入了超參數(shù)溫度T,用以控制輸出,計(jì)算公式變?yōu)?/p>
溫度T越大,輸出的分布越緩和,概率zi/T越小,熵越大,但若T過(guò)大,會(huì)導(dǎo)致較大熵引起的不確定性增加,增加了不可區(qū)分性。
至于為何要以soft target來(lái)計(jì)算損失,作者認(rèn)為,在分類問(wèn)題中,真值(groundtruth)是一個(gè)確定性的,即one-hot vector。以手寫(xiě)數(shù)字分類來(lái)說(shuō),對(duì)于一個(gè)數(shù)字3,它的label是3的概率是1,而是其他數(shù)值的概率是0,而對(duì)于soft target,它能表征label是3的概率,假如這個(gè)數(shù)字寫(xiě)的像5,還可以給出label是5的一定概率,從而提供更多信息,如
數(shù)字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
真值 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
軟目標(biāo) | 0 | 0 | 0 | 0.95 | 0 | 0.048 | 0.002 | 0 | 0 | 0 |
2)與真值(groundtruth)的交叉熵(T=1)
訓(xùn)練的損失為上述兩項(xiàng)損失的加權(quán)和,通常第二項(xiàng)要小很多。
4.2 實(shí)驗(yàn)結(jié)果
作者給出了在語(yǔ)音識(shí)別上的實(shí)驗(yàn)結(jié)果對(duì)比,如下表
表6 蒸餾模型與原始模型精度對(duì)比[8]
上表顯示,蒸餾后的模型的精確度和單字錯(cuò)誤率和用于產(chǎn)生軟目標(biāo)的10個(gè)模型的性能相當(dāng),小模型成功地學(xué)到了大模型的識(shí)別能力。
4.3 速度考量
Distilling的提出原先并非針對(duì)網(wǎng)絡(luò)加速,而最終計(jì)算的效率仍然取決于蒸餾模型的計(jì)算規(guī)模,但理論上蒸餾后的小模型相對(duì)原始大模型的計(jì)算速度在一定程度上會(huì)有提升,但速度提升的比例和性能維持的權(quán)衡是一個(gè)值得研究的方向。
五、MobileNet
MobileNet是由Google提出的針對(duì)移動(dòng)端部署的輕量級(jí)網(wǎng)絡(luò)架構(gòu)。考慮到移動(dòng)端計(jì)算資源受限以及速度要求嚴(yán)苛,MobileNet引入了傳統(tǒng)網(wǎng)絡(luò)中原先采用的group思想,即限制濾波器的卷積計(jì)算只針對(duì)特定的group中的輸入,從而大大降低了卷積計(jì)算量,提升了移動(dòng)端前向計(jì)算的速度。
5.1 卷積分解
MobileNet借鑒factorized convolution的思想,將普通卷積操作分成兩部分:
Depthwise Convolution
每個(gè)卷積核濾波器只針對(duì)特定的輸入通道進(jìn)行卷積操作,如下圖所示,其中M是輸入通道數(shù),DK是卷積核尺寸:
圖7 Depthwise Convolution
Depthwise convolution的計(jì)算復(fù)雜度為 DKDKMDFDF,其中DF是卷積層輸出的特征圖的大小。
Pointwise Convolution
采用1x1大小的卷積核將depthwise convolution層的多通道輸出進(jìn)行結(jié)合,如下圖,其中N是輸出通道數(shù):
圖8 Pointwise Convolution[
Pointwise Convolution的計(jì)算復(fù)雜度為 MNDFDF
上面兩步合稱depthwise separable convolution
標(biāo)準(zhǔn)卷積操作的計(jì)算復(fù)雜度為DKDKMNDFDF
因此,通過(guò)將標(biāo)準(zhǔn)卷積分解成兩層卷積操作,可以計(jì)算出理論上的計(jì)算效率提升比例:
對(duì)于3x3尺寸的卷積核來(lái)說(shuō),depthwise separable convolution在理論上能帶來(lái)約8~9倍的效率提升。
5.2 模型架構(gòu)
圖9 普通卷積單元與MobileNet 卷積單元對(duì)比
MobileNet的卷積單元如上圖所示,每個(gè)卷積操作后都接著一個(gè)BN操作和ReLU操作。在MobileNet中,由于3x3卷積核只應(yīng)用在depthwise convolution中,因此95%的計(jì)算量都集中在pointwise convolution 中的1x1卷積中。而對(duì)于caffe等采用矩陣運(yùn)算GEMM實(shí)現(xiàn)卷積的深度學(xué)習(xí)框架,1x1卷積無(wú)需進(jìn)行im2col操作,因此可以直接利用矩陣運(yùn)算加速庫(kù)進(jìn)行快速計(jì)算,從而提升了計(jì)算效率。
5.3 實(shí)驗(yàn)結(jié)果
表7 MobileNet與主流大模型在ImageNet上精度對(duì)比
上表顯示,MobileNet在保證精度不變的同時(shí),能夠有效地減少計(jì)算操作次數(shù)和參數(shù)量,使得在移動(dòng)端實(shí)時(shí)前向計(jì)算成為可能。
六、ShuffleNet
ShuffleNet是Face++今年提出了一篇用于移動(dòng)端前向部署的網(wǎng)絡(luò)架構(gòu)。ShuffleNet基于MobileNet的group思想,將卷積操作限制到特定的輸入通道。而與之不同的是,ShuffleNet將輸入的group進(jìn)行打散,從而保證每個(gè)卷積核的感受野能夠分散到不同group的輸入中,增加了模型的學(xué)習(xí)能力。
6.1 設(shè)計(jì)思想
我們知道,卷積中的group操作能夠大大減少卷積操作的計(jì)算次數(shù),而這一改動(dòng)帶來(lái)了速度增益和性能維持在MobileNet等文章中也得到了驗(yàn)證。然而group操作所帶來(lái)的另一個(gè)問(wèn)題是:特定的濾波器僅對(duì)特定通道的輸入進(jìn)行作用,這就阻礙了通道之間的信息流傳遞,group數(shù)量越多,可以編碼的信息就越豐富,但每個(gè)group的輸入通道數(shù)量減少,因此可能造成單個(gè)卷積濾波器的退化,在一定程度上削弱了網(wǎng)絡(luò)了表達(dá)能力。
6.2 網(wǎng)絡(luò)架構(gòu)
在此篇工作中,網(wǎng)絡(luò)架構(gòu)的設(shè)計(jì)主要有以下幾個(gè)創(chuàng)新點(diǎn):
提出了一個(gè)類似于ResNet的BottleNeck單元
借鑒ResNet的旁路分支思想,ShuffleNet也引入了類似的網(wǎng)絡(luò)單元。不同的是,在stride=2的單元中,用concat操作代替了add操作,用average pooling代替了1x1stride=2的卷積操作,有效地減少了計(jì)算量和參數(shù)。單元結(jié)構(gòu)如圖10所示。
提出將1x1卷積采用group操作會(huì)得到更好的分類性能
在MobileNet中提過(guò),1x1卷積的操作占據(jù)了約95%的計(jì)算量,所以作者將1x1也更改為group卷積,使得相比MobileNet的計(jì)算量大大減少。
提出了核心的shuffle操作將不同group中的通道進(jìn)行打散,從而保證不同輸入通道之間的信息傳遞。
ShuffleNet的shuffle操作如圖11所示。
圖10 ShuffleNet網(wǎng)絡(luò)單元
圖11 不同group間的shuffle操作
6.3 實(shí)驗(yàn)結(jié)果
表8 ShuffleNet與MobileNet在ImageNet上精度對(duì)比
上表顯示,相對(duì)于MobileNet,ShuffleNet的前向計(jì)算量不僅有效地得到了減少,而且分類錯(cuò)誤率也有明顯提升,驗(yàn)證了網(wǎng)絡(luò)的可行性。
6.4 速度考量
作者在ARM平臺(tái)上對(duì)網(wǎng)絡(luò)效率進(jìn)行了驗(yàn)證,鑒于內(nèi)存讀取和線程調(diào)度等因素,作者發(fā)現(xiàn)理論上4x的速度提升對(duì)應(yīng)實(shí)際部署中約2.6x。作者給出了與原始AlexNet的速度對(duì)比,如下表。
表9 ShuffleNet與AlexNet在ARM平臺(tái)上速度對(duì)比 [10]
結(jié)束語(yǔ)
近幾年來(lái),除了學(xué)術(shù)界涌現(xiàn)的諸多CNN模型加速工作,工業(yè)界各大公司也推出了自己的移動(dòng)端前向計(jì)算框架,如Google的Tensorflow、Facebook的caffe2以及蘋(píng)果今年剛推出的CoreML。相信結(jié)合不斷迭代優(yōu)化的網(wǎng)絡(luò)架構(gòu)和不斷發(fā)展的硬件計(jì)算加速技術(shù),未來(lái)深度學(xué)習(xí)在移動(dòng)端的部署將不會(huì)是一個(gè)難題。
評(píng)論