One-Shot NAS可以认为是权值共享的另一种实现方法(第一种是基于Controller RNN的强化学习方法,代表论文是ENAS),它的基本思想是训练时包含了所有输入操作路径,而在预测时只会保留其中一两条,零化其他的的操作路径。本博客重点介绍了one-shot方法的两种实现论文,一篇是早期谷歌推出的Understanding and Simplifying One-Shot Architecture Search,另外一篇是旷视出品的Single Path One-Shot Neural Architecture Search with Uniform Sampling。

Understanding and Simplifying One-Shot Architecture Search

方法

这一篇论文的整体网络结构和基本单元设计大体上也沿用了NASNet的思想,如图1所示。整体的网络结构基本上是通过Cell堆叠的方法,Cell的两个输入是前两个Cell的输出,Cell里面是Block之间的操作和连接选择,每个block由7种可选的操作共同构成。这种Supernet的设计思想和DARTS基本一致,当然也有区别的地方,在Cell内部,每个block可以与前面两个Cell和前继block选择连接或者不连接,在block里面最多可选择2个操作,DARTS只能选择1个,block的输入操作是先Concat所有的输入,再用1×11\times 11×1 ConvConvConv成固定的channel大小,还有一个明显的区别是one-shot搜索和训练时Cell的block只有4个,但是DARTS在搜索的时候block个数是14个、训练时保留4个。

图1. One-Shot方法的网络架构和基本单元的设计

为了让one-shot的Supernet模型和子独立模型的最后结果相关,论文在训练的时候做了以下的处理:

  1. Dropout:训练的时候让block的部分操作零输出,训练的过程会线性增大dropout系数比例,dropout比例被设置为r1/kr^{1/k}r1/k,其中k是block的输入个数,当输入个数越多时,block里面的每个操作被抑制的可能性越大,尽管所有路径同时被抑制的可能性是一样的。还有一个trick是同一个Cell不同Block的dropout比例是独立的,不同Cell之间执行一样的dropout比例系数。
  2. BN:为了网络的稳定,操作顺序遵循BN-ReLU-Conv的设计。作者通过分析发现:当每个Batch的样本独立drop时能保证训练稳定,但是对BN训练不起作用,而每个Batch统一drop时能对BN训练起作用,但是会导致训练不稳定。所以最后作者将一个1024的batch分成32个ghost batch,每个ghost batch内部drop同样的路径,在不同ghost batch之间drop不同的路径。
  3. L2正则化:为了防止被过分正则化,Loss的L2正则项只会在没有被dropout的操作权重上计算。

在搜索阶段(One-Shot模型训练)结束后,和DARTS一样,根据不同计算量等级的要求,在调整放大Cell和基本channel的个数后,重新开始训练。在本论文的实验设置里,Cifar-10数据上有6个Cell,ImageNet数据上有8个Cell。

实验

作者做了许多实验,分析不同dropout比例的影响,以及one-shot和子独立模型之间精度相关性,这里我就不具体展开,有兴趣的读者可以自行参阅论文的实验部分。

最后讲一下one-shot方法在Cifar-10和ImageNet上的实验结果,论文首先随机挑选20,000个模型,然后从100-top的模型中再选取满足约束条件的10个样本进行进一步的训练(训练超参数不变)。表1和表2中的Small和Top分别表示相同模型架构里有较少和较多的卷积核个数。结果表明,在相同参数量等级的条件下,One-Shot方法具有比其他NAS方法相对更高的准确率。

表1. One-shot在Cifar-10上的实验结果和对比

表2. One-shot在ImageNet上的实验结果

Single Path One-Shot Neural Architecture Search with Uniform Sampling

上面的One-Shot论文存在一个问题,就是搜索的结果对dropout系数比例十分敏感,不同dropout系数会导致搜索结果存在较大的差别,所以精心挑选dropout系数是one-shot方法最后能否成功的关键。这篇论文主要目的就是为了解决这个dropout的问题,只需要使用单路径和均匀采样的方法就可以取得比谷歌one-shot方法更好的效果。

方法

如果对Supernet的子网络选择加入了基于概率分布的方法,那么Supernet的网络权重训练公式可以被认为是:

在每次采样时,只有子网络部分a会去激活和更新,其他部分处于抑制的状态,使用这种方法更新的话,超网络将不再是一个有效的网络,而是表现为一个随机超网络。

