《Efficient Neural Architecture Search via Parameter Sharing》论文阅读笔记

ENAS

 这篇文章还是出自Google Brain,本文提出的方法极大提升了NAS的搜索速度,不再动辄需要几百个GPU days了,这篇文章发表在了ICML 2018。原文可见Efficient Neural Architecture Search via Parameter Sharing


摘要

 这篇文章提出了一种高效的神经架构搜索(ENAS),是一种快速而廉价的自动模型设计方法。ENAS构造了一个大的计算图,其中每个子图表示一个神经网络结构,因此迫使所有结构共享它们的参数。使用策略梯度训练控制器以搜索在验证集上最大化期望回报的子图。同时训练与所选子图相对应的模型,以最小化典型的交叉熵损失。在子模型之间共享参数使ENAS可以提供强大的经验性能,同时使用的GPU时间要比现有的自动模型设计方法少得多,尤其是与标准的NAS相比要cheap了1000倍。

1. 引言

 NAS已被成功应用于图像分类及语言模型的模型架构设计。在NAS中,控制器是循环训练的:控制器首先采样候选架构(即子模型),训练其至收敛,并根据期望的任务衡量其性能。然后,控制器将此性能用作指导信号,以找到更有前途的架构。以上过程会重复很多次。尽管NAS具有令人印象深刻的经验性能,但它在计算上是昂贵和耗时的,例如NASNet使用450个GPU搜索了3-4天(即32400-43200个GPU时)。同时,使用更少的资源往往会产生不那么引人注目的结果。作者观察到,NAS的计算瓶颈就是训练每个子模型到收敛,然后只测量其精度,而丢弃所有训练过的权重。

 这项工作的主要贡献是通过强制所有子模型共享权重来提高NAS的效率,从而避免从零开始训练每个子模型到收敛。这个想法有明显的复杂性,因为不同的子模型可能会不同地利用它们的权重,但是之前关于迁移学习和多任务学习的工作鼓励了这个想法,这些工作确定了为特定任务的特定模型学习的参数可以用于其他任务的其他模型,且这些参数几乎没有修改。

 经验表明,不仅在子模型之间共享参数是可能的,而且它还允许非常强的性能。重要的是,在所有的实验中,使用一个NVIDIA GTX 1080Ti GPU,搜索架构只需不到16个小时。与NAS相比,GPU的工作时间减少了1000倍以上。

2. 方法

  ENAS概念的核心是观察到,NAS最终迭代的所有图都可以看作是一个较大的图的子图。换句话说,可以用一个有向无环图(DAG)来表示NAS的搜索空间。图2展示了一个通用的示例DAG,其中可以通过获取DAG的子图来实现体系结构。直观地说,ENAS的DAG是NAS搜索空间中所有可能的子模型的叠加,节点表示局部计算,边表示信息流动。每个节点上的局部计算都有其自己的参数,仅当特定计算被激活时才使用。因此,ENAS的设计允许在搜索空间中的所有子模型(即体系结构)之间共享参数。


图2. 该图形表示整个搜索空间,而红色箭头定义了搜索空间中的一个模型,该模型由控制器决定。这里,节点1是模型的输入,而节点3和6是模型的输出。

2.1 设计循环cell


