SPOS2019-arxiv-Single Path One-Shot Neural Architecture Search with Uniform Sampling

Posted chenbong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPOS2019-arxiv-Single Path One-Shot Neural Architecture Search with Uniform Sampling相关的知识,希望对你有一定的参考价值。

SPOS

2019-arxiv-Single Path One-Shot Neural Architecture Search with Uniform Sampling

Introduction

构建一个简化的超网,在训练阶段,每次训练单条路径,减少权重耦合;在搜索阶段使用EA算法。

  • 训练(超网)阶段:随机抽single path进行训练

  • 搜索(子网)阶段:使用EA算法搜索满足特定限制(FLOPs,latency)的子网

训练,搜索两阶段思路清晰,简单有效,ablation study实验丰富。

Motivation

基于weight-sharing的NAS方法存在2个问题:

  • 子网权重耦合的问题:子网的权重之间存在高度耦合,直接继承超网的权重,而且权重对子网仍然有效,没有理论依据(超网中不同的路径被训练的程度不同,有的路径被训练得多,有的被训练得少)

  • 结构参数和网络权重耦合的问题:搜索空间松弛(离散化=>连续化,如DARTS系列)的基于梯度的方法中,结构参数(arch parameter)和网络权重(weight)联合优化,容易陷入“强化初始的选择“的局部最优当中去;(如第一次随机选择/抽样了某个子网,这个子网上路径上的权重会被训练,后续选择的过程中,这个子网路径上的性能表现更好,更容易被抽到,就陷入一直强化第一次选择的子网的过程,有的路径被一直训练,而有的路径没有得到充分训练。因此初始的随机选择对结果影响非常大,收敛后可能只是局部最优)

一些one-shot工作* 不使用可微分方法联合优化结构参数(arch parameter)和网络权重(weight),解决了第二个问题,将“超网训练”和“结构搜索”两个过程分离开来。

但第一个问题仍然存在,即子网络之间参数耦合的问题。【ProxylessNAS】 等使用Path Dropout的超参数来减少路径之间的耦合,但实验结果对超参非常敏感,超参的选择困难且超网比较难训练。

技术图片

*这里的one-shot指的是狭义上的one-shot,即不使用可微分方法的超网抽样子网的方法,如【Understanding One-Shot NAS】SMASH,广义上DARTS系列使用可微分的方法也属于one-shot

Contribution

为了解决以上2个问题,

  • 提出了一种简单的训练方式(single path),每个路径都会被等概率地充分训练,后续抽样的时候不同路径的训练程度都相同,来解决子网络权重耦合问题;
  • 提出了有效的搜索方式(EA),将超网训练和子网搜索分离为2个单独的步骤,解耦网络权重与网络结构的关系,同时可以容易实现各种约束(FLOPs,latency),而且是hard约束(使用EA多次搜索,直到搜索到满足约束条件的子网),而不是soft约束(比如在loss上加latency损失项就属于soft约束,soft约束只能将网络大致限制在某个值,可以理解为多个损失项之间的权衡,如果一个网络acc loss 非常小,可以牺牲一点latency约束,所以不能实现精确的约束)。

Method

训练超网阶段

(W_{mathcal{A}}=underset{W}{operatorname{argmin}} mathcal{L}_{operatorname{train}}(mathcal{N}(mathcal{A}, W)) qquad(6))

A代表超网的结构参数,W代表超网中所有的weights

(W_{mathcal{A}}=underset{W}{operatorname{argmin}} mathbb{E}_{a sim Gamma(mathcal{A})}left[mathcal{L}_{operatorname{train}}(mathcal{N}(a, W(a))) ight] qquad (8))

(mathbb{E}_{a sim Gamma(mathcal{A})}) 表示a是在A中均匀采样

搜索子网阶段

(a^{*}=underset{a in mathcal{A}}{operatorname{argmax}} mathrm{ACC}_{ ext {val }}left(mathcal{N}left(a, W_{mathcal{A}}(a) ight) ight) qquad (7))

a表示子网的结构参数,a*表示最佳子网的结构参数

搜索最佳的子网(的结构参数)

搜索空间:

技术图片 技术图片

搜索空间中的输入通道数,和输出通道数可以看做“最大通道数”,实际搜索到的子网的通道数是<=“最大通道数”的。

搜索使用EA算法:

技术图片

EA搜索与随机搜索的比较:

技术图片

还可以搜索通道数和混合精度。

