Motivation为方便说明,如无特殊说明后文将PDARTS来指代该篇论文。阅读本文之前需要对DARTS有一定了解。,如果还不太清楚DARTS可以阅读这篇文章。
进来有很多种NAS技术相继提出,主要有基于强化学习的,基于进化算法的,还有基于梯度下降的,不同算法有不同优缺点。本文的PDARTS就是基于梯度下降的,其实看名字也能知道它其实是对DARTS的改进算法。
DARTS算法是先在proxy dataset(如CIFAR10)上搜索cell结构,之后通过重复堆叠找到的这个cell得到最终的网络结构。直白一点就是在CIFAR10数据集上搜索一个深度为8的网络,而在ImageNet上就通过堆叠得到一个深度为20的网络,然后对这个更深的网络训练。
上述这一过程有一个很明显的缺点就是DARTS在proxy dataset上搜到的结构可能在target dataset上不是最好的,甚至表现较差。文中把这个叫做depth gap。
为了解决前面提到的depth gap问题,PDARTS提出了一种渐进式搜索的方法。
和其他基于DARTS算法的区别- PNAS:PNAS是针对cell内部的operation做渐进式搜索,而PDARTS是对layer和cell中的operation做渐进式搜索
- SNAS:SNAS是为了解决训练和验证之间的bias,方法是将每条edge的operation权重为one-hot形式。PDARTS则是通过逐渐增加网络层数的方式来消除这个bias。
- ProxylessNAS:通过binary masks来选择operation进而减少GPU显存使用,而且直接在target 数据集上搜索网络,但是这样一来对于搜索空间的设置有了更高的要求。PDARTS相比而言搜索时间更快。
PDARTS提出在搜索过程中逐渐增加网络层数,随之而来的问题以及解决办法分别是:
- 计算量增大:当层数增加后,计算量也会成倍增加。因此为了解决这个问题,PDARTS提出了search space approximation策略,即每当层数增加时就会相应地减少候选操作的数量。
-
稳定性降低:在搜更深的网络时,skip-connection会占据主导地位,这对模型稳定性有较大影响。解决办法是对搜索空间做正则化约束(search space regularization):
- (1) operation-level Dropout,来避免skip-connection占主导地位
- (2) 在evaluation过程中控制skip-connection的出现次数
示意图如下,PDARTS搜索分成了3个阶段:
最开始是initial stage,网络由5个cell组成,每个cell中节点之间的候选操作有5个。对initial stage搜索若干个epoch之后进入intermediate stage,可以看到这个阶段的层数增加了6层,但是候选操作的数量减少了,这样做是为了减少GPU显存使用量,被删除的操作是前一阶段概率最低的操作。最后的final stage同理不再赘述。
Stage | #Cell | # Operation Space size |
---|---|---|
Stage 1 | 5 | 5 |
Stage 2 | 11 | 4 |
Stage 3 | 17 | 2 |
实验结果
下图展示了PDARTS在不同阶段搜索到的cell的结构,以及DARTS算法使用second-order找到的cell结构。可以看到PDARTS在后面会更加倾向于搜索那些deep connection的cell,而DARTS则是找到shallow connection的cell结构。
下面是具体的实验结果
- CIFAR10&CIFAR100实验结果
- ImageNet实验结果
最近读了不少NAS的论文,一直有个困惑就是他们所说的搜索时间到底是怎么算的,因为这些算法的搜索epoch数量是各不相同的,比如说A算法设置的搜索epoch数量是100,而B算法只搜了5个epoch,此时B算法就会说它的搜索时间更短。但是我觉得这不太能说服我,因为有可能A算法在第5个epoch的时候也找到了不错的cell结构。另外我一直在想不同的网络结构最终的效果真的会有那么大差别吗?如果的确有差别那么不同的搜索策略则有了意义,反之如果每个cell结构最终性能都差不多,那么就还不如随机初始化一个网络,然后直接使用这个网络。
可能,这就是玄学吧(* ̄︶ ̄)。。。
MARSGGBO♥原创
如有意合作或学术讨论欢迎私戳联系~
邮箱:marsggbo@foxmail.com
2020-01-23 17:45:35