《DARTS: Differentiable Architecture Search》论文阅读笔记

DARTS

 这篇文章提出的DARTS可谓是NAS平民化的一个重要节点,后续好多顶会的论文都是据此进行修改的,当然也可能是因为本文的代码开源了,用pytorch也写的不错哈哈。DARTS极大提升了NAS的搜索速度,一个1080Ti跑个一天也就行了,这篇文章发表在了ICLR 2019。原文可见DARTS: Differentiable Architecture Search


摘要

 本文通过以可微的方式制定任务来解决架构搜索的可伸缩性挑战。与在离散不可微搜索空间上应用进化或强化学习的传统方法不同,本文的方法基于架构表示的连续松弛,从而允许使用梯度下降对架构进行高效的搜索。在CIFAR-10、ImageNet、Penn Treebank和WikiText-2上进行的大量实验表明,此算法在发现用于图像分类的高性能卷积结构和用于语言建模的循环结构方面具有优异的性能,同时速度比SOTA的不可微技术快几个数量级。代码也已经开源。

1. 引言

 发现SOTA的神经网络体系结构需要人类专家付出巨大的努力。 最近,人们对开发算法解决方案以使体系结构设计的手动过程自动化的兴趣日益浓厚。 自动搜索的体系结构在图像分类和目标检测等任务中获得了极高的竞争性能。

 现有的最好的架构搜索算法虽然性能卓越,但在计算上要求很高。例如,要获得CIFAR-10和ImageNet的SOTA架构,就需要2000个GPU天的强化学习(RL)或3150个GPU天的进化学习。已经提出了几种加速方法,例如对搜索空间施加特定结构、对每个架构的权重或性能预测以及跨多个架构的权重共享/继承,但是可伸缩性的基本挑战仍然存在。主要方法(例如基于RL、进化、MCTS、SMBO或贝叶斯优化)效率低下的一个内在原因是,架构搜索被视为离散域上的黑箱优化问题,这导致需要大量的架构评估。

 这项工作从不同的角度来处理这个问题,并提出了一种高效的架构搜索方法,称为DARTS(可微架构搜索)。不必搜索一组离散的候选体系结构,而是将搜索空间放宽为连续的,这样就可以通过梯度下降来优化体系结构的验证集性能。与效率低下的黑箱搜索相反,基于梯度的优化的数据效率使DARTS可以使用较少数量级的计算资源,而与SOTA保持竞争优势。它也胜过另一种最新的高效架构搜索方法ENAS。 值得注意的是,DARTS比许多现有方法更简单,因为它不涉及控制器、超网络或性能预测器,但它足够通用,可以处理卷积和循环体系结构。

 在连续域内搜索架构的想法并不新鲜,但是有几个主要区别。 尽管先前的工作试图微调体系架构的特定方面,例如卷积网络中的滤波器形状或分支模式,但DARTS能够在丰富的搜索空间中学习具有复杂图形拓扑的高性能体系架构构建块。 此外,DARTS不限于任何特定的体系架构家族,并且适用于卷积网络和循环网络。

 本文的贡献可总结如下:

  • 提出了一种基于双层优化的可微网络结构搜索算法,该算法适用于卷积结构和递归结构。
  • 在图像分类和语言建模任务上的大量实验表明基于梯度的体系结构搜索在CIFAR-10上获得了极具竞争力的结果,并且在PTB上表现出了超越SOTA的水平。
  • 实现了显著的效率提高(将架构搜索的成本降低到几个GPU天),这归功于使用基于梯度的优化,而不是不可微的搜索技术。
  • 证明了DARTS在CIFAR-10和PTB上学到的体系架构可以迁移到更大的数据集ImageNet和WikiText-2上。

2. 可微架构搜索

  第2.1节中以一般形式描述了搜索空间,其中架构(或其中的cell)的计算过程表示为有向无环图。然后,第2.2节为搜索空间引入了一个简单的连续松弛方案,从而为结构及其权重的联合优化找到了一个可微的学习目标。最后2.3节提出了一种近似技术,使算法在计算上可行且有效。

