Efficient Neural Architecture Search via Parameter Sharing翻译

tech2024-06-20  70

摘要

我们提出了高效神经结构搜索(ENAS),这是一种快速且低成本的自动模型设计方法。在ENAS中,控制器通过在大型计算图中搜索最佳子图来发现神经网络结构。使用策略梯度训练控制器,以选择一个子图,该子图可使验证集上的期望奖赏最大化。同时,训练与所选子图相对应的模型以最小化交叉熵损失。在子模型之间共享参数使ENAS可以提供​​强大的经验性能,同时与现有的自动模型设计方法相比,使用的GPU-小时要少得多,并且与标准的神经结构搜索相比,其成本要便宜1000倍。在Penn Treebank数据集上,ENAS发现了一种新的网络结构,其测试困惑度达到了55.8,从而在所有方法中建立了一种最新技术,而无需进行后期训练。ENAS在CIFAR-10数据集上发现了一种新的架构,可实现2.89%的测试误差,与NASNet的2.65%的测试误差相当。

1.介绍

神经结构搜索(NAS)已成功应用于图像分类和语言模型的结构设计。在NAS中,循环训练RNN控制器:该控制器首先对候选结构(即子模型)进行采样,然后训练其收敛以衡量其在完成任务时的性能;然后,控制器将性能作为指导信号,以找到更多有前途的架构;重复此过程直到控制器收敛。尽管NAS具有令人印象深刻的经验性能,但它在计算上却很费时,例如 Zoph et al.(2018)使用450个GPU持续3-4天(即32,400-43,200 GPU-小时)。同时,使用更少的资源往往不会产生令人信服的结果。我们观察到,NAS的计算瓶颈在于训练每个子模型以使其收敛,然后在测量其准确性后就丢弃所训练模型的权重。   这项工作的主要贡献在于,通过强制所有子模型共享权重来避免从头训练每个子模型,从而提高了NAS的效率。这个想法有明显的复杂性,因为不同的子模型可能使用不同的权重,但是受先前关于迁移学习和多任务学习的工作的启发,这些工作确立了在特定任务上为特定模型学习的参数只需要进行少量修改即可在其他模型上使用。   根据经验表明,不仅可以在子模型之间共享参数,而且还能够实现非常强大的性能。具体而言,在CIFAR-10上,我们的方法实现了2.89%的测试误差,而NAS仅为2.65%。在Penn Treebank上,我们的方法实现了55.8的测试困惑度,大大超过了NAS的62.4的测试困惑度,这是不使用后训练处理的Penn Treebank的最好方法。重要的是,在我们使用单个Nvidia GTX 1080Ti GPU的所有实验中,搜索结构所需的时间不到16小时。与NAS相比,GPU的使用时间减少了1000倍以上。由于其高效性,我们将我们的方法命名为高效神经结构搜索(ENAS)。

2.方法

  ENAS概念的核心是,NAS中每次迭代的图都可以看作是较大图的子图。换句话说,我们可以使用单个有向无环图(DAG)表示NAS的搜索空间。 图2说明了通用样例DAG,其中可以通过获取DAG的子图来构建网络结构。直观上,ENAS的DAG是NAS搜索空间中所有可能的子模型的叠加,其中节点代表局部计算,边代表数据流。每个节点上的局部计算都有其自己的参数,这些参数仅在激活特定计算时才使用。因此,ENAS的设计允许在搜索空间中的所有子模型(即结构)之间共享参数。   在下文中,我们将通过一个样例来促进对ENAS的讨论,该样例说明如何根据指定的DAG和控制器为循环神经网络设计单元(第2.1节)。然后,我们将说明如何训练ENAS以及如何从ENAS的控制器中导出网络结构(第2.2节)。最后,我们将说明用于设计卷积网络结构的搜索空间(第2.3和2.4节)。

2.1 设计循环单元

  为了设计循环单元,我们使用具有 N N N个节点的DAG,其中的节点表示局部计算,而边表示N个节点之间的数据流。ENAS的控制器是RNN,它决定:1)激活了哪些边,以及2)在DAG中的每个节点上执行了哪些计算。我们对RNN单元的搜索空间的设计与Zoph&Le(2017)中针对RNN单元的搜索空间的设计不同,在Zoph&Le(2017)中,作者将其结构的拓扑固定为二叉树,并且仅学习树的每个节点上的操作 。相比之下,我们的搜索空间使ENAS可以在RNN单元中设计拓扑和操作,因此更加灵活。   为了创建一个循环单元,控制器RNN采样 N N N个决策块。这里,我们通过一个简单的具有 N = 4 N=4 N=4个计算结点的简单循环单元来阐述ENAS的机制(如图1所示)。令 x t x_t xt作为循环单元的输入(例如词嵌入), h t − 1 h_{t-1} ht1作为上一时刻的输出。我们进行如下采样。

