在论文《NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING》中首次提出了NAS(神经网络架构搜索NEURAL ARCHITECTURE SEARCH),本文首先翻译总结了下此篇内容。接着根据《Efficient Neural Architecture Search via Parameter Sharing》写了ENAS。
近几年,深度神经网络取得非常多的成功,从特征设计到架构设计,从SIFT、HOG到AlexNet、VGGNet、GoogleNet、ResNet。设计架构需要相当多的专业知识与很多的时间。
一个神经网络的结构和连接可以定义为一个可变长度的字符串,所以它是有可能采用recurrent network 作为controller来生成的。
总的来说,NAS采用RNN作为控制器(controller),利用强化学习,可以生成卷积网络、循环神经网络等,而且生成的网络架构的深度可以不固定。NAS生成的神经网络架构的测试数据集上表现也不比人工设计的网络架构差,甚至优化人工设计的。对于自动化学习,开启了一个新的研究方向。
NAS训练成本非常高,比如450个cpu训练3-4天,所以提出了ENAS。CPU-HOURS 减少了1000倍。
首先描述一个简单的方法,使用recurrent network 来生成卷积架构。采用策略梯度方法训练 recurrent network,以最大化采样架构的预期正确率。
在NAS中,采用一个控制器来生成神经网络的架构超参数。为了灵活,这个控制器采用RNN(recurrent neural network)。我们假定我们想要预测一个仅有卷积层的前馈网络,那么我们就可以使用控制器来生成他们的超参数,超参数可以看作一个token序列。
如下图所示,演示了控制器如何采样一个简单的卷积网络。控制器预测每层中过滤器的高、宽,stride的高、宽,以及过滤器的数量。每一个预测用一个softmax 分类器执行,然后传入到下一步,
在我们实验中,如果层的数量超过某个值,我们就结束网络架构的生成。一旦控制器RNN完成了网络架构的生成,带有这个架构的神经网络就会被建立并进行训练。收敛时,该网络在验证集上的准确率会被记录下来。
因为奖励信号R不是可微分的,所以采用策略梯度方法迭代更新。我们使用了Williams(1992)的强化学习规则,如下式:
其中m是不同架构的数量(控制器在一个批次中采样的架构数量),T是控制器的超参数数量。
上面的更新对于梯度是一个无偏估计,但有非常大的方法,为了减小方程,我们引入了一个基线方程b。
只要b不依赖于当前的action,这依旧是一个无偏梯度估计。我们采用的b是一个前面网络架构准确率的指数移动平均。
采用set-selection attention 方法使控制器可以预测跳跃连接。可以看到如下图,添加了anchor point。
可以用控制器生成类似RNN、LSTM那样的循环神经单元。基本的RNN和LSTM单元的计算一般可以用一个树来表示,xt和ht-1是输入,ht是输出。下图展示了只有两个叶子节点的情况,本论文使用了8个叶子节点来确保循环单元是有表现力的。
计算步骤如下:
CIFAR-10 数据集可以用来图片识别。我们使用该数据集用NAS来生成一个卷积网络架构。
控制器:采用两层的LSTM作为控制器,没层有35个隐单元。
在分布式训练中,有S=20个参数服务器,控制器数量K=100,子网络m=8,所以共有800个网络要被训练,在800个CPU上。
一旦一个控制器找到一个子网络,每个子网络将训练50 epochs。
我们让控制器在对子网络每1600次采样后,增加2层,初始为6层。
训练结果:发现控制器在训练了12800个架构后,架构可以获得很好的验证准确率。然后运行一个小的网格搜索,直到最好的模型进行收敛。然后计算该模型的测试准确率,结果如下表。
Penn treebank 数据集是一个非常知名的语音模型数据集。在该数据集上LSTM模型表现非常好,已经难以超越。
控制器对于树中的每个节点,在[add、elem_mult]中选择结合方法,在[identity、tanh、sigmoid、relu]中选择激活函数。叶子节点数选用8.
生成了循环神经单元如下,可以看到和LSTM的非常相似,左上是LSTM的,右上是我们生成的。
NAS的计算成本非常高,时间也长,比如需要450个cpu运行3-4天。我们发现NAS的计算瓶颈是每个子网络训练的收敛,最终只是拿到准确率而扔掉了已经训练好的权重。
ENAS(efficient neural architecture search)改进NAS的效率,主要是强迫所有子模型共享权重,这样可以避免每个子模型从零开始训练到收敛。CPU-HOURS 减少了1000倍。
NAS结束迭代产生的所有图可以看做一个大图的子图,换句话说,我们可以将NAS的搜索空间用一个单向非循环图(DAG:directed acyclic graph)表示。下图描述了一个简单的DAG,这样一个网络结构可以看做DAG的一个子图。直观上,ENAS的DAG是在NAS搜索空间中所有可能子模型的叠加,其中节点代表着本地计算,边代表着信息流。在每个节点的本地计算拥有自己的参数,仅当特别的计算被激活才会被使用。所以ENAS容许参数在所以子节点模型中共享。
如上所述,有很多独立参数矩阵W,控制器决定哪个参数矩阵会被使用。所以在ENAS,在搜索空间中所有的循环神经单元共享参数。
在ENAS有两组参数需要学习,一组是控制器(采用LSTM)的参数θ,一组是子模型们的共享参数w。
获取最终网络结构:我们首先从训练策略Π(m;θ)中采样几个模型。对于每一个采样的模型,我们在一个小的批量验证集上计算他的奖励。我们然后将高奖励的模型重新从零开始训练。
ENAS可以设计整个卷积网络;也可以设计单个卷积单元,然后将他们连接起来构成个网络。
可以看到cpu只用一个,而不是几百个,时间也减少到0.45day,准确率也很好。