2.1 搜索空间

 这里还是搜索一个cell作为最终架构的构建块。所学习的cell可以堆叠形成卷积网络,也可以递归连接形成循环网络。cell是由N个节点的有序序列组成的有向无环图。 每个节点 x ( i ) x^{(i)} 是一个潜在的表征(例如卷积网络中的特征图),每个有向边 ( i , j ) (i,j) 与某个对 x ( i ) x^{(i)} 进行转换的操作 o ( i , j ) o^{(i,j)} 相关联。这里假设cell有两个输入节点和一个输出节点。对于卷积cell,输入节点被定义为前两层中的cell的输出。对于循环cell则被定义为当前步骤的输入和上一步骤的状态。通过对所有中间节点应用reduction操作(例如级联concat)来获得cell的输出。

 每个中间节点都是基于其所有前置节点计算的:
x ( i ) = i < j o ( i , j ) ( x ( i ) ) (1) x^{(i)}=\sum_{i<j}o^{(i,j)}(x^{(i)})\tag{1}

 还包括一个特殊的zero操作,用于指示两个节点之间没有连接。因此,学习cell的任务减少到学习cell各边的操作。

2.2 连续松弛和优化

 设 O \mathcal{O} 为一组候选操作(例如卷积、最大池化、zero),其中每个操作表示要应用于 x ( i ) x^{(i)} 的某个函数 o ( ) o(\cdot) 。为了使搜索空间连续,将特定操作的分类选择放宽到所有可能操作上的softmax(其实就是通过softmax加权各操作使其变得可导了):
o ˉ ( i , j ) ( x ) = o O e x p ( α o ( i , j ) ) o O e x p ( α o ( i , j ) ) o ( x ) (2) \bar{o}^{(i,j)}(x)=\sum_{o\in\mathcal{O}}\frac{\mathrm{exp}(\alpha_{o}^{(i,j)})}{\sum_{o'\in\mathcal{O}}\mathrm{exp}(\alpha_{o'}^{(i,j)})}o(x)\tag{2}

其中,一对节点 ( i , j ) (i,j) 的操作混合权重由维度 O |\mathcal{O}| 的向量 α ( i , j ) \alpha^{(i,j)} 参数化。然后,架构搜索的任务减少为学习一组连续变量 α = { α ( i , j ) } \alpha=\{\alpha^{(i,j)}\} ,如图1所示。在搜索结束时,通过将每个混合操作 o ˉ ( i , j ) \bar{o}^{(i,j)} 替换为最可能的操作,即 o ˉ ( i , j ) = a r g m a x o O α o ( i , j ) \bar{o}^{(i,j)}=\mathrm{argmax}_{o\in\mathcal{O}}\alpha_{o}^{(i,j)} 其实就是哪个操作的权重最大就选哪个),可以获得一个离散的体系结构。下面就将 α \alpha 称为体系架构(的编码)。


图1. DARTS概述:(a)各边的操作最初未知。(b)通过在每个边上混合候选操作对搜索空间进行连续松弛。 (c)通过解决双层优化问题,对混合概率和网络权重进行联合优化。(d)从学习的混合概率中得出最终的体系结构。

 之后,目标是联合学习架构 α \alpha 和所有混合操作中的权重 w w (例如卷积滤波器的权重)。类似于使用RL或进化的架构搜索,其中验证集性能被视为奖赏,DARTS旨在优化验证损失,但使用梯度下降。

 分别用 L t r a i n \mathcal{L}_{train} L v a l \mathcal{L}_{val} 表示训练和验证损失。这两个损耗不仅由架构 α \alpha 决定,还由网络中的权重 w w 决定。架构搜索的目标是找到 α \alpha^{*} 以最小化验证损失 L v a l ( w , α ) \mathcal{L}_{val}(w^{*},\alpha^{*}) ,其中与架构相关的权重 w w^{*} 通过最小化训练损失获得 w = a r g m i n w L t r a i n ( w , α ) w^{*}=\mathrm{argmin}_{w}\mathcal{L}_{train}(w,\alpha^{*})

 这意味着一个以 α \alpha 为上层变量, w w 为下层变量的双层优化问题:
min α L v a l ( w ( α ) , α ) s . t . w ( α ) = a r g m i n w L t r a i n ( w , α ) (3) \begin{aligned} \min_{\alpha}&\quad\mathcal{L}_{val}(w^{*}(\alpha),\alpha)\\ \mathrm{s.t.}&\quad w^{*}(\alpha)=\mathrm{argmin}_{w}\mathcal{L}_{train}(w,\alpha)\tag{3} \end{aligned}

 嵌套公式也出现在基于梯度的超参数优化中,从某种意义上说,架构 α \alpha 可以被视为一种特殊类型的超参数,尽管它的维数远高于标量值的超参数(如学习率),而且很难优化。

