paper 1 NAS WITH RL
论文:Neural Architecture Search With Reinforcement Learning
链接:https://arxiv.org/abs/1611.01578
代码链接:https://github.com/tensorflow/models
这是ICLR2017的文章,讲述如果用强化学习(reinforcement learning)来学习一个最优的网络结构。这篇文章的搜索方式现在看来较为简单粗暴,没有计算资源支持的话基本上跑不起来。800GPU…
rnn
多用于语言模型,x1…xn n个单词
基本结构
图左侧是RNN的原始结构,如果先抛弃中间那个闭环,其实就是简单**“输入层=>隐藏层=>输出层”的三层结构**,这种结构是多层感知器的最常见的结构。然而多了一个的闭环,也就是说输入到隐藏层之后,隐藏层自己闭环,环环相扣,比较复杂。
人为定义一个起始点,按照一定的时间序列规定好计算顺序,于是实际上会将这样带环的结构展开成一个序列网络,也就是上图右侧被“unfold”之后的结构。
这里先介绍这样的序列化网络结构包含的参数记号的含义:
前向传播
RNN 预测序列化
f激活函数
反向传播
论文内容
RNN控制器产生网络结构
这篇文章(可以结合Figure1看)通过一个controller在搜索空间(search space)中得到一个网络结构(child network),然后用这个网络结构在数据集上训练得到准确率,再将这个准确率回传给controller,controller继续优化得到另一个网络结构,如此反复进行直到得到最佳的结果。原文有一句概括写的不错:In this paper, we use a recurrent network to generate the model descriptions of neural networks and train this RNN with reinforcement learning to maximize the expected accuracy of the generated architectures on a validation set. 所以比较新颖的地方就是如何通过controller得到一个child network。
Figure1解释了如何通过一个controller来搜索最优结构并训练网络和优化controller的过程。可以看出最关键的部分就是controller,而作者的controller采用的就是RNN结构。
关于为什么可以用RNN结构做controller来搜索最优结构,作者也给出了解释:Our work is based on the observation that the structure and connectivity of a neural network can be typically specified by a variable-length string. It is therefore possible to use a recurrent network – the controller – to generate such string. 因此和其他超参数优化只能在一个fixed-length space中搜索模型不同的是,这里可以在一个variable-length space中搜索模型。训练这个RNN网络则是通过梯度算法去优化的。
通过观察发现目前的神经网络的结构和内部连接是一个可变的长度string来指定的,所以可以使用RNN去产生如此的可变长度的网络结构。
图中预测的网络只包含conv层,使用RNN去预测生成conv层的超参数,这些超参数如图2所示,包括:卷积核的Height、卷积核的Width、卷积核滑动stride的Height、卷积核滑动stride的Width、卷积核数量(cnn中的channel)。如图2所示RNN中每一softmax预测的输出作为下一个的输入。
Controller生成一个网络结构后,用训练数据进行训练直到收敛(所以才需要那么多gpu吧),然后在验证集上进行测试得到一个准确率。论文中提到生成网络结构的终止条件是当网络层数达到一个值时就会停止。
强化学习训练
RNN控制器参数 θc,生成的网络在验证集上的准确率R,R作为reward信号,使用RL学习机制结合policy梯度算法去训练控制器
近似为
为了降低训练中梯度 方差,引入b,无偏估计
paper 2 Learning Transferable Architectures for Scalable Image Recognition
论文:Learning Transferable Architectures for Scalable Image Recognition
链接:https://arxiv.org/abs/1707.07012
Google Brain的作品,关于用神经网络学习另一个神经网络的结构。我们知道现在图像分类、检测算法的优劣很大一部分取决于网络结构的设计,最近今年比较优秀的分类网络结构比如VGG,ResNet,DenseNet等在网络结构的设计上下了不少功夫。Google的这支团队认为人为设计的结构不一定是最佳的,因此希望能通过一个神经网络来按照一定策略学习得到最佳的网络结构。在这里要先提到另一篇论文,也就是ICLR2017的Neural architecture search with reinforcement learning(暂时称为NAS),一作是同一个人,那篇文章通过用强化学习在一个search space中搜索最优的网络结构,但是文章中实验都是在CIFAR-10上做的,所以那种搜索方式可以在能接受的时间范围内达到目的,但是如果想要在ImageNet数据集应用就不大行,因此就有了这篇文章,也就是设计一个合适的search space,使得在CIFAR-10上得到的最好的网络结构可以方便地迁移到ImageNet这样的图像尺寸大且数量也多的数据集上,因此这篇文章可以看做的ICLR2017那篇文章的升级版(搜索速度比之前快了7倍左右)
总的来看这篇文章借鉴了NAS(Neural Architecture Search)的训练结构思路
在优化方式上,更新controller参数的时候采用 Proximal Policy Optimization (PPO),而不是原先的policy gradient method;
同时在search space的设计上,借鉴了目前优秀网络结构(ResNet,GoogleNet)的重复堆叠思想,后面会提到堆叠的基本单元是convolutional cell,这是和原来的NAS很不一样的地方。
convolution cell
这篇文章中堆叠的最小单位就是convolution cell,而convlolution cell主要包含两种:第一种是不改变输入feature map的大小的卷积,也就是Figure2中的Normal Cell;
第二种是将输入feature map的长宽各减少为原来的一半的卷积,也就是Figure2中的Reduction Cell。
因此当网络结构定义如Figure2,那么Figure1中的controller就用来预测Figure2中的Normal Cell和Reduction Cell。
convolution cell包含B个block。block 如图3,左右两个图都是一个block的示意图,且是相互对应的,比如左图中的两个灰色框对应右图中的最底下两个虚线框,左图中的两个黄色框对应右图中的33 convhe 22 maxpool,左图中的绿色框对应右图中的add操作。
每个block包含5个prediction steps:
Step 1. Select a hidden state from h or from the set of hidden states created in previous blocks.
Step 2. Select a second hidden state from the same options as in Step 1.
Step 3. Select an operation to apply to the hidden state selected in Step 1.
Step 4. Select an operation to apply to the hidden state selected in Step 2.
Step 5. Select a method to combine the outputs of Step 3 and 4 to create a new hidden state.
step3和step4中的operation(Figure3中的两个黄色框)包含下面这些卷积神经网络中常规的操作。
controller是用来预测Figure2中的Normal Cell和Reduction Cell,step和block可以得到每个controller有2*5B个prediction,其中前5B个prediction是用于预测Normal Cell,后5B个prediction是用来预测Reduction Cell。
Figure4就是作者通过实验得到的表现最好的Normal Cell和Reduction Cell结构。
每个convolution cell(比如Fiugre4中的Normal Cell和Reduction Cell)都是B个block的结果,在Figure4中,B=5,所以可以看到不管在Normal Cell还是Reduction Cell中都有5个add操作。
实验结果
cifar10
首先Table1是在CIFAR-10数据集上的结果。总共4个部分,前面两个部分都是常规的网络,第三部分是原来NAS网络的结果,第四部分就是这批文章的NASNet结果。可以看出NASNet的特点在于在参数数量较少的情况还还能保持较高的准确率。
ImageNet数据集
其实网络结构的学习都是在CIFAR-10数据集上训练得到的,最后才移植到ImageNet数据集。这里要注意的是在移植过程中仅仅是将训练得到的网络结构移植,参数还是在ImageNet数据集上从头开始训练。
可以看出在CIFAR-10数据集上学到的Cell结构可以很好地泛化到ImageNet数据集。
左边是准确率和浮点计算的关系,右边是准确率和参数数量的关系,可以看出NASNet几乎全面占据优势。作者尤其强调在和MobileNet、ShuffleNet的对比中,在相同的计算资源限制下,NASNet的效果更好。
COCO
实验中除了验证该网络在分类任务中的效果,还验证了该网络用于检测算法的效果。
Table4就是在COCO数据集上的检测效果对比。这里将在ImageNet数据集上预训练的Table4中的model作为检测算法Faster-RCNN的主网络进行实验。
搜索效率
文章中的网络搜索算法采用的是强化学习(reinforcement learning)的算法。Figure7是作者画的关于用reinforcement learning(RL)和random search(RS)的效率对比。
REF
https://blog.csdn.net/u014380165/article/details/78525500
https://blog.csdn.net/u014380165/article/details/78525687