原文链接:https://arxiv.org/pdf/1611.01578.pdf 发表:ICLR 2017
编辑:牛涛
code:https://github.com/tensorflow/models
NAS的开山之作,含金量无需多言。
其核心就是argue之前基于经验去设计结构太麻烦了,用自动化的方式生成网络结构会更有前景。
考虑到网络结构可以用一串长度可变的字符串表示,有点像是一句话,用RNN来生成似乎就顺理成章。大致框图如下

其过程有点像RL,RNN生成一个结构拿去验证得到reward,以此来更新RNN。
作者将CNN每层抽象成几个变量:filter个数、filter的长和宽、步长的长和宽。如下图

每个step的输入是之前输出过softmax的结果。
当我们生成结构后,我们训练他并得到最终精度R。然后用策略梯度的方式去跟更新RNN,如下式

类比于强化学习,在梯度上也加了个baseline降低方差

在实验中为了加速,采用了并行计算与异步更新,具体是用parameter server的方式(类似于联邦学习)
此外,考虑到GoogleNet、ResNet这种带跳接的结构,有必要增加生成网络的复杂度。为此在RNN预测每层时加了一个名为anchor point的东西,如下图

此时,第j层是否要skip到第i层由下式决定:

对于第N层,有N-1个,共用一个
、
和v,得到N-1个数值后根据这个分布去抽样决定skip的情况。不同尺度用padding来实现。
除了CNN外,文章还给出了设计recurrent cell的方法,但是这个循环cell我并没找到什么官方定义。NLP这边咱也不太懂,甩个图有兴趣自己看原文吧
