基于darts改进的Progressive Differentiable Architecture Search

论文阅读笔记
论文:Progressive Differentiable Architecture Search: Bridging the Depth Gap between Search and Evaluation
代码链接:pdarts
原文作者:Xin Chen、Lingxi Xie等

这篇是把CMU之前的一个工作darts作为baseline,然后基于此存在的问题做出改进。

darts主要存在的问题有:

  • 从proxy task中search到的cell,通过简单的堆叠强行把网络加深用在object task上,但存在一个depth gap,在proxy task中search到的cell在浅层网络中是有效的,但不一定在强行加深后仍然有效,或者说性能会下降。
  • 随机初始化的影响,search的结果不太可控,很难复现。

主要工作

这篇论文的作者,针对第一个问题提出了一个解决方案,如图1.
在这里插入图片描述
darts在从proxy task 迁移到object task的时候,直接强行堆叠,如1(a)将8个cell叠为20个cell,这就会存在第一个问题。作者就把search分为几个阶段,同时考虑到显存的问题。设计如下:

  1. 第一个阶段在所有候选operations中搜索搜索5个cell;
  2. 第二个阶段在第一阶段的所有候选operations中选择Top个operations中搜索11个cell,其中是通过堆叠normal cell进行,需要重新初始化。(想到昨天分享的ICRL最佳论文,不知作者是重新初始化还是用的同一个)
  3. 第三个阶段与第二阶段类似。

作者通过在search过程中不断叠加cell,使网络不断加深,达到与在object task中用的网络深度差不多来减少depth gap。

在这里插入图片描述

作者在加深网络的过程中,遇到了skip_connect operation出现很多次的问题,这是因为在深层网络中skip_connect可以很快的传梯度。但是skip_connect是无参数的,学习视觉表征的能力相对较弱。于是作者提出search space regularization来约束skip_connect的选择。

  1. 增加一个operation级别的dropout来约束,当网络选择了skip_connect后进行dropout,dropout rate随着search的阶段改变。
  2. 作者发现最后的结果对skip_connect的数量敏感,然后在1的基础上强行控制skip_connect的个数为M,当skip_connect较多的时,将top-M之后的weight设为0,当不够时,重新search。

实验结果

proxy task的实验结果
在这里插入图片描述
imagenet的实验结果
在这里插入图片描述

个人总结

结果相对与darts来说是有提升的,search时间也减少了很多,不过感觉对skip_connect的处理有点玄学。

猜你喜欢

转载自blog.csdn.net/liveway6/article/details/90057087