为方便说明,如无特殊说明后文将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提出了一种渐进式搜索的方法。
PDARTS提出在搜索过程中逐渐增加网络层数,随之而来的问题以及解决办法分别是:
示意图如下,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结构。
下面是具体的实验结果
最近读了不少NAS的论文,一直有个困惑就是他们所说的搜索时间到底是怎么算的,因为这些算法的搜索epoch数量是各不相同的,比如说A算法设置的搜索epoch数量是100,而B算法只搜了5个epoch,此时B算法就会说它的搜索时间更短。但是我觉得这不太能说服我,因为有可能A算法在第5个epoch的时候也找到了不错的cell结构。另外我一直在想不同的网络结构最终的效果真的会有那么大差别吗?如果的确有差别那么不同的搜索策略则有了意义,反之如果每个cell结构最终性能都差不多,那么就还不如随机初始化一个网络,然后直接使用这个网络。
可能,这就是玄学吧(* ̄︶ ̄)。。。
原文:https://www.cnblogs.com/marsggbo/p/12231093.html