首页 > 其他分享 >NAS-bench-101

NAS-bench-101

时间:2023-03-18 20:36:07浏览次数:59  
标签:nasbench 训练 bench NAS 3x3 搜索 101

0. 摘要

神经网络搜索近年来取得进步巨大,但是由于其需要巨大的计算资源,导致很难去复现实验。本文目标是通过引入NAS-Bench-101的方法来缓解以上问题。在NAS-Bench-101中,设计了一个紧凑且丰富的搜索空间。通过图同构的方式来区别423k个网络架构。

在CIFAR10数据集上多次训练以上所有网络,并得到验证集上的结果。这使得研究人员可以通过查询预先计算的数据集,以毫秒为单位评估各种模型的质量。通过分析数据集作为一个整体,并通过对一系列架构优化算法进行基准测试来证明它的实用性。

1. 介绍

简单来说,NAS-Bench-101就是谷歌设计了一个搜索空间,在搜索空间中穷尽枚举了大约5百万个子网络。在CIFAR10数据集上进行训练,在验证集上测试。将子网的结构以及对应的验证集精度记录下来,形成一个表,研究人员使用的时候只需要通过查表就可以得到对应的验证集精度,这样就不需要重新训练和测试,降低了对计算资源的依赖。

为了摸清这篇工作内容,我们需要搞清楚几个关键点:

  • 搜索空间,如何设计搜索空间的?
  • 训练策略,采用了什么训练策略?
  • 使用方法,研究人员如何使用NAS-bench-101?
  • 潜在方向,使用nas-bench-101有哪些潜在的研究方向?

2. 搜索空间

NasBench101中设计的搜索空间是基于cell的搜索空间,如图所示,网络的初始层(conv stem)是由3x3卷积和128的输出通道组成的主干,每个单元堆叠三次,然后进行下采样,使用最大池化将通道数和空间分辨率减半,最后使用一个global average pooling和一个softmax层得到分类的概率。

 

 

 

网络骨架构成

每个cell内部有V个节点,每个节点包括L个标签,分别代表相应的操作。其中in和out代表输入的tensor和输出的tensor。该有向无环图的搜索空间与V和L呈指数关系增长,为了控制搜索空间的大小,提出了以下几个约束:

  1. L=3,包括3x3卷积、1x1卷积、3x3 maxpool
  2. V\le 7
  3. 边的最大个数设置为9
 

 

 

cell内部示意图

单元编码方法:Nas-Bench-101中使用了一个通用的编码方式,有7个顶点的有向无环图,使用7x7的上三角二进制矩阵和一个包含5个标签的列表(分别代表5个中间节点的op)

区分同构的cell 在以上搜索空间中,存在不同的邻接矩阵或者不同标签,但计算等价的模型,这就称为同构的cell

 

 

 

两个同构的cell

从上图得知,两个cell虽然编码不相同,但实际的计算过程是相同的。所以采用迭代图哈希算法来快速确定两个cell是否是同构的。

经过去掉不符合要求和同构的网络以后,剩下了大概423k个子网络。

此外,还有一个小问题:通道个数的匹配和特征融合方法的选择。Nas-Bench-101进行了认为固定设置,如下图所示:

 

 

 

融合方法

上图中&代表concate操作,+代表addition操作,proj代表1x1卷积。所以具体策略是:将所有指向输出节点的张量concate到一起,将指向其他顶点(非输出节点)的张量add到一起。来自输入顶点的输出张量使用1x1卷积映射,以匹配通道个数的一致性。

3. 训练策略

由于训练策略的不同对最终的实验结果造成的影响非常大,所以要对训练策略、实现细节、超参数选取进行确认。

参数选择:对所有的Nas-bench-101模型选取一组固定的参数,而并不是对每个模型自己设置各自的超参数。而固定的超参数的选择是通过网格搜索50个随机抽样得到的子网络平均精度得到的。

实现细节: 使用和resnet一致的数据增强技术,learning rate使用cosine decay, 使用RMSporp作为优化器。

 

 

 

超参数选择

4. 使用方法

4.1 评价指标

