一直以來,網(wǎng)絡(luò)剪枝都是模型壓縮中的重要方法蒲赂。按照被剪對象的粒度來分并淋,大致可以分為三類:
- 針對權(quán)重剪枝,最具代表性的工作是韓松發(fā)表在NIP'15上的文章 “Learning both Weights and Connections”假丧,idea簡單直接双揪,通過對濾波器設(shè)定閾值的方式剪掉冗余的連接,每剪完一層就重新fine-tuning網(wǎng)絡(luò)虎谢,然后用逐層迭代的方式對整個網(wǎng)絡(luò)執(zhí)行剪枝操作盟榴。Nip'16上的一篇文章 “Dynamic Network Surgery for Efficient DNNs” 也是采用類似的方法,但是它是在梯度反傳的時候每個迭代步就剪枝一次婴噩,剪枝之后的權(quán)重仍然可以參與后續(xù)的梯度更新擎场。也就是說被剪掉的權(quán)重如果發(fā)現(xiàn)剪錯了還可以重新恢復(fù)。以上兩種剪枝的方式的弊端也是十分明顯的几莽,那就是造成了稀疏連接迅办,雖然減少了網(wǎng)絡(luò)參數(shù),但是在GPU上并沒有任何加速的效果章蚣,反而有可能更慢站欺。
- 針對濾波器剪枝,這樣做可以有效避免對權(quán)重剪枝的缺陷纤垂。針對濾波器的剪枝方法也分為兩大類矾策,一類主要定義用于衡量濾波器對于網(wǎng)絡(luò)的重要性的規(guī)則,另一類則基于最小重建誤差來做剪枝峭沦。
- 衡量濾波器重要性的通常做法是根據(jù)濾波器權(quán)重的絕對值和贾虽,“Pruning CNN for resource efficient inference” 就是這樣來做的『鹩悖或者通過權(quán)重的有無對網(wǎng)絡(luò)的損失函數(shù)的影響蓬豁,神經(jīng)元激活值的大小等作為判斷標準。論文 “Pruning CNN for resource efficient inference” 給出了較為詳細的歸納和總結(jié)菇肃。
- ICCV'17上的Thinet的做法是最小化濾波器刪除后對下一層的影響地粪,這是個NP難的問題所以沒辦法直接求解,文中的做法是采用貪心的策略尋找對網(wǎng)絡(luò)影響最小的濾波器琐谤。而另一篇文章 “Channel Pruning for Accelerating DNN” 則是采用LASSO回歸的方式來求解的蟆技,然后求剩下濾波器的最小二乘估計。
- 共享網(wǎng)絡(luò)權(quán)重
權(quán)重共享有點類似于剪枝,原來多個權(quán)重共享一個權(quán)重的方式能很好的壓縮網(wǎng)絡(luò)付魔。其中聊品,hashedNet將同一個hash bucket的參數(shù)共享同一個權(quán)重;Deep Compression通過聚類的方式?jīng)Q定哪些權(quán)重共享同一個參數(shù)几苍;"Soft weight-sharing for DNN"通過概率的方式?jīng)Q定如何共享權(quán)重翻屈。