search space设计
文章认为好的search space需要满足以下条件:
- search space需要足够large和expressive,这样才能探索更丰富多样的候选网络架构
- one-shot模型在验证集上的准确率必须与stand-alone模型的准确率高度相关。也就是说相比于其他候选模型,A模型在验证集上准确率高,那么对A模型retrain的之后,它在测试集上的准确率也要是最高,或者是靠前的。
- 在资源有限的情况下,one-shot模型不能太大
One-shot模型训练
- 训练模型的稳定性(Stabilizing Model Training.):
- 虽然Relu-BN-Conv效果也差不多,实验使用更常用的BN-Relu-Conv顺序。另外我们知道在评估阶段我们会从one-shot模型里选择一个子模型来评估,也就是说我们会剔除一些操作,但是模型里的BN操作的统计量只是基于one-shot模型计算得到的,所以在评估阶段BN的统计量每个batch都要重新计算。
- 另外在训练one-shot模型的时候,对于一个batch里的数据,我们dropout的操作都是一样的。换句话说这批数据都是在同一个子模型下训练的。文章称这种方式也会导致训练不稳定,所以他们将一个大小为1024的batch数据进一步划分成多个子batch,称作ghost batch。比如1024批数据可以划分成32个大小为32的ghost batch,然后每个ghost batch应用不同的path dropout操作(即对应不同的子模型)。
- 避免过度正则化:在训练模型时,我们经常会用L2正则化。但是在这里只是对选择的子模型做正则化。不然一些没有被选择过的操作也被正则化的话就过分了啊~~
实验结果
下面只介绍一个比较有意思的实验结果,即 Dropout rate对结果的影响:
结果如下图示:
- 设置的概率值太小的话(最左),可以看到one-shot模型的整体准确率都不高,但是retrain之后的stand-alone模型性能好像都还可以。但是这样one-shot的准确率并不能很好的反映最后模型的性能。
- 设置的概率值太高的话(最右),虽然one-shot模型的准确率提高了,但是可以看到准确率的范围分布在了0.6~0.8之间,也就是说概率值过大使得模型可能把更多机会给到了一些表现可能
理解one-shot模型
由上图我们可以看到(以最左图为例),one-shot模型的准确率从0.1~0.8, 而stand-alone(即retrain之后的子模型)的准确率范围却只是0.92~0.945。为什么one-shot模型之间的准确率差别会更大呢?
文章对此给出了一个猜想:one-shot模型会学习哪一个操作对模型更加有用,而且最终的准确率也是依赖于这些操作的。换句话说:
- 在移除一些不太重要的操作时,可能会使one-shot模型准确率有所降低,但是最后对stand-alone模型性能的预测影响不大。
- 而如果把一些最重要的操作移除之后,不仅对one-shot模型影响很大,对最后的
我理解是这个意思
状态 | one-shot 模型准确率 | stand-alone模型准确率 |
---|---|---|
移除操作之前 | 80% | 92% |
移除不太重要的操作 | 78% | 91% |
移除重要的操作 | 56% | 90% |
原论文各种名词用的很混乱,一下是one-hot,一下是reference architecture,看得很迷幻,结合了好几个博文归纳总结的此文,有问题欢迎评论区指出。 参考:
- 【NAS-005】2018.07.11- One-Shot -ICML 2018
- AutoDL论文解读(七):基于one-shot的NAS