读论文:NEURAL ARCHITECTURE SEARCH WITHREINFORCEMENT LEARNING

ABSTRACT

神经网络是强大而灵活的模型,可以很好地处理图像、语音和自然语言理解中的许多困难的学习任务。尽管取得了成功,但神经网络仍然难以设计。在本文中,我们使用循环网络来生成神经网络的模型描述,并通过强化学习训练这个 RNN,以最大化在验证集上生成架构的预期准确性。在 CIFAR-10 数据集上,我们的方法从头开始可以设计一种新颖的网络架构,该架构在测试集准确性方面可与最好的人类发明架构相媲美。我们的 CIFAR-10 模型的测试错误率为 3.65,比之前的使用类似架构方案的最先进模型快 0.09 个百分点,比之前最先进的模型快 1.05 倍。在 Penn Treebank 数据集上,我们的模型可以组成一种新颖的循环单元,其性能优于广泛使用的 LSTM 单元和其他最先进的基线。

1 INTRODUCTION

本文介绍了神经架构搜索,这是一种基于梯度的寻找良好架构的方法见下图。

我们的工作基于:神经网络的结构和连通性,通常由可变长度的字符串指定。因此,可以使用循环网络——控制器来生成这样的字符串。在真实数据上训练字符串指定的网络结构——“子网络”将验证验证集的准确性。使用这种精度作为奖励信号,我们可以计算策略梯度来更新控制器。因此,在下一次迭代中,控制器将为获得高精度的架构提供更高的概率。换句话说,控制器将学会随着时间的推移改进其搜索。

我们的实验表明,神经架构搜索可以从头开始设计好的模型,这是其他方法认为无法实现的成就。在 CIFAR-10 的图像识别上,神经架构搜索可以找到一种新颖的 ConvNet 模型,该模型优于大多数人为发明的架构。我们的 CIFAR-10 模型实现了 3.65 测试集错误,同时比当前最佳模型快 1.05 倍。在 Penn Treebank 的语言建模上,神经架构搜索可以设计一种新颖的循环单元,它也比以前的 RNN 和 LSTM 架构更好。我们发现的模型在 Penn Treebank 数据集上实现了 62.4 的测试集困惑度,比之前的最先进技术提高了 3.6 的困惑度。

2 RELATED WORK

3 METHODS

3.1 GENERATE MODEL DESCRIPTIONS WITH A CONTROLLER RECURRENT NEURALNETWORK

在神经架构搜索中,我们使用控制器来生成神经网络的架构超参数。控制器被实现为循环神经网络。假设我们想仅使用卷积层预测前馈神经网络,我们可以使用控制器生成它们的超参数作为标记序列:

控制器循环神经网络如何采样一个简单的卷积网络。它预测一层的过滤器高度、过滤器宽度、步幅高度、步幅宽度和过滤器数量并重复。每个预测都由一个 softmax 分类器执行,然后作为输入馈送到下一个时间步。

在我们的实验中,如果层数超过某个值,生成架构的过程就会停止。这个值遵循一个时间表,随着训练的进行我们将其增加。一旦控制器 RNN 完成生成架构,就可以构建和训练具有这种架构的神经网络。当模型收敛时,记录网络在保留验证集上的准确性。然后优化控制器 RNN 的参数 θc,以最大化所提出架构的预期验证精度。

3.2 TRAINING WITH REINFORCE

控制器预测的令牌列表可以看作是为子网络设计架构的动作列表 a_{1:T}。在收敛时,这个子网络将在保留的数据集上实现精度 R。我们可以使用这个准确度 R 作为奖励信号,并使用强化学习来训练控制器。更具体地说,为了找到最佳架构,我们要求我们的控制器最大化其预期奖励,由J(\theta _{c})表示:

J(\theta _{c})=E_{P(a_{1}:T;\theta _{c})}[R]

由于奖励信号 R 是不可微的,我们需要使用策略梯度方法迭代更新 θc。所以我们使用REINFORCE算法