图1. 搜索空间中有4个计算节点的递归cell的一个例子。左:对应于循环cell的计算DAG。红色的边代表了图中信息的流动。中间:循环cell。右:控制器RNN的输出,导致中间的cell和左侧的DAG。注意,节点3和节点4从来没有被RNN采样过,因此它们的结果将被平均,并被当作cell的输出。

 ENAS的控制器是一个RNN,它决定:1)哪些边被激活,2)在DAG中的每个节点执行哪些计算。这里通过一个简单的例子,用N=4个计算节点来说明ENAS机制(如图1所示)。设 x t x_{t} 为递归cell的输入信号, h t 1 h_{t-1} 为上一时间步的输出。则采样过程如下:

  • 在node 1:控制器首先对激活函数进行采样。在这个例子中控制器选择tanh激活函数,这意味着递归cell的node 1应该计算 k 1 = t a n h ( x t W ( x ) + h t 1 W 1 ( h ) ) k_{1}=\mathrm{tanh}(\mathbf{x}_{t}\cdot \mathbf{W}^{(\mathbf{x})}+\mathbf{h}_{t-1}\cdot \mathbf{W}_{1}^{(\mathbf{h})})
  • 在node 2:然后,控制器对先前的索引和激活函数进行采样。此例中,它选择前面的索引1和激活函数ReLU。因此,cell的node 2计算 k 2 = R e L U ( k 1 W 2 , 1 ( h ) ) k_{2}=\mathrm{ReLU}(k_{1}\cdot \mathbf{W}_{2,1}^{(\mathbf{h})})
  • 在node 3:还是对先前的索引和激活函数进行采样。这里它选择前面的索引2和激活函数ReLU。因此 k 3 = R e L U ( k 2 W 3 , 2 ( h ) ) k_{3}=\mathrm{ReLU}(k_{2}\cdot \mathbf{W}_{3,2}^{(\mathbf{h})})
  • 在node 4:同理, k 4 = t a n h ( k 1 W 4 , 1 ( h ) ) k_{4}=\mathrm{tanh}(k_{1}\cdot \mathbf{W}_{4,1}^{(\mathbf{h})})
  • 对于输出,简单地平均所有松散端,即未被选作任何其他节点的输入的节点。本例中,由于索引3和4从未被采样作为任何节点的输入,所以递归cell使用它们的平均值 ( k 3 + k 4 ) / 2 (k_{3}+k_{4})/2 作为输出。也就是说 h t = ( k 3 + k 4 ) / 2 \mathbf{h}_{t}=(k_{3}+k_{4})/2

 在上面的例子中,对于每对节点 j < l j<l ,都有一个独立的参数矩阵 W l , j ( h ) \mathbf{W}_{l,j}^{(\mathbf{h})} 。如例子中所示,通过选择先前的索引,控制器还决定使用哪个参数矩阵。因此,在ENAS中,搜索空间中的所有递归cell共享同一组参数。

 这里的搜索空间是指数级的。具体来说,如果递归cell有N个node,并且允许4个激活函数(即tanh、ReLU、identity和sigmoid),那么搜索空间就有 4 N × ( N 1 ) ! 4^{N}\times(N-1)! 种配置。本文的实验中, N = 12 N=12 ,这意味着搜索空间中大约有 1 0 14 10^{14} 个模型。

2.2 训练ENAS和获得架构

 这里的控制器网络是一个有100个隐藏单元的LSTM,该LSTM以自回归方式通过softmax分类器对决策进行采样:上一步中的决策作为输入嵌入到下一步中。

 在ENAS中,有两组可学习参数:用 θ \theta 表示的控制器LSTM参数和用 ω \omega 表示的子模型的共享参数。ENAS的训练过程由两个交织阶段组成。第一阶段在整个训练集上训练子模型的共享参数 ω \omega ,第二阶段训练固定步骤数的控制器LSTM的参数 θ \theta 。 在ENAS训练期间,这两个阶段是交替进行的。

2.2.1 训练子模型的共享参数 ω \omega

 在这一步中,固定控制器的策略 π ( m ; θ ) \pi(\mathbf{m};\theta) 并对 ω \omega 执行随机梯度下降(SGD)以最小化期望损失函数 E m π [ L ( m ; ω ) ] \mathbb{E}_{\mathbf{m}\sim\pi}[\mathcal{L}(\mathbf{m};\omega)] 。这里, L ( m ; ω ) \mathcal{L}(\mathbf{m};\omega) 是标准的交叉熵损失,根据一个minibatch的训练数据计算,模型 m \mathbf{m} π ( m ; θ ) \pi(\mathbf{m};\theta) 采样。梯度是用蒙特卡罗估计来计算的

ω E m π ( m ; θ ) [ L ( m ; ω ) ] 1 M i = 1 M ω L ( m i , ω ) (1) \nabla_{\omega}\mathbb{E}_{\mathbf{m}\sim\pi(\mathbf{m};\theta)}[\mathcal{L}(\mathbf{m};\omega)]\approx\frac{1}{M}\sum_{i=1}^{M}\nabla_{\omega}\mathcal{L}(\mathbf{m}_{i},\omega)\tag{1}

 式中,各 m i \mathbf{m}_{i} π ( m ; θ ) \pi(\mathbf{m};\theta) 采样,如上所述。方程1提供了梯度的无偏估计。但是,该估计值比标准SGD梯度(其中 m \mathbf{m} 固定)具有更高的方差。但是 M = 1 M = 1 正好工作地很好,即可以使用从 π ( m ; θ ) \pi(\mathbf{m};\theta) 采样的任何单个模型 m \mathbf{m} 的梯度来更新 ω \omega

