论文笔记:DARTS: Differentiable Architecture Search

DARTS: Differentiable Architecture Search
2019-03-19 10:04:26
accepted by ICLR 2019
node

Paperhttps://arxiv.org/pdf/1806.09055.pdf git

Codehttps://github.com/quark0/darts github

 

1. Motivation and Background: 算法

前人的网络搜索方法,要么是基于 RL 的,要么是基于进化算法的,都是很是耗时的,最近的几个算法表示他们的计算时间可能须要:1800 GPU days 以及 3150 GPU days。虽然如今也有人对其进行加速处理(Speed Up),例如:网络

imposing a particular structure of the search space (Liu et al., 2017b,a),app

weights or performance prediction for each individual architecture (Brock et al., 2017; Baker et al., 2018)dom

weight sharing across multiple architectures (Pham et al., 2018b; Cai et al., 2018),  函数

可是  scalability 根本性的挑战并无获得很好的解决。而致使这种低效率的缘由在于:他们将结构搜索这个任务当作是一个 离散领域的黑盒优化问题(Block-box optimization problem over a discrete domain),从而致使须要评价大量的结构。性能

 

在本文中,做者从不一样的角度来解决这个问题,而且提出一种称为 DARTS(Differentiable ARchiTecture Search) 的方法来进行有效的结构搜索。并不是在候选结构的离散集合中进行搜索,而是将搜索空间松弛到连续的领域,从而能够经过梯度降低的方式,用验证集效果的高低,来进行优化。基于梯度优化的数据效率,与低效率的 block-box 搜索方式相比较,能够获得更加至关的精度,而且能够少用至关多的计算资源。同时,也比现有的改进方法要好,ENAS。能够同时进行卷积和循环结构的搜索。学习

 

在连续领域中利用结构搜索并非很新,可是仍然有几个重大的区别:

首先,前人的工做尝试微调特定方面的结构,如 filter shapes 或者 分支模式,而 DARTS 能够发现复杂的图拓扑,实现高性能的结构;

其次,并不受限于特定结构,能够同时发掘 卷积 和 循环网络。

 

2. Differentiable Architecture Search:  

2.1 Search Space:

跟随前人的工做,咱们搜索一个计算单元(computation cell)做为最终结构的构建模块(building block)。该学习的单元能够堆叠成 convolutional network 或者 循环连接获得一个 recurrent network。

一个 cell 是一个 directed acyclic graph,是一个由 N 个 nodes 组成的有序的序列。每个节点 $x^{(i)}$ 是一个隐藏表达(即,feature map),有向边 (i, j) 是用一些操做 $o^{(i, j)}$ 用于转换 $x^{(i)}$。咱们假设该 cell 是由两个输入节点,以及单个输出节点。对于 convolutional cells,输入节点是由前两层的 cell 输出定义获得的。对于 recurrent layer,这些被定义为当前时刻的输入,以及从前一个时刻的状态(states)。cell 的输出是经过对全部的即刻节点(intermediate nodes) concatenation 获得的。

每个即刻节点都是经过以下的方式进行计算的:

一个特殊的 zero operation 也被引入,来表示两个节点之间不存在连接。因此,cell 的学习被简化为:learning the operations on its edges。 

 

2.2 Continuous Relaxation and Optimization

假设 O 表示候选操做的集合(即,convolution, max pooling, zero),其中,每个操做符表明一些函数 o(*) 做用于 $x^{(i)}$。为了使得搜索空间变的连续,咱们将特定操做的种类选择松弛为:全部可能操做的 softmax 函数:

其中,一对节点(i, j)的操做混合权重,是由向量 $\alpha^{(i, j)}$ 进行参数化表示的。在松弛以后,该结构搜索任务就变成了:学习一组连续变量 $\alpha = {\alpha^{(i, j)}}$,如图 1 所示。在搜索结束以后,咱们经过将最像的操做来替换掉每一个混合操做符,就得到了一个离散的结构,即:

在接下来,咱们将 $\alpha$ 表示为结构的编码。

 

