【NAS论文/CVPR2020】CARS:Continuous Evolution for Efficient Neural Architecture Search

论文地址:https://arxiv.org/abs/1909.04977

 

Abstract

出于效率原因,大多数现有的神经体系结构搜索(NAS)算法中的搜索技术主要由可微分主导。相反,我们开发了一种有效的连续进化方法来搜索神经网络。在最新一代的一个SuperNet中共享参数的总体体系结构将在训练数据集上进行几个调整。下一代进化中的搜索将直接继承SuperNet和人口,从而加快了最佳网络的产生。进一步应用了非支配的排序策略,以仅将结果保留在Pareto前端,以准确更新SuperNet。在仅0.4 GPU天的连续搜索后,将产生具有不同模型大小和性能的多个神经网络。因此,我们的框架提供了一系列网络,在移动设置下,参数数量从370万到5.1万不等。这些网络超过了基准ImageNet数据集上通过最新方法生成的网络。

introduction

卷积神经网络在计算机视觉任务中取得了长足的发展,例如识别、检测、分割。过度参数化的深度神经网络可以产生令人印象深刻的性能,但同时会消耗大量的计算资源。有效的块设计、张量分解、微调、蒸馏以及量化是常用的技术使得网络更加高效。设计新颖的网络体系结构在很大程度上取决于人类专家的知识和经验,并且可能会消耗许多经历在获得一个具有意义的结果之前。计算这个过程并使他自动化是NAS在做的,并且在很多任务中,自动学习到的神经网络结构比人为设计的效果要好。然而这些搜索方法都会消耗大量的计算资源来获得一个可接受的性能。

搜索策略一般分为三个方面:进化算法、强化学习以及基于梯度的方法。基于进化的工作一般将初始化设置一个模型去进化更好的结构,同时这也是个耗时的方法,耗费了3150gpu天去搜索。基于强化学习的方法是使用一个控制器去预测一个操作序列,并且训练不同的结构去获得奖励。在给定架构的情况下,这些方法必须训练大量的时间,然后评估其性能以指导控制器的发展或优化,这会使搜索阶段的效率降低。基于梯度的方法(例如DARTS)首先训练一个超网并在搜索时引入注意力机制到连接中,在搜索之后移除弱连接。这个阶段使用梯度下降法,并且有一些成效。然而搜索出的结构多样性很差。

尽管有许多实验证明进化算法比强化学习可以搜索到更好的网络架构,但进化算法的搜索代价很高取决于每一个个体的评价方法,进化算法中神经网络是独立评估的。更重要的是,有许多结构在搜索空间中有额外的较差的性能。如果我们直接遵循ENAS [32]提出的权重分配方法,则必须训练SuperNet来弥补那些较差的搜索空间。这是非常有必要的修改现有的进化算法用于神经网络架构搜索。

在这篇文章中,我们提出了一种有效果的基于进化算法的神经网络架构搜索框架。开发了一种连续进化策略,以最大程度地利用我们在上一代进化中学到的知识。具体来说,首先用大量的cell和block来初始化一个超网。代表SuperNet衍生架构的进化算法中的个体将通过几个基准操作生成,例如交叉、变异。采用非支配的排序策略(NSGA-II)来选择具有不同模型大小和准确性的几种优秀架构,并且将更新SuperNet中的相应单元以进行后续优化。进化程序在下一代中是基于更新的超网持续执行的,并且通过非支配的排序来设置多目标解集。另外,我们提出使用一个保护机制来避免小模型陷阱问题(Small model trap 在NSGA-III中被提出)。提出的连续进化架构搜索可以提供一系列位于pareto前端的具有高效性的模型。我们的方法的优越性已在基准数据集上优于最新方法得到了验证。

Realated Works

Network Architecture Search

基于梯度的NAS包括两步:网络参数优化以及网络架构优化。网络参数优化步骤优化标准层(如卷积、bn、全连接层)中的参数。架构优化步骤学习模式的准确的网络架构。

参数优化步骤可以划分为两个类别:独立优化和共享优化。独立优化分别学习每个网络,即AmoebaNet [34]需要花费数千个GPU天来评估数千个模型。对于加速训练,通过网络态射来初始化参数。One-shot方法[1,15]通过在一个超网中共享用于不同体系结构的所有参数来进一步发展。 无需培训数千种不同的体系结构,只需要优化一个SuperNet。

