AutoSlim: Towards One-shot Architecture Search for Channel Numbers【阅读笔记】
作者的前两篇文章分别探讨了如何训练一个可以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上的。