NAS搜索之ENAS
论文地址
代码地址
主要工作
- Designing Recurrent Cells
- Designing Convolutional Networks
- Designing Convolutional Cells
操作方式
- 先初始化一个big网络,包括所有连接,
- 通过rnn控制器来预测生成一连串的op连接和op操作,构建子网络
- 训练子网络一段时间
- 据子网络的结果去训练rnn控制器,使得rnn的输出结果能构建更好的子网络
- 不断重复2,3,4
Designing Recurrent Cells 设计思路
将节点之间的连接看成是一个有向无环图,如图共四个节点,其中红线代表数据流动。
如上图2,和上面节点图1相互对应,有两个输入x[t],h[t-1],进入节点1做计算,激活函数为tanh。由节点图1红线可知,节点1的结果流入节点2和节点4,节点2的结果流入节点3,最后节点3和4的结果做一个avg得到最后的结果h[t]输出。
计算方式如下:
于是设计使用RNN来控制生成这样的连接方式。
如上图所示,使用rnn方式来生成连接方式和op操作(这里指激活函数)。
- 上图node1,2,3,4对应节点图中的1,2,3,4节点,由上图可知,因为节点1的输入已经固定,就是0也就是前图的x[t]和h[t-1],rnn部分只需要预测激活函数即可,由图知预测节点1激活函数为tanh。
- 除了节点1,其他节点都需要rnn预测两个,一个连接过来的前置节点和一个op操作,例如node 2,左半部分预测连入节点2的是节点1。右半部分预测在节点2 的op操作是ReLU。其余节点类似。
使用上文操作方式中说的,训练最后得到网络:
Designing Convolutional Networks 设计思路
同样这里也是,四个节点,红色代表数据输入
同样这里也是使用rnn来控制预测当前节点的前置节点和op操作,这里op操作是conv,pooling等。
- 同样,节点1只需预测op操作,节点2预测连入的节点是1,op操作是sep5X5,节点3预测的连入节点是1,2,op操作是max3X3.这里的连入节点或者说前置节点个数可自行设置,这里设置为2,也就是说每个节点的输入最多是两个。
最终的搜索结果:
Designing Convolutional Cells 设计思路
这里也是一样,有四个节点,红线代表数据流向。
这里预测也是使用rnn,唯一就是预测输出不同,这里每个node会预测四个输出,2个前置节点和两个op操作,而且互相对应,如上图节点3,A前置节点和A op操作对应,B前置节点和B op操作对应。
如上图所示,和前面的rnn控制器联系起来。
- 在node3部分,A和B预测的结果都是2,而op操作是sep5X5和id,也就是说node2节点的输出分别经过一个op操作sep5X5和一个op操作id(这里就是指本身),把两个结果再进行add后作为node3的输出。
- 在node4部分,A和B的预测结果为3,1,op操作为avg3X3 和sep 3X3,也就是node3的结果进行avg3X3操作和node1的结果进行sep3X3操作,把这两个结果进行add作为node4的输出。
- 最后会将这些未连入op操作的节点进行concat。
这里搜索两个cell,每个cell里面有5个节点,最终的搜索结果:
最后将这些cell如下方式组合起来形成一个网络