在节点1:控制器首先对激活函数进行采样。在我们的示例中,控制器选择 t a n h tanh tanh激活函数,这意味着循环单元的节点1应该计算 h 1 = t a n h ( x t ⋅ W ( x ) + h t − 1 ⋅ W 1 ( h ) ) h_1 = tanh(x_t·W^{(x)}+ h_{t-1}·W^{(h)}_1) h1=tanh(xtW(x)+ht1W1(h))。在节点2:控制器对输入结点的索引和输出激活函数进行采样。在我们的示例中,它选择输入结点的索引为 1 1 1和输出激活函数为 R e L U ReLU ReLU。因此,节点2计算 h 2 = R e L U ( h 1 ⋅ W 2 , 1 ( h ) ) h_2=ReLU(h_1·W^{(h)}_{2,1}) h2=ReLU(h1W2,1(h))。在节点3:控制器再次采样输入结点的索引和输出激活函数。在我们的示例中,它选择输入结点的索引为 2 2 2和输出激活函数为 R e L U ReLU ReLU。因此, h 3 = R e L U ( h 2 ⋅ W 3 , 2 ( h ) ) h_3=ReLU(h_2·W^{(h)}_{3,2}) h3=ReLU(h2W3,2(h))。在节点4:控制器再次采样输入结点的索引和输出激活函数。在我们的示例中,它选择输入结点的索引为 1 1 1和输出激活函数为 t a n h tanh tanh,从而得出 h 4 = t a n h ( h 1 ⋅ W 4 , 1 ( h ) ) h_4=tanh(h_1·W^{(h)}_{4,1}) h4=tanh(h1W4,1(h))。对于输出,我们只需对所有输出端进行平均,即未选择作为其他任何节点输入的节点。在我们的示例中,由于索引 3 3 3 4 4 4从未被采样为任何节点的输入,因此循环单元将其平均值 ( h 3 + h 4 ) / 2 (h_3+h_4)/2 (h3+h4)/2作为其输出。 换句话说, h t = ( h 3 + h 4 ) / 2 h_t =(h_3+h_4)/2 ht=(h3+h4)/2

在上面的示例中,我们注意到对于每个节点对 j < ℓ j<ℓ j<,都有一个独立的参数矩阵 W ℓ , j ( h ) W^{(h)}_{ℓ,j} W,j(h)。如示例中所示,通过选择输入结点的索引,控制器还决定使用哪个参数矩阵。因此,在ENAS中,搜索空间中的所有循环单元共享相同的参数集。   我们的搜索空间包括指数级的配置。具体来说,如果循环单元有 N N N个节点,并且我们允许 4 4 4个激活函数(即 t a n h tanh tanh R e L U ReLU ReLU I d e n t i t y Identity Identity S i g m o i d Sigmoid Sigmoid),则搜索空间将具有 4 N × N ! 4N×N! 4N×N! 配置。在我们的实验中, N = 12 N=12 N=12,这意味着我们的搜索空间中大约有1015个模型。

2.2 训练ENAS并导出结构

