NASNet总结
论文:《Learning Transferable Architectures for Scalable Image Recognition》
注
先啥都不说,看看论文的实验结果,图1和图2是NASNet与其他主流的网络在ImageNet上测试的结果的对比,图3是NASNet迁移到目标检测任务上的检测结果,从这图瞬间感觉论文的厉害之处了,值得阅读好几篇。
图1ImageNet数据集上的比较
图2 NASNet与目前最好的网络的比较
图3 NASNet目标检测的效果
1. 概述
此论文是一开始发表于ICLR2017,后来转投与CVPR2017,又是Google Brain的一篇著作,其开源了源代码,目前还没有找到caffe版本的实现。论文是在之前的一篇论文NAS–Neural Architecture Search With Reinforcement Learning的基础做了突破性的改进,使得能让机器在小数据集(CIFAR-10数据集)上自动设计出CNN网络,并利用迁移学习技术使得设计的网络能够被很好的迁移到大数据集(ImageNet数据集),同时也可以迁移到其他的计算机视觉任务上(如目标检测)。
自我总结
看了论文一遍后发现真是云里雾里,真是硬着头皮看完了一遍,发现是论文许多核心的点都是基于NAS做的,在论文中只是几句带过,所以看完一篇论文后我不得不先去下载NAS论文看,看完NAS论文后回头再重新看这篇论理解起来就简单多了,极力推荐先看NAS论文(也是一篇很好的论文)再看此篇论文。
2. 论文核心
看完NAS论文和此篇论文,我将从以下几点描述论文的核心点。
核心一:延续NAS论文的核心机制使得能够自动产生网络结构;
核心二:采用resnet和Inception重复使用block结构思想;
核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。
核心一
论文是采用了NAS的核心机制来自动生成网络,还是利用RNN控制器去预测一个网络结构,接着训练这个网络直到收敛,去验证集上测试得到一个准确率R,将这个R作为回报信号反馈给RNN控制器去更新RNN控制器的参数,从而产生更好的网络结构。只不过原来NAS中优化的算法是policy梯度,而论文中采用 Proximal Policy Optimization (PPO)算法。整个的流程还是使用强化学习机制,具体的细节在NAS论文中有阐述,这里就不详细阐述了。
图4 生成网络的机制
NAS那篇论文中的实验都是在CIFAR-10上做的,所以那种搜索方式可以在能接受的时间范围内达到目的,但是如果想要在ImageNet数据集应用就不大行,因此就有了这篇文章,核二和核心三也是基于此提出的,也就是设计一个合适的new search space,使得在CIFAR-10上得到的最好的网络结构可以方便地迁移到ImageNet这样的图像尺寸大且数量也多的数据集上,因此这篇文章可以看做的ICLR2017那篇NAS文章的升级版,搜索速度比之前快了7倍左右。
核心二
论文借鉴了目前主流优秀的网络结构(如ResNet和GoogleNet)的重复堆叠思想,使得RNN控制器学习得到也是基本单元convolutional cell,这是和原来的NAS很不一样的地方。论文通过堆叠convolution cell从而构建整个网络结构,如图5所示就是基于这两种cell在不同数据集上构建的网络结构。
为了生成可扩展的网络结构并且能够结构任意size的图像,基于此论文设计的convlolution cell主要包含两种:
Normal Cell:不改变输入feature map的大小的卷积;
Reduction Cell:将输入feature map的长宽各减少为原来的一半的卷积,是通过增加stride的大小来降低size。
最后RNN控制器用来预测这两种Cell。
图5 Normal Cell和Reduction Cell构建网络结构
核心三
核心三也是论文一大改进,也是论文的核心所在,对于RNN控制器预测的输出和NAS不一样了。上述所描述的convolution cell到底是什么呢?论文的解释是一个convolution cell由B个block组成,那么一个block又是什么呢,看看图6就一目了然,对于每个block来说RNN控制器有5个预测步骤也有5个输出的预测值。每个block的输入是前面的两个block的最后的输出。
图6 RNN控制器预测每个convolution cell中的每个block结构图
图中的预测步骤一共是5个步骤:
Step1:从hidden states(前面block中产生的)中选择一个hidden state—hi-1;
Step2:重复step的操作,选择一个hidden state—hi;
Step3:为step1中选择的hidden state选择一个操作;
Step4:为step2中选择的hidden state选择一个操作;
Step5:选择一个方法去连接step3和step4中的输出从而产生一个new hidden state,并将其添加到hidden states中。
说明
考虑到计算资源的限制,论文限制了search space,设置B=5。
Step3和step4中选择的操作可以下面的这些选项选择
Step5中的连接方式一般有两种选择
(1)element-wise addition between two hidden states
(2)concatenation between two hidden states along the filter dimension
上述的5个step就是此论文的核心了,也就是作者设计的new search space,这是和ICLR2017那篇NAS文章最不一样的地方,NAS那篇文章中的search space包含了filter的size,stride等等,而这篇文章则通过构造convolution cell的方式大大降低了search的难度。 图6中左右两个图都是一个block的示意图,且是相互对应的,比如左图中的两个灰色框对应右图中的最底下两个虚线框,左图中的两个黄色框对应右图中的3*3 conv和 2*2 maxpool,左图中的绿色框对应右图中的add操作。
图7就是作者通过实验得到的表现最好的Normal Cell和Reduction Cell结构。每个convolution cell(比如Fiugre4中的Normal Cell和Reduction Cell)都是B个block的结果,在Figure4中,B=5,所以可以看到不管在Normal Cell还是Reduction Cell中都有5个add操作。注意图6展示的是论文称为NASNet-A的Cell结构,论文中的其他两种基于不同的search spaces得到的NASNet-B和NASNet-C的Cell结构可以看论文中最后的附录部分。可以看出虽然作者没有设计类似ResNet那样的residual connection结构(或者叫skip connection),但是这些Cell在训练过程中自己学会了这种skip connection(图7中的虚线连接),这个学习的过程就是图6中前面两个灰色矩形框的select过程(可以和ICLR2017的NAS中设计的skip connection结构对比,在那篇文章中采用的sigmoid结构表达层与层之间的连接关系),而且作者发现当手动插入residual connection时并没能提高模型的效果。
图7 NASNet-A的Cell结构示意图