
論文概述
傳統(tǒng)結(jié)構(gòu)化剪枝往往分為三步走,訓(xùn)練-剪枝-finetune。
剪枝方面默認的常識是:
- 從一個大的、過參數(shù)化的模型開始訓(xùn)練是有必要的,因為這樣的模型具有很強的表示和優(yōu)化能力,只有從這樣的模型中刪除冗余參數(shù),才能盡可能少的損失模型的精度;而直接從一個小模型開始從頭訓(xùn)練得到的精度總是低于通過剪枝-finetune之后的模型精度
- 剪枝之后的結(jié)構(gòu)和剪枝后的參數(shù)偶被認為是構(gòu)建一個最終的高效網(wǎng)絡(luò)的重要條件。
本文揭示了幾個違背過往剪枝常識的觀察:
- 對于獲得一個有效的最終模型而言,訓(xùn)練一個大的、過參數(shù)化的模型可能不是必要操作
- 剪枝之后的finetune得到的模型效果,往往差于直接從頭訓(xùn)練剪枝模型,雖然從頭訓(xùn)練剪枝之后的結(jié)構(gòu)的模型往往需要更多的訓(xùn)練輪次。這預(yù)示著剪枝操作之后保留的參數(shù)其實沒有那么重要。而在我們之前的剪枝常識中,剪枝保留的參數(shù)是對模型非常重要的參數(shù),決定了剪枝之后的模型性能。剪枝之后的參數(shù)可能會導(dǎo)致新的模型陷入一個比較差的局部最優(yōu)解。
- 剪枝之后的模型結(jié)構(gòu)而不是剪枝之后的權(quán)重參數(shù),對我們來說是更為重要的存在。對于哪些固定的剪枝策略(比如每層刪除固定比率的channel層),可以直接從剪枝之后的模型開始訓(xùn)練,而不需要進行訓(xùn)練-剪枝-finetune。而對于動態(tài)的剪枝策略來說,剪枝操作的作用更多的在于獲得剪枝之后的有效網(wǎng)絡(luò)結(jié)構(gòu),所以剪枝的作用也可以理解為模型最優(yōu)化模型結(jié)構(gòu)搜索。
注意,作者上述的觀察都是基于結(jié)構(gòu)化剪枝的。對于非結(jié)構(gòu)化剪枝,只有在小數(shù)據(jù)集合上,從頭開始訓(xùn)練可以達到和剪枝-finetune相同的精度,在大數(shù)據(jù)集合上則會失敗。
為什么之前的論文實驗中,從頭開始訓(xùn)練的實驗效果都沒有使用剪枝之后的參數(shù)的效果好?因為想當然的思想,使得之前的在“ 從頭開始訓(xùn)練的”實驗中沒有仔細選擇超參數(shù)、數(shù)據(jù)擴充策略,并且也沒有給從頭開始訓(xùn)練足夠的計算時間和輪次(因為作者提到從頭開始訓(xùn)練需要更多的輪次才能得到和利用剪枝參數(shù)進行finetune類似的精度)
當然,如果已經(jīng)具備了一個訓(xùn)練好的大模型,那么剪枝和finetune可以加快獲得高效網(wǎng)絡(luò)的時間。
背景介紹
常見的減小網(wǎng)絡(luò)參數(shù)量的方法有低秩化、量化、剪枝。剪枝因為其高效卓越的表現(xiàn)得到了廣泛的關(guān)注。
剪枝可以分為非結(jié)構(gòu)化剪枝和結(jié)構(gòu)化剪枝。非結(jié)構(gòu)化剪枝作用在單個權(quán)重上;導(dǎo)致卷積核的權(quán)重參數(shù)稀疏化。結(jié)構(gòu)化剪枝作用在channel層以及l(fā)ayer層。
這篇文章受到了一些研究剪枝特征的論文的啟發(fā)。
- 2018年的《Recovering
from random pruning: On the plasticity of deep convolutional neural network》這篇論文發(fā)現(xiàn)隨機剪枝可以達到和精巧設(shè)計的剪枝策略同等的精度。 - 2019年的《The Lottery Ticket Hypothesis》一文,觀察到特定的節(jié)點連接以及他們的初始化訓(xùn)練參數(shù),可以讓剪枝之后的模型從頭訓(xùn)練(從特定的初始化訓(xùn)練參數(shù))得到和finetune類似的精度。
文本則是論文2的更進一步發(fā)現(xiàn),不需要特定的初始化參數(shù),直接從頭開始訓(xùn)練就可以得到類似精度乃至更加優(yōu)秀的高效模型。節(jié)點的連接,也就是剪枝之后的網(wǎng)絡(luò)結(jié)構(gòu)才是給高效模型帶來提升的重要因素。
方法論
數(shù)據(jù):CIFAR-10, CIFAR-100 , 和ImageNet datasets。
** 實驗?zāi)P?strong>:VGG、ResNet、DenseNet是剪枝論文常用的三個網(wǎng)絡(luò),具有較好的代表性。
** 對比其他論文的方法:對比了兩個自動剪枝方法、4個預(yù)定義結(jié)構(gòu)的剪枝方法
訓(xùn)練的開銷:對于從頭開始訓(xùn)練的剪枝模型,怎么分配訓(xùn)練輪次合適?之前的方法都是和大模型采用相同的輪次,用Scratch-E表示;如果按照訓(xùn)練過程中的浮點數(shù)計算,那么一個被剪枝50%的模型,應(yīng)該訓(xùn)練的輪次為原始模型的2倍,這種訓(xùn)練方式用Scratch-B表示。在直覺上,小的模型只需要更少輪次就可以實現(xiàn)收斂,但是在本文的實驗中,發(fā)現(xiàn)部分情況下,Scratch-B的訓(xùn)練方式是有必要的,可以提升精度.
實驗分析
實驗的分析章節(jié)就是對簡述中提到的結(jié)論的驗證,這邊就不展開贅述了。
網(wǎng)絡(luò)剪枝==網(wǎng)絡(luò)結(jié)構(gòu)搜索
1. 剪枝策略和等比例剪枝
對于《 Learning efficient convolutional networks through network slimming》這篇文章,采用全局剪枝的方式,根據(jù)不同的剪枝比率可以得到不同的剪枝模型。對不同的剪枝模型從頭開始訓(xùn)練可以得到圖中的藍色曲線;采用相同的剪枝比率,但是逐層等比例剪枝(比如剪枝比率為0.2,在上面的論文中,是網(wǎng)絡(luò)所有層參數(shù)排序之后,減掉排序末尾的20%;而后面這種等比例剪枝,則是每層減掉20%),從頭開始訓(xùn)練可以得到圖中紅色曲線??梢娂词共徊捎眉糁χ蟮臋?quán)重,剪枝保留的結(jié)構(gòu)也是很有用的。

