论文解读:DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH(ICLR2019)

DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH(ICLR2019)

摘要:本文主要提出了一种通过可微的方式进行结构搜索的方法。不同于传统的在离散的和不可微的搜索空间上采用进化或强化学习搜索结构的方法,本文提出的方法主要是基于将结构表示的松弛(relaxation),允许使用梯度下降进行高效的架构搜索。本文已经在CIFAR-10,ImageNet,Penn Treebank和WikiText-2等数据集上进行了大量实验,结果表明本文提出的算法对于常用于图像分类的卷积神经网络和用于语言建模的循环神经网络都有很好的表现,并且比目前采用非微分的方法速度快几个数量级。

1.Introduction
现有的架构搜索方法虽然性能好,但是会耗费大量的计算资源。例如,获得CIFAR-10和ImageNet的最新架构需要1800 GPU天的强化学习(RL) (Zoph et al., 2017) 或3150 GPU天的进化学习 (Real et al., 2018)。虽然已经提出了几种加速方法,如强加搜索空间的特定结构(Liu et al., 2017b,a),对每个单独架构的权重或性能预测(Brock et al., 2017; Baker et al., 2018) ,以及跨体系结构的权重共享 (Pham et al., 2018b; Cai et al., 2018),但可扩展性的根本挑战依然存在。目前主流方法效率低下的内在原因在于把结构搜索视为一个在离散域的黑箱优化问题,这导致需要大量的架构评估。

本文从另外一个角度,提出了一种称之为DARTS(可微分的结构搜索)的高效架构搜索方法。与搜索一组离散的候选架构不同的是,本文提出的方法通过松弛搜索空间使之连续,从而使架构可以通过梯度下降的方法对其在验证集上的性能进行优化。因为基于梯度的优化,与低效的黑盒搜索不同,使得DARTS使用比现有技术数量级较少的计算资源实现具有竞争力的表现。DARTS也优于另一种最近的高效架构搜索方法,ENAS (Pham et al., 2018b).值得一提的是,DARTS与许多现有方法相比更简单,因为它不涉及任何controllers ,hypernetworks 或performance predictors。但是对于卷积神经网络和循环神经网络均有较好效果。

在连续的领域里进行架构的搜索其实并不新鲜,与之前工作的区别在于:1.虽然之前的工作试图对结构的特定方面进行微调,如卷积网络中的滤波器形状或分支模式,但是DARTS能够在丰富的搜索空间内发现具有复杂图形拓扑的高性能架构。2.此外,DARTS不限于任何特定架构系列,能够搜索卷积网络和循环网络。

本文的主要贡献可以归纳为如下几点:

  • 本文引入了一种适用于卷积和循环结构的可微分网络体系结构搜索的新算法。
  • 大量实验表明本文提出的算法在图片分类和语言建模任务上有很有竞争力的表现。
  • 本文实现了极高的结构搜索效率,这归功于使用了基于梯度的优化而不是非微分搜索技术。
  • 本文证明了DARTS学习的架构具备可迁移性。

2.不同的架构搜索方法
2.1搜索空间(search space)
与之前的研究一致,本文搜索计算单元来作为最终架构的组成模块。这个学习到的模块可以通过堆叠成卷积神经网络,或者通过循环连接组成循环神经网络。

每个单元是由N个节点组成的有向无环图。每个节点 x ( i ) x^{(i)} x(i)是一个隐式表达(例如卷积神经网络的feature map),每条有向边(i,j)代表转移 x ( i ) x^{(i)} x(i)的运算 o ( i , j ) o^{(i,j)} o(i,j)。假设每个单元有两个输入节点和一个输出节点,对于卷积单元,输入节点定义为前两层的单元输出;对于循环单元,输入节点被定义为当前step的输入和上一个step计算得到的状态。单元的输出主要是通过对各个中间状态进行reduction操作(例如concatenation)得到。
每个中间状态节点都是基于其之前的多有节点计算得到的:
x ( i ) = ∑ i < j o ( i , j ) ( x ( i ) ) x_(i)=\sum_{i<j} o^{(i,j)} (x^{(i)}) x(i)=i<jo(i,j)(x(i))
论文解读:DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH(ICLR2019)_第1张图片
一种特殊的零运算也被引入来表示两个节点之间不存在的连接。因此通过学习生成单元的任务就可以简化为学习边节点间边所对应的运算。

2.2连续松弛与优化
假设O是候选运算的集合(例如卷积,最大池化,zero等)。为了让搜索空间连续,本文将特定预算的种类选择松弛为对所有可能的预算进行softmax计算。
在这里插入图片描述
其中,节点对(i,j)间的运算混合权重参数化表示为 α ( i , j ) \alpha^{(i,j)} α(i,j),然后架构搜索的任务简化为学习一组连续变量。如figure1中所示,搜索完成后,本文通过将最类似的运算操作来替换每一个混合运算操作符,这样就得到了一个离散的结构,即为 o ( i , j ) = a r g m a x o ∈ O α o ( i , j ) o^{(i,j)}=argmax_{o \in O} \alpha_o^{(i,j)} o(i,j)=argmaxoOαo(i,j)