nas-bench-101中使用到了以下几种指标:

  • 训练精度
  • 验证精度
  • 测试精度
  • 训练时间
  • 训练模型参数

4.2 安装环境

从github上clone该项目

git clone https://github.com/google-research/nasbench

进入该项目文件夹

cd nasbench

安装(若当前环境中无tensorflow cpu版本,该步会安装Tensorflow)

pip install -e .

下载数据集:

4.3 使用教程

官方提供的demo如下所示:

from absl import app
from nasbench import api

# Load the data from file (this will take some time)
nasbench = api.NASBench('/home/pdluser/download/nasbench_only108.tfrecord')


INPUT = 'input'
OUTPUT = 'output'
CONV1X1 = 'conv1x1-bn-relu'
CONV3X3 = 'conv3x3-bn-relu'
MAXPOOL3X3 = 'maxpool3x3'

# Create an Inception-like module (5x5 convolution replaced with two 3x3
# convolutions).
model_spec = api.ModelSpec(
    # Adjacency matrix of the module
    matrix=[[0, 1, 1, 1, 0, 1, 0],    # input layer
            [0, 0, 0, 0, 0, 0, 1],    # 1x1 conv
            [0, 0, 0, 0, 0, 0, 1],    # 3x3 conv
            [0, 0, 0, 0, 1, 0, 0],    # 5x5 conv (replaced by two 3x3's)
            [0, 0, 0, 0, 0, 0, 1],    # 5x5 conv (replaced by two 3x3's)
            [0, 0, 0, 0, 0, 0, 1],    # 3x3 max-pool
            [0, 0, 0, 0, 0, 0, 0]],   # output layer
    # Operations at the vertices of the module, matches order of matrix
    ops=[INPUT, CONV1X1, CONV3X3, CONV3X3, CONV3X3, MAXPOOL3X3, OUTPUT])

# Query this model from dataset, returns a dictionary containing the metrics
# associated with this model.
data = nasbench.query(model_spec) # 根据配置查询结果

result = nasbench.get_budget_counters() # 返回训练时间,epochs

print("data:", data)
print("result:", result)

fixed_metrics, computed_metrics = nasbench.get_metrics_from_spec(model_spec)
# 每个epoch结果
for epochs in nasbench.valid_epochs:
    for repeat_index in range(len(computed_metrics[epochs])):
        data_point = computed_metrics[epochs][repeat_index] # 重复次数 每个epoch重复的结果
        

输出结果:

 

 

 


 

result

如果设置边数太多会报错:

 

 

 

max edge=9

5. 实验内容

这篇论文中对nas-bench-101数据集的几个指标进行了统计,并深入探索了NAS的特性。

5.1 统计量

  • 经验累积分布empirical cumulative distribution ECDF
 

 

 

左图是准确率的经验累积分布,右图是噪声的经验累积分布

可以从准确率累积经验分布看出,accuracy在0.8-1.0之间分布居多,并且训练集结果逼近1;还可以从该图中观察到一个现象,即验证集和测试集的相关性比较高r=0.999, 这表明模型的训练并没有过拟合。

noise代表的是经过多次训练之间的准确率差异 ,可以发现108个epoch训练的noise最小。

  • 训练时间、可训练参数与训练精度之间的关系
 

 

 

训练时间、可训练参数与训练精度之间的关系

左图展示了横轴训练参数、纵轴训练时间和训练精度之间的关系,可以发现以下几个规律:

  • 模型容量比较小,参数量小,训练时间过长反而在验证集准确率不好。
  • 模型容量比较大,参数量大,训练时间大体上是越长效果越好。
  • 在训练时间相同的情况下,模型参数量越大,验证机准确率越高。

右图展示了训练时间和训练精度的帕累托曲线,实验发现resnet、inception这类人工设计的模型非常靠近帕累托前沿。这表明网络拓扑和具体操作的选择非常重要。

5.2 架构设计

为了探寻选取不同操作的影响,进行了替换实验,将原先的op替换为新op以后查看其对准确率的影响。

 

 

 

探寻不同op的影响

