首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【神经网络架构搜索】NAS-Bench-101: 可复现神经网络搜索

【神经网络架构搜索】NAS-Bench-101: 可复现神经网络搜索

作者头像
BBuf
发布于 2021-07-01 08:42:05
发布于 2021-07-01 08:42:05
1.4K00
代码可运行
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV
运行总次数:0
代码可运行

【GiantPandaCV导语】Google Brain提出的NAS领域的Benchmark,是当时第一个公开的网络架构数据集,用于研究神经网络架构搜索。本文首发GiantPandaCV,请不要随意转载。

Title

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
V7
  1. 边的最大个数设置为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该项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/google-research/nasbench

进入该项目文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd nasbench

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -e .

下载数据集:

  • 4个epochs训练的结果 (1.95 GB)https://storage.googleapis.com/nasbench/nasbench_full.tfrecord
  • 108个epochs训练结果子集(499MB)https://storage.googleapis.com/nasbench/nasbench_only108.tfrecord

4.3 使用教程

官方提供的demo如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【神经网络搜索】Single Path One Shot
【GiantPandaCV导读】Single Path One Shot(SPOS)是旷视和清华、港科大联合的工作。与之前的工作不同,SPOS可以直接在大型数据集ImageNet上搜索,并且文章还提出了一种缓和权重共享的NAS的解耦策略,让模型能有更好的排序一致性。
BBuf
2021/04/16
9680
单路径NAS: 在四小时内设计出给定硬件内最有效的网
这篇paper[Single-Path NAS: Designing Hardware-Efficient ConvNets in less than 4 Hours]是2019年4月在arxiv上的新文章,来自CMU、微软和哈工大,论文提出了Single-Path NAS,将搜索时间从200 GPU时降低至4 GPU时,同时在ImageNet上达到了74.96% top-1的准确率。
小白学视觉
2022/09/28
4400
经典神经网络 | GoogleNet 论文解析及代码实现
利用赫布理论和多尺度处理直觉设计一种增加深度和宽度的提高内部计算资源利用率的(同时保持了计算预算不变)网络。GoogleNet在ImageNet分类比赛的Top-5错误率降到了6.7%。
墨明棋妙27
2022/09/23
4230
【神经网络架构搜索】SMASH直接生成候选网络权重
【GiantPandaCV导读】SMASH提出使用HyperNet来生成目标网络的权重的方法,在相关性假设的前提下,可以得到网络架构的相对排序,从而获得最优架构。最后对最优架构继续retrain。
BBuf
2021/07/01
4670
【神经网络架构搜索】SMASH直接生成候选网络权重
CVPR 2019 神经网络架构搜索进展综述
本文将介绍今年于美国长滩举办的CVPR2019会议上展示的神经网络架构搜索(NAS)领域的研究成果。原标题:Neural Architecture Search at CVPR 2019
AI科技评论
2019/07/30
6550
神经网络架构搜索(NAS)
我们大多数人可能都知道ResNet的成功,它是2015年ILSVRC图像分类、检测和定位的大赢家,也是2015年MS COCO检测和分割的大赢家。它是一个巨大的体系结构,到处都有跳跃连接。当我使用这个
商业新知
2019/07/02
1.6K0
神经网络架构搜索(NAS)
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。
平凡之路.
2025/06/02
2430
多图演示高效的神经架构搜索
设计不同类型的神经网络诸如图像分类和自然语言理解通常需要大量的网络架构工程及专业知识。神经架构搜索(NAS)可使这些手工设计过程自动化。学界对NAS的研究兴趣与日俱增,特别是用于最近的深度学习模型优化。探索和发现神经网络架构有很多方法。这里小结一下在过去几年里,深度学习社区已经发展出以下方案,包括:
AI研习社
2019/06/10
9180
多图演示高效的神经架构搜索
ICML 2020 | 提升神经网络架构搜索稳定性,UCLA提出新型NAS算法
可微网络架构搜索(DARTS)能够大幅缩短搜索时间,但是其稳定性受到质疑。随着搜索进行,DARTS 生成的网络架构性能会逐渐变差。最终生成的结构甚至全是跳过连接(skip connection),没有任何卷积操作。在 ICML 2020 中,UCLA 基于随机平滑(random smoothing)和对抗训练(adversarial training),提出了两种正则化方法,大幅提升了可微架构搜索算法的鲁棒性。
机器之心
2020/07/24
5320
最优的卷积神经网络架构设计
虽然,深度学习在近几年发展迅速。 但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段。
商业新知
2019/07/02
7800
最优的卷积神经网络架构设计
神经网络架构搜索——二值可微分搜索(BATS)
本文提出了二进制架构搜索(BATS),这是一个通过神经架构搜索(NAS)大幅缩小二进制神经网络与其实值对应的精度差距的框架。实验表明,直接将NAS 应用于二进制领域的结果非常糟糕。为了缓解这种情况,本文描述了将 NAS 成功应用于二进制领域的 3 个关键要素:
AI异构
2020/07/29
1.1K0
神经网络架构搜索——二值可微分搜索(BATS)
卷积神经网络——中篇【深度学习】【PyTorch】
全连接层是网络里参数比重最高的地方(参数=输入通道*高*宽*输出通道*高*宽),尤其是卷积后的第一个全连接层。而卷积层参数就小得多。所以用卷积层替代全连接层,参数会更少。
来杯Sherry
2023/08/24
3410
卷积神经网络——中篇【深度学习】【PyTorch】
MnasNet:经典轻量级神经网络搜索方法 | CVPR 2019
论文: MnasNet: Platform-Aware Neural Architecture Search for Mobile
VincentLee
2020/07/14
7000
论文笔记系列--MnasNet:Platform-Aware Neural Architecture Search for Mobile
MnasNet的目的很简单就是设计出表现又好,效率又高的网络。在介绍之前简单回顾一下现有的一些提高网络效率的方法:
marsggbo
2020/01/22
1.4K0
论文笔记系列--MnasNet:Platform-Aware Neural Architecture Search for Mobile
神经网络架构搜索——可微分搜索(DARTS)
神经网络架构搜索之前主流的方法主要包括:强化学习,进化学习。他们的搜索空间都是不可微的,Differentiable Architecture Search 这篇文章提出了一种可微的方法,可以用梯度下降来解决架构搜索的问题,所以在搜索效率上比之前不可微的方法快几个数量级。可以这样通俗的理解:之前不可微的方法,相当于是你定义了一个搜索空间(比如3x3和5x5的卷积核),然后神经网络的每一层你可以从搜索空间中选一种构成一个神经网络,跑一下这个神经网络的训练结果,然后不断测试其他的神经网络组合。这种方法,本质上是从很多的组合当中尽快的搜索到效果很好的一种,但是这个过程是黑盒,需要有大量的验证过程,所以会很耗时。而这篇文章把架构搜索融合到模型当中一起训练。
AI异构
2020/07/29
3.1K0
神经网络架构搜索——可微分搜索(DARTS)
【机器学习】---神经架构搜索(NAS)
随着深度学习的成功应用,神经网络架构的设计变得越来越复杂。模型的性能不仅依赖于数据和训练方法,还依赖于网络架构本身。然而,手工设计一个适用于不同任务的高效架构需要大量的领域知识和实验。这时,**神经架构搜索(Neural Architecture Search,NAS)**应运而生,作为自动化寻找神经网络最佳架构的工具,它在一定程度上缓解了设计者的工作量,并能找到比人类手工设计更高效的架构。
Undoom
2024/09/23
1.1K0
【神经网络搜索】DARTS: Differentiable Architecture Search
【GiantPandaCV】DARTS将离散的搜索空间松弛,从而可以用梯度的方式进行优化,从而求解神经网络搜索问题。本文首发于GiantPandaCV,未经允许,不得转载。
BBuf
2021/03/10
1.6K2
语义分割领域开山之作:Google提出用神经网络搜索实现语义分割
AI 科技评论按:本文作者陈泰红,邮箱 ahong007@yeah.net,他为 AI 科技评论撰写了 Google 利用神经网络搜索实现语义分割的独家解读。
AI科技评论
2018/10/25
7670
语义分割领域开山之作:Google提出用神经网络搜索实现语义分割
图解高效神经网络结构搜索(ENAS)
本文翻译自:[Illustrated:EfficientNeuralArchitectureSearch]
小白学视觉
2022/12/27
4880
图解高效神经网络结构搜索(ENAS)
总结神经网络架构搜索(NAS算法)
我们大多数人可能都知道ResNet的成功,它是2015年ILSVRC图像分类、检测和定位的大赢家,也是2015年MS COCO检测和分割的大赢家。它是一个巨大的体系结构,到处都有跳跃连接。当我使用这个
商业新知
2019/07/09
3.1K0
总结神经网络架构搜索(NAS算法)
推荐阅读
相关推荐
【神经网络搜索】Single Path One Shot
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档