我们的控制器网络是具有100个隐藏单元的 L S T M LSTM LSTM。该LSTM通过softmax分类器以自回归方式对决策进行采样:上一步中的决策作为输入嵌入到下一步中。第一步,控制器网络接收到一个空的嵌入作为输入。   在ENAS中,有两套可学习的参数:控制器LSTM的参数(用 θ θ θ表示)和子模型的共享参数(用 ω ω ω表示)。 ENAS的训练过程包括两个交替阶段。第一阶段训练 ω ω ω,即子模型的共享参数,整个过程都经过训练数据集。 对于我们的Penn Treebank实验, ω ω ω训练了约400步,每个步在具有64个样例的mini-batch上进行,其中梯度 ∇ ω \nabla ω ω是使用随时间的反向传播计算的,以35个时刻被截断。同时,对于CIFAR-10,在45000个训练图像上训练 ω ω ω,将其分成大小为128的mini-batch图像,其中使用标准反向传播计算 ω ω ω。第二阶段针对固定数量的步骤(通常在我们的实验中设置为2000)训练控制器LSTM的参数 θ θ θ。在ENAS训练期间,这两个阶段是交替进行的。 更多细节如下。   (1)训练具有共享参数 ω ω ω的子模型   在此步骤中,我们固定控制器的策略 π ( m ; θ ) π(m;θ) π(m;θ),并对 ω ω ω进行随机梯度下降(SGD),以使期望的损失函数 E m ∼ π ( m ; θ ) [ L ( m ; ω ) ] \mathbb E_{m\sim π(m;\theta)}[\mathcal L(m;ω)] Emπ(m;θ)[L(m;ω)]最小。其中, L ( m ; ω ) \mathcal L(m;ω) L(m;ω)是标准交叉熵损失,这是根据从 π ( m ; θ ) π(m;θ) π(m;θ)采样的模型 m m m在一个训练数据的mini-batch上计算的。使用蒙特卡洛估计来计算梯度: ∇ ω E m ∼ π ( m ; θ ) [ L ( m ; ω ) ] ≈ 1 M ∑ i = 1 M ∇ ω L ( m i , ω ) , (1) \nabla_ω\mathbb E_{m\sim \pi(m;\theta)}[\mathcal L(m;ω)]\thickapprox \frac{1}{M}\sum^M_{i=1}\nabla_ω\mathcal L(m_i,ω),\tag{1} ωEmπ(m;θ)[L(m;ω)]M1i=1MωL(mi,ω),(1) 如上所述,其中 m i m_i mi是从 π ( m ; θ ) π(m;θ) π(m;θ)采样的。等式1提供了梯度 ∇ ω E m 〜 π ( m ; θ ) [ L ( m ; ω ) ] ∇_ω\mathbb E_{m〜π(m;θ)}[\mathcal L(m;ω)] ωEmπ(m;θ)[L(m;ω)]的无偏估计。但是,此估计比标准SGD梯度(其中m是固定的)具有更高的方差。 但是,我们发现 M = 1 M=1 M=1时模型训练的可能很好,这也许令人惊讶,即我们可以使用从 π ( m ; θ ) π(m;θ) π(m;θ)采样的任何单个模型 m m m的梯度来更新 ω ω ω。如前所述,我们在整个训练数据传递过程中训练 ω ω ω。   (2)训练控制器参数 θ θ θ   在此步骤中,我们固定 ω ω ω并更新策略参数 θ θ θ,以使期望奖励 E m 〜 π ( m ; θ ) [ R ( m , ω ) ] \mathbb E_{m〜π(m;θ)}[\mathcal R(m,ω)] Emπ(m;θ)[R(m,ω)]最大化。我们使用Adam优化器和REINFORCE计算梯度,并使用基线移动平均来减少方差。   奖赏 R ( m , ω ) R(m,ω) R(m,ω)是在验证集上而非训练集上计算的,以鼓励ENAS选择通用性好的模型,而不是过度拟合训练集的模型。在我们的语言模型实验中,奖励函数是 c / v a l i d _ p p l c/valid\_ppl c/valid_ppl,其中的困惑度是根据mini-batch验证数据来计算的。在我们的图像分类实验中,奖赏函数是mini-batch验证图像的准确率。   (3)导出网络结构   接下来讨论如何从经过训练的ENAS模型中得出新的结构。我们首先从训练后的策略 π ( m , θ ) π(m,θ) π(m,θ)中采样几个模型。对于每个采样模型,我们都从验证集中采样的单个mini-batch中计算其奖赏。然后,我们仅采用奖赏最高的模型从头开始进行重新训练。虽然可以通过从头开始训练所有采样的模型并在单独的验证集上选择性能最高的模型来改善我们的实验结果,但是,我们的方法产生了相似的性能,同时更加高效。