\bigtriangledown\theta _{c}J(\theta _{c})= \sum_{t=1}^{T}E_{P(a_{1}:T;\theta _{c})}[\bigtriangledown\theta _{c}logP(a_{t}|a_{(t-1):1};\theta _{c})R]

上述经验近似是:

\frac{1}{m}\sum_{k=1}^{m}\sum_{t=1}^{T}\bigtriangledown\theta _{c}logP(a_{t}|a_{(t-1):1};\theta _{c})R_{k}

其中 m 是控制器在一个批次中采样的不同架构的数量,T 是控制器必须预测设计神经网络架构的超参数数量。

第 k 个神经网络架构在训练数据集上训练后达到的验证准确率为 Rk。上述更新是我们梯度的无偏估计,但方差非常高。为了减少这个估计的方差,我们使用了一个基线函数:

\frac{1}{m}\sum_{k=1}^{m}\sum_{t=1}^{T}\bigtriangledown\theta _{c}logP(a_{t}|a_{(t-1):1};\theta _{c})(R_{k}-b)

只要基线函数 b 不依赖于当前动作,那么这仍然是一个无偏梯度估计。在这项工作中,我们的基线 b 是先前架构准确度的指数移动平均值。

利用并行性和异步更新加速训练:在神经架构搜索中,对控制器参数 θc 的每个梯度更新对应于训练一个子网络收敛。由于训练子网络可能需要几个小时,我们使用分布式训练和异步参数更新来加速控制器的学习过程。我们使用参数服务器方案,其中我们有一个 S 个分片的参数服务器,它存储 K 个控制器副本的共享参数。每个控制器副本对 m 个不同的子架构进行采样,这些子架构并行训练。然后控制器根据收敛时 m 个架构的 minibatch 的结果收集梯度,并将它们发送到参数服务器,以便更新所有控制器副本的权重。在我们的实现中,当每个子网络的训练超过一定数量的 epoch 时,就会达到其收敛性。这种并行性方案总结在下图中。

神经架构搜索的分布式训练。我们使用一组 S 参数服务器将参数存储和发送到 K 个控制器副本。然后每个控制器副本对 m 个架构进行采样并并行运行多个子模型。记录每个子模型的准确性以计算关于 θc 的梯度,然后将其发送回参数服务器。

3.3 INCREASE ARCHITECTURE COMPLEXITY WITH SKIP CONNECTIONS AND OTHERLAYER TYPES

在第 3.1 节中,搜索空间没有跳过连接,或现代架构中使用的分支层,例如 GoogleNet和残差网络。在本节中,我们介绍了一种允许控制器提出跳过连接或分支层的方法,从而扩大搜索空间。

为了使控制器能够预测此类连接,我们使用了一个基于注意力机制的集选择类型注意力。在第 N 层,我们添加了一个锚点,它具有 N-1 个基于内容的 sigmoid,以指示需要连接的前一层的层。每个 sigmoid 是控制器的当前隐藏状态和前一个 N-1 个锚点的先前隐藏状态的函数:

P=sigmoid(v^{T}tanh(W_{prev}*h_{j}+W_{curr}*h_{i}))

其中hj表示第j层的锚点控制器的隐藏状态,其中j范围从0到N−1。然后,我们从这些sigmoids中采样,以决定将之前的哪些层用作当前层的输入。矩阵 Wprev 、 Wcurr 和 v 是可训练的参数。这些连接也由概率分布定义,REINFORCE算法仍然适用,无需任何重大修改。下图显示了控制器如何使用跳过连接来决定它想要的哪些层作为当前层的输入。

在我们的框架中,如果一个层有许多输入层,那么所有输入层都在深度维度上连接。跳过连接可能会导致“编译失败”,其中一层与另一层不兼容,或者一层可能没有任何输入或输出。为了规避这些问题,我们采用了三种简单的技术。首先,如果一个层不连接到任何输入层,则图像用作输入层。其次,在最后一层,我们取所有尚未连接的层输出,并在将此最终隐藏状态发送到分类器之前将它们连接起来。最后,如果要连接的输入层具有不同的大小,我们将小层填充为零,以便连接的层具有相同的大小。

3.4 GENERATE RECURRENT CELL ARCHITECTURES

在本节中,我们将修改上述方法以生成循环单元。在每个时间步 t,控制器需要为 h_{t}找到一个函数形式,将x_{t}h_{t-1}作为输入。最简单的方法是具有 h_{t}=tanh(W_{1}*x_{t}+W_{2}*h_{t-1}),这是基本循环单元的公式。更复杂的公式是广泛使用的 LSTM 循环单元。

基本 RNN 和 LSTM 单元的计算可以概括为以 xt 和 ht-1 作为输入并生成 ht 作为最终输出的步骤树。控制器 RNN 需要通过组合方法(加法、元素乘法等)和激活函数(tanh、sigmoid 等)来标记树中的每个节点,以合并两个输入并产生一个输出。然后将两个输出作为输入馈送到树中下一个节点。为了允许控制器 RNN 选择这些方法和功能,我们按顺序对树中的节点进行索引,以便控制器 RNN 可以逐个访问每个节点并标记所需的超参数。

受 LSTM 单元的构建的启发,我们还需要单元变量 ct-1 和 ct 来表示记忆状态。为了合并这些变量,我们需要控制器 RNN 来预测树中哪些节点将这些两个变量连接到。这些预测可以在控制器 RNN 的最后两个块中完成。

为了使这个过程更加清晰,我们在下图中展示了一个示例,用于具有两个叶节点和一个内部节点的树结构。叶节点由 0 和 1 索引,内部节点由 2 索引。控制器 RNN 需要首先预测 3 个块,每个块指定组合方法和每个树索引的激活函数。之后,它需要预测最后 2 个块,这些块指定如何将 ct 和 ct-1 连接到树内的临时变量。

由具有两个叶节点(基础 2)和一个内部节点的树构建的循环单元示例。左:定义控制器要预测的计算步骤的树。中心:控制器对树中每个计算步骤做出的一组预测。右图:由控制器示例预测构建的循环单元的计算图。根据本例中控制器 RNN 的预测,将出现以下计算步骤:

  • 控制器预测树索引 0 的 Add 和 Tanh,这意味着我们需要计算 a_{0}=tanh(W_{1}*x_{t}+W_{2}*h_{t-1})
  • 控制器预测树索引 1 的 ElemM ult 和 ReLU,这意味着我们需要计算a_{1}=ReLU((W_{3}*x_{t}\bigodot (W_{4}*h_{t-1}))
  • 控制器为“Cell Index”的第二个元素预测 0,为“Cell Inject”中的元素添加和 ReLU,这意味着我们需要计算 a_{0}^{new}=ReLU(a_{0}+c_{t-1})。请注意,我们没有树内部节点的任何可学习参数。
  • 控制器预测树索引 2 的 ElemM ult 和 Sigmoid,这意味着我们需要计算 a_{2}=sigmoid(a_{0}^{new}\bigodot a_{1})。由于树中的最大索引为 2,因此 ht 设置为 a2。
  • 控制器 RNN 为“单元索引”的第一个元素预测 1,这意味着我们应该在激活之前将 ct 设置为索引 1 处的树的输出,即 ct = (W3 ∗ xt)(W4 ∗ ht−1)。

在上述示例中,树有两个叶节点,因此称为“基础 2”架构。在我们的实验中,我们使用 8 的基本数字来确保单位结构具有表现力。

4 EXPERIMENTS AND RESULTS

我们将我们的方法应用于具有 CIFAR-10 的图像分类任务和具有 Penn Treebank 的语言建模任务,这是深度学习中两个最基准数据集。在 CIFAR-10 上,我们的目标是找到一个好的卷积架构,而在 Penn Treebank 上,我们的目标是找到一个好的循环单元。在每个数据集上,我们有一个单独的保留验证数据集来计算奖励信号。对于在保留的验证数据集上取得最佳结果的网络,测试集上报告的性能仅计算一次。有关我们的实验结果和结果的更多详细信息如下。

4.1 LEARNING CONVOLUTIONAL ARCHITECTURES FOR CIFAR-10

搜索空间:我们的搜索空间由卷积架构组成,整流线性单元作为非线性、批量归一化和层之间的跳跃连接。对于每个卷积层,控制器 RNN 必须在中选择滤波器高度,中的滤波器宽度。对于步幅,我们执行两组实验,其中一个我们将步幅固定为 1,另一个是我们允许控制器预测 步幅。

训练细节:控制器 RNN 是一个两层 LSTM,每层有 35 个隐藏单元。它使用ADAM优化器进行训练,学习率为0.0006。控制器的权重在-0.08和0.08之间均匀初始化。对于分布式训练,我们将参数服务器分片的数量S设置为20,控制器副本的数量K设置为100,子副本的数量m设置为8,这意味着在任何时候在800个GPU上同时训练800个网络。一旦控制器 RNN 对架构进行采样,就会构建并训练了 50 个 epoch。用于更新控制器的奖励是最后 5 个 epoch 立方的最大验证精度。验证集有 5,000 个示例从训练集中随机抽样,其余 45,000 个示例用于训练。训练 CIFAR-10 子模型的设置与 Huang 等人使用的设置相同。 (2016a)。我们使用学习率为 0.1 的Adam优化器,权重衰减为 1e-4,动量为 0.9,并使用 Nesterov Momentum(深度学习中优化方法——momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam-CSDN博客

在控制器的训练过程中,随着训练的进行,我们使用子网络中层数不断增加的时间表。在 CIFAR-10 上,我们要求控制器每 1,600 个样本将子模型的深度增加 2,从 6 层开始。

实验结果:在控制器训练 12,800 个架构后,我们发现实现最佳验证精度的架构。然后我们对学习率、权重衰减、batchnorm epsilon 和衰减学习率的 epoch 运行一个小的网格搜索。然后运行此网格搜索的最佳模型直到收敛,然后计算该模型的测试准确率,并在下表中总结结果。从表中可以看出,神经架构搜索可以设计几个有前途的架构,该架构在该数据集上执行以及一些最佳模型。

首先,如果我们要求控制器不预测步幅或池化,它可以设计一个 15 层架构,在测试集上达到 5.50% 的错误率。这种架构在准确性和深度之间取得了很好的平衡。事实上,该表中性能最好的网络中最浅,可能是最简单的架构。如下图所示。

该体系结构的一个显著特点是它有许多矩形滤波器,它在顶层更喜欢更大的滤波器。与残差网络 一样,该架构也有许多一步跳跃连接。这种架构是局部最优的,因为如果我们扰动它,它的性能就会变差。例如,如果我们密集连接所有层和跳过连接,其性能会稍差:5.56%。如果我们删除所有跳过连接,其性能就会下降到 7.97%。

在第二组实验中,我们要求控制器除了其他超参数之外预测步幅。如前所述,这更具挑战性,因为搜索空间更大。在这种情况下,它找到了一个 20 层架构,在测试集上实现了 6.01% 的错误率,这并不比第一组实验差得多。

最后,如果我们允许控制器在架构的第 13 层和第 24 层包含 2 个池化层,控制器可以设计一个 39 层网络,该网络达到 4.47%,非常接近最佳人类发明架构达到 3.74%。为了限制搜索空间的复杂性,我们的模型预测了 13 层,其中每个层预测是 3 层的全连接块。通过向我们的架构的每一层添加更多过滤器,我们的结果可以提高到 3.65%。此外,添加 40 个过滤器的模型与达到 3.74% 的 DenseNet 模型快 1.05 倍,同时具有更好的性能。

4.2 LEARNING RECURRENT CELLS FOR PENN TREEBANK

搜索空间:在第 3.4 节之后,我们的控制器顺序预测组合方法,然后预测树中每个节点的激活函数。对于树中的每个节点,控制器 RNN 需要在 [add, elem mult] 和 [identity, tanh, sigmoid, relu] 中的激活方法中选择组合方法。RNN 单元的输入对的数量称为“基础编号”,在我们的实验中设置为 8。当基础数为 8 时,搜索空间约为6\times 10^{16}架构,远大于 15,000,我们允许我们的控制器评估的架构数量。

训练细节:除了一些修改,控制器及其训练与 CIFAR-10 实验几乎相同:1)控制器 RNN 的学习率为 0.0005,略小于 CIFAR-10 中的控制器 RNN,2)在分布式训练中,我们将 S 设置为 20、K 设置为 400 和 m 设置为 1,这意味着在任何时候在 400 个 CPU 上同时训练 400 个网络,3) 在异步训练期间,一旦来自副本的 10 个梯度累积,我们只对参数服务器进行参数更新。在我们的实验中,每个子模型都被构建并训练了 35 个 epoch。每个子模型都有两层,隐藏单元的数量调整,以便可学习参数的总数与“中等”基线大致匹配。在这些实验中,我们只有控制器预测 RNN 单元结构并修复所有其他超参数。奖励函数是\frac{c}{(validation\, perplexity)^{2}},其中 c 是常数,通常设置为 80。在完成控制器 RNN 训练后,我们根据最低的验证困惑度选择最佳 RNN 单元,然后在学习率、权重初始化、失活率和衰减时期上运行网格搜索。然后,找到的最佳单元使用三种不同的配置和大小运行以增加其容量。\