架构优化步骤包括基于强化学习的和基于进化算法的以及基于梯度的方法。基于强化学习的方法[57,58,32]使用循环网络作为网络架构的控制器并且生成的体系结构的性能被用作训练控制器的奖励。控制器在训练过程中收敛,并最终输出一个具有卓越性能的架构。基于进化算法的方法[45,34]通过进化算法的帮助来搜索架构。每一个个体的验证准确性都可以作为下一代的适应度。基于梯度的方法[29,46,44]将网络架构看作一个可学习参数的集合,并且优化这些参数通过标准的反向传播算法。

Multi-objective Network Architecture Search

考虑多个互补目标,例如准确率、参数量、浮点操作数、能量以及潜在,在所有目标上,没有一个单独的架构可以超越所有的其他架构。因此,架构位于pareto前端是被期望的。有许多不同的工作提出了解决多目标网络架构搜索问题的方法。NEMO[23]和MNasNet[41]致力于速度和准确率。DPPNet和LEMONADE[8,10]考虑与设备有关和无关的目标。MONAS[20]致力于准确率和能量。NSGANet[30]考虑浮点操作数和准确率。这些方法是低效的对于模型是单独优化的。相反,我们的架构优化和参数优化是交替进行的。另外,对于不同架构的参数是共享的,这可以使得搜索策略更加高效。

Approach

在这一章,我们提出了一种新型的连续进化的房费用于神经网络架构搜索,名叫CARS。CARS搜索策略包括两阶段,参数优化和架构优化。

       我们使用遗传算法作为架构进化,因为遗传算法保持了一系列具有优良性能的架构覆盖广阔的空间。我们保持了一系列架构(也称连接)C。在种群中的架构更新基于pNSGA-III的方法在架构优化的步骤中。为了使得搜索的有效,我们使用了SuperNet超网用来共享参数W对于不同的架构。参数共享策略显著地减少了单独训练这些不同架构的计算复杂度。

SuperNet of CARS

不同的网络是超网N中的一个子例,每一个网络Ni可以用一组全精度的参数Wi和一组二进制连接参数Ci来表示。Ci中的0元素表示网络不包含这个连接来转换数据流,1元素代表网络使用了这个连接。在这一点上,每一个网络Ni可以被表示成一个(Wi,Ci)对。

全精度参数W作为神经网络中的一个集合被共享。如果网络架构被修复,参数将通过反向传播进行优化。最优的W适用于所有网络Ni来实现更高的识别性能。在参数收敛之后,交替优化二进制连接C通过遗传算法。这两步是我们提出的主要的优化方法,我们将在后续介绍这两个优化步骤。

Parameter Optimization

参数W是网络中所有参数的集合。Wi是第i个个体,Wi=W·Ci,·操作符是是掩码操作,仅在与连接Ci中的1元素相对应的位置上保留完整图形的参数。X是输入数据,Ni(X)是预测,Ni是第i个网络架构。Loss函数可表示为Li=H(Ni(X),Y),H是规则,Y是目标。Wi的梯度可表示为:<1>

参数W应该适用于所有个体,因此对于所有的网络结构的梯度是W的梯度累加<2>

任何层都仅由网络使用这一层的前向传播进行优化。通过收集种群中个体的梯度,使用SGD算法对W进行更新。正如我们维持一个巨大的具有共享权重的架构集合在超网中,我们借鉴了随机梯度下降的思想,并使用了mini-batch架构来更新参数。对于所有网络的梯度的累积将需要大量的时间来做一步梯度下降,因此我们使用了mini-batch结构。我们使用B不同架构B

因此,将mini-batch上的梯度视为所有P个不同个体的平均梯度的无偏逼近。每一次的更新的时间消耗将大幅度减少,合适的mini-batch的大小将决定效率和准确率中的平衡。

​​​​​​​Architecture Optimization

在架构优化模块中,我们使用了具有非支配排序策略的进化算法。非支配排序策略在NSGA-III中介绍。{N1…Np}用来表示P个不同的网络,{F1…Fm}用来表示M个不同的我们想要最小化的测量。这个测量是例如参数个数,浮点运算,能量,准确率具有一些冲突的量,这就增加了寻找最小化这些量的最佳解决方案的难度。