2.2.2 训练控制器参数 θ \theta

 在这一步中,固定 ω \omega 并更新策略参数 θ \theta ,以最大化预期回报 E m π ( m ; θ ) [ R ( m , ω ) ] \mathbb{E}_{\mathbf{m}\sim\pi(\mathbf{m};\theta)}[\mathcal{R}(\mathbf{m},\omega)] 。奖励 R ( m , ω ) \mathcal{R}(\mathbf{m},\omega) 是在验证集而不是在训练集上计算的,以鼓励ENAS选择泛化性好的模型,而不是过拟合训练集的模型。

2.2.3 获取架构

 首先从训练后的策略 π ( m ; θ ) \pi(\mathbf{m};\theta) 中采样几个模型。对于每个采样模型,从验证集中采样的单个mini-batch计算其奖励。然后,只采用奖励最高的模型从头开始重新训练。当然,通过从头开始训练所有采样模型,并在分离的验证集上选择性能最高的模型,可能可以改进实验结果。然而,本文的方法在经济性更高的同时,也产生了类似的性能。

2.3 设计卷积网络

 与之前循环cell的类似,在卷积模型的搜索空间中,控制器RNN也对每个决策块上的两组决策进行采样:1)连接到以前的哪些节点,2)使用什么计算操作。这些决策构成了卷积模型的一层。

 决定连接哪个先前的节点允许模型形成skip连接。具体地说,在第k层,最多对k-1个相互不同的先前索引进行采样,从而在第k层导致 2 k 1 2^{k-1} 个可能的决策。如图3所示是对卷积网络进行采样的示例。在这个例子中,在k=4层,控制器对以前的索引{1,3}进行采样,因此第1层和第3层的输出沿着它们的深度维度concat起来并送到第4层。


图3. 搜索空间中的一个递归cell的一个例子,它有4个计算节点,表示卷积网络中的4层。顶部:控制器RNN的输出。 左下:与网络架构相对应的计算DAG。 红色箭头表示活跃的计算路径。 右下:完整的网络。 虚线箭头表示skip连接。

 同时,使用哪种计算操作的决策将特定层设置为卷积或平均池化或最大池化。控制器可用的6个操作是: 3 × 3 3\times3 5 × 5 5\times5 卷积, 3 × 3 3\times3 5 × 5 5\times5 可分离卷积, 3 × 3 3\times3 最大池化和平均池化。对于循环cell,ENAS卷积网络中每一层的每个操作都有一组不同的参数。将所描述的一组决策总共进行L次,可以对L层的网络进行采样。由于所有的决策都是独立的,因此在搜索空间中存在 6 L × 2 L ( L 1 ) / 2 6^{L}\times2^{L(L-1)/2} 个网络。本文的实验中,L=12,得到 1.6 × 1 0 29 1.6\times10^{29} 个可能的网络。

2.3 设计卷积cell

 与其设计整个卷积网络,不如设计更小的模块,然后将它们连接在一起形成网络。图4说明了此设计,其中将设计卷积cell和Reduction cell的结构。


图4. 连接3个块,每个块有N个卷积cell和1个Reduction cell,形成最终网络。

 这里利用带有B个节点的ENAS计算DAG来表示cell中局部发生的计算。在这个DAG中,node 1和node 2被视为cell的输入,这是最终网络中前两个cell的输出(见图5)。对于剩余的B-2节点中的每一个,要求控制器RNN做出两组决策:1)将两个之前的节点用作当前节点的输入,2)将两个操作应用于两个采样节点。可用的5种操作是:identity、 3 × 3 3\times3 5 × 5 5\times5 可分离卷积、 3 × 3 3\times3 平均池化和最大池化。在每个节点上,在对先前节点及其对应的操作进行采样之后,将这些操作应用于先前的节点,并将其结果加起来。


