AI技术讲座精选:神经结构搜索和强化学习

摘 要

神经网络模型不仅功能强大,而且特别灵活,在许多困难的学习任务中均发挥着良好的作用,如图像、声音和自然语言的理解等。尽管神经网络获得了一系列的成功,但是要设计神经网络仍然十分困难。

在本篇论文中,我们在运用循环神经网络(RNN)描述神经网络模型的同时,还利用强化学习来训练该循环神经网络(RNN),以获得验证集上结构预期准确度的最大值。在 CIFAR-10 数据集上,我们所运用的方法从一开始便能设计出新的网络结构,并且在测试集精度方面可与人类发明的最佳结构相匹敌。 CIFAR-10 模型的测试误差率可达3.84,只比当前最先进的模型落后0.1%,速度却快了1.2倍。在 Penn Treebank 数据集上,此模型可组成一个新的循环单元,其性能优于目前广泛使用的 LSTM 单元以及其它先进的模型。我们的循环单元在 Penn Treebank 上的测试集困惑度高达62.4,比第二名高出3.6。

1. 引言

近几年来,深度神经网络在许多颇具挑战性的应用上取得了极大的成功,如语音识别(Hinton等, 2012)、图像识别(LeCun等,1998;Krizhevsky等,2012)和机器翻译(Sutskever等,2014;Bahdanau等,2015;Wu等, 2016)。与此同时,从功能设计到结构设计的范式转变也取得了成功,如SIFT(Lowe,1999)、HOG(Dalal & Triggs,2005)、AlexNet(Krizhevsky等,2012)、VGGNet(Simonyan& Zisserman,2014)、GoogleNet(Szegedy等,2015)以及ResNet(He等,2016)。虽然深度神经网络相比先前容易许多,但在结构设计方面,仍需要具备大量的专业知识以及足够多的时间。

AI技术讲座精选:神经结构搜索和强化学习

图1 神经结构搜索概图

本论文中所展现的神经结构搜索建立在梯度方法之上,用于寻找良好结构(见图1)。我们观察到,神经网络的结构性和连通性可以由长度可变的字符串来规定。因此,接下来,我们就可以运用循环网络(控制器)生成构建网络的字符串。在真实数据上训练网络(子网络)将有助于提高验证集的准确性。将准确度作为奖励信号,我们就可以计算出策略梯度,用以更新控制器。因此,在下一次迭代中,控制器将会给那些接收高精度的结构更多的机会。换句话说,随着时间的变化,控制器会不断学习以改进自身的搜索。

实验表明,神经结构搜索可以从头开始重新设计出好用的模型,其他方法无法实现。在使用 CIFAR-10 的图像识别中,神经结构搜索可以找到一个新的ConvNet 模型,该模型优于大多数人类发明的模型结构。CIFAR-10 模型的测试集误差低至3.84,比当前最好的模型快1.2倍。在用 Penn 树库进行语言建模时,神经结构搜索可以设计出新的循环单元,优于先前的 RNN 和 LSTM 结构好。我们的循环单元在 Penn Treebank 上的测试集困惑度高达62.4,比第二名高出3.6。

2. 相关工作

超参数优化是机器学习中一项重要的研究课题,在实践中得到了广泛的应用(Bergstra等,2011;Bergstra & Bengio,2012;Snoek等,2012& 2015)。尽管取得了一系列的成果,但这些方法仍然是有局限性的,只能从固定长度的空间中搜索模型。换句话说,难以要求它们生成规定网络结构和连接性的长度可变的空间结构。实际操作中,如果能提供了良好的初始模型,这些方法通常能发挥更好的作用(Bergstra &Bengio,2012;Snoek等,2012&2015)。

现代的神经进化算法,例如 Wierstra 等(2005)、Floreano 等(2008)以及Stanley 等(2009)。另一方面,现代神经进化算法在组成新模型方面更加灵活,但在规模比较大时不太实用。局限性在于,该方法建立在搜索的基础上,因此速度很慢,或者需要受到很多启发才能得到比较好的运行结果。神经结构搜索与程序合成、归纳编程有一些相似之处,都是从诸多例子中搜索程序(Summers,1977;Biermann,1978)。在机器学习中,概率程序归纳已在很多情形中成功运用,例如学习解决简单的问题和答案(Liang et al.,2010; Neelakantan et al.,2015;Andreas et al.,2016)、排列数字列表(Reed & de Freitas,2015)以及利用很少的例子进行学习(Lake et al.,2015)。

神经结构搜索的控制器是自回归的,这意味着它可以根据先前的预测来预测超参数。这个想法来源于“从端到端序列的解码器到序列学习”(Sutskever et al.,2014)。与序列到序列的学习不同,我们的方法优化了一个不可微的度量,即子网络的准确性。因此,它与神经机器翻译中BLEU的优化工作极其相似(Shenet al.,2016;Ranzato et al.,2015)。与这些方法不同,我们的方法直接从奖励信号中学习,没有任何监督引导。

还有,我们的工作还涉及“从学习中学习”或“元学习”(Thrun& Pratt,2012),利用从任务中学到的信息来改善后续任务的一般框架。更紧密相关的是用神经网络学习另一个网络的梯度下降更新的想法(Andrychowicz et al.,2016),以及用强化学习寻找另一个网络的更新策略的想法(Li & Malik,2016)。

3. 方法

接下来的部分中,首先我们会介绍一个利用循环网络生成卷积结构的简单方法。我们将展示如何用策略梯度法来训练循环网络,以最大化采样结构的预期精度。同时,我们还将展示有关核心方法的几个改进之处,例如通过形成跳过连接来增加模型的复杂度,并使用参数服务器方法来加快训练速度。在最后一部分,我们将集中关注循环结构的生成,这是我们论文的另一个重要的贡献。

3.1 用控制器循环神经网络描述模型

在神经结构搜索中,我们用一个控制器生成了神经网络的结构性超参数。为使其更加灵活可用,此处我们将控制器视为一个循环神经网络。假设我们想预测具有卷积层的前馈神经网络,我们可以用控制器来生成它们的超参数,并将这些参数作为标记序列。

AI技术讲座精选:神经结构搜索和强化学习

图2:控制器循环神经网络从简单的卷积网络取样的过程。

它会预测并能重复预测某一层的过滤器高度、过滤器宽度、步幅高度、步幅宽度以及过滤器数量。每个预测都是由 softmax 分类器执行的,其预测结果就是下一步骤的输入信息。

在我们的实验中,如果层数超过某个特定的值,则生成结构的过程就会停止。该值在训练过程可以人为的增加。一旦控制器 RNN 已经生成某个结构,就会构建并训练该局域结构的神经网络。收敛时,我们记录了验证集上的网络的准确性。然后,我们优化了控制器 RNN 的参数θc,最大程度的提高所提出结构的预期验证准确性。在接下来的部分中,我们将描述一个策略梯度方法,我们用它来更新参数θc,使得控制器 RNN 随着时间的推移生成更好的结构。

3.2 强化训练

控制器预测的标记列表可以视为一系列的行为a1:T,a1:T将用来设计子网络的结构。收敛时,该子网络将在某个数据集上实现准确度R。我们用准确度R作为奖励信号,用强化学习训练控制器。更具体地,为找到最佳结构,我们让控制器最大化它的预期奖赏,由J(θc)表示:

AI技术讲座精选:神经结构搜索和强化学习

既然奖赏信号R是不可微的,我们需要用策略梯度法来迭代更新θc。在这项工作中,我们运用的是强化规则(Williams, 1992):

AI技术讲座精选:神经结构搜索和强化学习

上述数量的经验近似为:

AI技术讲座精选:神经结构搜索和强化学习

m是同一个 batch 中由控制器采样的不同结构的数量,T是超参数的数量,控制器必须预测这些超参数以设计神经网络结构。

第K个神经网络结构在训练集上训练后获得的验证准确度是Rk。

上述更新是对梯度的无偏估计,但是方差却很大。为减少这种估计的方差, 我们采用基线函数:

AI技术讲座精选:神经结构搜索和强化学习

只要基线函数b不由当前的行为所决定,那么这将仍是一个无偏的梯度估计。在本篇文章中,我们的基线b是先前结构精度的指数移动平均值。

利用并行和异步更新加快训练:在神经结构搜索中,控制器参数θc的每个梯度更新对应于一个子网络的收敛。由于训练子网络可能需要几个小时,我们使用分布式训练和异步参数更新,以加快控制器的学习过程(Deanet al.,2012)。

我们运用了参数服务器方案,其中有一个参数服务器S,它可以存储K控制器副本的共享参数。每个控制器副本对并行训练的不同子结构采样。然后控制器根据收敛时的m个结构的小批结果收集梯度,并将它们发送到参数服务器,以便更新所有控制器副本的权重。在实现过程中,当训练次数超出一定数量时,就会达成每个子网络的收敛。图3总结了这种并行机制。

AI技术讲座精选:神经结构搜索和强化学习

图3:神经结构搜索的分布式训练。

我们使用一组S参数服务器来存储和发送参数,并将这些参数发送到K控制器副本中。然后每个控制器副本对m结构进行采样,并行运行多个子模型。我们记录了每个子模型的准确度,以计算θc的梯度,然后将其发送回参数服务器。

3.3 用跳跃连接和层类型增加结构复杂性

在3.1中,搜索空间要么没有跳跃连接,要么就是在现代结构中没用分支层,如GoogleNet (Szegedyet al., 2015)和Residual Net (He et al., 2016a)等。在这一部分,我们介绍了一种方法,这种方法允许控制器出现跳跃连接或分支层,拓宽了搜索空间。

为了让控制器能预测这种连接,我们使用建立在注意机制(Bahdanau et al., 2015; Vinyals et al.,2015)上的集选择型注意(Neelakan-tan et al., 2015) 。在第N层,我们添加具有N-1个内容的s形的锚点,以指示先前需要连接的层。每个S形都是控制器当前隐藏状态和先前N-1个锚点的先前隐藏状态的函数:

AI技术讲座精选:神经结构搜索和强化学习

在这里 hj 代表控制器在第j层锚点处的隐藏状态,其中j在0到N-1之间变化。然后我们从这些S形中采样以决定先前层被用作当前层的输入。矩阵Wprev,Wcurr和v都是可训练的参数。由于这些连接也由概率分布定义,所以强化方法仍然适用,不需要做出任何重大的修改。图4显示了控制器如何使用跳过连接来决定它想要什么层作为当前层的输入。

AI技术讲座精选:神经结构搜索和强化学习

图4 显示了控制器用锚点和选择注意来形成跳跃连接

在我们的框架中,如果一个层有很多输入层,那么所有输入层的连接都在深层维度进行。跳跃连接可能会使得“编译失败”,其中某一层和另外一个层无法兼容,或者某一层没有任何输入或输出。为了规避这些问题,我们运用了三种简单的技术。首先,如果某一层没有与任何输入层相连接,那么该图像将被用作输入层。第二,在最后一层,在将最后的隐藏状态发送到分类器前,我们将所有未连接层的输出相互连接。最后,如果要连接的输入层大小不同,我们使用诸多的0来填充小的图层,以使连接层大小相同。

最后,在3.1部分,我们没有预测学习速率,而是假设结构仅由卷基层组成,这也是很有局限性的。将学习速率作为其中一项预测,也是很有可能的。此外,还可在结构中预测池化、局部对比标准化 (Jarrett et al.,2009;Krizhevsky et al.,2012)和批量异常 (Ioffe & Szegedy,2015) 。为了能添加更多类型的层,我们需要在控制器RNN中增加一个额外的步骤,用以预测层的类型,然后再预测与它相关联的其他超参数。

3.4 生成循环单元结构

在本部分,我们将修改上面提到的方法以生成重复单元。在每一个时间点t,控制器需要找到以 xt 和 ht-1 作为输入的 ht 函数形式。最简单的方法就是 ht = tanh(W1 xt+W2 ht-1),这是基本循环单元的公式。有一个更为复杂的公式,就是目前广泛使用的 LSTM 循环单元(Hochreiter & Schmidhuber,1997)。

基本的 RNN 和 LSTM 单元的计算可概况为:以 xt 和 ht-1 作为输入并产生 ht ,而后将 ht 作为最终输出的阶梯树。控制器 RNN 需要运用组合法(加法、元素乘法)和激活函数来标记树中的每个节点,以使两个输入相互合并,并产生一个输出。两个输出接下来会将是下一个节点的输入。为了使得控制器 RNN 能够选择上述的方法和功能,我们按顺序对树中的节点添加索引,使得控制器 RNN 可以在接连访问每个节点同时,标记所需的超参数。

上述方法的灵感来自 LTSM 单元的构造(Hochreiter &Schmidhuber,1997),我们还需要用单元变量 ct-1 和 ct 来表示记忆状态。为合并这些变量,我们需要控制器 RNN 预测树中可连接两个变量的那些节点。在控制器 RNN 的最后两个模块中可完成上述预测过程。

为了让过程更清楚,在图5中举了一个例子,列举出了有两个叶节点和一个内部节点的树状结构。叶节点的索引被标记为0和1,内部节点的索引为2。控制器 RNN 需要先预测3块,每个块规定着一个组合块、组合方法及每个树索引的激活函数。人后,最后,它需要预测最后2个块,最后2个块规定了如何将 ct 、ct-1 和树内部的临时变量相连接。对于这一过程,本文中的例子依据的是控制器 RNN 的预测,以下是其计算步骤:

  • 对树索引为0的节点,控制器预测 Add 和 Tanh,这意味着需要计算

AI技术讲座精选:神经结构搜索和强化学习

  • 对树索引为1的节点,控制器预测 ElemMult 和 ReLU,这意味着需要计算

AI技术讲座精选:神经结构搜索和强化学习

  • 控制器为“单元索引”的第二个元素预测0,为“单元注射”元素预测 Add 和 ReLU,这意味着需要计算

AI技术讲座精选:神经结构搜索和强化学习

请注意,我们没有树内部节点的任何可学习参数。

  • 对树索引为1的节点,控制器预测 ElemMult 和 Sigmoid,这意味着需要计算

AI技术讲座精选:神经结构搜索和强化学习

由于树的最大索引是2,因此 ht 被设为 a2。

  • 控制器RNN预测“单元索引”的第一个元素为1,这意味着我们应将 ct 设置为激活前索引为1的树的输出:

AI技术讲座精选:神经结构搜索和强化学习

AI技术讲座精选:神经结构搜索和强化学习

图5:一个由具有两个叶节点(基础2)和一个内部节点的树结构的复现单元的例子。左:树定义由控制器预测的计算步数。中间:一个由控制器为树中每个计算步骤所做的预测集。右:从控制器预测例子中构建复现单元的计算图。

在上述例子中,树有两个叶节点,因此它被称为“基础2”结构。在实验中,我们用一个基础数字8来确保单元是有表现力的。

4. 实验和结果

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

4.1 为 CIFAR-10学习卷积结构

数据集:在这些实验中,我们使用CIFAR-10数据集与数据预处理和增强程序,与其他以前的结果一致。我们首先通过美白所有图像来预处理数据。此外,对每个图像进行采样,然后选择一个随机的32*32裁剪的采样图像。最后,在这个32*32裁剪图像上使用随机的水平闪光。

搜索空间:搜索空间包括卷积结构,校正的线性单元作为非校正(Nair&Hinton,2010),批量标准化(Ioffe&Szegedy,2015)和层间的跳跃连接。对于每个卷积层,控制器RNN必须在[1, 3, 5, 7]中选择过滤器高度、宽度,在[24, 36, 48, 64]当中选择过滤器数量。对于步幅,我们做了两组实验,一个实验中将步幅设为1,另一个允许控制器在[1,2,3]中预测步幅。

训练细节:控制器RNN有两层LSTM,每层含有35个隐藏单元。它用ADAM优化器进行训练(Kingma & Ba,2015),学习速率为0.0006。控制器的权重统一被初始化在-0.08和0.08之间。对于分布式训练,我们将参数服务器S的数量设为20,将控制器副本数K设为1800,将子副本数m设为8。这意味着,在任何时间点,都有800个网络在800个GPU上进行训练。

一旦控制器RNN对结构进行了采样,就会构建一个子模型并对其训练500次。用于更新控制器的奖励是最后5次训练的最大验证精度。验证集含有从训练集中随机抽取的5000个实例,其余45000个例子将被用于训练。用于训练CIFAR-10子模型的相关设置与(黄等人, 2016a)中使用的相同。我们用的动量优化器,学习速率为0.1,重量衰减为1e-4,动量为0.9,曾经使用Nesterov动量(Sutskever et al., 2013)。

在控制器训练期间,随着训练进行,我们不断增加着子网络中的层数。在CIFAR-10上,我们让控制器为子模型每1600个样本就增加深度2,从6层开始。

结果:训练控制器经过12800次迭代后,我们找到了实现最佳验证准确性的结构。然后,在学习速率、重量衰减以及批量次数的基础上,我们运行了一个小网格搜索,以降低学习速率。网格搜索中的最好模型就是,使其持续运行直到收敛,然后计算出每个模型的测试精度,并在表1中总结结果。正如从表中看到的,神经结构搜索可以设计几个有前景的结构,这样它与这个数据集上的一些最优模型完成的一样好。

AI技术讲座精选:神经结构搜索和强化学习

表1:神经结构搜索和CIFAR-10上其它最先进模型的性能

首先,如果我们要求控制器不预测步幅或池,它可以设计出一个15层的结构,该结构在测试集上的错误率为5.5%。这个结构在准确度和深度之间能达到良好的平衡。事实上,这是最浅层的结构,但或许也是性能较好的网络中最廉价的结构。这个结构在附录A和图7中有所表示,该结构的显著特征是有很多矩形过滤器,而且大过滤器通常都在顶层。像残差网络(He et al.,2016a),这个结构也有很多一步跳跃连接。这个结构在某种意义上是局部最优的,如果我们打乱它,它的性能就会变得更糟。例如,如果我们将所有层和跳跃连接紧密连接,它的性能会变差些:5.56%。而如果我们删掉所有的跳跃连接,它的性能会降到7.97%。

在第二组实验中,我们让控制器预测步幅和超参数。如前所述,这更具挑战性,因为搜索空间更大了。这种情况下,结果发现一个20层结构在测试集上达到6.06%的错误率,这并不比第一组实验差。

最后,如果允许控制器在结构的第13层和第24层包含2个池层,控制器能设计出一个39层的网络,非常接近人类发明的最佳结构(3.74%)。为限制搜索空间的复杂性,我们让模型预测13层,其中每层预测都是3层全部连通的块。另外,将模型可预测的过滤器数目从[24,36,48,64]变为[6,12,24,36]。如果在结构的每层增加32个过滤器,我们的预测精度可提高到3.84%。此外,这个增加了32个过滤器的模型的速度是DesenNet模型(3.74%)的1.2倍,但是在性能上略有下降。

4.2 学习Penn Treebank的复现单元

数据集:我们将神经结构搜索应用于 Penn Treebank 的数据集,这是一个著名的语言建模基准。在这个任务上,LSTM 结构可能是最好的(Zaremba et al.,2014;Gal,2015),再改进它非常困难(Jozefowicz et al.,2015)。由于PTB是一个小数据集,我们需要用正则化方法以避免过度拟合。首先,我们利用 Zaremba 等人和 Gal 提出的嵌入丢弃和复现丢弃技术。同时,我们也努力把它们和 Press 与 Wolf(2016)提出的共享输入/输出嵌入法相结合,此方法的结果被标记为“共享嵌入”。

搜索空间:接下来的3.4部分,控制器会按顺序预测一个组合方法,然后是树中各节点的激活函数。对于树中每个节点,控制器RNN需要在[add,elem mult]中选择一个组合方法,并在[identity, tanh, sigmoid, relu]中选择激活方法。我们将 RNN 单元中输入对的数量称作“基本数字”,并在实验中将其设置为8。当基本数字是8时,搜索空间的结构大约是6×1016,远超过我们允许的数字15000。

训练细节:控制器及其训练几乎与CIFAR-10实验完全相同,除了少量修改:1)控制器RNN的学习速率为0.0005,略小于CIFAR-10中控制器RNN的;2)在分布式训练中,将S设置为20,K设置为400,m设置为1,这意味着400个网络在400个GPU上同时进行训练;3)在异步训练期间,一旦副本积累了10个梯度,我们只对参数服务器进行参数更新。

在实验中,我们将每个构建出来的子模型训练35次。每个子模型有两层,其隐藏单元的数量有所调整,以使可学习参数的总数大致匹配“中等”基线(Zarembaetal.,2014;Gal,2015)。在本实验中,只让控制器预测RNN单元结构,并且让其设置所有的超参数。奖励函数是(c/验证困惑度的平方),其中c是常数,通常被设为80。

控制器RNN完成训练后,我们会根据最低的验证困惑度选择最佳的RNN单元,然后在学习速率、权重初始化、丢弃率和衰减期的基础上运行网格搜索。接下来,我们发现的最好的单元将在三个结构不同、大小不同的空间中运行,以增加结构的容量。

结果:表2中提供了一个关于PTB数据集的结构及其性能的完整列表。从表中可看出,神经结构搜索发现的模型远超于这个数据集上其它最先进的模型,其中一个最好的模型的困惑度甚至达到了3.6。我们的所运用单元比其他单元更好,相应的模型也比其他模型更快,其困惑度为64,是其他模型的2倍还多。这是因为,先前最好的网络要求在每个时间点都要对该单元运行10次(Zilly et al., 2016)。

AI技术讲座精选:神经结构搜索和强化学习

表2:Penn Treebank 语言建模任务中的测试集上的单一模型困惑度。带有‡的参数数字是Merity等人(2016)的估计。

在附录A的图8中可看见新发现的单元。它直观地揭示了新单元在前几步中与 LSTM 单元有许多相似之处,如它喜欢计算数次W1∗ ht−1 + W2 ∗ xt,然后把它们发送到单元的不同组件中。

迁移学习结果:要了解单元是否能推广到不同的任务中,我们将它应用于同一数据集上的字符语言建模任务。我们的实验设置与Ha等人(2016)的相同,但是我们还运用了Gal(2015)的变量舍弃法。

同时,我们还用自己的设置运行了LSTM以获得一条公平的LSTM基线。表3中报告了我们的方法中测试集的结果和最先进的模型的结果。结果证实这个单元确实可推广,且优于LSTM单元。

AI技术讲座精选:神经结构搜索和强化学习

表3:我们的单元和最先进方法在PTB字符建模上的比较。我们在词语水平的语言建模中发现了最佳单元。我们将运行模型80000次,最好的测试集困惑度取自验证集困惑度最大的那一步。

控制实验1—在搜索空间中加入更多功能:为检验神经结构搜索的鲁棒性,将max加到组合函数列表,将sin加到激活函数列表,然后重新运行实验。结果显示,即使搜索空间比较大,模型的性能仍然非常可观。Max和sin的最佳结构如附录A图8所示。

控制实验2—与随机搜索的比较:除了策略梯度的方法,运用随机搜索的方法也能找到最佳网络。尽管这条基线看起来很简单,但是通常很难超越 (Bergstra & Bengio, 2012)。图6是随着训练的进行困惑度的变化趋势,两条线分别代表随机搜索和策略梯度。结果表明用策略梯度得到的最佳模型优于随机搜索得到的最佳模型,而且相应顶级模型的平均值也更好。

AI技术讲座精选:神经结构搜索和强化学习

图6:随机结构搜索在随机搜索中随着时间推移的改进。每400个模型运行时,就绘制控制器发现的前k个模型均值与随机搜索的差值。

5. 结论

在本文中介绍了神经结构搜索,运用循环神经网络组成神经网络结构。我们将循环神经网络作为控制器,十分灵活,便于搜索到长度可变的结构空间。在非常具有挑战性的方面,本方法仍然十分适用,同时也为性能良好的神经网络结构的自动获取提供了一个新的研究方向。在 CIFAR-10 和 PTB 的控制器上运行的模型的代码将发布在https://github.com/tensorflow/models。

本文作者 Barret Zoph 目前是谷歌大脑的一员,之前在信息科学研究所工作,与 Kevin Knight 和 Daniel Marcu 教授一起研究神经网络机器翻译的课题。

本文由 AI100 编译,转载请联系本公众号获得授权


编译:AI100

原文链接:https://arxiv.org/pdf/1611.01578v1.pdf


相关推荐