2.3 近似架构梯度

 由于代价高昂的内部优化,精确地评估架构梯度可能会令人望而却步(如果按前面的方程3,需要先在训练集上训练到收敛得到一个最优的 w w ,然后再在验证集上优化 α \alpha ,接着又需要再次优化 w w ,就很耗时)。因此,作者提出一个简单的近似方案:
α L v a l ( w ( α ) , α ) α L v a l ( w ξ w L t r a i n ( w , α ) , α ) (4) \nabla_{\alpha}\mathcal{L}_{val}(w^{*}(\alpha),\alpha)\approx\nabla_{\alpha}\mathcal{L}_{val}(w-\xi\nabla_{w}\mathcal{L}_{train}(w,\alpha),\alpha)\tag{4}

其中 w w 表示算法保持的当前权重, ξ \xi 是内部优化步骤的学习率。这个想法是通过仅使用一个训练步骤调整 w w 来近似 w ( α ) w^{*}(\alpha) 也就是不训练到收敛得到最优 w w 了,而只是进行一次梯度下降更新一次 w w ,得到一个不是最优的 w w ),而无需通过训练直到收敛来完全求解内部优化(方程3)。相关技术已被用于元学习中的模型迁移、基于梯度的超参数调整和展开的生成对抗网络。注意如果 w w 已经是内部优化的局部最优值,则方程4将变为 α L v a l ( w , α ) \nabla_{\alpha}\mathcal{L}_{val}(w,\alpha) ,且有 w L t r a i n ( w , α ) = 0 \nabla_{w}\mathcal{L}_{train}(w,\alpha)=0

 迭代过程在算法1中概述。尽管目前尚不了解此优化算法的收敛性保证,但实际上可以通过选择合适的 ξ \xi 达到固定点。还注意到,当为权重优化启用动量(momentum)时,方程4中的一步式展开学习目标将相应修改,但所有的分析仍然适用。


算法1

 将链式法则应用于近似的架构梯度(方程4)得到
α L v a l ( w , α ) ξ α , w 2 L t r a i n ( w , α ) w L v a l ( w , α ) (5) \nabla_{\alpha}\mathcal{L}_{val}(w',\alpha)-\xi\nabla_{\alpha,w}^{2}\mathcal{L}_{train}(w,\alpha)\nabla_{w'}\mathcal{L}_{val}(w',\alpha)\tag{5}

其中 w = w ξ w L t r a i n ( w , α ) w'=w-\xi\nabla_{w}\mathcal{L}_{train}(w,\alpha) 表示一步前向模型的权重。上面的表达式在第二项中包含一个昂贵的矩阵向量积。幸运的是,使用有限差分近似可以大大降低复杂性。设 ϵ \epsilon 是一个小标量, w ± = w ± ϵ w L v a l ( w , α ) w^{\pm}=w\pm\epsilon\nabla_{w'}\mathcal{L}_{val}(w',\alpha) 。则有:
α , w 2 L t r a i n ( w , α ) w L v a l ( w , α ) α L t r a i n ( w + , α ) α L t r a i n ( w , α ) 2 ϵ (6) \nabla_{\alpha,w}^{2}\mathcal{L}_{train}(w,\alpha)\nabla_{w'}\mathcal{L}_{val}(w',\alpha)\approx\frac{\nabla_{\alpha}\mathcal{L}_{train}(w^{+},\alpha)-\nabla_{\alpha}\mathcal{L}_{train}(w^{-},\alpha)}{2\epsilon}\tag{6}
(注:方程5和6的推导可以看这里

 评估有限差分只需要两次前向传播权重和两次反向传递 α \alpha ,复杂度从 O ( α w ) O(|\alpha||w|) 降低到 O ( α + w ) O(|\alpha|+|w|)

一阶近似

 当 ξ = 0 \xi=0 时,方程5中的二阶导数将消失。在这种情况下,架构梯度由 α L v a l ( w , α ) \nabla_{\alpha}\mathcal{L}_{val}(w,\alpha) 给出,对应于通过假设当前 w w w ( α ) w^{*}(\alpha) 相同来优化验证集损失的简单启发式算法。根据表1和表2中的实验结果,这会有一些加速效果,但从经验上讲会降低性能。下文中将 ξ = 0 \xi=0 的情况称为一阶逼近, ξ > 0 \xi>0 的则称为二阶逼近。


图2. 当L_val(w,a)=aw-2a+1和L_train(w,a)=w^2-2aw+a^2时,迭代算法的学习动力,从(a,w)=(2,-2)开始。相应的双层优化问题的解析解是(a,w)=(1,1),在红色圆圈中突出显示。红色虚线表示完全满足约束方程3的可行集(即,w中的权重对于给定架构a是最优的)。例子表明,选择合适的xi有助于收敛到一个较好的局部最优解。

2.4 获得离散架构

 为了形成离散体系结构中的每个节点,保留从所有先前节点收集的所有非零候选操作中排在前k位的最强操作(来自不同的节点,且排除zero操作)。操作的强度定义为 e x p ( α o ( i , j ) ) o O e x p ( α o ( i , j ) ) \frac{\mathrm{exp}(\alpha_{o}^{(i,j)})}{\sum_{o'\in\mathcal{O}}\mathrm{exp}(\alpha_{o'}^{(i,j)})} 就是前面方程2的加权系数)。(比如选择卷积cell时k=2)