作者針對《 Learning efficient convolutional networks through network slimming》這篇文章進行了5次隨機從頭訓(xùn)練,發(fā)現(xiàn)如果指定比率剪枝,那么5次剪枝之后,每層的保留層數(shù)總是神奇的相似,這說明這個方法確實可以得到一個比較高效穩(wěn)定的結(jié)構(gòu)。

更進一步的實驗發(fā)現(xiàn),在VGG網(wǎng)絡(luò)上,net-slimming剪枝策略優(yōu)于每層等比例剪枝,而在ResNet,DenseNet上,net-slimming剪枝策略可能不如每層等比例剪枝。作者分析了這些網(wǎng)絡(luò)剪枝之后的結(jié)構(gòu),發(fā)現(xiàn)這種結(jié)構(gòu)趨向于每層等比例剪枝,這可能就是這個策略剪枝之后的效果約等于每層等比例剪枝的原因。而VGG網(wǎng)絡(luò)每層的冗余并不是均衡的,因此剪枝策略有效。

2.剪枝策略設(shè)計的原則
根據(jù)net slimming算法在VGG網(wǎng)絡(luò)上的成功結(jié)果,是否可以挖掘到一個設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)的基本原則?
對于VGG網(wǎng)絡(luò),剪枝之后的相鄰層有相似的channel數(shù)量,將相似channel數(shù)量的層分為一個stage,網(wǎng)絡(luò)分為三個stage。將同一個stage中的平均層數(shù)作為新模型的該stage中的層數(shù),這樣得到的新網(wǎng)絡(luò)稱為“Guided Pruning”。
在VGG16上剪枝的模型遷移到VGG19上,這樣得到的新網(wǎng)絡(luò)稱為遷移“Guided Pruning方法。
下圖展示了剪枝算法、“Guided Pruning”、遷移“Guided Pruning方法以及每層均勻剪枝策略在不同剪枝比率(x軸是參數(shù)量,餐數(shù)量少的剪枝比率高)時的準確率。可以看到前三者的準確率大差不差。因此不需要從頭開始訓(xùn)練一個大的網(wǎng)絡(luò),可以采用遷移學習的方式從小網(wǎng)絡(luò)直接得到一個性能還不錯的更深層網(wǎng)絡(luò)
