Channel Pruning for Accelerating Very Deep Neural Networks 演算法筆記
這是一篇ICCV2017的文章,關於用通道剪枝(channel pruning)來做模型加速,通道減枝是模型壓縮和加速領域的一個重要分支。
文章的核心內容是對訓練好的模型進行通道剪枝(channel pruning),而通道減枝是通過迭代兩步操作進行的:第一步是channel selection,這一步是採用LASSO regression來做的,其實就是添加了一個L1範數來約束權重,因為L1範數可以使得權重中大部分值為0,所以能使權重更加稀疏,這樣就可以把那些稀疏的channel剪掉;第二步是reconstruction,這一步是基於linear least squares(也就是最小二乘,或者叫最小平方)來約束剪枝後輸出的feature map要儘可能和減枝前的輸出feature map相等,也就是最小二乘值越小越好
原文中作者列舉的加速效果:Our pruned VGG-16 achieves the state-of-the-art results by 5 speed-up along with only 0.3% increase of error. More importantly, our method is able to accelerate modern networks like ResNet, Xception and suffers only 1.4%, 1.0% accuracy loss under 2 speedup respectively, which is significant.
本文采用的通道剪枝(channel pruning)是模型壓縮和加速領域中一種簡化網路結構的操作,文中作者還列舉了其他兩種常見的簡化網路結構的操作:sparse connection和tensor factorization,可以看Figure1的對比。(a)表示傳統的3層卷積操作。(b)表示sparse connection,這是通過去掉一些引數很小的連線得到的,理論上是有明顯的加速效果的,但是在實現過程中並不容易,主要因為稀疏連線層的形狀不規則。(c)表示tensor factorization,比如SVD分解,但是這種操作其實並不會減少channel數量,因此很難帶來明顯加速。(d)就是通道剪枝(channel pruning),也就是直接對channel做剪枝,移除掉一些冗餘的channel,相當於給網路結構瘦身,而且各個卷積層的形狀還比較統一。
Figure2是本文對卷積層做通道剪枝的一個示意圖。先看左邊大的虛線框,其中字母B表示輸入feature map,同時c表示B的通道數量;字母W表示卷積核,卷積核的數量是n,每個卷積核的維度是c*kh*kw,kh和kw表示卷積核的size;字母C表示輸出feature map,通道數是n。因此通道剪枝的目的是要把B中的某些通道剪掉,使得剪掉後的B和W的卷積結果能儘可能和C接近。當要剪掉B中的一些feature map的通道時,相當於剪掉了W中與這些通道對應的卷積核(對應W中3個最小的立方體塊),這也是後面要介紹的公式中β的含義和之所以用L1範數來約束β的原因,因為L1範數會使得W更加稀疏。另外生成這些被剪掉通道的feature map的卷積核也可以刪掉(對應Figure2中第二列的6個長條矩形塊中的2個黑色虛線框的矩形塊)。
因此最重要的就是如何判斷B中的哪些通道要剪掉,具體是分兩步來迭代進行的:In one step, we figure out the most representative channels, and prune redundant ones, based on LASSO regression. In the other step, we reconstruct the outputs with remaining channels with linear least squares. We alternatively take two steps. Further, we approximate the network layer-by-layer, with accumulated error accounted.
公式1就是優化方程。首先字母c表示待剪枝的feature map的通道數,待剪枝的feature map也就是該卷積層的輸入feature map;W表示卷積核,維度是n*c*kh*kw,因此n就是輸出feature map的通道數;X表示從輸入feature map中取出的N個維度為c*kh*kw的samples。因此當卷積核W去卷積X時,得到的就是N*n大小的輸出Y,這裡要解釋下N*n的含義,其實是輸出n個feature map,每個feature map的長*寬等於N,因此這裡相當於把二維的feature map拉直成一個向量,這樣Y就是二維的,方便公式1中計算平方。β是一個向量,裡面的值只有0或者1,當要丟掉某個channel的時候,β的對應位置就是0. || ||F是F範數。c’表示剪枝後feature map的通道數,因此最終要達到的目的是將通道數從c剪到c‘。
所以公式1的意思是:首先β的0範數要小於等於c‘,也就是說β向量中非零值的數量要小於c’。然後最小二乘部分的Y表示未剪枝時的輸出feature map;求和部分表示按照β來剪枝後的輸出feature map,因此這個優化式子是希望二者之間的差異越小越好,所以採取最小二乘(也就是最小平方)的方法來求β和權重W。
當然,上面的式子是沒有辦法直接優化求解的,因此有了下面的公式2。公式2是將公式1中對β的約束加到公式中,同時使用L1範數代替原來β的L0範數,因為L0難以優化,而且有數學證明L1範數可以替換L0範數。引數λ用來控制β中非零值的數量,λ越大,β中的非零值越少,這樣加速比也越大。另外||Wi||F=1是用來約束W的唯一解。
從前面的介紹可以看出最終這個優化式子要求的是最優的β和W,因此具體優化的時候是迭代進行的:先固定W,求解β,然後固定β,求解W。比如公式3就是固定W(XW用Z表示),求解β的公式。
公式4就是固定β,求解W的公式。
優化中的一個細節是前面公式中的λ是在迭代過程中不斷增大的,直到||β||0穩定以後就不增大了。
一旦滿足β的約束:
就得到了所需的β和W。當然作者在實驗中發現這樣迭代操作比較耗時間,因此採取的策略是先不斷優化公式3,直到達到上面這個β的約束時再優化公式4一次。
前面介紹的都是對於網路沒有分支情況下的通道剪枝,但是現在的ResNet、GoogleNet網路都有多分枝,對於這種網路,文中以ResNet為例也做了分析,如圖Figure3。首先,在這個residual block中,除了第一層和最後一層外的其他層都可以採用前面介紹的通道剪枝方式進行剪枝。針對第一層,因為原來其輸入feature map的通道數是輸出的4倍,因此在剪枝之前先對輸入feature map做sample。針對最後一層的通道剪枝,由原來對Y2來優化,改成對Y1-Y1‘+Y2來優化(Y1和Y2表示剪枝之前的輸出),Y1’表示前面層剪枝後得到的結果(也就是該residual block的輸入,只不過和Y1不同的是該輸入是前面層剪枝後得到的結果),否者shortcut部分帶來的誤差會對結果影響較大。
實驗結果:
Figure4是在VGG16網路上對單層做不同的channel selection方式的實驗結果對比,用來證明本文的這種channel selection演算法的有效性。圖例中fist k表示抽取前k個channel作為剪枝後的channel,max response表示選取卷積核權重的絕對值最大的一些channel作為剪枝後的channel。可以看出隨著層數的增加,channel pruning的難度也增加,這表明在淺層中存在更多的冗餘channel,這也是後面對模型做channel pruning時候對淺層和高層採取不同程度剪枝的依據(淺層剪枝得更加厲害,比如從conv1_x到conv3_x剪枝後剩餘的通道數與conv4_x剪枝後剩餘的通道數的比例是1:1.5,而conv5_x是不剪枝的,一方面因為conv5_x計算量少,另一方面從實驗結果看其冗餘率已經很低了)。
Table1是對整個VGG-16網路做通道剪枝的結果,可以看出在2倍加速的時候甚至沒有影響到準確率。
Table2是作者在VGG-16網路上將本文的通道剪枝和spatial factorization、channel factorization結合在一起(對應表中的Our 3C)做加速的實驗結果對比,可以看出結合不同的加速演算法的效果都要優於某一種加速演算法。
Table5是作者將加速演算法用在object detection演算法上的表現,這裡是以Faster RCNN為例子。
其他更多實驗結果可以參看論文,比如對於ResNet和Xception的通道剪枝的實驗結果、train from scratch等。
相關推薦
Channel Pruning for Accelerating Very Deep Neural Networks 演算法筆記
這是一篇ICCV2017的文章,關於用通道剪枝(channel pruning)來做模型加速,通道減枝是模型壓縮和加速領域的一個重要分支。 文章的核心內容是對訓練好的模型進行通道剪枝(channel pruning),而通道減枝是通過迭代兩步操作進行的:第
Channel Pruning for Accelerating Very Deep Neural Networks
https://github.com/yihui-he/channel-pruning ICCV 2017, by Yihui He, Xiangyu Zhang and Jian Sun Please have a look at&
深層CNN的調參經驗 | A practical theory for designing very deep convolutional neural networks
A practical theory for designing very deep convolutional neural networks 兩個前提假設: 1.對於每一個卷積層,其學習更復雜表示的能力應該被保證 2.最高層的感受野應該不大於影象範圍
DeepEyes: 用於深度神經網絡設計的遞進式可視分析系統 (DeepEyes: Progressive Visual Analytics for Designing Deep Neural Networks)
失誤 min 使用 包括 系統 所有 訓練 如果 blog 深度神經網絡,在模式識別問題上,取得非常不錯的效果。但設計一個性能好的神經網絡,需要反復嘗試,是個非常耗時的過程。這個工作[1]實現了用於深度神經網絡設計的可視分析系統,DeepEyes。該系統可以在DNNs訓練過
VGGnet論文總結(VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION)
lrn cli 共享 融合 loss sca 得到 同時 works VGGNet的主要貢獻: 1、增加了網絡結構的深度 2、使用了更小的filter(3*3) 1 introduction 這部分主要說明了,由於在所有的卷積網絡上使用了3*3的filter,所以使
VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNTION(翻譯)
而不是 lar 標準 類別 研究 src 架構 數量 分辨率 0 - ABSTRACT 在這個工作中,我們研究了卷積網絡的深度對於它在大規模圖像識別設置上的準確率的效果。我們的主要貢獻是對使用非常小的卷積核(3×3)來增加深度的網絡架構進行徹底評估,這說明了通過將深度增
YouTube推薦系統(下):Deep Neural Networks for YouTube Recommendations
咳,還是要說說這篇文章,雖然講它的人已經很多了。畢竟作為深度學習模型大規模應用於工業界推薦系統的標誌,這篇文章是繞不過去的。原文來自Deep Neural Networks for YouTube Recommendations,是YouTube2016年發表於Recosys的文章。 這篇文章的結構依然很經
《2017-Aggregated Residual Transformations for Deep Neural Networks》論文閱讀
如何評價谷歌的xception網路? 動機 傳統的要提高模型的準確率,都是加深或加寬網路,但是隨著超引數數量的增加(比如channels數,filter size等等),網路設計的難度和計算開銷也會增加。 本文提出的 ResNeXt 結構可以在不增加引數複
Deep Neural Networks for Object Detection
zhuanzii 採用的是AlexNet,不過稍作修改。 原AlexNet網路: 具體改進: 1. 把最後一個層softmax改成a regession layer. predict a mask of a fixed size. 1代表this pixel l
論文閱讀筆記二十九:One pixel attack for fooling deep neural networks(CVPR2017)
論文源址:https://arxiv.org/abs/1710.08864 tensorflow程式碼: https://github.com/Hyperparticle/one-pixel-attack-keras 摘要
機器學習筆記~Practical Advice for Building Deep Neural Networks by Matt H and Daniel R
這是一篇從外文網站轉載的一篇關於構建深度神經網路時的建議,在進行網路搭建時可以適當借鑑和參考。 Practical Advice for Building Deep Neural Networks In our machine learning lab, we’ve
VGG學習筆記-Very Deep Convolutional Networks for Large-Scale Image Recognition
主要是針對論文,進行了自我解讀,抽絲而成,請大家多多指教。 摘要 在這項工作中,主要研究卷積網路Convolutional networks (ConvNets)深度在大規模的影象識別環境下對準確性的影響。主要貢獻是使用非常小的
論文筆記《Very Deep Convolutional Networks for Large-Scale Image Recognition》
VGGNet在2014年的ILSVRC競賽上,獲得了top-1 error的冠軍和top-5 error的第二名,錯誤率分別為24.7%和7.3%,top-5 error的第一名是GoogLeNet 6.7%。在圖片定位任務中,也獲得了冠軍。網路層數由之前的AlexNet 的8層提高到了最高19
On Loss Functions for Deep Neural Networks in Classification讀後感
分類問題中的另一類loss函式 In particular, for purely accuracy focused research, squared hinge loss seems to be a better choice at it converge
Machine Learning for Humans, Part 4: Neural Networks & Deep Learning
The same thing happens in vision, not just in humans but in animals' visual systems generally. Brains are made up of neurons which "fire" by emitting elect
【論文閱讀】Aggregated Residual Transformations for Deep Neural Networks Saining(ResNext)
這篇文章是kaiming大神的組的工作,在resnet上繼續改進。一作謝賽寧,2013年從上海交大本科畢業後去UCSD讀博士,現在他引1400+了(不知道我畢業時能不能有這個的一半QAQ),導師是Zhuowen Tu。 Introduction 現代的網路設計中通常會次堆疊
Deep Neural Networks for Regression Problems
First : Processing the datasetWe will not go deep in processing the dataset, all we want to do is getting the dataset ready to be fed into our models .We w
【深度學習論文筆記】Deep Neural Networks for Object Detection
論文:<<Deep Neural Networks for Object Detection>> 作者:Christian Szegedy Al
論文筆記:Deep neural networks for YouTube recommendations
https://blog.csdn.net/xiongjiezk/article/details/73445835 Download [1] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommen
深度學習論文隨記(二)---VGGNet模型解讀-2014年(Very Deep Convolutional Networks for Large-Scale Image Recognition)
深度學習論文隨記(二)---VGGNet模型解讀 Very Deep Convolutional Networks forLarge-Scale Image Recognition Author: K Simonyan , A Zisserman Year: 2014