和谷歌one-shot采样dropout方法不一样,本文采样的是更极端的方法,每次在choice block里面只选择一条路径,而至于选择哪一条路径,则由一个简单的均匀分布概率决定(在约束条件的限制下),因为均匀分布是一个固定的概率分布,所以在搜索阶段并没有引入了新的超参。

通过实验发现,这种均匀分布方法比基于可学习分布的方法更好。但是作者强调,均匀分布并非因为是固定参数分布才比可学习分布更好,而是当前的优化技术比较难以同时优化权重和分布参数。

在搜索空间上,除了可以搜索choice block的操作外,还可以额外搜索block输入输出的通道数,以及block的输入与核权重的比特数。通道搜索时会设置一个最大的通道数,随机采样一个较小的通道数,卷积核的大小作出相应的调整,如图1左所示。量化比特搜索会给定一个比特位(包括特征输入和核权重参数)的搜索空间,从里面去选取,将输入和核权重量化后再进行卷积操作,如图1右所示。

图1. 通道和量化比特的搜索空间

在完成Supernet的训练之后,本文使用了进化算法去搜索最佳的子网络模型。进化算法也没有独特的创新点,是常见的选择+交叉+变异的操作,进化操作需要在约束条件下进行,得到满足条件的子个体,进化算法过程如表1所示。种群个体数为50,最大迭代次数为20,每代更新保存最优的10个样本。作推理时,子网络的BN使用训练数据的子集(在ImageNet里是20000张)重新计算BN,而不是直接使用Supernet训练的结果。从图2里可以看出进化搜索比随机方法的效率更高。

表1. 基于进化算法的架构搜索

图2. 进化算法和随机算法的搜索迭代效果对比

综上所述,本文的创新主要体现在:

  1. 训练Supernet时基于均匀分布(Uniform Distribution)采样一条路径(One Path)
  2. 搜索空间上加入了通道数和混合精度比特位
  3. 搜索最佳子网络使用启发式进化算法,使用数据子集重新计算BN

实验

接下来是实验的部分,作者进行了三组实验的分析。

在搜索block的实验上,基本网络结构借鉴了ShuffleNet v2的设计思想。Supernet有20个choice block,每个block有choice_3,choice_5,choice_7和choice_x四种选择,约束条件为300M < FLOPs < 330M。表2左是Supernet架构设计,表2右是block搜索实验的训练结果。

表2. Block搜索实验的Supernet架构和训练结果

论文又加入了对通道数的搜索,通道数的搜索范围从基准通道的0.2倍到1.6倍,步长是0.2倍,约束条件仍然是小于330M。作者发现先搜索block,然后在一个最好的block上搜索通道,比同时搜索block和通道的效果更好。实验结果和其他方法的对比如表3所示,从表中可以看出,该方法在同等计算量条件下,具有更高的Top-1准确率。

表3. Channel搜索实验的训练结果

论文也做了同时搜索通道和量化比特位的实验,以ResNet-18和ResNet-34为例,核权重和输入特征的比特搜索空间为:{(1,2), (2,2), (1,4), (2,4), (3,4), (4,4)},集合的每个元素左边表示权重参数比特位,右边表示输入特征量化比特位;bottleneck的通道数搜索空间为{0.5x, 1.0x, 1.5x},其中x表示原始通道大小。在量化方式统一使用PACT方法,实验结果如表4所示。

表4. 量化比特搜索实验的训练结果

作者还和Proxyless、FBNet的方法对比了搜索和重新训练的GPU时长。可以看到,在总搜索时间和最好子网络的重新训练时长上,本文One-Shot均有一定的优势,如表5所示,Gds为GPU天数。

表5. 搜索和训练GPU时长对比