3. 实验及结果

 这里的实验包括两个阶段,架构搜索和架构评估。第一阶段使用DARTS搜索cell架构,并根据其验证性能确定最佳cell。第二阶段使用这些cell构建更大的体系架构,从头开始训练,并在测试集上报告其性能。

3.1 架构搜索

3.1.1 在CIFAR-10上搜索卷积cell

 这里用到的操作包括: 3 × 3 3\times3 5 × 5 5\times5 的可分离卷积及可分离空洞卷积, 3 × 3 3\times3 的最大池化和平均池化,identity和zero。而且使用了经典的ReLU-Conv-BN进行卷积运算(在MobileNet系列里是Conv-BN-ReLU,不过一堆叠起来就基本没太大区别了),每个可分离卷积总是应用两次。

 卷积cell由 N = 7 N=7 个节点组成,其中输出节点被定义为所有中间节点(不包括输入节点)在深度方向上的concat。然后还是跟之前的工作一样,通过堆叠cell组成网络。第k个cell的第一和第二个节点分别设置为第k-2个和第k-1个cell的输出,并根据需要插入 1 × 1 1\times1 卷积。位于网络总深度的 1 / 3 1/3 2 / 3 2/3 处的cell是Reduction cell,其中与输入节点相邻的所有操作的stride都是2。


图4. CIFAR-10上学到的Normal cell。

图5. CIFAR-10上学到的Reduction cell。

3.1.2 在PENN TREEBANK上搜索循环cell

 也是讲操作及cell的组成,借鉴了很多ENAS的,具体的可以看原论文。


图6. PTB上学到的循环cell。

3.2 架构评估

 为了确定最终评估的体系架构,使用不同的随机种子运行了四次DARTS,并根据从头开始的短期训练(比如在CIFAR-10上训练100个epoch)获得的验证性能选择最佳cell。这对于循环cell尤其重要,因为优化结果可能对初始化敏感(图3)。


图3. DARTS在CIFAR-10上的卷积cell和Penn Treebank上的循环cell的搜索进展。随着时间的推移,跟踪最新的体系结构。使用训练集从头开始重新训练每个架构,然后在验证集上进行评估。对于每个任务,使用不同的随机种子重复实验4次,并报告架构随时间变化的中值和最佳(每次运行)验证性能。作为参考,还报告了使用RL或进化算法发现的最佳现有cell的结果(在相同的评估设置下;具有可比的参数数量),包括NASNet-A(2000个GPU天)、AmoebaNet-A(3150个GPU天)和ENAS(0.5个GPU天)。

 为了评估所选架构,随机初始化其权重(丢弃在搜索过程中学习到的权重),从头开始训练,并在测试集上报告其性能。要注意测试集从未用于架构搜索或架构选择。