实际上,如果满足两个条件,则Ni占Nj的主导地位:(1)对于任何测量,Ni的性能都不会比Nj的性能差。 (2)在至少一项测量中,模型Ni的行为优于Nj。 形式上,统一的定义可以总结如下。<4>

通过上述的定义,如果Ni主导Nj,Nj将被Ni替代在进化过程中,因为Ni在至少一个指标上比Nj好,而且其他指标也不差。通过这些方法,我们可以选择一系列优良的网络架构从当前代的种群之中。那么这些网络将被用来更新相应的参数在超网中。

尽管我们使用了NSGA-III中的非支配排序策略来选择一些较好的模型去更新参数,但还是存在小模型陷阱的现象在搜索阶段。具体来说,由于SuperNet中的参数仍需要优化,因此,当前一代中每个个体结构的精度可能并不总是代表其最终可以实现的性能,如NASBench-101中所讨论的[51]。因此,如图3所示,一些参数较少但测试精度较高的较小模型倾向于在较低精度的较大模型中占主导地位,但具有实现较高精度的潜力。

因此,我们提出改进常规的NSGA-III用来保护那些较大的模型,名叫pNSGA-III.值得一提的是,pNSGA-III考虑了增速的准确率。我们用验证准确率和参数数量作为例子,对于NSGA-III方法,非支配排序算法考虑了两个不同的目标并且选择个体通过排序Pareto stages。对于pNSGA-III方法,多考虑了参数数量和准确率,我们也在非支配排序算法中考虑了准确率的增速以及参数的数量。两个不同的Pareto stages被合并。我们合并两个Pareto stages从第一个的Pareto前端中,并集Ui=。。。我们保持第一个P个体在Umax中。在这种方法下,具有缓慢增速性能的大型网络在种群中被保留下来。

在图2中,使用NSGA-III和pNSGA-III被可视化出来。如果我们使用NSGA-III去更新架构,小模型陷阱的问题将出现。显然使用pNSGA-III可以保护大模型在进化时,并且提供了一个宽范围的模型。更多细节的讨论将在之后的章节中。

​​​​​​​Continuous Evolution for CARS

总的来说,使用CARS搜索最优架构有两个步骤:1)结构优化 2)参数优化。另外参数warm-up也同样被引入到了参数的更新中作为第一步。

Parameter Warmup. 超网中共享的权重是随机初始化的,与其他操作相比,所有体系结构中使用频率最高的操作将被训练更多次。因此,通过one-shot NAS方法[1,15,6,44],我们使用一个统一抽样策略去初始化超网中的参数。这样一来,超网中的每一种可能的操作都具有一个相同的概率。例如,在DARTS中每一个节点有八个不同的操作,包括卷积、池化、恒等映射和无连接。每一种操作被采取的概率为1/8.

Architecture Optimization. 在初始化超网中的参数之后,我们首先随机采样P个不同的架构,P是一个超参数代表种群中的个体数量。在架构进化步骤中,我们首先产生t*P个后代,t是超参数用来控制增大率。接下来使用pNSGA-III去排序这些结构,并选择P给个体从(t+1)*P个个体中。这P个个体用来进行下一代。

Parameter Optimization. 给出一组架构,我们使用提出的mini-batch结构更新方案对参数进行优化。

算法1总结了搜索神经网络架构时使用的连续进化算法的细节。

​​​​​​​Search Time Analysis

在CARS的搜索阶段中,训练集被用来更新网络参数,验证集被用来更新网络架构。对于一个架构的平均训练时间用Ttr表示,在验证集上的时间用Tval表示。在第一个warmup阶段使用了Ewarm个epochs,这需要Twarm=Ewarm*Ttr的时间在这一阶段去在超网中初始化参数。

假设架构总共进化了Eevo代,并且每一代包含参数优化和架构优化两步。在参数优化中,每一代之间在训练集上训练了Eparam个epochs,因此一代的参数优化的时间代价为Tparam=Eparam*Ttr*B,B时mini-batch的大小。在架构优化步骤中,所有个体都是并行推断所以时间代价可被计算为Tarch=Tval。因此Eevo代的总共的时间代价为Tevo=Eevo*(Tparam+Tarch)。CARS中所有的搜索的时间代价为:Ttotal=Twarm+Tevo=Ewarm*Ttr+Eevo*(Eparam*Ttr*B+Tval)<5>

