1. 程式人生 > >CondenseNet:可學習分組卷積,原作對DenseNet的輕量化改造 | CVPR 2018

CondenseNet:可學習分組卷積,原作對DenseNet的輕量化改造 | CVPR 2018

> CondenseNet特點在於可學習分組卷積的提出,結合訓練過程進行剪枝,不僅能準確地剪枝,還能繼續訓練,使網路權重更平滑,是個很不錯的工作   來源:曉飛的演算法工程筆記 公眾號 **論文:Neural Architecture Search with Reinforcement Learning** ![](https://upload-images.jianshu.io/upload_images/20428708-bbb9f11997611e3f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * **論文地址:[https://arxiv.org/abs/1711.09224](https://arxiv.org/abs/1711.09224)** * **論文程式碼:[https://github.com/ShichenLiu/CondenseNet](https://github.com/ShichenLiu/CondenseNet)** # Introduction *** ![](https://upload-images.jianshu.io/upload_images/20428708-d35c2a5a11381446.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   DenseNet基於特徵複用,能夠達到很好的效能,但是論文認為其內在連線存在很多冗餘,早期的特徵不需要複用到較後的層。為此,論文基於可學習分組卷積提出CondenseNet,能夠在訓練階段自動稀疏網路結構,選擇最優的輸入輸出連線模式,並在最後將其轉換成常規的分組卷積分組卷積結構。 # CondenseNets *** ![](https://upload-images.jianshu.io/upload_images/20428708-e2fa64fac1742a79.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   分組卷積能夠有效地降低網路引數,對於稠密的網路結構而言,可以將$3\times 3$卷積變為$3\times 3$分組卷積。然而,若將$1\times 1$卷積變為$1\times 1$分組卷積,則會造成效能的大幅下降,主要由於$1\times 1$卷積的輸入一般有其內在的聯絡,並且輸入有較大的多樣性,不能這樣硬性地人為分組。隨機打亂能夠一定程度地緩解效能的降低,但從實驗來看還不如引數較少的DenseNet。   另外,論文認為稠密連線雖然有利於特徵複用,但是存在較大的冗餘性,但很難定義哪個特徵對當前層是有用的。為此,論文引入了可學習的分組卷積來解決上述問題。 * ##### Learned Group Convolution ![](https://upload-images.jianshu.io/upload_images/20428708-6d6d54a8a51d7d59.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   分組卷積的學習包含多個階段,如圖3和圖4所示,前半段訓練過程包含多個condensing階段,結合引導稀疏化的正則化方法來反覆訓練網路,然後將不重要的filter剪枝。後半部分為optimization階段,這個階段對剪枝固定後的網路進行學習。實現細節如下: 1. Filter Groups,卷積分組   將標準卷積進行分組,比如$1\times 1$卷積的核大小為$O\times R$矩陣$\mathbb{F}$,將該卷積核分為$G$組,標記為$\mathbb{F}^1,\mathbb{F}^2,\cdots,\mathbb{F}^G$,每個$\mathbb{F}^g$大小為$\frac{O}{G}\times R$,$\mathbb{F}_{i,j}^g$代表$g$組內處理$i$輸入和$j$輸出的卷積核,注意這裡沒有對輸入進行對應的分組。 2. Condensation Criterion,壓縮標準   在訓練的過程逐步剔除每個組中權重較低的輸入特徵子集,$i$輸入特徵對於$g$組的重要程度通過求和組內所有對應的權值獲得${\sum}_{i=1}^{O/G} |\mathbb{F}_{i,j}^g|$,將$\mathbb{F}^g$中重要程度較小的輸入特徵對應的列置為零,從而將卷積層稀疏化。 3. Group Lasso   一般而言,為了減少剪枝帶來的準確率影響,可以通過使用L1正則方法引導權值儘量稀疏。由於分組卷積的特性,CondenseNets需要更嚴格的列稀疏來引導組內的卷積儘量使用相同的輸入子集,因此採用group級別的稀疏性,論文提出group-lasso正則化: ![](https://upload-images.jianshu.io/upload_images/20428708-c36679d297498681.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   根號內的項由列中最大的元素主宰,group-lasso能夠引導稀疏的$F^g$列趨向完全為0。 4. Condensation Factor   可學習分組卷積不僅能夠自動發現最優的輸入輸出連線模式,而且更靈活。組內使用的輸入特徵數不一定為$\frac{1}{G}$倍,而是根據定義condensation factor $C$(不一定等於$G$),允許每組選擇$\lfloor \frac{R}{C} \rfloor$個輸入。 5. Condensation Procedure   CondenseNet的剪枝在訓練過程中進行,如圖3所示,在每個$C-1$condensing階段,會剪除$\frac{1}{C}$權重,在訓練的最後,僅保留每個卷積組內的$\frac{1}{C}$權重。每個condensing階段的訓練週期設為$\frac{M}{2(C-1)}$,$M$為總的訓練週期,所有condensing階段共佔訓練的一半。   需要注意,訓練階段並沒有真正地將權重去除,而是使用二值tensor作為掩膜進行element-wise相乘,這樣的實現在GPU上仍是高效的,不會帶來太多額外的耗時。 6. Learning rate ![](https://upload-images.jianshu.io/upload_images/20428708-8a501e98d4f0dba9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   訓練使用cosine學習率退火,訓練過程如圖4所示,中間的損失突然上升是由於最後的condensing階段後剪枝了一半的權重(最後的condensing階段內僅$\frac{2}{C}$權重)導致的,但從圖中可以看出,訓練很快就恢復了。 7. Index Layer   在訓練後,需要去除剪枝的權重轉換為常規的網路結構,這樣不僅能夠降低網路引數,還能保證在計算能耗有限的裝置上高效執行。為此CondenseNet在釋出時需要加入Index層,該層的原理如圖3最右所示,根據剪枝後的剩餘權重對輸入特徵進行重排,將可學習分組卷積的剩餘權重轉換成分組卷積,訓練階段到測試階段的轉換如圖1。   需要注意,論文對$1\times 1$分組卷積的輸出進行了重排,這樣做的原因是為了讓後面的分組卷積能夠地使用到前面分組卷積提取的屬性。 ### Architecture Design ![](https://upload-images.jianshu.io/upload_images/20428708-7393c08b56d1ae4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   除了可學習分組卷積,論文還對原來的DenseNet結構進行了修改,如圖5所示,共包含兩點修改: * Exponentially increasing growth rate(IGR),Densenet每層增加$k$個新的特徵圖,$k$稱為增長率。而論文發現越深的層實際更依賴較高維的特徵,因此需要增強與當前層較近的特徵連線,通過逐漸增加增長率來實現。設定增長率為$k=2^{m-1}k_0$,$m$為dense block下標,$k_0$為常數,這樣能夠增加較後層輸出的特徵的佔比。 * Fully dense connectivity(FDC),為了更多的特徵重用,將所有的層進行了連線,併為不同的層提供了不同的下采樣操作。 ### Experiments ![](https://upload-images.jianshu.io/upload_images/20428708-00e088729af3227f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   驗證論文提出的改進方法的效果。 ![](https://upload-images.jianshu.io/upload_images/20428708-be4fa068b728ea4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   CIFAR-10上的輕量級網路效能對比。 ![](https://upload-images.jianshu.io/upload_images/20428708-1f5c63f15e38bd1f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   CIFAR-10和CIFAR-100上的剪枝SOTA網路效能對比。 ![](https://upload-images.jianshu.io/upload_images/20428708-818a4bed8d4a9a44.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![](https://upload-images.jianshu.io/upload_images/20428708-a63e36e7c3d569a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   ImageNet上的輕量級網路效能對比。 ![](https://upload-images.jianshu.io/upload_images/20428708-05285bb6c1eb2314.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   ImageNet上的SOTA網路推理耗時對比。 ![](https://upload-images.jianshu.io/upload_images/20428708-b296f11cc13553d5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   對不同超參進行了對比實驗。 # CONCLUSION ***   CondenseNet特點在於可學習分組卷積的提出,整體的結構設計十分巧妙。以往的剪枝工作都是在網路訓練後進行的,導致精度有較大的下降,而可學習分組卷積結合訓練過程進行剪枝,不僅能準確地剪枝,還能繼續訓練,使網路權重更平滑,是個很不錯的工作。       > 如果本文對你有幫助,麻煩點個贊或在看唄~ 更多內容請關注 微信公眾號【曉飛的演算法工程筆記】 ![work-life balance.](https://upload-images.jianshu.io/upload_images/20428708-7156c0e4a2f49bd6.png?imageMogr2/auto-orient/strip%7CimageView2/2