3.3 结果分析

 卷积结构的CIFAR-10结果如表1所示。值得注意的是,DARTS使用少了三个数量级的计算资源(即1.5或4个GPU天与NASNet的2000个GPU天和AmoebaNet的3150个GPU天相比)获得了与SOTA相当的结果。此外,在搜索时间稍长的情况下,DARTS通过发现错误率相近但参数较少的cell而优于ENAS。搜索时间更长的原因是对cell的选择重复了四次搜索过程。这种做法对卷积cell不太重要,因为发现的体系结构的性能并不强烈依赖于初始化(如图3所示)。


表1. 与CIFAR-10上SOTA的图像分类相比(错误率越低越好)。注:DARTS的搜索成本不包括选择成本(1个GPU天)或从头开始训练所选架构的最终评估成本(1.5个GPU天)。

替代优化策略

 为了更好地理解双层优化的必要性,这里研究一种简单的搜索策略,其中使用坐标下降法在训练集和验证集的合集上对 α \alpha w w 进行联合优化。得到的最佳卷积cell(四次运行中的一次)使用3.1M的参数产生了 4.16 ± 0.16 % 4.16\pm0.16\% 的测试误差,这比随机搜索更糟。在第二个实验中,使用SGD同时优化了 α \alpha w w (没有改变),同样对所有可用的数据进行了优化(训练+验证)。结果中最佳cell使用3.0M的参数产生了 3.56 ± 0.10 % 3.56\pm0.10\% 的测试误差。作者假设这些启发式方法会导致 α \alpha (类似于超参数)过拟合训练数据,导致泛化效果差。请注意,并未直接在DARTS中的训练集上优化 α \alpha

 表2显示了PTB上循环结构的结果。


表2. 与SOTA的PTB语言模型的比较。注意,DARTS的搜索成本不包括选择成本(1个GPU天)或从头开始训练所选架构的最终评估成本(3个GPU天)。

 有趣的是,随机搜索对于卷积模型和循环模型都具有竞争优势,这反映了搜索空间设计的重要性。 尽管如此,在两种情况下,DARTS都能以可比或更低的搜索成本显着改善随机搜索。表3中的结果表明,在CIFAR-10上学习的cell确实可以迁移到ImageNet上去。 值得注意的是,DARTS可以实现与SOTA的RL方法具竞争性的性能,同时使用的计算资源少了三个数量级。


表3. 与移动设置下ImageNet上的SOTA图像分类器进行比较。

 表4显示,由DARTS识别的cell比ENAS更好地迁移移到WT2。


表4. 与WT2上SOTA的语言模型的比较。

4. 结论

 本文提出了一种简单而有效的卷积和循环网络架构的搜索算法DARTS。通过在连续空间中搜索,DARTS能够在图像分类和语言建模任务上匹配或优于SOTA的不可微体系架构搜索方法,效率上显著提高了几个数量级。

 有许多有趣的方向可以进一步改善DARTS。 例如,当前的方法可能遭受连续架构编码和导出的离散架构之间的差异的困扰。 例如,可以通过对softmax温度进行退火(采用适当的schedule)以强制执行one-hot选择来缓解这种情况。 基于在搜索过程中学习到的共享参数来研究性能感知架构派生方案也将很有趣。


个人看法

 本文的DARTS是第一个利用可微分的方式进行搜索的NAS,也因为开源了pytorch代码因而得到了广泛的关注(好改嘛)。其跟前面讲过的ENAS也有较多相同点,比如都是在DAG中采样子图,也用了ENAS中最关键的参数共享,当然最大的不同在于搜索算法上,也是这篇文章最大的创新点–可微搜索,其想法是通过一个softmax加权,赋予各种操作一个权重(所以输入到一个节点的是这些操作比如各种卷积的加权和),从而使得可以对权重进行微分(从而可以直接通过梯度下降优化权重),最终再从这些操作中选择一个(或k个)权重最大的操作来组成需要的cell,然后再堆叠cell组成网络(从NASNet的时候就开始流行这么做了)。然后这里权重与参数的优化也类似于ENAS,都是交替进行的(先在训练集优化网络参数,再在验证集优化架构的权重)。不过DARTS的优化是对整个DAG进行的(所以比ENAS需要较多的内存,因为ENAS会先采样子图)。最后,就是搜索一次的话大概需要一张1080Ti跑一天,基本上实现了平民化。

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

猜你喜欢

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