搜索通道数:

技术图片

细节:如何选择通道数,每个layer预先设置有max c_in ,max c_out,kernel size*,因此这个layer的最大参数量为 kernel_size × max_c_in × max_c_out,每次抽样的c_in由上个layer的c_out决定,c_in在<=max_c_in的范围内随机抽样,可以看出,不同的iter中抽到的该层的通道数都不相同,而这些参数又是共享的,多次抽样下,(作者说)会很快收敛。


*如果 kernel 为3×3,那么这里的kernel size=9

搜索混合精度

这部分不是很熟,先把结果放上来,后续再学习。

技术图片 技术图片

Experiments

batch size 1024,8*1080ti

supernet:120 epochs

best arch:240 epochs

整个网络共有20个choice blocks

技术图片

总体结构如下表:

每个choice block有4种候选(分别是choice_3, choice_5, choice_7, choice_x),共有20个choice blocks,因此搜索空间一共是(4^{20})

技术图片

由于之前大多数NAS的工作与手工设计网络的大小都在[300, 330],因此我们将FLOPs限制在<=330M

技术图片

说明:

1)第一部分:不同的choice_x block的FLOPs是不同的,因此我们调整(搜索?)不同的channels来满足FLOPs约束;全部使用单一种类的blocks(我的理解是,比如全部使用choice_3的block构建超网,训练超网,在超网中随机搜索出满足FLOPs约束的子网络,重新训练)

2)第二部分:在整个搜索空间(由4种block构建的spuernet)中随机搜索 和 在single path supernet中随机搜索;使用single path训练的spuer net搜索空间只比第一种略高。(我的理解是,第一种:由4种blocks构建的supernet,直接训练,然后随机搜索;第二种:由4种blocks构建的spuernet,使用single path训练,然后随机搜索)

3)第三部分:在使用single path训练过后的supernet中将随机搜索替换为EA搜索,效果比随机搜索高了0.5个点(74.3,这里的搜索在下文中被称为block search,我的理解是,这里搜索的子网每一层用的都是最大通道数)。

为了进一步提高acc,我们同时搜索 blcoks 和 channels:

这里有2种策略:

1)在best block search 的结果上,执行channels search

2)直接同时搜索 blocks 和 channels

实验表明,第一种稍微好一点

技术图片

与其他SOTA的比较(使用相同的搜索空间):

技术图片

有一些工作认为性能差异只是搜索空间设计的不同,在相同的搜索空间上,有些NAS的搜索策略与随机搜索策略几乎没有区别。

因此我们在NAS-Bench-201的子集上进行搜索,使用Kendall Tau metric评估我们搜索算法的好坏。

NAS-Bench-201包含有1.5w个网络结构,并提供这些结构在cifar-10,cifar-100,ImageNet-16-120数据集上的(充分训练后的)真实性能。

NAS-Bench-201有搜索空间有5种操作:

zeroize, skip connection, 1-by-1 convolution, 3-by-3 convolution, and 3-by-3 average pooling

我们将:

删除1-by-1 conv 操作后的搜索空间叫做:Reduce-1

删除3-by-3 avg pool 操作后的搜索空间叫做:Reduce-2

两个操作都删除的搜索空间叫做:Reduce-3

在这3个搜索空间上搜索的结果:

技术图片

根据Kendall Tau metric的定义,τ∈[-1, 1],随机搜索τ=0,我们的结果>0,即正相关,但依然不够好,即正相关性不够

发现:越简单的搜索空间,我们的搜索算法正相关性越强

Conclusion

Summary

Reference

知乎-2020-ICLR 拒稿讨论

https://chengfeng96.com/blog/2020/07/09/NAS-学习笔记(八)-Single-Path-One-Shot-NAS/

https://lixudong.ink/2019/10/21/AutoDL论文解读(七):基于one-shot的NAS/#三、Single-path-one-shot-neural-architecture-search-with-uniform-sampling

http://www.moonjian.top/2019/09/13/NAS-Reading-5/

以上是关于SPOS2019-arxiv-Single Path One-Shot Neural Architecture Search with Uniform Sampling的主要内容,如果未能解决你的问题,请参考以下文章

javascript设置input编辑框光标的位置

javascript A*算法 寻路算法 获取最短路径算法

如何正确计算 tf.nn.weighted_cross_entropy_with_logits pos_weight 变量

Silverlight 用户控制位置

pat甲级60分啥水平

pat甲级75分在啥水平