2.3 设计卷积网络

  现在我们讨论卷积结构的搜索空间。回想一下,在循环单元的搜索空间中,控制器RNN在每个决策块上采样两个决策:1)要连接到的先前节点是什么; 2)要使用什么激活函数。在卷积模型的搜索空间中,控制器RNN同样在每个决策块处采样两个决策:1)要连接的先前节点是什么; 2)要使用什么计算操作。每个决策在卷积模型中作为一层结构进行构建。   连接哪些先前节点的决定允许模型形成残差连接。具体而言,在第 k k k层,最多采样 k − 1 k-1 k1个互不相同的输入结点索引,从而导致在第 k k k层有 2 k − 1 2^{k-1} 2k1个可能的决策。我们在图3中提供了一个对卷积网络进行采样的说明性示例。在此示例中,当 k = 4 k=4 k=4,控制器对输入结点的索引 { 1 , 3 } \{1,3\} {1,3}进行采样,因此将第 1 1 1层和第 3 3 3层的输出沿它们的深度维度拼接,并发送到第4层。   同时,还需要决定使用哪种计算操作将特定层设置为卷积,平均池化化或最大池化。控制器可用的6种运算是:滤波器大小为3×3和5×5的卷积,滤波器大小为3×3和5×5的深度可拆分卷积以及3×3的最大池化和平均池化。对于循环单元,我们的ENAS卷积网络中每一层的每个操作都有一组不同的参数。   总共进行 L L L次迭代的决策集,我们可以对 L L L个层的网络进行采样。由于所有决策都是独立的,因此搜索空间中有 6 L × 2 L ( L − 1 ) / 2 6^L×2^{L(L-1)/2} 6L×2L(L1)/2个网络。在我们的实验中, L = 12 L=12 L=12,得到 1.6 × 1 0 29 1.6×10^{29} 1.6×1029个可能的网络。

2.4 设计卷积单元

  与其设计整个卷积网络,不如设计较小的模块,然后将它们连接在一起形成一个网络。图4说明了此设计,其中将设计卷积单元和还原单元体系结构。现在,我们讨论如何使用ENAS搜索这些单元的体系结构。   我们利用ENAS计算带有 B B B个节点的DAG来表示在单元格发生的局部计算。在此DAG中,将节点1和节点2视为单元的输入,它们是最终网络中前两个单元的输出(请参见图4)。 对于其余的 B − 2 B−2 B2个节点,我们要求控制器RNN做出两组决策:1)将两个先前的节点用作当前节点的输入,以及2)将两个操作应用于两个采样的节点。可用的5种操作是:恒等变换,内核大小为 3 × 3 3×3 3×3 5 × 5 5×5 5×5的可分离卷积以及内核大小为 3 × 3 3×3 3×3的平均池化和最大池化。在每个节点上,对输入的节点及其对应的操作进行采样后,将这些操作应用于输入节点,并对其结果进行 a d d add add。   和以前一样,我们用一个示例来说明搜索空间的机制,这里的结点数 B = 4 B=4 B=4(请参见图5),详细如下。

节点1,2是输入节点,因此不需要决策。令 h 1 h_1 h1 h 2 h_2 h2为这些节点的输出。在节点3:控制器对两个先前的节点和两个操作进行采样。在图5的左上方,它对node2,node2,separable_conv_5x5和identity进行采样。这意味着 h 3 = s e p _ c o n v _ 5 × 5 ( h 2 ) + i d ( h 2 ) h_3=sep\_conv\_5\times 5(h_2)+id(h_2) h3=sep_conv_5×5(h2)+id(h2)。在节点4:控制器对node3,node1,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 ) h_4 =avg\_pool\_3\times 3(h_3)+sep\_conv\_3\times 3(h_1) h4=avg_pool_3×3(h3)+sep_conv_3×3(h1)。由于除 h 4 h_4 h4以外的所有节点都被用作至少另一个节点的输入,因此唯一的 h 4 h_4 h4被视为单元的输出。如果有多个末端,它们将沿着深度尺寸连接起来以形成单元的输出。

还可以从我们讨论的搜索空间中实现reduction cell,方法很简单:1)从搜索空间中采样计算图,以及2)应用跨度为2的所有运算。因此,reduction cell可以按因子2减小其输入的空间尺寸。在Zoph et al. (2018)之后,我们对以卷积单元为条件的reduction cell进行采样,因此使控制器RNN总共运行 2 ( B − 2 ) 2(B-2) 2(B2)个块。   最后,我们估计此搜索空间的复杂性。在节点 i ( 3 ≤ i ≤ B ) i(3≤i≤B) i(3iB)处,控制器可以从 i − 1 i-1 i1个先前的节点中选择任意两个节点,并从 5 5 5个操作中选择任意两个操作。由于所有决策都是独立的,因此有 ( 5 × ( B − 2 ) ! ) 2 (5×(B−2)!)^2 (5×(B2)!)2个可能的单元。由于我们分别对卷积单元和reduction cell进行采样,因此搜索空间的最终大小为 ( 5 × ( B − 2 ) ! ) 4 (5×(B−2)!)^4 (5×(B2)!)4。在我们的实验中,当 B = 7 B=7 B=7时,搜索空间可以实现 1.3 × 1 0 11 1.3×10^{11} 1.3×1011个最终网络,从而使其远远小于整个卷积网络的搜索空间(第2.3节)。

最新回复(0)