论文阅读笔记:Efficient Neural Architecture Search via Parameter Sharing

ENAS 主要做的是对于一个DAG图,i向i+1,…,n有边。i->j的权值矩阵是$\omega _{j, i}$。有一个Controller 会选择一些边激活,然后根据激活的边去建立一个网络。

基本方法:

对于RNN,DAG的1号节点接受$x_t, h_{t-1}$,分别为时间$t$的输入,和上一个的输出。然后对于每个节点,选择前面的节点是哪些。输出$h_{t}$是DAG的终点的平均。(我对RNN不了解,所以再细节的我没有太看明白)

对于CNN,有两种搜索方法。一种是宏观(marco)搜索,一种是围观(mirco)搜索。宏观搜索中每个DAG的节点代表一层layer,然后有33conv,55conv,sep-33conv,sep-55conv,max-pooling,avg-pooling,(不同层之间的参数不共享)。

微观搜索搜出来conv cell和reduction cell,然后如下图组合到一起。这里是直接把这一个cell复制N遍,第$i$层接受第$i-1$和第$i-2$层的输出。其中layer i就是第$i$层的输出。

训练:

训练的时候是训练controller和训练DAG图上的权值交替进行。先训练DAG图上的网络。之后再训练controller。我不懂增强学习,所以没搞明白controller训出来个啥,以及怎么训练的。

实验:

实验部分我只读了CNN相关的实验。

表格里面第第一块是DenseNet,第二块是搜索整体网络的方法,第三块是一些设计模块再组合的搜索方法。

同时文章也提到利用随机搜索以及通过在训练中放弃对controller的训练,发现得到的结果更差,说明ENAS真的有用而不是因为DAG图设计的好。