Neural Architecture Optimization

原文链接:https://arxiv.org/pdf/1808.07233.pdf  发表:NIPS 2018

编辑:牛涛

code:https://github.com/renqianluo/NAO_pytorch

本文argue的仍然是基于RL或EA的NAS在离散空间搜索,很低效。故提出一种通过将网络结构编码映射成连续向量,并通过梯度下降更新的NAS方法。

方法分为三个模块,encoder、performance predictor和decoder。先将网络结构编码成向量,然后再用这个latent vector预测精度,再将这个向量还原回原始结构,通过最小化预测精度与实际精度的差来训练performance predictor,通过最小化原始结构与还原后结构的差来训练encoder+decoder,这两部分损失写在了一起做成了联合优化。如下图

首先作者规定了结构的空间,依旧是基于cell,cell中有两个输入node,n-3个中间node,一个输出node(将中间node中的叶子节点concat)。每个node由两个输入,两个操作组成。文中给了个例子,比如一个节点的序列为“node-2 conv 3x3 node1 max-pooling 3x3 ”。这表示它将node-2和node1作为输入,分别用3*3conv和3*3 max-pooling处理。一个cell中的每个node都这么编码成一个句子,接下来就用NLP的方式去处理。

encoder输入就是这个句子x,隐向量h的拼接就是编码后的网络结构。

得到的这个编码矩阵在序列维度取均值得到一个向量,输入到performance predictor中去计算回归得到预测的精度。值得一提的是,encoder编码的结果应该满足对称不变性。具体地说,对于一个节点只是交换分支顺序的话,encoder编码后的结果应该与原始的离得很近,以便于predictor预测相近的性能。所以训练的时候把对称样本也加入训练集训练。(结果表明这么做提升了2个百分点,cifar10)

decoder输入encoder编码后的矩阵,并输出解码后的结构向量,这里涉及到一些NLP的公式和概念,想了解的可以参考原文。

encoder、predictor、decoder是联合训练的,利用下列公式

第一项是预测性能的回归损失,第二项是解码后结构与原始的差距

当整个框架收敛后,从一个比较好的结构开始,encoder编码并预测性能,然后拿预测性能作为loss进行梯度上升,更新输入的结构向量x。收敛后会得到最优的结构。

文章的伪代码如下

实验结果:待补充

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容