DARTS DIFFERENTIABLE ARCHITECTURE SEARCH
DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH
本文通过以可微的方式制定任务来解决架构搜索的可伸缩性挑战。与在离散不可微搜索空间上应用进化或强化学习的传统方法不同,我们的方法基于结构表示的连续松弛,允许使用梯度下降对结构进行有效搜索。在CIFAR-10、ImageNet、Penn-Treebank和WikiText-2上的大量实验表明,我们的算法在发现用于图像分类的高性能卷积体系结构和用于语言建模的递归体系结构方面具有优异的性能,同时比最新的不可微技术快了一个数量级。
1 INTRODUCTION
发现最先进的神经网络结构需要人类专家的大量努力。最近,人们对开发算法解决方案以自动化架构设计的手动过程越来越感兴趣。自动搜索架构在图像分类(Zoph&Le,2017;Zoph et al.,2018;Liu et al.,2018b;a;Real et al.,2018)和目标检测(Zoph et al.,2018)等任务中取得了极具竞争力的性能。
现有的最好的架构搜索算法虽然性能卓越,但在计算上要求很高。例如,为CIFAR-10和ImageNet获得最先进的架构需要2000 GPU的强化学习(RL)(Zoph等人,2018年)或3150 GPU天的进化算法运算(Real等人,2018年)。已经提出了几种加速的方法,例如施加搜索空间的特定结构(Liu等人,2018b;a)、每个单独架构的权重或性能预测(Brock等人,2018;Baker等人,2018)和跨多个架构的权重共享/继承(Elsken等人,2017;Pham等人,2018b;Cai等人,2018年;Bender等人,2018年),但可伸缩性的基本挑战仍然存在。
主要方法效率低下的一个内在原因,例如基于RL、evolution、MCTS(Negrinho&Gordon,2017)、SMBO(Liu et al.,2018a)或贝叶斯优化(Kandasamy et al.,2018),是架构搜索被视为离散域上的黑盒优化问题,这就需要进行大量的架构评估。
在这项工作中,我们从不同的角度来探讨这个问题,并提出一种有效的架构搜索方法,称为DARTS(可微架构搜索)。我们不必搜索一组离散的候选体系结构,而是将搜索空间松弛到连续的领域,这样就可以通过梯度下降来优化体系结构的验证集性能。与效率低下的黑盒搜索相比,基于梯度的优化的数据效率使得省道能够使用数量级更少的计算资源,以最先进的水平实现竞争性能。
值得注意的是,DART比许多现有方法更简单,因为它不涉及控制器(Zoph&Le,2017;Baker et al.,2017;Zoph et al.,2018;Pham et al.,2018b;Zhong et al.,2018)、超网络(Brock et al.,2018)或性能预测器(Liu et al.,2018a),但它足够通用,可以处理卷积和递归架构。
在连续域中搜索架构的想法并不新鲜(Saxena&Verbeek,2016;Ahmed&Torresani,2017;Veniat&Denoyer,2017;Shin等人,2018),但有几个主要区别。虽然以前的工作试图微调体系结构的特定方面,例如卷积网络中的滤波器形状或分支模式,但DARTS能够在丰富的搜索空间中学习具有复杂图形拓扑的高性能体系结构构建块。此外,DARTS并不局限于任何特定的体系结构家族,它既适用于卷积网络,也适用于递归网络。
在我们的实验中。我们证明,DARTS能够设计一个卷积单元,在CIFAR-10上使用3.3M参数进行图像分类,其测试误差达到2.76 0.09%,这与使用三个数量级以上计算资源获得的正则化进化(regularized evolution)(Real等人,2018)的最新结果不相上下。同样的卷积单元在传输到ImageNet(移动设置)时也达到26.7%的top-1误差,这与最佳RL方法相当(Zoph等人,2018)。在语言建模任务中,DARTS有效地发现了一个在Penn Treebank(PTB)上达到55.7测试复杂度的递归单元,其性能优于广泛关注的LSTM(Melis et al.,2018)和基于NAS(Zoph&Le,2017)和ENAS(Pham et al.,2018b)的所有现有自动搜索单元。
我们的贡献可以总结如下:
提出了一种基于二层优化的可微网络结构搜索算法,该算法既适用于卷积结构,也适用于递归结构。
通过对图像分类和语言建模任务的大量实验表明,基于梯度的结构搜索在CIFAR-10上取得了很好的竞争结果,在PTB上的性能优于目前的水平。这是一个非常有趣的结果,考虑到目前为止最好的架构搜索方法使用了不可微的搜索技术,例如基于RL(Zoph et al.,2018)或evolution(Real et al.,2018;Liu et al.,2018b)。
我们实现了显著的效率改进(将架构发现的成本降低到几天GPU),这归因于使用基于梯度的优化,而不是不可微的搜索技术。
我们证明了在CIFAR-10和PTB上由dart学习到的体系结构可以分别转移到ImageNet和WikiText-2。
The implementation of DARTS is available at https://github.com/quark0/darts
2 DIFFERENTIABLE ARCHITECTURE SEARCH
我们在第 2.1 节中以一般形式描述我们的搜索空间,其中架构 (或其中的单元格) 的计算过程表示为有向无环图。然后,我们为我们的搜索空间引入了一个简单的连续松弛方案,这导致了一个可微学习目标,用于联合优化体系结构及其权重 (第二节2.2)。最后,我们提出了一种近似技术,以使算法在计算上可行且高效 (sec.com)。2.3)。
2.1 SEARCH SPACE
根据前人的工作,搜索一个计算单元(cell)作为最终架构的构建块,学习的单元可以堆叠以形成卷积网络,或者递归地连接以形成循环网络。
单元是N个有序节点构成的有向无环图,每个节点都是一个潜在的表示(Latent Representation)(如卷积神经网络中的特征图),每个有向边是与节点transforms相关的某种运算操作。假设每个单元有两个输入节点和一个输出节点,对于卷积单元来说,输入节点被定义为前两层的单元输出;对于循环神经网络,输入节点被定义为当前时间步的输入以及上一时间步中的隐藏状态。通过对所有中间节点应用reduction操作(例如concatenation)来获得单元的输出。
每个中间节点都是基于所有它之前的节点进行计算的:
图1:DARTS概述:(a)边缘操作最初未知。(b) 通过在每一条边上放置一个候选操作的混合来连续松弛搜索空间。(c) 通过求解双层优化问题,实现混合概率和网络权值的联合优化。(d) 从学习到的混合概率归纳出最终的体系结构。
还包括一个特殊的零操作,用于指示两个节点之间缺少连接。因此,学习cell的任务简化为学习边的operations。
2.2 CONTINUOUS RELAXATION AND OPTIMIZATION
设O为一组候选操作(例如convolution, max pooling, zero),其中每个操作表示要应用于x(i)的某个函数O(.)。为了使搜索空间连续,在所有可能的操作中,我们将特定操作的分类选择松弛到softmax:
其中一对节点的操作混合权重由向量(维数为)参数化表示,结构搜索任务简化为学习一系列连续的变量,如图1所示。在搜索的最后,通过将每个混合操作替换为最可能的操作,就得到了一个离散的结构,下面将用来表示网络架构的编码。
在松弛之后,我们的目标是:联合的学习结构化参数 和 权重 。在强化学习和遗传算法中,验证集上的表现被视为奖励或者拟合程度。DARTS用梯度下降来优化验证损失。
分别用和表示训练损失和验证损失。这两种损失不仅由体系结构a决定,而且由网络中的权值w决定。网络搜索的目标是找到某一结构 使得验证损失 最小化,其中权重与体系结构相关,由最小化训练损失 得到。
这是一个双层优化问题, 是上层变量, 是下层变量
(3)
(4)
嵌套公式也出现在基于梯度的超参数优化中(Maclaurin et al.,2015; Pedregosa, 2016; Franceschi et al., 2018),从某种意义上说,体系结构a可以看作是一种特殊类型的超参数,尽管它的维数远高于学习率等标量值超参数,而且很难进行优化。
算法1:DARTS:
对于每一条边(i,j)建立一个由参数化得到的混合操作 :
如果没有收敛:
就以下式梯度下降更新结构 :
(如果用一阶近似的话 )
再以下式梯度下降更新权重(对于确定的结构,更新权重)
收敛之后由学习到的 得到最后的网络结构。
2.3 APPROXIMATE ARCHITECTURE GRADIENT
由于内部优化代价高昂,因此无法准确评估架构梯度。因此,我们提出一个简单的近似方案如下:
代表算法使用的当前权重, 代表内部优化的学习率(一个简单的工作策略是设置 等于w的优化器的学习率。),通过调整w来近似估计的方法是只用一个training step,不需要求通过完整训练直到收敛来求解内部最优化(4)式。相关技术已用于模型转移的元学习(Finn等人,2017年)、基于梯度的超参数调整(Luketina等人,2016年)和展开的生成性对抗网络(Metz等人,2017年)。 如果w已经是内部优化的局部最优值,方程6将化简为 ,且
迭代过程在算法1中概述。
虽然我们目前还不能指出该优化算法的收敛性,但在实践中它能够通过合适的达到一个固定的点。我们还注意到,当动量被用于权重优化时,方程6中一步展开的学习目标也相应地进行了修改,我们所有的分析仍然适用。
应用链式法则,得到近似的体系结构梯度(式6):
(7)
用复合函数求导公式即可:
由于链式法则展开后的第二项将涉及到一个昂贵的矩阵内积运算,因此采用有限差分近似来降低复杂度,让 为小标量(我们发现),
(8)
从公式7到公式8主要是用下式,基本的泰勒展开:
我们用hA替换上式的h,得到下式:
再将上面的两个式子相减,得到下式:
然后我们把h换成ϵ,把A换成ξ▽w′Ltrain(w′,α) ,把换成w,再把f换成ξ▽αLtrain(⋅,⋅),就得到公式8了。
求有限差分仅需要两次前向传播即可得到,两次反向传播,就可以得到 ,运算复杂度大大的降低了:由降低为。
一次近似:当内部优化学习率时,公式(7)中的二阶导数将消失,此时,关于架构的梯度将由下式给出
通过假设当前的w与w(a)相同来进行简单启发式优化验证损失。* 根据我们在表1和表2中的实验结果,这会导致一些加速但会导致上更差的性能。在下面,我们将=0的情况作为一阶近似,并将 >0的梯度公式作为二阶近似。
推导离散结构
为了形成离散体系结构中的每个节点,我们在从所有先前节点收集的所有非零候选操作中保留top-k最强操作(来自不同节点)。强度定义为:
为了使我们的衍生架构与现有作品中的架构具有可比性,我们将k=2用于卷积cells(Zoph et al.,2018;Liu et al.,2018a;Real et al.,2018)和k=1用于循环cells(Pham et al.,2018b)。
意即:为每个中间节点保留k个最强的前导,其中边的强度定义为上式;通过采用argmax将每个混合操作替换为最可能的操作。
要将零操作去除的原因是:首先,我们需要每个节点恰好有k个非零入射边,以便与现有模型进行公平比较;其次,零操作的强度是不确定的,因为增加零操作的logits只会影响结果节点表示的比例,并且由于存在批量规范化而不影响最终的分类结果。
3 EXPERIMENTS AND RESULTS
我们在CIFAR-10和PTB上的实验包括两个阶段,架构搜索(第1节)。3.1)和架构(architecture)评估(Sect。3.2条)。在第一阶段中,我们使用DART搜索单元架构,并根据其验证性能确定最佳单元。在第二阶段,我们使用这些单元构建更大的体系结构,我们从头开始训练,并在测试集上报告它们的性能。我们还通过在ImageNet和WikiText-2(WT2)上分别评估在CIFAR-10和PTB上学习到的最佳cells的可转移性。
结构搜索
CIFAR-10上的结构搜索
操作集合中包含3X3和5X5可分离卷积,3X3和5X5的空洞可分离卷积(dilated separable convolutions),3X3最大池化,3X3平均池化,恒等映射和零操作。所有操作都是stride为1(如果适用),卷积的特征地图被填充以保持其空间分辨率。使用ReLU-Conv-BN顺序进行卷积运算,每个可分离卷积总是应用两次。
一个卷积单元包含7个节点,其中输出节点被定义为所有中间节点(排除输入节点)的depthwise concatenation。然后通过将多个单元堆叠在一起形成网络。单元k的第一和第二个节点设置为单元k-1和单元k-2的输出,必要时插入卷积。在网络深度和处的单元是降采样单元,所有与输入节点相邻的操作的步长设置为2。因此网络表示为,其中所有正常单元共享,所有下采样单元共享。
本节的详细实验设置见A.1.1节。
PTB上的结构搜索
所有可能的操作集合中包含:线性变换+,线性变换+,线性变换+,恒等映射,零操作。
循环单元包含12个节点,通过对两个输入节点进行线性变换来获得第一中间节点,结果相加后通过**函数。并通过一个旁路来增强每个操作,单元输出定义为所有中间节点的平均值,在进行结构搜索时启用BN,以防止出现梯度爆炸,在测试网络结构时禁用BN。循环网络只包含一个单元,即不会在循环结构中假设任何重复模式。
Normal Cell Learned on CIFAR -10
Reduce Cell Learned on CIFAR-10
Recurrent Cell Learned on PTB
结构评估
为了确定最终评估的体系结构,我们使用不同的随机种子运行了四次DART,并根据从零开始的短期训练(CIFAR-10上的100个epochs和PTB上的300个epochs)获得的验证性能来选择最佳单元。这对于循环单元尤其重要,因为优化结果可能对初始化敏感(图3)。
图3:DART在CIFAR-10上寻找卷积单元和在Penn Treebank上寻找循环单元的研究进展。随着时间的推移,我们会跟踪最新的体系结构。每个架构快照都使用训练集(CIFAR-10上的100个阶段和PTB上的300个阶段)从头开始重新培训,然后在验证集上进行评估。对于每个任务,我们使用不同的随机种子重复实验4次,并报告架构随时间变化的中值和最佳(每次运行)验证性能。作为参考,我们还报告了使用RL或evolution发现的最佳现有细胞的结果(在相同的评估设置下;具有可比的参数数量),包括NASNet-A(Zoph等人,2018年)(2000 GPU天)、AmoebaNet-A(3150 GPU天)(Real等人,2018年)和ENAS(0.5 GPU天)(Pham等人,2018b)。
为了评估所选架构,我们随机初始化其权重(丢弃在搜索过程中学习到的权重),从头开始对其进行训练,并在测试集上报告其性能。我们注意到测试集从未用于架构搜索或架构选择。
CIFAR-10
PTB
ImageNet
结果分析
卷积结构的CIFAR-10结果如表1所示。值得注意的是,DART在使用三个数量级更少的计算资源(即1.5或4 GPU天,NASNet为2000 GPU天,变形虫为3150 GPU天)的同时,取得了与当前技术水平相当的结果(Zoph等人,2018;Real等人,2018)。此外,在搜索时间稍长的情况下,DART通过发现错误率可比但参数较少的单元而优于ENA(Pham等人,2018b)。搜索时间越长是因为我们已经为单元格选择重复了四次搜索过程。然而,这种做法对卷积单元不太重要,因为发现的体系结构的性能在很大程度上不依赖于初始化(图3)。
为了更好地理解双层优化的必要性,本文研究了一种简单的搜索策略,在训练验证联合数据集上使用协同过滤进行联合优化,这样最好的卷积单元测试错误率为,参数量为,比随机搜索要差。在第二个实验中,在训练验证联合数据集上使用SGD同时优化,这样最好的卷积单元测试错误率为,参数量为。猜想是因为这些启发式方法会导致结构(类似于超参数)过拟合训练数据,从而导致较差的泛化。 请注意,未在DARTS中的训练集上直接优化。
值得注意的是,随机搜索在卷积模型和循环模型上表现都很良好,这反映了搜索空间设计的重要性。
实验细节:
在CIFAR-10上的结构搜索:
由于架构在整个搜索过程中会有所不同,因此始终使用批量特定的统计信息进行批量标准化而不是全局移动平均值。在搜索过程中禁用所有批量标准化中可学习的仿射参数,以避免重新调整候选操作的输出。
为了进行架构搜索,我们提供了一半的CIFAR-10训练数据作为验证集。一个由8个单元组成的小型网络使用DART进行50个阶段的训练,批处理大小为64(用于训练集和验证集),初始通道数为16。选择这些数字是为了确保一个GPU能够容纳网络。SGD优化,初始化学习率,在没有重启的情况下按照余弦计划退火到零,对结构变量进行零初始化(对于正常单元和降采样单元中的),这意味着在所有可能的操作上都会有相同的注意力(在采用softmax之后)。在早期阶段,这确保了每个候选操作中的权重以接收足够的学习信号(更多探索)。使用Adam算法来优化,初始化学习率,结构搜索在单GPU上需要一天。
在CIFAR-10上的结构评估:
有20个单元的大网络以batch_size=96训练600轮,通道数初始化为36,使用了一些增强如cutout,path dropout,auxiliary towers with weight 0.4,训练在单GPU上需要1.5天,由于即使设置完全相同,CIFAR结果也会出现很大的差异,因此报告了完整模型的10次独立运行的平均值和标准差。
一个由20个细胞组成的大网络被训练成600个时期,批量大小为96。最初的通道数量从16个增加到36个,以确保我们的模型尺寸与文献中的其他基线(大约3M)相当。
在一个GPU上训练用了1.5天,我们用Pythorch实现(Paszke等人,2017年)。由于CIFAR结果即使在完全相同的设置下也会受到高方差的影响(Liu等人,2018b),因此我们报告了完整模型10次独立运行的平均值和标准偏差。
A EXPERIMENTAL DETAILS
A.1 ARCHITECTURE SEARCH
A.1.1 CIFAR-10
由于体系结构在整个搜索过程中都会发生变化,因此我们总是使用batch-specific
statistics进行batch normalization,而不是使用global moving average。在搜索过程中禁用所有批处理规范化中的可学习仿射参数,以避免重新调整候选操作的输出。
为了进行架构搜索,我们提供了一半的CIFAR-10训练数据作为验证集。一个由8个cells组成的小型网络使用DARTs进行50个epoch的训练,批处理大小为64(用于训练集和验证集),初始通道数为16。选择这些数字是为了确保网络能够容纳在一个GPU里。我们使用动量SGD优化权值w,初始学习率,(在没有重新启动的情况下,按照余弦计划将其退火为零(Loshchilov & Hutter, 2016)),动量0.9,重量衰减为。我们对架构变量使用零初始化((the ’ s in both the normal and reduction cells),这意味着在所有可能的操作上(在使用softmax之后)的关注量相等。在早期阶段,这可以确保每个候选op中的权值接收到足够的学习信号(更多的探索)。我们使用Adam (Kingma & Ba, 2014)作为 的优化器,具有初始学习速率,动量权重衰减为。搜索一个GPU需要一天的时间(NVIDIA GTX 1080Ti GPUs.)。
A.2 ARCHITECTURE EVALUATION
A.2.1 CIFAR-10
一个由20个cells组成的大网络被训练成600个时期,批量大小为96。最初的通道数量从16个增加到36个,以确保我们的模型尺寸与文献中的其他基线(大约3M)相当。其他超参数与用于架构搜索的超参数保持不变。
像现有作品 (Pham 等人,2018b; Zoph 等人,2018 柳等人,2018a; Real 等人,2018) 一样,其他增强功能包括cutout (DeVries & Taylor, 2017),概率为 0.2 的path dropout和重量为 0.4 的auxiliary towers。我们在 PyTorch (Paszke 等人,1.5) 中的实现在单个 GPU 上进行培训需要1.5 天。由于即使在完全相同的设置下,CIFAR 的结果也会受到很高的方差 (柳等人,2018b),我们报告了完整模型中 10 次独立运行的平均值和标准偏差。
为了避免不同实现或训练设置之间的任何差异 (e.g.批量),我们合并了 NASNet-A 单元(Zoph 等人,2018) 和AmoebaNet-A 单元(Real 等人,2018) 进入我们的训练框架,并在与我们的细胞相同的设置下报告他们的结果。
B SEARCH WITH INCREASED DEPTH
为了更好地理解深度对架构搜索的影响,我们在CIFAR-10通过将堆栈中的单元数量从8个增加到20个。由于单个GPU的内存预算,通道的初始数量从16个减少到6个。所有其他超参数保持不变。搜索成本翻了一番,得到的单元格达到了2.88$\pm\pm$0.09%更差一点。这种特殊的设置可能是由于架构搜索和最终评估之间的通道数差异增大而造成的。此外,使用更深层的模型进行搜索可能需要不同的超参数,因为需要支持的层数增加了。
B SEARCH WITH INCREASED DEPTH
为了更好地理解深度对架构搜索的影响,我们在CIFAR-10通过将堆栈中的单元数量从8个增加到20个。由于单个GPU的内存预算,通道的初始数量从16个减少到6个。所有其他超参数保持不变。搜索成本翻了一番,得到的单元格达到了2.88$\pm\pm$0.09%更差一点。这种特殊的设置可能是由于架构搜索和最终评估之间的通道数差异增大而造成的。此外,使用更深层的模型进行搜索可能需要不同的超参数,因为需要支持的层数增加了。