01
什么是One shot NAS?
One-Shot NAS 有一个很大的特性就是:训练一次 Supernet,便可以针对各种不同的constraint,得到多种不同的 network。One-Shot NAS可以分成两个阶段,分别是 training stage 和 searching stage:
- Training stage:在这个阶段,并不会进行搜索,而是单纯训练 Supernet ,使得 Supernet 收敛至一定的程度。
当 Training stage 结束时, Supernet 中的参数就被训练收敛了,这个时候进入第二阶段。
- Searching stage:从 Supernet 中不断取出 Sub-network,并使用 Supernet 的 weight 给Sub-network赋权重,这样就可以得到不同的Sub-network 的 validation accuracy,直到取得最好且符合 hardware constraint 的 Sub-network。
正是因为weight shared,可以使用不同的search algorithm、evaluation algorithm(e.g., evolution algorithm, accuracy predictor),不断的从 Supernet 当中取出sub-network。通常有以下两类:
- Parameterized architectures
这类方法是将模型结构分布不断参数化,这些参数a在超网络训练期间与网络权重w进行联合优化。因此可以在优化时进行模型搜索,从分布中采样或组合最优的架构。为了使用基于梯度的优化器进行直接搜索,通常在supernet中引入实值分类分布(架构参数),以达到与supernet权重联合学习,如DARTS、FBNet和FBNetv2等。
- Sampled single-path architectures
通过直接搜索离散的搜索空间,利用sampling算法对超网进行训练,并对单条路径进行优化。采样可以是均匀抽样或公平的多径抽样。训练好的超级网通常作为不同路径的性能评估器。优化路径的方法可以是随机搜索、进化算法等。如GreedyNAS等
02
SMASH: One-Shot Model Architecture Search through HyperNetworks
常规的网络设计需要耗费大量的时间进行验证,为了节约验证时间,论文提出训练一个辅助网络HyperNet,用于动态生成不同结构模型的权重。尽管使用这些生成权重的性能不如常规学习到的权重,但在训练初期,使用生成权重的不同网络的相对性能可以在一定程度上映射出其最优状态时的相对性能。因此,论文提出one-shot模型结构搜索SMASH(one-Shot Model Architecture Search through Hypernetworks),结合辅助网络生成的权重,可以仅使用一轮训练来对大量的结构进行排序。SMASH方法用来评估广泛的模型配置(在连接模式和每层单位),不处理其他超参数,如正则化、学习速率调度、权重初始化或数据增强。
- 首先训练辅助网络HyperNet,在每个训练阶段,随机采样一个网络,然后使用HyperNet生成权重,end-to-end地对其进行完整的反向训练。
- 在训练好HyperNet后,随机采样大量的网络结构,使用HyperNet生成的权重,然后在测试集上验证性能。
为了探索具有深度、连接模式、层数等网络结构,设计了一个memory bank的前馈网络,能够生成复杂且多分支的拓扑结构,并且能够使用二进制向量进行编码。
训练一个辅助网络HyperNet,直接学习二进制结构编码到权重空间的映射。
03
ProxylessNAS: Direct Neural Architecture Search
Paper:https://openreview.net/forum?id=HylVB3AqYmCode:https://github.com/MIT-HAN-LAB/ProxylessNASNAS 可以自动设计有效的网络结构,但是由于前期算法只能在小型数据集如CIFAR-10上进行搜索,而在大型数据集会出现GPU memory 消耗和耗时长的问题。所以,很多算法就只能在 proxy task 上,例如在较小的数据集上训练,或者仅用几个 blocks 进行学习,或者仅仅训练几个 epoch。这就可能引出如下的问题,算法在小数据上的搜索出来的模型,可能在 target task 上并不是最优的。1、ProxylessNAS 不需要使用代理任务,直接在大规模的数据及上搜索整个网络2、为NAS提供了一种新的路径剪枝的方式,展示了NAS与模型压缩之间的紧密关系,最终通过二值化的手段将内存消耗降低了一个量级3、提出了一种基于梯度的方法(延迟正则化损失)来约束硬件指标。作者首先描述了 over-parameterized network 的构建,然后利用 binarized architecture parameters 来降低显存消耗,并提出一种基于梯度的方法,来训练这些 binarized architecture parameters。最后提出处理不可微分的目标(e.g. latency)的方法,使其可以在特定的硬件上处理特定的神经网络。
- over-parameterized network
网络结构定义为N(e,⋅⋅⋅,en), 其中 e表示一个有向无环图中一条确定的边,设O={oi}表示候选基础元操作,对于每一条边都对应了这些操作,而网络搜索的就是每个e该选择什么操作O,mO表示每条边上有并行的N条通路的混合操作,所以超参数化的网络结构可表示为以下形式。对于一个输入x,混合操作mO的输出结果是基于N条通路所形成的,在One-shot中mO(x)是{oi(x)}的和,当在DARTS中的时候mO(x)表示{oi(x)}的权重和,这个权重是通过对N条通路上的结构参数取softmax得到的。
ProxylessNAS 的做法是先构建一个多路径的大网络,训练完后做 pruning 掉冗余的路径。为了解决显存占用和 search candidates 线性增长的问题,将路径上的 arch parameter 二值化(参考了 BinaryConnect),在搜索时仅有一条路径处于激活状态。
- Handling Non-Differentiable hardware Metrics
为了使延迟可微,这里的做法是将网络的延迟建模为神经网络维度的一个连续函数。
04
Single Path One-Shot Neural Architecture Search with Uniform Sampling
Paper:https://arxiv.org/abs/1904.00420Code:https://github.com/megvii-model/SinglePathOneShotone shot将问题解耦成了train 和 search两部分,a和w 不会再有耦合关系。但其仍然没有解决w参数自身耦合的问题。而SPOS在train阶段每次sample一个architecture,然后只更新 w,为了最大限度地减少耦合,每次sample出的architecture只是A的一个single path。论文提到的sample方法有2种:uniform sample 和 uniform constraint sample。为减少节点权重之间的协同适应,旷视研究院提出最大化简化搜索空间,它只包含单一路径架构,在每次训练时仅sample一个。不存在任何调优。旨在搜索一个卷积层的通道数。其主要思想是预先分配一个带有最大通道数的权重张量。在超网络训练期间,系统随机选择通道数并分割出用于卷积的相应的子张量。Mixed-Precision Quantization Search选择单元可以搜索卷积层权重和特征的量化精度。在超网络训练中,特征图的位宽和和权重被随机选取。使用进化算法和随机搜索两种方法在进化迭代时的验证集精度。结果表明进化算法搜索更有效。
05
GreedyNAS: Towards Fast One-Shot NAS with Greedy Supernet
Arxiv: https://arxiv.org/abs/2003.11236训练一个超级网对于one shot nas方法很重要,因为它可以作为不同架构(路径)的基本性能估计器。目前的方法主要假设应该对所有路径给出合理的排名。然而,对于一个超级网络来说,在如此巨大的搜索空间上精确地评估是很困难的。在本文,提出了不必覆盖所有的路径,而是通过鼓励超级网更多地关注那些潜在的好的路径的评估,来缓解超级网的负担,使用验证数据的代理项部分。具体来说,在训练过程中,提出了一种带抑制的多径采样策略,并对弱路径进行贪婪滤波。因此,训练空间已经贪婪地从所有的道路缩小到那些潜在的好的道路。此外,还采取了进一步的探索和通过引入一个经验性候选人来制定开发政策路径池。GreedyNAS在ImageNet数据集上的实验结果表明,在相同的条件下,它可以达到更好的Top-1精度搜索空间和触发器或延迟级别,但只有supernet训练成本的60%。(1)巨大的搜索空间带来的评估压力使Supernet难以准确地区分结构的好坏(2)由于所有结构的权重都是在Supernet中高度共享的,如果一个差的结构被训练到了,好的结构的权重也会受到干扰。这样的干扰会削弱好网络的最终评估精度,影响网络的搜索结果。(3)对差的结构进行训练相当于对权重进行了没有必要的更新,降低Supernet的训练效率。本文目的是把不同路径分为好路径和坏路径,方法是通过一次性采样多条(m条)路径,在验证集的子集直接通过计算损失对不同路径进行排序。最后采样m条路径,保留前k条(m-k条判定为坏路径,直接抛弃不训练)。Greedy training of supernet:上述算法得到的k条路径,更新候选池,再分别对每条路径进行参数优化Training with exploration and exploitation指训练时每次以概率ε从候选池选模型,同时以1-ε的概率从整个搜索空间中选模型,避免有些好模型不在候选池中没有被发现,两种方式一共选m条路径只要候选池模型保持稳定或变动很小,则证明超网训练充分了超网训练完毕后,本文使用 NSGA-II 进化算法进行结构搜索。在进化算法中使用候选池中的结构进行Population的初始化,相较于随机初始化,借助于候选池能够使进化算法有一个更好的初始,提升搜索效率及最终的精度。