Experiments

在这一章中,我们首先介绍了超网,并且介绍了实验细节。接下来,我们检查了小模型陷阱的现象,并且比较了NSGA-III的方法和我们提出的pNSGA-III。我们在CIFAR-10数据集上搜索了两次,考虑了设备可感知和不可感知的目标。所有搜索到的架构都在CIFAR-10以及ILSVRC2012数据集上进行评估。这两个数据集是用来做识别任务的。

​​​​​​​Experimental Settings

SuperNet Backbones(超网骨干) . 为了说明我们的方法的有效性,我们评估了CARS在常用的和DARTS同样的搜索空间。DARTS是一个不同的NAS系统并且搜索reduction和normal cells。Normal cell用于输入特征和输出特征空间大小相同的层。Reduction cells用于在输入特征图下采样的层。在搜索这两种cell之后,网络被构造成一给搜索出的cells所构成的栈。搜索空间中具有八个不同的操作,包括四种卷积操作,两种池化操作,跳跃连接以及无连接。

Evolution Details. 在DARTS的搜索空间中,在一个cell中的中间节点于两个前向节点相连接。交叉和变异在相应的节点中进行。交叉率和编译率被设置为0.25,并且我们随机生成一个新架构概率设置为0.5。对于交叉操作,每一个节点都具有0.5的概率去交叉它的连接,对于变异操作,每一个节点都有0.5的概率随机重新分配。

​​​​​​​Experiments on CIFAR-10

我们的实验在CIFAR-10上包括了示范小模型陷阱的现象,比较了NSGA-III和pNSGA-III,忽略设备和不忽略设备的搜索。评估基于CIFAR-10和巨大的ILSVRC2012数据集。

Small Model Trap. 在图3中,三种模型的准确率曲线被展示出来。参数量分别为2.1M,2.9M以及3.6M。在训练了600个epochs后,在CIFAR-10上的准确率和模型大小成正相关,分别是96.87%,97.17%以及97.20%。我们观察了准确率曲线在最初的50个epochs中,并总结了两个陷入小模型陷阱的主要的原因。(1)小模型自然收敛地迅速。(2)训练期间准确率波动。对于最大的模型C,它的准确率持续低于模型A和模型B在最初的50个epochs中。因此,如果使用NSGA-III算法,那么模型C将被淘汰。这是因为大模型更复杂,因此更难去优化。对于模型B和模型A它们的准确率曲线是相似的。然而由于训练时准确率的波动,如果在一个epoch中模型A的准确率高于模型B的话,模型B将被非支配排序算法淘汰。这是我们所提出的第二个原因。综合这两个原因,大模型将易被淘汰在架构更新的过程中。因此我们提出的pNSGA-III方法是非常有必要的对于解决小模型陷阱的问题。

NSGA-III vs pNSGA-III. 我们使用CARS在架构优化步骤中使用了不同的NSGA方法。多目标是参数量和模型大小。我们可视化了在种群中架构的分布趋势。如图2所示,用NSGA-III来更新架构将掉入小模型陷阱问题,并且大型模型站在架构优化步骤中被淘汰。相反,使用了pNSGA-III会保护大模型,较大的模型在后期可能会提高精度,但在开始时收敛速度会比较小的模型慢。如果搜索目标是查找具有各种计算资源的模型,则必须在总体中维护更大的模型,而不是在架构优化阶段删除它们。

Search on CIFAR-10. 我们拆分了CIFAR-10数据集为两个部分。25000张图片用于更新网络参数,25000张图片用于更新网络架构。这种拆分策略于DARTS和SNAS一致。我们总共搜索了500个epochs,并且在最初的10%的epochs中做了参数的warmup。在这之后,我们初始化种群,包含128个不同的架构,并且使用pNSGA-III方法逐渐进化它们。我们使用pNSGA-III的方法去更新架构,在网络参数被更新了10个epochs后。

Evaluate on CIFAR-10. 在结束了CARS在CIFAR-10的搜索后,我们有128个不同架构在种群中。我们评估具有类似模型大小的架构作为预处理工作[29,46]去进行比较。我们在CIFAR-10上重新训练搜索到的架构。所有的训练参数和DARTS一致。

