原文链接:https://arxiv.org/pdf/1902.09635.pdf
数据集与代码链接:https://github.com/google-research/nasbench
1.本文做了什么?
本文设计了第一个供NAS使用的数据集,以希望降低这个行业的算力门槛,并提供一个可以统一量化成果效果的平台。在搜索空间中通过图同构来识别423k个独特的cell(cell定义见NASNet),并提供500万个在CIFAR10上培训和评估的模型,使得其他研究人员可以通过查表快速获得模型的相应训练结果。
2.数据集简介
这个数据集延续了NASNet的思想,以cell作为最小单元,每3个cell后接一个downsample,在第三个后接平均池化与全连接层。第一层的3x3conv产生128通道的输出。这样就将变体限制在了cell层面。
每一个cell中包含个节点及条边,除了两个被标记为输入输出的节点,其他节点包含以下3个操作中的一个:
- 3x3卷积+BN+ReLU
- 1x1卷积+BN+ReLU
- 3x3最大池化
这样设计操作是为了能够产生于ResNet和Inception相同的cell。
网络表示方面,使用一个7x7上三角矩阵和5种标签(包含固定的In和Out,因此实际可调整的是三种)表示,因此有种组合,去掉其中不能连通,边数量过多,和重复的就是423M种。
虽然图转cell很直观,但还有一个问题是当两个输出进入同一个节点时是相加(通道数不变)还是并联(通道数翻倍)。本文默认的是进入output节点的并联,进入其他节点的相加。这里1x1的一个作用就是调整通道数。
一些训练细节:
- 为了保证这些网络的公平性,使用了经过精心挑选的统一超参数。
- 训练部署方面,使用CIFAR10训练,学习率用余弦衰减逐渐降至0等,详细请看原文。
- 每个模型分别训练3次,每个训练会产生{4,12,36,108}个epoch的训练结果,因此总共有个模型。
训练结果可通过(模型,epoch,第x次训练)进行查找,结果包含:
- 训练准确率(training accuracy)
- 验证准确率(validation accuracy)
- 测试准确率(testing accuracy)
- 训练时间
- 可训练参数数量
其中只有训练和验证准确性应当被用于训练过程,测试准确率是算法结束时供统计使用的。训练时间可以用来优化固定时间内的准确率及用来评估多物体优化算法耗时。
随后给出了训练集的用法:
- 每个训练集的查询方法是查询(模型,epoch)
- 算法应当从查询到的3个模型中随机选择一个以模拟SGD过程
- 模型效果由验证准确率(validation accuracy)给出
- 在总用时达到一个限制后,停止搜索
- 停止搜索后,最优模型的效果由测试准确率(testing accuracy)给出
- 最终的分数由搜索出的模型与整个数据集最优模型的测试准确率差值给出。
3.数据集的一些成果
1.数据集统计数据(下图为经验累积分布)
- 大部分模型实现了90%以上测试准确率
- 最优模型实现94.32%,ResNet和Inception相似的模型分别实现了93.12%和92.95%,与ResNet-56本身的测试结果93.03%相似
- 108epoch的验证集和测试集准确率相关性达到0.999,说明好的优化器不会过拟合验证集
- 训练epoch越多,准确率的随机性越低。
下图是训练的统计数据。左图可以看出训练时间、训练参数与准确率基本呈正相关,但却不是惟一的因素,因为最优cell并不是计算最多的。右图就是说训练时间短的一定不好,但时间长的不一定好。
2.架构设计
下图是将模型中的一个模块转换为另一个模块的精度变化情况。可以看出,把3x3卷积换成1x1卷积和3x3最大池化,性能下降的同时计算量也下降。而最大池化虽然参数少,但是计算量反而增加了。不过,最优架构里三个模块都有,说明这种变化并不绝对。
下图研究了深度与宽度的影响。深度和宽度都是适中最好。
下面左图研究的是相同网络结构表现的相似性。可以看到,结构越相似,其表现也越相似。
而右图研究的是到局部最优峰值的距离,约35.4%的模型到局部最优距离在6步以内。
写到这里有点不想写了。感觉后面的搜索方法实际上和普通的搜索方法非常相似。