摘要
出于效率原因,大多数现有的神经结构搜索(NAS)算法中的搜索技术主要由可微分的方法主导。相反,我们开发了一种有效的连续进化方法来搜索神经网络。这种方法使得种群中的网络结构使用一个SuperNet共享参数,在生成下一代时将会使用少量的epochs来沿训练集对参数进行调整。下一代中的进化搜索将直接继承SuperNet和种群,从而加速了最佳网络的生成。进一步应用了非支配的排序策略,仅将结果保留在Pareto前沿,以准确更新SuperNet。在仅0.4 GPU天的连续搜索后,将产生具有不同模型大小和性能的多个神经网络。结果显示,我们的框架提供了一系列网络,在移动环境下,参数数量从370万到5.1万不等。这些网络超过了基准ImageNet数据集上最新技术所产生的网络。
1.介绍
卷积神经网络在许多计算机视觉任务中都取得了长足的进步,例如图像识别,目标检测和分割。过度参数化的深度神经网络可以产生令人印象深刻的性能,但同时会消耗大量的计算资源。高效的块结构设计,张量分解,模型裁剪,蒸馏和量化是能够使网络高效使用的流行技术。另外,设计新的网络结构在很大程度上取决于人类专家的知识和经验,并且在获得有意义的结果之前可能要进行多次尝试。为了加快该过程并使之自动化,已经提出了网络结构搜索(NAS),并且在各种任务上,学习的网络结构已经超出了人工设计的结构。但是,这些搜索方法通常需要大量计算资源才能搜索到性能可接受的结构。
搜索神经结构的技术主要分为三类,即基于进化算法(EA),基于强化学习(RL)和基于梯度的方法。基于EA的工作通过初始化一组模型,并发展为更好的结构,这很费时,例如Real et al.中搜索需要3150个GPU天。基于RL的工作使用控制器来预测一系列操作,并训练不同的结构来获得回报。在给定结构的情况下,这些方法必须训练大量的epoch,然后评估其性能以指导进化或优化控制器,这会使搜索阶段的效率降低。基于梯度的方法(例如DARTS)首先训练SuperNet并在搜索时引入连接注意力机制,然后在搜索后删除弱连接。该阶段是通过梯度下降优化进行的,非常有效。但是,搜索的结构缺乏多样性。
尽管[37]中的一些实验表明,与基于RL的方法相比,进化算法发现了更好的神经网络结构,但是由于每个个体的评估程序,使得EA的搜索成本非常高,即,进化算法中的神经网络是独立评估的。此外,在搜索空间中可能存在某些性能极差的网络结构。如果我们直接遵循ENAS提出的权重共享方法,则必须对SuperNet进行训练以补偿那些较差的搜索空间。因此有必要重构现有的进化算法,以进行有效而准确的神经结构搜索。
在本文中,我们提出了一个有效的基于EA的神经结构搜索框架,并开发了一种连续进化策略,以最大程度地利用我们在上一代进化中学到的知识。具体来说,首先使用大量的单元和块初始化SuperNet。进化算法中代表SuperNet结构的个体将通过几种基准操作(即交叉和变异)生成。采用非支配的排序策略来选择具有不同模型大小和准确率的几种优秀网络结构,并将更新SuperNet中的相应单元以进行后续优化。基于更新的SuperNet和通过非支配排序获得的多目标解决方案集,将持续执行下一代的进化过程。此外,我们提出使用一种保护机制来避免小模型陷阱问题。提出的连续进化架构搜索(CARS)可以在帕累托端高效地提供一系列模型。我们的方法的优越性已在基准数据集上优于最新方法得到了验证。
2.相关工作
2.1 神经结构搜索
基于梯度的网络结构搜索(NAS)方法包含两个步骤:网络参数优化和网络结构优化。网络参数优化步骤可优化标准层中的参数(即卷积,批处理规范化,全连接层)。 网络结构优化步骤可了解准确的网络结构的模式。
参数优化步骤可以分为两类,独立优化和共享优化。独立优化分别学习每个网络,即AmoebaNet需要花费数千个GPU天来评估数千个模型。为了加快训练速度,[11,10]通过网络形态来初始化参数。One-shot方法通过在一个SuperNet中共享用于不同体系结构的所有参数来进一步发展,从而无需训练数千种不同的结构,只需要优化一个SuperNet。
结构优化步骤包括基于RL,基于EA和基于梯度的方法。基于RL的方法使用循环网络作为网络结构的控制器,并将生成的网络结构的性能用作训练控制器的奖赏。控制器在训练过程中收敛,最终输出具有较好性能的结构。基于EA的方法在进化算法的帮助下搜索结构。每个个体的验证准确率都可以用作下一代的适应度。基于梯度的方法将网络结构视为一组可学习的参数,并通过标准的反向传播算法来优化参数。
2.2 多目标神经结构搜索
考虑到多个互补目标,即准确率,参数数量,浮点运算数(FLOPs),能量和延迟时间,在所有目标上,没有哪个结构都能超越其他所有架构。因此,需要在帕累托前沿的结构。已经提出了许多不同的工作来处理多目标网络结构搜索。NEMO 和MNASNet的目标是速度和准确率。DPPNet和LEMONADE考虑了与设备相关和与设备无关的目标。MONAS的目标是准确率和能量。NSGANet考虑了FLOPs和准确率。
这些方法对于单独优化模型的效率较低。相反,我们的结构优化和参数优化步骤是交替进行的。此外,可以共享不同体系结构的参数,从而使搜索阶段更加高效。
3.方法
在本节中,我们将开发一种新的连续进化方法来搜索神经网络结构,即CARS。CARS搜索阶段包括两个过程,即网络参数优化和网络结构优化。
我们将遗传算法(GA)用于网络结构的进化,因为GA维护了一组性能良好的结构,这些结构涵盖了广阔的空间。具体地,我们维护了一组网络结构(也称为连接)C={C1,...,CP}C=\{C_1,...,C_P\}C={
C1?,...,CP?},其中PPP是种群数目。在网络结构优化步骤中,根据提出的pNSGA-III方法逐步更新种群中的网络结构。为了实现高效的搜索阶段,我们维护一个SuperNet N\mathcal NN,它共享不同结构的参数WWW。参数共享策略大大降低了分别训练这些不同网络结构的计算复杂性。
3.1 CARS中的SuperNet
从SuperNet N\mathcal NN采样不同的网络,并且每个网络Ni\mathcal N_iNi?可以由一组全精度参数WiW_iWi?和一组二进制连接参数(即{0,1}\{0,1\}{
0,1})CiC_iCi?表示。连接CiC_iCi?中的0元素表示网络不包含此连接以转换数据流,而1元素连接表示网络使用此连接。从这个角度来看,每个网络NiN_iNi?可以表示为(Wi,Ci)(W_i,C_i)(Wi?,Ci?)对。
全精度参数WWW由一组网络共享。如果这些网络结构是固定的,则可以通过反向传播来优化参数。最佳WWW适合所有网络Ni\mathcal N_iNi?以实现更高的识别性能。参数收敛后,我们可以通过GA算法交替优化二进制连接CCC。这两个步骤构成了我们提出方法的主要优化过程。我们将在下面介绍这两个优化步骤。
3.2 参数优化
参数WWW是网络中所有参数的集合。第iii个个体的参数WiW_iWi?为Wi=W⊙Ci,i∈{1,...,P}W_i=W⊙C_i,i∈\{1,...,P\}Wi?=W⊙Ci?,i∈{
1,...,P},其中⊙⊙⊙是掩码操作,该掩码操作仅针对与连接CiC_iCi?中的元素1相对应的位置保留完整图的参数。将XXX表示为输入数据,此网络的预测为Ni(X)\mathcal N_i(X)Ni?(X),其中NiN_iNi?是第iii个网络结构。预测损失函数可以表示为Li=H(Ni(X),Y)L_i=\mathcal H(\mathcal N_i(X),Y)Li?=H(Ni?(X),Y),其中H\mathcal HH是训练准则,YYY是目标标签。则WiW_iWi?的梯度可以计算为:
dWi=?Li?Wi=?Li?W⊙Ci(1)dW_i=\frac{?L_i}{?W_i}=\frac{?L_i}{?W}\odot C_i\tag{1}dWi?=?Wi??Li??=?W?Li??⊙Ci?(1)
参数WWW应该适合所有个体,因此所有网络的梯度都被累加以计算参数WWW的梯度:
dW=1P∑i=1PdWi=1P∑i=1P?Li?W⊙Ci(2)dW=\frac{1}{P}\sum^P_{i=1}dW_i=\frac{1}{P}\sum^P_{i=1}\frac{?L_i}{?W}\odot C_i\tag{2}dW=P1?i=1∑P?dWi?=P1?i=1∑P??W?Li??⊙Ci?(2)
需要注意的是,仅在forward过程中使用了该层的网络才能去优化该层。通过收集种群中个体的梯度,通过SGD算法更新参数WWW。
由于我们在SuperNet中维护了大量具有共享权重的网络结构,因此我们借鉴了随机梯度下降的思想,并使用mini-batch来更新结构参数。逐步累积所有网络的梯度将花费大量时间,因此,我们在每个mini-batch采样网络结构来更新共享权重。我们使用BBB个不同的网络结构,其中B<PB<PB<P,并且网络结构的索引为{n1,...,nB}\{n_1,...,n_B\}{
n1?,...,nB?}来更新参数。等式2中的参数更新即可表示为等式3所示:
dW≈1B∑j=1B?Lnj?Wnj(3)dW\approx \frac{1}{B}\sum^B_{j=1}\frac{?L_{n_j}}{?W_{n_j}}\tag{3}dW≈B1?j=1∑B??Wnj???Lnj???(3)
因此,将一个mini-batch上采样的网络结构上的梯度视为所有PPP个不同个体的平均梯度的无偏估计。每次更新的时间成本可以大大降低,并且适当的mini-batch大小可以在效率和准确率之间取得平衡。
3.3 结构优化
对于网络结构优化过程,我们将进化算法与非主导排序策略一起使用。非主导排序策略已在NSGA-III中引入。其表示{N1,...,NP}\{\mathcal N_1,...,\mathcal N_P\}{
N1?,...,NP?}作为PPP个不同的网络,而{F1,...,FM}\{\mathcal F_1,...,\mathcal F_M\}{
F1?,...,FM?}作为我们要最小化的M个不同的测量指标。这些测量指标,例如参数的数量,浮点运算数,延迟时间,能量和准确率,可能会有一些冲突,这增加了发现最小化所有这些指标的最佳解决方案的难度。
在实践中,如果满足下面两个条件,则NiN_iNi?主导NjN_jNj?:(1)对于任何测量指标,NiN_iNi?的性能都不会比NjN_jNj?差。(2)在至少一项测量指标中,模型NiN_iNi?的行为优于NjN_jNj?。正式地,定义可以总结如下。
定义1。考虑两个网络Ni\mathcal N_iNi?和Nj\mathcal N_jNj?,我们的目标是最小化一系列指标{F1,...,FM}\{\mathcal F_1,...,\mathcal F_M\}{
F1?,...,FM?}。如果:
Fk(Ni)≤Fk(Nj),?k∈{1,...,M}Fk(Ni)<Fk(Nj),?k∈{1,...,M}(4)\mathcal F_k(\mathcal N_i)\le \mathcal F_k(\mathcal N_j),\quad \forall k\in \{1,...,M\}\\ \mathcal F_k(\mathcal N_i)\lt \mathcal F_k(\mathcal N_j),\quad \exists k\in \{1,...,M\}\tag{4}Fk?(Ni?)≤Fk?(Nj?),?k∈{
1,...,M}Fk?(Ni?)<Fk?(Nj?),?k∈{
1,...,M}(4)
那么,就说Ni\mathcal N_iNi?主导了Nj\mathcal N_jNj?,即Ni?Nj\mathcal N_i \preceq \mathcal N_jNi??Nj?。
根据以上定义,如果Ni\mathcal N_iNi?主导Nj\mathcal N_jNj?,则在进化过程中Nj\mathcal N_jNj?可以被Ni\mathcal N_iNi?替代,因为NiN_iNi?在至少一个指标上表现更好,而在其他指标上却不差。通过利用这种方法,我们可以从当前的种群中选择一系列优秀的神经网络结构。然后,这些网络可用于更新SuperNet中的相应参数。
尽管上述非主导排序策略使用NSGA-III方法来选择一些更好的模型来更新参数,但是在搜索过程中仍然存在小模型陷阱现象。具体来说,由于SuperNet中的参数仍然需要优化,因此,如NASBench101所讨论的那样,当前一代中每个独立网络结构的准确率可能并不总是代表其最终可以达到的性能。因此,如图3所示,在epoch较小时,一些参数较少的模型要由于在较大模型,但这些参数大的模型具有实现较高精度的潜力(随着epoch的增加)。
因此,我们提出了改进传统的NSGA-III,以保留这些较大的模型,即pNSGA-III。更具体地说,pNSGA-III算法考虑了精度提高的速度。我们以验证准确率和参数数量为例。对于NSGA-III方法,非支配排序算法考虑了两个不同的目标,并根据排序的Pareto阶段选择了个体。对于提出的pNSGA-III,除了考虑参数数量和准确性之外,我们还采用了一种非支配排序算法,该算法考虑了准确性和参数数量的增长速度。然后,将两个不同的帕累托阶段合并。假设PPP是种群数目,在拥有两个帕累托阶段R1...n1,Q1...n2R_{1...n_1},Q_{1... n_2}R1...n1??,Q1...n2??之后,我们从第一个帕累托前沿开始逐步合并两个帕累托阶段,并在合并地iii个前沿后建立并集合Ui=(R1∪Q1)∪???∪(Ri∪Qi)U_i =(R_1∪Q_1)∪···∪(R_i∪Q_i)Ui?=(R1?∪Q1?)∪???∪(Ri?∪Qi?)。我们保留Umax(n1,n2)U_{max}(n_1,n_2)Umax?(n1?,n2?)中的前PPP个个体。这样,可以将性能提高速度较慢的大型网络保留在总体中。
在图2中,显示了使用NSGA-III和pNSGA-III的种群。如果我们使用NSGA-III更新网络结构,则会遇到小模型陷阱问题。显然,pNSGA-III可以在进化过程中保护大型模型并提供广泛的模型。下一节将介绍更详细的讨论。
3.4 CARS中的连续进化算法
总而言之,通过使用提出的CARS,可以通过两个步骤来搜索最佳结构:1)网络结构优化;2)网络参数优化。另外,还引入了参数预启动以预先更新参数。
(1)参数热启动
由于我们的SuperNet的共享权重是随机初始化的,因此,如果种群中的网络结构也是随机初始化的,则与其他操作相比,所有网络结构中最常用的操作将被训练更多次。因此,通过遵循one-shot NAS方法,我们使用统一的采样策略来初始化SuperNet中的参数。这样,SuperNet以相同的可能性训练每个可能的操作。例如,在DARTS中,每个节点有八种不同的操作,包括卷积,池化,身份映射和无连接。每个操作将以18\frac{1}{8}81?的概率进行采样。
(2)结构优化
在初始化SuperNet的参数之后,我们首先随机采样PPP个不同的网络结构,其中PPP是一个超参数,表示种群中被维护的个体的数量。在网络结构演化步骤中,我们首先生成t×Pt×Pt×P个后代,其中ttt是控制扩展比率的超参数。然后,我们使用pNSGA-III对网络结构进行排序,并从(t+1)×P(t+1)×P(t+1)×P个个体中选择前P个,所选的P个结构构成了下一代。
(3)参数优化
给定一组网络结构,我们使用根据等式3提出的mini-batch处理网络结构更新方案进行参数优化。
算法1总结了所提出的用于搜索神经网络结构的连续进化算法的详细过程。
3.5 搜索时间分析
在CARS的搜索阶段,训练集用于更新网络参数,而验证集用于更新网络结构。假设一个网络结构在训练集上的平均训练时间为TtrT_{tr}Ttr?,而验证集上的推理时间为TvalT_{val}Tval?。第一个热启动阶段需要EwarmE_{warm}Ewarm?个epoch,并且在此阶段需要Twarm=Ewarm×TtrT_{warm} = E_{warm}×T_{tr}Twarm?=Ewarm?×Ttr?来初始化SuperNet N\mathcal NN中的参数。
假设这些结构构总体上需要进行EevoE_{evo}Eevo?代的发展。每一代都包含参数优化和体系结构优化步骤。参数优化步骤在代之间的训练集上训练SuperNet EparamE_{param}Eparam?个epoch,因此一次演化中参数优化的时间成本为Tparam=Eparam×Ttr×BT_{param}=E_{param}×T_{tr}×BTparam?=Eparam?×Ttr?×B,而BBB是mini-batch的大小。对于结构优化步骤,可以并行推理所有个体,因此可以将这一步骤中的时间成本计算为Tarch=TvalT_{arch}=T_{val}Tarch?=Tval?。因此,EevoE_{evo}Eevo?次进化搜索的总时间成本为Tevo=Eevo×(Tparam+Tarch)T_{evo}=E_{evo}×(T_{param}+T_{arch})Tevo?=Eevo?×(Tparam?+Tarch?)。CARS中所有的搜索时间成本为: