最近在看NASNet,但是NASNet是基于NAS来的,于是还得先看NAS的论文,学习过程中看到几篇好的文章,mark下
论文笔记NAS
NAS综述
NAS详解
NASNet论文理解
NASNet详解
解读NASNet
NASNet
NASNet学习笔记
NASNet
NASNet论文笔记
但觉得还是自己总结下,才能更好地消化。
背景
NASNet网络的提出源于Learning Transferable Architectures for Scalable Image Recognition,这篇文章是由Google Brain的大佬们Barret Zoph, Vijay Vasidevan, Jonathon Shlens, Quoc V.Le发表的,开源了源码。它是NAS(Neural Architecture Search)的升级版。
NAS讲的是利用强化学习(Reinforcement Learning)来学习一个好的网络结构,具体讲就是利用RNN来生成神经网络模型的描述,然后使用强化学习来训练这个RNN,使得生成的神经网络模型精度最大化。
但是用NAS进行计算的代价是相当昂贵的,仅仅在CIFAR-10上学习一个网络就需要500台GPU运行28天才能找到合适的结构,因此很难将NAS迁移至大数据集上,就更不用说ImageNet这种几百g的大规模数据了。
因此,Google Brain的大佬们就在这个基础上做了改进,基于谷歌之前推出的AutoML来首先在小数据集上(CIFAR-10)上进行神经网络结构搜索,学习出一个网络单元(Cell),然后通过堆叠更多的网络单元,将网络迁移至大规模数据集如ImageNet图像分类和COCO对象检测数据集上进行训练。
这种可转移性是作者通过设计一个新的search space实现的。search space中的卷积网络都由卷积层(称为Cell)组成,这些卷积层(cell)有相同的结构,不同的权重。搜索“cell”而不是整个网络结构的好处:这样不仅快,而且,cell有更好的泛化能力
建议:
NASNet这篇论文中许多关键点都是基于NAS做的,因此建议先看懂NAS这篇论文,再来阅读NASNet
网络结构
NASNet方法的中心思想和之前的一样:
NASNet仍然采用NAS的核心机制自动生成网络:利用RNN控制器预测一个网络结构,接着训练网络直到收敛,在验证集上测试得到一个准确率R。然后将R反馈给RNN控制器去更新RNN控制器的参数,从而产生更好的网络结构。区别在于NAS中优化的算法是policy梯度,而NASNet中采用的Proximal Policy Optimization(PPO)算法。
NASNet架构的特点是由两个AutoML设计的layer组成:
NASNet Search Space
每个Block有两个hidden states输入hi和h(i-1),给定RNN两个初始的hidden states,控制器RNN会预测余下的结构,整个流程如下图所示:
每个网络单元由B的网络块(block)组成,在实验中B=5。每个块的具体形式如图右侧部分所示,每个块有并行的两个卷积组成,他们会由控制器决定哪些feature map作为输入(灰色部分)以及使用哪些运算(黄色部分)来计算输入的feature map。最后它们会由控制器决定如何合并这两个feature map。两个示意图中绿色的部分为5个,即重复了5次基本模块的预测。每种方法每种操作都对应于一个softmax损失,这样重复了B次,得到一个最终block模块,最终的损失函数就有5B个。
每一个基本模块的生成流程(5步)如下:
步骤1:从h(i-1)个feature map或者第h(i)个feature map或者之前已经生成的网络块中选择一个feature map作为hidden layer A的输入
步骤2:从与步骤1相同的选项中选择第二个隐藏状态,例如上图基本模块的hidden layerB
步骤3:选择要应用于步骤1中选择的隐藏状态的操作(黄色框)
步骤4:选择要应用于步骤2中选择的隐藏状态的操作(黄色框)
步骤5:选择一个方法来组合步骤3和步骤4的输出来创建(绿色框)
其中,在步骤3、4可以选择的操作有:
为了能让控制器同时预测Normal Cell 和Reduction Cell,RNN会有25B个输出,其中前5B个输出预测Normal Cell的B个块,后5B个输出预测Reduction Cell的B个块,RNN使用的是单层100个隐层节点的LSTM
这篇论文和NAS最不一样的地方就是该文中的new search space,NAS中的search space包含了filter的size,stide等,而这篇文章通过构造convolution cell的方式大大降低了search的难度。
本文中基于不同的search spaces得到三种网络结构,NASNet-A、NASNet-B和NASNet-C:
NASNet-A:
NASNet-B:
NASNet-C:
NASNet-B和NASNet-C中的B=4,NASNet-B没有将未使用的hidden states直接串联起来,相反,在卷积单元内穿件的所有hidden states,即使它们当前被使用,也被送到下一层。另外,NASNet-B和NASNet-C还在combine操作后使用了layer normalization或instance normalizattion
可以看出虽然作者没有涉及类似ResNet那样的residual connections(skip connection),但是这些cell在训练过程中自己学会了这种skip connections(NASNet-A中的虚线连接),这个学习的过程就是上图中前面两个灰色矩形框的select过程(可以和NAS论文中涉及的skip connections结构对比,NAS中采用的sigmoid结构表达层与层之间的连接关系),而且作者发现当手动插入residual connections时并没有提高模型的效果。
Scheduled Drop Path
在优化类似于Inception的多分支结构时,以一定概率随机丢弃部分分支是避免过拟合的一种非常有效的策略,如DropPath。但是DropPath对NASNet不是特备好,在NASNet的Scheduled Drop Path中,丢弃的概率会随着训练时间的增加线性增加,因为:训练的次数越多,模型越容易过拟合,DropPath的避免过拟合的作用才能发挥的越有效
其他超参数
定义网络的表示方法,因为Figure2那张图中还有两个超参数未确定:
1.Cell重复的数量N
2.初始的filter的数量
网络结构的符号定义为:“N@倒数第二层filter的数量”,比如“4@64”代表Cell重复数量为4,倒数第二层filter数量为64的网络
在NASNet中,强化学习的搜索空间大大减小,需要人为设定超参数:
总结