今天介绍一篇 ICLR 2020 的文章 《NAS evaluation is frustratingly hard》,作者是来自巴黎综合理工和华为诺亚方舟实验室的Antoine Yang,Pedro M Esperanc¸a 和 Fabio Maria Carlucc。
文章开篇指出,近年来 Neural Architecture Search (NAS) 发展迅速,但是关于哪个算法最好、哪个搜索方法最好,其实一直没有定论。不同的论文之间很难在相同的参数设置下进行公平比较。有些论文可能是加入了一些trick,人工调参&精心设计过拟合,从而在某个数据集上面看起来准确率更高。
作者找了8个有开源代码的 NAS 方法,在 5个不同的数据集上进行对比。这8个 NAS 方法是 DARTS,StacNAS,PDARTS,MANAS,CNAS,NSGANET,ENAS,NAO。这5个数据集是 Cifar 10,Cifar 100,Sport 8,MIT 67,Flowers 102。 选5个数据集是因为大多数paper的结论都是基于 Cifar 10得到的,有过拟合 Cifar 10的嫌疑。
有些方法表现出色可能是因为人工设计了一个好的搜索空间,训练调参,而不是因为好的搜索策略。为了避免这个问题,作者会在这8个方法的搜索空间里面随机采样得到网络结构,遵循相同的训练参数,和这8个方法进行比较。作者的代码链接在这里,细节可以从中探寻。具体来说,作者的实验分为三步:
- 从这8个方法的搜索空间里面随机得到网络结构,然后在数据集上训练(训练的时候使用相同的随机数种子)。
- 使用这8个方法的代码,搜出来8个结构,然后在数据集上训练(搜索时候的随机数种子不同,但训练时随机数种子相同)。
- 比较随机采样的结构和搜出来的结构,在测试集上的性能差异。
作者实验得出的结论如下图:
正如文章标题所说,结果是令人沮丧的(frustratingly hard)。
-
各个方法相比于随机采样得到的结果,提升是非常小的。在一些情况下,搜出来的结果甚至比随机采样得到的要差,说明搜索的方法并没有收敛。
-
有些方法的准确率变化不大,说明搜索空间就很小,在这个小的搜索空间上面得到的较差的结构也是相对不错的。也就是说好的搜索空间起的作用大,搜索算法起到的作用小。
-
在 Cifar 10上,一些方法 (PDARTS, MANAS, DARTS, StacNAS)表现的很接近,都还不错;但是换到其他数据集上,这些方法性能的方差就会很大,说明参数可能是在Cifar 10上面专门调的,泛化性能不好。
Figure-2 展示了在Cifar 10上,不同方法的性能以及搜索代价 (GPU-days)。Table-1 展示了这8个方法在5个数据集上,相对随机得到的结构的提升。可以看出几乎每个算法都有不如随机搜的时候。
比较不同的训练参数
基于上面的结论,作者猜测在每个搜索空间上,就最终的准确率来说,采用什么样的训练参数起到的作用比不同的网络结构要大。为了验证猜想,作者采用了以下实验:
- 在 Cifar 10 数据集上,采用 DARTS 的搜索空间,随机采样8个不同的结构;
- 用不同的训练参数进行训练;
- 在测试集上对比模型间的性能差异。
不同的训练参数是指:Base,和 DARTS 用的超参类似,所有 tricks 都不用,训练 600 个 epochs。 而所谓的’tricks’是指Xnas这篇文章用到的tricks:Auxiliary Towers、DropPath、Cutout、AutoAugment 、训练延长到1500 epochs、增加 channel 的数量。
结果如下图所示,在 DARTS 的搜索空间上随机采样得到的结构,加上 Xnas 这篇文章用到的全部 tricks,能涨 0.69,和 Xnas 就差0.25。这么看的话,最近的很多paper虽然取得了 state-of-the-art 的结果,但是并不一定要归功于提出了好的搜索策略。
研究 DARTS 的搜索空间
和随机采样的结果对比
作者从 DARTS 的搜索空间里面随机采样了足够多的结构 (200+)进行训练,想看一下不同的结构之间的方差到底有多大。
结果如下图所示,平均性能是
97.03
±
0.23
97.03 \pm 0.23
97.03±0.23 ,最差 96.18,最好的是 97.56。作者指出,在相同的参数下,很多方法搜出来的结果也就是在这个标准差范围内。
此外,如下图所示,作者发现网络结构里面 cells 的数量对于最终的准确率影响很大,而cells又是个人工挑选的超参数。
候选运算的影响
作者设计了一个很小的搜索空间,只包含一些简单的 conv,pooling,none, skip connect 运算,比 DARTS 的搜索空间要小很多(DARTS还包含了 dilated conv 等复杂的运算),理论上说搜出来的结果也要差一些。
而最终结论如下图所示,可以看出,modify 之后的小搜索空间,比原始的 DARTS 要低 0.18,似乎差的也不算多。作者从而指出,一些复杂的运算并不是一个好的搜索空间的关键元素。
随机数种子的影响
作者先随机采样得到 32 个不同的网络结构,然后用两个不同的随机数种子进行训练,结果如下图所示,换了种子之后不同模型的性能差的还挺多。这说明随机数种子的影响还是蛮大的,因此 paper 在报结果的时候,应该报告用不同的种子跑多个后平均的结果。
总结
作者的结论是:
- 一些数据增强,train 更多 epochs 之类的 tricks 会对最终的结果影响很大。因此 paper 在报结果的时候,除了加各种 tricks 冲 performance,还应该报一下裸的不加这些 tricks 的结果;
- 各种 paper 应该对比一下在搜索空间里面随机采样多个结构得到的结果。这一点相关的讨论也可以参见 xie saining 的那篇 Exploring randomly wired neural networks for image recognition。需要说明的是,这和随机搜索的对照实验是不一样的。
- 各种 paper 应该给出在多个数据集上的结果,避免 overfit 某个特定的数据集;
- 各种 paper 应该就各种结构上的参数(比如 DARTS 里面 cells 的数量)、训练参数给出严格的对照实验;
- 可复现性,各种 paper 除了报一个最好的结果、最好的结构之外,还应该给出使用的种子、代码、详细的参数配置。最好是跑多次实验来验证。
- 调参数的代价应该也纳入 NAS 搜索的考虑中。
个人读了这篇文章后,感到浓浓的一股浓浓的“清流”。
ICLR 的 Area Chair 给这篇文章的评价是:
"Overall, I firmly believe that this paper is an important contribution to the NAS community. It may be viewed by some as “just” running some experiments, but the experiments it shows are very informative and will impact the community and help guide it in the right direction. "