论文阅读:《Nas-bench-101: Towards reproducible neural architecture search》
2019年
有关NAS本身的简介就跳过了。
本文的NAS-Bench-101数据集是第一个基于NAS的架构数据集。
NASBench dataset
NAS-Bench-101内部是一个表格,表格中是NA和其评估标准(比如识别准确度之类的指标)。
大多数NAS方法都是基于cifar-10图像分类数据集进行的训练,而且在cifar-10数据集上效果好的模型,在更复杂的benchmark上表现得也会不错。(更复杂的benchmark例如ImageNet)。因此本文NAS-Bench-101也是基于cifar-10的。
本文所涉及的架构遵循以下大框架:
这种一个主干(stem)后面跟若干个处理层-downsample结构的做法在手工设计和NAS方法中都很常见。
(我的理解是,这个大框架无论怎么搜都是不变的,变的是里面的cell)
cell的可变性就丰富了。
大体来说,我们用DAG(有向无环图)表示cell的内部结构,并用label表示某个节点所对应的算子类型。
有两个固有节点:IN和OUT。每个cell里面有且只有一个IN节点,有且只有一个OUT节点。它们代表了这个cell的输入tensor和输出tensor。
这个DAG拥有V个顶点和E个边,算子类型共有L个。如果对V、L不加限制,DAG的空间复杂度会呈指数上升,与V和L都是指数关系。
因此我们对这些参数进行如下限制:
- L=3,label(除IN、OUT)只能选
- 3x3卷积
- 1x1卷积
- 3x3 max-pool
- V$\le$7
- E$\le$9
所有卷积层后面都跟batch normalization和ReLU。
细节应该并没有在论文中完全展现。
这样的设计下,cell有机会搜索出inception之类的结构。
另外,一个顶点可能接受多个tensor的输入,那么我们该如何决定是将这些tensor相加求和,还是将它们concatenate?
本文采取的策略是,对于非residual连接,给到OUT顶点的都用concatenate,其他的就都用求和;对于residual连接,它必定给到OUT顶点,于是对它使用projection使其尺寸与其他tensor相同,然后相加。具体可见这张图:
NASBench中的每个架构A,都有如下信息记录:
- 训练准确度
- 验证准确度
- 测试准确度
- 训练时长
- 可训练的参数数量