我们比较了搜索到的架构如表1所示。所有的架构都可以在github中查找到。我们搜索到的架构的参数量在2.4M到3.6M的范围中,并且这些架构的性能与最新技术相当。同时,如果我们使用NSGA-III的方法去替代pNSGA-III,我们搜索到2.4M参数量不大的模型,这些模型的表现较差。

比较之前的方法例如DARTS和SNAS,我们的方法可以在更广阔的搜索空间中搜索架构。CARS-G具有与DARTS(second-order)相近的准确率,结果错误率近似2.75%且具有更小的模型规模。用相同的3.3M的参数量在DARTS上,CARS-H实现了更低的测试错误率。在小模型方面,我们搜索到了CARS-A/C/D也获得了类似的结果和SNAS。另外,我们的大模型CARS-I 实现了更低的错误率2.62%。纵观CARS-A到J,模型错误率随着模型大小的提升而降低。这些模型都是Pareto解。与其他多目标方法比较如RENA[56],NSGANet[30],LEMONADE[10],我们搜索到的框架显示出了更优秀的性能。

Comparison on Searched Cells. 由于我们的方法中具有一种分割的思想,我们更多的可是花了normal和reduction cells,通过CARS和DARTS搜索出来的结果,如图4所示。CARS-H和DARTS(second-order)具有相似的参数量(3.3M),但是CARS-H具有更高的准确率。可以在图4中找到,在CARS-H的reduction block中有更多参数可保留更多有用信息,并且CARS-H的normal block的大小小于DARTS(second-order)的大小,可避免不必要的计算。CARS的种群覆盖了广泛的搜索空间。

​​​​​​​Evaluate on ILSVRC2012

我们评估了可移植性在ILSVRC2012数据集上进行训练后搜索到的神经网络架构。我们使用了8块Nvidia Tesla V100显卡去训练模型,batch size为640。我们总共训练了250个epochs。

学习率为0.5随着线性递减,并且使用了预热学习率的方法在最初的5个epoch中,动量为0.9,权重衰减为3e-5.标签平滑率为0.1。

       表2显示了我们搜索到的网络架构的可移植性。我们的模型的参数覆盖了很大范围。模型的大小在3.7M到5.1M的范围中,浮点操作数在430M到590M范围内。对于不同的部署环境,我们可以轻松地选择一个架构用来满足计算资源。这个实验考虑了忽略设备的多样性、模型大小以及性能。因此CARS-A到CARS-I的等待时间与性能并非严格正相关。分别为82.9,83.3,83.0,90.0,93.8,92.2,98.1,97.2,100.6(ms)在华为P30Pro上。

       CARS-I超越了PNAS的Top-1准确率1%,它们具有相似的参数力量以及浮点操作数。CARS-G显示了更强的结果超越了DARTS大约0.9%的准确率在Top-1上,它们具有相当的参数量。CARS-D超越了SNAS(mild)0.6%在Top-1准确率上。对于NASNet和AmoebaNet的不同模型,我们的模型也在相同参数量的情况下具有更高的准确率。通过使用pNSGA-III的方法,更大的模型如CARS-I被保存下来在架构优化的过程中。由于有效的参数共享策略,我们可以搜索到一组高性能的可移植的架构在one-time search期间。

       实验考虑了不忽略设备的多样,运行时间等待以及性能。我们评估了搜索到的架构在ILSVRC2012数据集上。结果如图1所示。搜索到的架构覆盖了一个实际运行延迟从40ms到90ms之间,并超越了同行。

 

Conclusion

基于进化算法的NAS方法可以寻找到一个高性能模型,但是搜索时间非常长,因为每个候选网络都经过单独训练。为了使这有效,我们提出了连续进化架构搜索方法CARS。在进化时,CARS最大化地利用学习的知识在之前代中,例如架构和参数。Cells和blocks构造了超网。个体通过benchmark操作生成在进化算法中。非支配排序策略(pNSGA-III)被用来选择架构去更新超网。在基准的数据集上的实验显示了CARS有效地提供了一系列架构在Pareto前端。搜索到的模型优于前沿技术在模型参数、延迟以及准确率方面。

你可能感兴趣的:(【NAS论文/CVPR2020】CARS:Continuous Evolution for Efficient Neural Architecture Search)