One-Shot NAS相关推荐

  1. CVPR2020 | 利用NAS搜索针对对抗攻击的鲁棒神经网络结构

    本文介绍CVPR 2020 论文 When NAS Meets Robustness: In Search of Robust Architectures against Adversarial At ...

  2. 2021年 ICCV / NeurIPS / AAAI 中Neural Architecture Search (NAS) 神经网络结构搜索相关论文汇总

    这里写自定义目录标题 ICCV (35篇) NeurIPS / NIPS (28篇) AAAI (31篇) ICCV (35篇) Learning Latent Architectural Distr ...

  3. AutoML大赛夺魁!腾讯「太极伏羲队」在2022 CVPR NAS比赛中斩获冠军

    | 导语 由计算机视觉和模式识别领域学术顶会CVPR主办的2022 CVPR NAS大赛历时两个多月,于6月7号圆满结束.大赛开办后吸引了全球多个国家.超过400人参赛,是目前AutoML领域影响力最 ...

  4. 网易互娱AI Lab视频动捕技术iCap被CVPR 2022接收!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 动作捕捉技术在影视和游戏行业已得到广泛的应用,其中最常用的技术方案是光学动作捕捉.光学动捕需要演员穿着紧身动 ...

  5. NAS: One-Shot

    NAS概述 当前使用的网络结构大部分是由人手工设计的,但是手工设计网络是耗时的且容易出错.因此,neural architecture search(NAS)变的流行起来. NAS的工作可以根据三个方 ...

  6. 一文读懂目前大热的AutoML与NAS!

    点击我爱计算机视觉标星,更快获取CVML新技术 本文作者为奇点汽车美研中心首席科学家兼总裁黄浴先生,原载于知乎自动驾驶的挑战和发展专栏,原文链接: 自动机器学习AutoML和神经架构搜索NAS简介 h ...

  7. 神经网络架构搜索(NAS)综述

    在阅读近期的CVPR2019时,看到一篇比较亮眼的图像分割论文.来自斯坦福 Li Fei-Fei组(Auto-deeplab),关于利用NAS策略进行图像分割,达到了较优的水平,仅仅比deeplabv ...

  8. 【NAS】神经架构搜索概述

    NAS的套路大多是这样的:先定义搜索空间,然后通过搜索策略找出候选网络结构,对它们进行评估,根据反馈进行下一轮的搜索. 首先定义搜索空间.搜索空间定义基本是和DNN的发展相应.可以看到,早期的CNN大 ...

  9. 神经网络架构搜索(Neural Architecture Search, NAS)笔记

    目录 (一)背景 (二)NAS流程 2.1 定义搜索空间 2.2 搜索策略 (三)加速 (四)变体及扩展 4.1 扩展到其他任务 4.2 扩展到其他超参数 (一)背景 机器学习从业者被戏称为" ...

  10. 【网络架构搜索NAS】|概述

    一.背景 机器学习从业者被戏称为"调参工"已经不是一天两天了.我们知道,机器学习算法的效果好坏不仅取决于参数,而且很大程度上取决于各种超参数.有些paper的结果很难重现原因之一就 ...

最新文章

  1. asp.net webform 与asp.net mvc 混合开发项目总结
  2. ontouchevent android,android onTouchEvent处理机制总结(必看)
  3. spring aop 注释_使用Spring AOP,自定义注释和反射为您的应用程序审核基础结构
  4. vue本地没事放到服务器上无限循环,解决vue中的无限循环问题
  5. Redis+Twemproxy安装与使用
  6. Mac彻底删除WebStorm
  7. html 表格_HTML------表格
  8. leetcode 387. 字符串中的第一个唯一字符(First Unique Character in a String)
  9. c语言程序设计任正云,《C语言程序设计》任正云.ppt
  10. vue.js学习笔记1——安装及创建并运行vue实例
  11. nginx配置跨域对服务异常(包括404)时失效的解决
  12. html中固定浏览器最小化,浏览器自动最小化怎么解决,如何解决浏览器自动最小化...
  13. Java 下载并安装JDK7u80
  14. 吉几三的俺ら东京さ行ぐだ歌词
  15. amoeba mysql_Mysql 基于 Amoeba 的 读写分离
  16. 黑客专用文本编辑器Emacs中文手册
  17. 基于Python的人脸识别(68个识别点)和焦点人物检测
  18. 基于微信跳蚤市场二手交易小程序系统设计与实现 开题报告
  19. 程序员的头符合好头的标准吗?
  20. 除了打工上班,为什么普通人很难长时间坚持去做一件事?

热门文章

  1. 《资本论》 商品的拜物教性质及其秘密
  2. cout一位小数_C++怎样输出一个小数点后有10位的小数?
  3. 运维之监控与安全篇------3.监控常用命令 、 Nagios监控
  4. 清理C盘垃圾,设置默认安装到其他盘
  5. 6-2 计算长方体的表面积和体积
  6. 【畅购商城】用户注册以及整合JWT
  7. DevOps到底是什么意思?看完这篇不要再问我了
  8. 在vps上安装vscodeserver
  9. css定位叠放次序:z-index
  10. 交互式多模型 IMM的原理及代码实现(matlab)