图5. 在卷积cell上搜索空间的控制器示例运行。 顶部:控制器的输出。 在卷积cell搜索空间中,node 1和node 2是cell的输入,因此控制器仅需设计node 3和node 4。左下:对应的DAG,其中红色边表示已激活的连接。 右下:根据控制器采样得到的卷积cell。

 如图5所示是B=5个节点的示例,用以说明搜索空间的机制:

  • 节点1、2是输入节点,因此不需要对它们进行决策。设 h 1 h_{1} h 2 h_{2} 为这些节点的输出。
  • 在节点3:控制器采样两个之前的节点和两个操作。在图5左上角,它采样node 2、node 2、separable_conv_5x5和identity。这意味着 h 3 = s e p _ c o n v _ 5 × 5 ( h 2 ) + i d ( h 2 ) h3=sep\_conv\_5\times5(h_{2})+id(h_{2})
  • 在节点4:控制器采样node 3、node 1、avg_pool_3x3和sep_conv_3x3。这意味着 h 4 = a v g _ p o o l _ 3 × 3 ( h 3 ) + s e p _ c o n v _ 3 × 3 ( h 1 ) h4=avg\_pool\_3\times3(h_{3})+sep\_conv\_3\times3(h_{1})
  • 由于除了 h 4 h_{4} 以外的所有节点都被用作至少另一个节点的输入,因此唯一的松散端 h 4 h_{4} 被视为单元的输出。如果有多个松散的端点,它们将沿着深度维度concat起来,以形成cell的输出。

 也可以从此搜索空间中实现一个Reduction cell,方法很简单:1)从搜索空间中采样计算图,2)以2的步长应用所有操作。跟NASNet的一样,基于卷积采样Reduction cell,从而使控制器RNN总共运行2(B-2)个块。

 最后估计一下此搜索空间的复杂度。在节点i( 3 i B 3\le i\le B ),控制器可以从i-1个之前的节点中选择任意两个节点,并从5个操作中选择任意两个操作。由于所有决策都是独立的,因此有 ( 5 × ( B 2 ) ! ) 2 (5\times(B−2)!)^{2} 个可能的cell(注意是可以重复的所以这里有个平方)。由于是独立地对卷积cell和Reduction cell进行采样的,所以搜索空间的最终大小为 ( 5 × ( B 2 ) ! ) 4 (5\times(B−2)!)^{4} 。本实验中B=7,搜索空间可以实现 1.3 × 1 0 11 1.3\times10^{11} 个最终网络,使得它比整个卷积网络的搜索空间小得多(2.3节)。

3. 实验

 这里首先介绍了在Penn Treebank数据集上使用ENAS设计循环cell和在CIFAR-10数据集上设计卷积结构的实验结果。然后展示一项消融研究,断言了ENAS在发现新结构中的作用。

3.1 Penn-Treebank语言模型

 ENAS在单个Nvidia GTX 1080Ti GPU上运行,可以在大约10小时内找到一个循环cell。 在表1中展示了ENAS发现的cell的性能以及未采用训练后处理的其他基准。重要的是,ENAS发现的cell比NAS的好了6个多点,而ENAS的搜索过程,就GPU小时而言,要快1000倍以上。


表1. ENAS和其他基线在Penn Treebank上的测试结果。

 而ENAS发现的cell如图6所示。


图6. ENAS为Penn Treebank发现的RNNcell

3.2 CIFAR-10上的图像分类

 这里将ENAS应用于两个搜索空间:1)整个卷积模型上的宏搜索空间(2.3节);2)卷积cell上的微观搜索空间(2.4节)。

 表2总结了ENAS和其他方法的测试误差。


表2. CIFAR-10上ENAS和各基线的分类误差。在这张表中,第一块展示了由人类专家设计的SOTA的架构之一DenseNet。第二部分展示的是设计整个网络的方法。最后一块展示的是设计模块化cell的技术,这些cell被组合起来构建最终网络。

 正如表中第二部分所示,ENAS找到了一个如图7所示的网络架构,实现了4.23%的测试误差,优于次优NAS模型的4.47%。如果保留架构,但将网络最高层的滤波器数量增加到512个,那么测试误差将减少到3.87%,与NAS的最佳模型(测试误差为3.65%)相距不远。但与NAS相比,ENAS大约需要7个小时来找到此体系结构,将GPU小时数减少了5000倍以上。


