原文链接:https://arxiv.org/pdf/1806.02639.pdf 发表:ECCV 2017
编辑:牛涛
code:https://github.com/chenxi116/PNASNet.pytorch
本文argue的仍然是NAS的高复杂度,提出了一种渐进式的NAS方法,从小结构逐渐变大。搜索空间是以cell为单位。首先介绍cell的结构设计
每个cell包含b个block。每个block由两个输入,两个操作,一个合并操作组成。定义为
其中,每个block的输入从【之前block的输出,前两个cell的输出】的集合中有放回的选择。操作的选择空间如下
这个空间相比于前人工作进行了一定删减,去掉了从未被使用过的那些。同样的,合并操作分为相加或拼接,由于拼接很少被选择,因此也扔掉了,实际上每个block可以定义成4个元素的元组。
搜索到cell之后,通过堆叠的方式形成一个网络。没有专门搜索下采样的cell,而是通过把步长该为2实现。作者认为,尽管之前的NAS已经缩小了搜索空间,但是仍是指数级的,agent很难从零知识快速搜索到比较好的结构。因此提出一种渐进式的方法,大概逻辑是,从每个cell只有1个block开始,逐渐增大block的数量。
但是block越多,要训练+验证的子网络越多,这显然很耗时。因此提出一个用来预测子网络性能的模块,使得不必每次都进行完全训练。
为了预测性能,该模块应具有几个特点。其一要求对可变长度的结构进行预测,具体地说他应该能预测b+1个block组成的cell堆叠而成的网络的性能。(训练的时候是拿b和b以下组成的网络训练的)。其二,他应该能反映真实的性能,不一定特别准,但是至少能把子网络排序,这样才可以省略掉一部分网络的训练过程。其三他应该可以在数据不多的时候就能训练好,不太难train。
本文使用了LSTM作为这个模块,输入是由(当前block两个输入索引,输出索引)组成的4元素元组。最终hidden state经过回归器得到预测精度。损失函数使用L1 Loss。由于训练的样本比较少,作者使用了集成学习,共5个LSTM,每个的数据集只占全部的4/5。
搜索流程图大致如下