论文阅读:《Nas-bench-101: Towards reproducible neural architecture search》


pdf

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,都有如下信息记录:

  • 训练准确度
  • 验证准确度
  • 测试准确度
  • 训练时长
  • 可训练的参数数量

NASBench as a Dataset

NASBench as a Benchmark