图7. ENAS从图像分类宏搜索空间发现的网络。

 表2的第三部分介绍了一些方法的性能,这些方法试图设计更多的模块,然后将它们连接在一起形成最终网络。ENAS需要11.5小时来找到卷积cell和Reduction cell,如图8所示。通过将卷积cell重复 N = 6 N=6 次(参见图4),与NASNet-A的3.41%的错误率处于同等水平,ENAS可以实现3.54%的测试错误率。与NASNet-A的2.65%相比,使用CutOut时,ENAS的误差降低到2.89%。


图8. 微搜索空间中ENAS发现的cell。

 除了ENAS的强大性能外,作者还发现ENAS发现的模型在某种意义上是其搜索空间中的局部极小值。特别是,在从宏搜索空间得到的模型中,如果用标准卷积替换所有可分离卷积,然后调整模型大小,使参数数目保持不变,那么测试误差增加1.7%。类似地,如果随机改变在微搜索空间中搜索到的cell中的几个连接,则测试误差增加2.1%。当ENAS搜索循环cell以及在NAS中,也观察到这种行为。因此作者认为由ENAS学习的控制器RNN与由NAS学习的控制器RNN一样好,而NAS与ENAS之间的性能差距是因为ENAS没有从经过训练的控制器中采样多个体系结构,对它们进行训练,并根据验证数据选择最佳体系结构。这一额外步骤有利于NAS的性能。

3.3 ENAS的重要性

 有关ENAS重要性的一个问题是ENAS是否真正有能力找到好的架构,或者是否是搜索空间的设计导致了ENAS强大的经验表现。

3.3.1 与引导随机搜索比较

 随机的循环cell在Penn Treebank上达到了81.2,远比ENAS的56.3差。在CIFAR-10上,随机的卷积网络达到了5.86%的测试误差,两个随机cell达到了6.77%,而ENAS分别达到了4.23%和3.54%

3.3.2 禁用ENAS搜索

 除了随机搜索,这里尝试只训练共享参数 ω \omega 而不更新控制器。在收敛时,模型的误差率为8.92%。在验证集上,该训练模型的250个蒙特卡罗配置的ensemble只能达到5.49%的测试误差。因此,对ENAS控制器进行适当的训练对于良好的性能至关重要。

4. 相关工作及讨论

  • 提高NAS效率:性能预测、复杂度不断增加的体系结构的迭代搜索方法、体系结构的层次表示
  • SMASH:设计一个架构,然后使用一个超网络来产生其权重

 ENAS在架构间共享权重的设计受到神经模型进化中权重继承概念的启发。此外,ENAS选择使用DAG表示计算受到随机计算图概念的启发,该概念将具有随机输出的节点引入计算图中。ENAS利用网络中的这种随机决策来做出控制网络中后续计算的离散体系结构决策,效率决策者(即控制器),并最终获取决策以得到体系结构。

5. 总结

 NAS是神经网络设计过程自动化的一个重要进展。然而,NAS的计算开销阻碍了它的广泛应用。本文提出了一种新的方法ENAS,它可以将NAS的速度提高1000倍以上。ENAS的主要贡献是在搜索架构期间跨子模型共享参数。 通过在较大的图中搜索子图来实现这种想法,该大图包含了一个搜索空间中的体系结构。


个人看法

 本文的ENAS通过将NAS的采样过程变成在一个DAG里面采样子图的过程,通过使采样到的子图里面的各操作(比如卷积等操作)参数共享(即直接从DAG中继承而来而不是重新初始化),避免了再次重头训练,从而极大的加快了速度。当然这里DAG的参数以及采样器(RNN)是需要优化的(本文采用的是交替优化DAG中的参数和采样器中的参数)。总的来说这篇文章是NAS平民化的一个极大进步,通过参数共享将NAS的成本控制到了普通玩家也可以玩得起的程度(也就一个1080Ti跑半天,毫无压力)。

发布了68 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JR_Chan/article/details/105130561