从上图中可以得到以下发现:

  • 将卷积替换为池化带来的负面影响比较大。

  • 将池化替换为卷积带来的正面影响比较大。

  • 将3x3卷积替换为1x1卷积或池化可以有效降低训练时间。

5.3 局部性

NAS中的局部性是:相似的网络架构的准确率也是相似的。很多NAS算法都在利用NAS的局部性原理来进行搜索。局部性衡量的指标是RWA(random-walk autocorrelation) 即随机游走自相关。RWA定义为当我们在空间中进行长距离随机变化时所访问的点的精度的自相关

RWA在比较近的距离上有较高的相关性,反映了局部性。从下图中发现,当距离超过6以后,就无法判断是否是相关性还是噪声,所以搜索的过程最好约束在6以内。

 

 

 

RWA

6. 总结

nas-bench-101是一个表格型的数据集,在设计的搜索空间中找到网络的架构,并通过实际运行得到每个epoch的验证集结果。使用过程比较方便,根据规定配置从nas-bench-101中找到对应的网络架构以及相应的准确率、参数量等信息。

7. 参考文献

https://arxiv.org/pdf/1902.09635.pdf

https://github.com/google-research/nasbench



作者:pprpp
链接:https://www.jianshu.com/p/94ee9cfef349
来源:简书

标签:nasbench,训练,bench,NAS,3x3,搜索,101
From: https://www.cnblogs.com/zhangxianrong/p/17231662.html

相关文章

  • Python3使用WOL唤醒群晖NAS
    1.pip3installwakeonlanpip3installwakeonlanLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleCollectingwakeonlanDownloadinghttps://pypi.t......
  • 在Mac OS X中使用WOL命令唤醒群晖NAS
    1.安装wakeonlan(base)➜~brewinstallwakeonlanUpdatingHomebrew...==>Downloadinghttps://ghcr.io/v2/homebrew/core/wakeonlan/manifests/0.41###########......
  • 汽车级车规级TVS二极管,符合AEC-Q101标准,有哪些?
    “国产车规级TVS管,有哪些?”来自广东东莞的陈工咨询到。根据客户的问题,可知,客户对于TVS管的需求有两点:第一点是TVS要符合车规级。那么,什么样的TVS管是车规级的呢?以TPSMAJ33CA......
  • PAT 甲级 1012 The Best Rank(25)
    ToevaluatetheperformanceofourfirstyearCSmajoredstudents,weconsidertheirgradesofthreecoursesonly:C-CProgrammingLanguage,M-Mathematics......
  • day15 打卡102. 二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 2
    day15打卡102.二叉树的层序遍历226.翻转二叉树101.对称二叉树2102.二叉树的层序遍历102题目链接1.使用队列classSolution{publicList<List<Integer>>le......
  • NAS通过Alist挂载公共云盘并用WebDAV本地加载的注意事项
    前言NAS采用Dock的方法,用Alist程序挂载阿里云盘后通过WebDAV加载使用,是一个很实用的需求,很好的实现了云端存储本地管理。关于NAS通过Alist挂载公共云盘,网上有很成熟的贴......
  • truenas的jals下忘记nextcloud的管理员密码
    之前安装的nextcloud的,但是最近忘记了admin的密码,,之前网上搜索了下,发现都是ubuntu下的,直接命令是不行,也看了官网的说明,直接使用都是不行,后来尝试,终于成功了,此处特意留档,记录......
  • Windows-ApacheBench的安装和使用
    ApacheBench是什么ApacheBench是一个用来衡量http服务器性能的单线程命令行工具。原本针对Apachehttp服务器,但是也适用于其他http服务器。ab工具与标准Apache源码一起发......
  • PAT Basic 1019. 数字黑洞
    PATBasic1019.数字黑洞1.题目描述:给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得......
  • 个人数据保全计划:(2)NAS基础知识
    前言距离去年国庆入手了NAS至今有好几个月时间了,NAS折腾起来有点麻烦,且实际作用因人而异,并没有想象中的好用,所以说好的这个系列一直没有更新~还有另一方面的原因,这些NAS......