实验结果:在下表中,我们提供了全面的架构列表及其在 PTB 数据集上的性能。从表中可以看出,神经架构搜索发现的模型在该数据集上优于其他最先进的模型,我们的最佳模型之一实现了几乎 3.6 的困惑度的增益。我们的单元格不仅更好,达到 64 个困惑度的模型也快两倍以上,因为之前的最佳网络需要在每个时间步运行 10 次单元。

新发现的单元在下图中可视化。可视化表明,在前几个步骤中,新单元与 LSTM 单元有许多相似之处,例如它喜欢多次计算 W1 ∗ ht−1 + W2 ∗ xt 并将它们发送到单元中的不同组件。

迁移学习结果:为了了解单元格是否可以泛化到不同的任务,我们将其应用于同一数据集上的字符语言建模任务。我们使用类似于Ha等人(2016)的实验设置,但使用Gal(2015)的变分dropout。我们还使用我们的设置训练我们自己的 LSTM 以获得公平的 LSTM 基线。模型训练了 80K 步,并根据验证集困惑度最好的步骤选择最佳测试集困惑度。我们方法的测试集和最先进方法的结果如表 3 所示。 5-6M 参数的小型设置的结果证实新单元确实泛化,并且优于 LSTM 单元。

此外,我们进行了更大的实验,其中模型有 16.28M 参数。该模型的权重衰减率为 1e-4,训练了 600K 步(超过上述模型),并采用验证集困惑度最高的测试困惑度。我们使用 Gal (2015) 中描述的 0.2 和 0.5 的 dropout 率,但不使用嵌入 dropout。我们使用学习率为 0.001 的 ADAM 优化器和 128 的输入嵌入大小。我们的模型有两层,有 800 个隐藏单元。我们使用了 32 的 minibatch 大小和 100 的 BPTT 长度。有了这个设置,我们的模型实现了 1.214 的困惑度,这是该任务的最新结果

5 CONCLUSION

在本文中,我们介绍了神经架构搜索,这是一种使用循环神经网络组合神经网络架构的想法。通过使用循环网络作为控制器,它可以搜索可变长度的架构空间。我们的方法在非常具有挑战性的基准上具有很强的经验性能,并为自动找到好的神经网络架构提出了一个新的研究方向。

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值