作者的前兩篇文章分別探討了如何訓練一個可以slim到指定寬的的網絡以及如何訓練一個可以選取任意子寬度的網絡。在這篇文章中,作者試圖解決的問題是對於給定的配置,選取各層最優的網絡寬度。
目前對於網絡寬度的選擇主要依靠經驗,如"half size, double channel"rule, pyramidal rule等。一個研究方向channel pruning是在訓練好的模型中,找到一些比較沒有用的channel進行剪枝。之后有人提出這些channel pruning的方法實際上可以看作是一種針對channel數的網絡結構搜索。直接從scratch訓練這些網絡結構和對訓練好的大模型進行剪枝和fine-tune的效果是很接近的,甚至可能更好。所以訓練一個大的overparameterized的模型沒有必要。目前在網絡結構搜索領域用到的主要是一些強化學習的方法,其缺點之一就是搜索空間大,而且針對channel數的研究比較少。
本文提出的方法分為兩個步驟:
- Training:對於某一網絡結構,訓練一個slimmable的簡易版本(epoch為完整的約10%~20%)。所有層包括第一個conv層和最后一個FC層都是slimmable的。每一層都按組來平均划分,以減少搜索空間,slim時也是以組為單位進行的。
- Greedy Slimming:用validation set來計算模型正確率,每一次迭代都貪心的決定slim哪一層。validation set隨機從訓練集中抽取約20%數據。首先從最大的尺寸開始,與每層都減少一個組的channel的准確率進行比較,選擇准確率減少最少的層進行slim。不斷貪心地迭代,直到整個模型達到指定的限制。在找到最優的結構之后,再從scratch重新訓練。
由於Slimming時無需訓練,無需梯度,因此可以使用比較大的batch size。這帶來了兩個優點:BN數據再batch size > 2K時更准確;可以直接使用單個前向預測准確率作為表現的estimator。
實驗結論:
- 與default channel number 相比發現slim后的在淺層channel比較少,深層channel比較多。
- 與model pruning方法AMC相比,AutoSlim的網絡深層channel更多淺層網絡更少。
- 用在ImageNet上slim得到的網絡結構A和在CIFAR10上slim得到的網絡結構B分別測試CIFAR10,A的效果不好。說明在ImageNet上優化的網絡結構是不能generalize到CIFAR10上的。