在松弛以后,咱们的目标是:联合的学习结构化参数 $\alpha$ 和 权重 $w$ 。与强化学习 或者 进化算法相似,咱们将验证集的性能看作是最终的奖励或者拟合程度,DARTS 的目标就是优化该验证集损失,可是用的是 gradient descent。

 

咱们用 $L_{train}$ and $L_{val}$ 表示 训练和验证集的损失。这两个损失不但由结构 $\alpha$ ,也与网络的权重 $w$ 相关。结构化搜索的目标是:找到一个最优的参数 $\alpha*$ 使其能够最小化验证集的损失函数 $L_{val} (w*, \alpha*)$,而且与结构相关的模型权重 $w*$ 也紧跟着经过最小化 训练集损失而获得,即:$w* = arg min_w L_{train} (w, \alpha^*)$。

 

这是一个 bilevel optimization problem,其中 $\alpha$ 是 upper-level variable,$w$ 是 lower-level variable:

这个嵌套的表达也在 gradient-based hyperparameter optimization 中被提出,虽然其维度较高,且更难被优化。

 

2.3 Approximation

求解上述双向优化问题,计算量是很是大的,由于一旦上层的 $\alpha$ 变掉了,那么,里面模型的权重 $w*(\alpha)$ 就必须从新计算。咱们因此提出一种近似的迭代优化策略:将 w 和 $\alpha$ 用梯度降低步骤来相互优化,如算法 1 所示。

在 step k,给定当前的结构 $\alpha_{k-1}$,咱们经过朝向下降训练损失的方向去移动 $w_{k-1}$ 来获得 $w_k$。而后,保持权重 $w_k$ 不变,去更新网络结构,使其能够最小化验证集损失(在执行一次梯度降低以后):

其中, 是该虚拟梯度步骤的学习率。公式 5 的动机是:we would like to find an architecture which has a low validation loss when its weights are optimized by (a single step of) gradient descent, where the one-step unrolled weights serve as the surrogate for w(α)

一个相关的方法也被用于 meta-learning 来进行模型迁移。须要注意的是,做者所提出的这种动态迭代算法,定义了一种 $\alpha$'s optimizer (leader) 和 $w$'s optimizer (follower) 之间的 Stackelberg game ,为了达到平衡,这一般要求 the leader 参与到 follower 的下一步移动。咱们当前没有注意到收敛性保证,实际上,适当的调整学习率,是能够确保收敛的。咱们也注意到:对于权重优化,当动量能够确保时,one-step forward learning objective(5)也被随之而改变,因此咱们的分析,都是适用的。

 

经过微分公式 5,咱们能够获得结构梯度,即 $\alpha$:

其中,表明一个 one-step forward model 的权重。公式 6 的第二项包含了一个 matrix-vector product,其计算代价昂贵。幸亏,finite difference approximation 能够用于下降其复杂性。用  表示一个小的 scalar,那么咱们有:

而后,咱们能够获得:

评估该 finite difference 仅须要两次前向传播便可获得 weights,两次反向传播,就能够获得 $\alpha$,运算复杂度大大的下降了:

 

First-order Approximation

当学习率  为 0,公式 6 中的二阶衍生物就消失了。在这种状况下,结构梯度就是: 

 

2.4 Deriving Discrete Architectures

在获得连续结构编码 $\alpha$ 以后,离散的结构能够经过以下的结构获得:

1). Retaining k strongest predecessors for each intermediate node, where the strength of an edge is defined as: 

2). Replacing every mixed operation as the most likely operation by taking the argmax. 

 

 

3. Experiments and Results: 

做者在 CIFAR-10 和 PTB 上面作了实验,分为两个阶段:architecture search 和 architecture evaluation。

在第一个阶段,做者搜索 the cell architectures,而后根据其 验证集的性能,肯定最优的 cell。 

在第二个阶段,咱们利用这些 cell 来构建大型的结构,而后 train from scratch,而且在测试集上查看最终性能。

最终,做者探索了 the best cells 的迁移能力,而且在 ImageNet 和 WikiText-2 (WT2)数据集上进行了性能测试。

 

划重点:

效果对比:

 

 

== 

相关文章
相关标签/搜索