松弛后,我们的主要目标就是利用混合运算操作符(例如卷积滤波器的参数)来联合学习所有混合操作的架构 α \alpha α和权重 ω \omega ω。类似于强化学习或者进化算法,本文将验证集的性能看做是最终的奖励或者拟合程度,DARTS 的目标就是优化验证集上的loss,但是用的是梯度下降的方法。

本文分别用 L t r a i n L_{train} Ltrain L v a l L_{val} Lval表示训练集和验证集上的loss。上述loss不仅与架构 α \alpha α有关,也和网络中的权重 ω \omega ω有关。结构搜索的目标是找到一个合适的架构 α ∗ \alpha^* α,使之能够最小化验证集上的损失 L v a l ( ω ∗ , α ∗ ) L_{val}(\omega^*,\alpha^*) Lval(ω,α),其中与结构相关的权重 ω ∗ \omega^* ω主要是通过最小化训练loss获得的,即 ω ∗ = a r g m i n ω L t r a i n ( ω , α ∗ ) \omega^*=argmin_{\omega}L_{train}(\omega,\alpha^*) ω=argminωLtrain(ω,α)
这意味着上述问题是一个双层优化问题(bilevel optimization problem),其中 α \alpha α是上层的变量, ω \omega ω是低层的变量。
在这里插入图片描述
这个嵌套式表达也在 gradient-based hyperparameter optimization 中被提出,虽然它的维度远远高于标量值超参数,例如学习率,但它更难以优化。
算法流程如下:
论文解读:DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH(ICLR2019)_第2张图片
2.3近似结构梯度(APPROXIMATE ARCHITECTURE GRADIENT)
由于上述双层优化问题内部优化需要耗费大量的计算,因此很难准确计算模型架构的实际梯度,本文提出了如下近似估计结构梯度的方案:
在这里插入图片描述
其中w表示算法维持的当前权重, ξ \xi ξ是内部优化步骤的学习率。该方法的思想是通过仅使用单个训练step来调整w,以此来近似 ω ∗ ( α ) \omega^*(\alpha) ω(α),而不是通过训练直到收敛来完全解决内部优化问题。相关技术已经被用于meta learning的模型迁移,gradientbased hyperparameter tuning和unrolled generative adversarial networks。需要注意的是,由等式(6)可以看出,如果 ω \omega ω已经是内部优化问题的局部最优解,那么 ▽ w L t r a i n ( ω , α ) = 0 \bigtriangledown_wL_{train}(\omega,\alpha)=0 wLtrain(ω,α)=0,因此,等式6的值就减小到 ▽ α L v a l ( ω , α ) \bigtriangledown_{\alpha}L_{val}(\omega,\alpha) αLval(ω,α)

具体的迭代过程如算法1的流程图所示。虽然我们目前还没有意识到优化算法的收敛保证,但实际上它能够通过合适的学习率选择达到一个固定点。此外,当动量被用于权重优化时,等式6中的一步展开学习目标被相应地修改,并且我们的所有分析仍然适用。将链式法则运用到近似结构梯度(等式6)可以得到:
在这里插入图片描述
其中 ω ′ = ω − ξ ▽ ω L t r a i n ( ω , α ) \omega'=\omega-\xi \bigtriangledown_{\omega}L_{train}(\omega,\alpha) ω=ωξωLtrain(ω,α)表示的是一个one-step forward model的权重。上述表达式在第二部分包含一个计算复杂度很高的矩阵向量乘积。幸好可以使用有限差分近似的方法可以大幅度降低计算复杂度。设 ϵ \epsilon ϵ是一个小标量,则 ω ± = ω ± ϵ ▽ ω ′ L v a l ( ω ′ , α ) \omega^{\pm}=\omega \pm \epsilon\bigtriangledown_{\omega'}L_{val}(\omega',\alpha) ω±=ω±ϵωLval(ω,α),就有:
在这里插入图片描述
由上式可以看出,评估finite difference只需要两次前向传播即可得到权重,两次反向传播即可得到结构 α \alpha α,这大大降低了时间复杂度,复杂度变化如下:
在这里插入图片描述
First-order Approximation:当学习率 ξ = 0 \xi=0 ξ=0时,等式7中的第二项就为0。在这种情况下,结构的梯度就为 ▽ α L v a l ( ω , α ) \bigtriangledown_{\alpha}L_{val}(\omega,\alpha) αLval(ω,α),这与直接将当前的 ω \omega ω作为 ω ∗ ( α ) \omega^*(\alpha) ω(α)的简答近似一致。本文通过实验证明,这能够大幅度提升计算速度,但是会降低性能。

2.4推导离散结构
为了形成离散体系结构中的每个节点,我们保留了从所有先前节点收集的所有非零候选操作中(来自不同节点)最强的top-k个运算操作符,其中每个操作符的比重用前文中提到的softmax函数定义。为了与现有工作进行对比,对于卷积单选,k选取2;对于循环单元,k选取1。

3.实验和结果
本文的实验主要是在CIFAR-10和PTB上进行,主要包括两个阶段:第一阶段,主要用DARTS搜索单元结构,根据验证集上的表现决定最好的单元;第二阶段,本文用这些单元来构建更大的架构,然后从头开始训练,并测试在测试集上的表现。

你可能感兴趣的:(论文阅读)