[NAS论文]Prioritized Architecture Sampling with Monto-Carlo Tree..
【Prioritized Architecture Sampling with Monto-Carlo Tree Search】
作者:悉尼大学、旷视大佬们
Paper: https://arxiv.org/abs/2103.11922
Code: https://github.com/xiusu/NAS-Bench-Macro
注:以下图片都来自论文原文、文字基于原文翻译和个人主观理解,作者水平很差,大家手下留情,如有错误欢迎大家指正,拜谢
【太长不看系列】
3、当然,为了准确地评估众多的node,在训练和搜索阶段提出了节点通信和分层节点选择方法
4、在搜索阶段用MCT方法抽一定约束下的20个子架构用验证集刷精度,用就好那个就完成了搜索过程,减少不少计算量和工作量,442M FLOPs 在Imagenet能有78.0% Top-1 acc
个人感觉:
【细品系列】
【大体流程】
训练的loss会做奖励反馈给每个op,并且作者提出一种节点通信技术,在相同depth的op可以共享奖励,避免重复计算。并且在搜索阶段,为了更准确的评估每个op,提出用分层op选择的方式,然后用验证集分层更新那些比较少被访问到的op上的奖励。然后采用分层node【op】选择方法搜索子架构,得到验证精度最高的最终体系结构。
【MCT的搜索空间】
【MCT采样训练过程】
接着,MCT的采样方法基于Upper Confidence Bounds for Trees (UCT):
【节点通信】
在supernet中,同一层中的相同op共享相同的权重,这启发了节点应该从它们的op类型获得一些公共知识,所以提出了一种节点通信技术来共享相同op和深度的节点的奖励,为了表示特定层中某个op的奖励G,使用相应节点的所有奖励的移动平均值,就是滑动平均掉Q值:
【层间节点选择】
在搜索阶段。通过MCT存储的Qvalue,很容易可以直接采样奖励最高的架构作为最终结果,然而,在训练集上表现最好的子架构可能并不总是在验证集上表现最好的,因此,需要通过搜索阶段来重新验证一小部分奖励高的架构,然后输出验证精度最高的架构作为搜索的结果。
此外,为了准确评估访问次数较少的node,用分层节点选择方法,分层地选择节点,对访问次数较少的节点进行重新评估。
然后,从root 节点开始,如果子节点的访问次数>阈值,那么就认为这些满足条件的子节点是有前途的,然后relax分布这些节点,然后采样,如果所有节点的平均访问次数达不到阈值,就随机采样这些节点用batch验证集刷,直到刷到次数够阀值,才继续前一步。
【实验过程】
【cifar10上做相关系分析】
【参数量/FLOPs大性能就好嘛?】
【增加FLOPs和增加parameters哪个对性能提升大】
【search number多少才算好】
因为MCT已经存储了每个子网的奖励,所以我们可以直接使用奖励最高的子网作为最终的架构,然而,这些奖励只限于训练损失,因此对性能不够准确,因此仍需要在验证集上评估子网以获得更好的结果, 所以就是拿search number个架构用验证集刷一下,看看哪个好就用哪个,具体多少个search number 看下图:首先可以看到直接冲最高奖励的子架构,其实就能达到很好的效果超过用EA和random sampling的搜索方案,然后抽50个search number 来刷一下验证集取最好基本也能达到了最好的效果,以后都用search number = 20,因为够好了【这部分的试验都在CIFAR-10】。
具体的话,就是使用分层节点选择和MCT进行体系结构搜索,对于一个路径(子网)的采样,从MCT的根节点中分层次选择最优节点,阈值常数nthird为6。如果子节点的平均访问次数低于 nthrd,我们随机抽样由这些子节点组成的路径,然后使用一批(即128)验证数据eval这个架构,直到达到阈值。选取所有节点后,得到具体的子网(结构);然后,使用完整的验证数据集对其进行评估。此外,重复这个过程对子网进行抽样,直到达到预定义的搜索次数(即20次)。然后,我们选择验证精度最好的结构从头开始训练评估
【在ImageNet上的试验结果】
搜索空间的设计上没有太特别的地方,batchsize=1024,SGB0.9,初始lr0.12,只训练了120epoch,前60epoch是uniform sampling作为warmup,后60epoch,采样子网的FLOPs必须在一定的预算范围内(0.9-1.0X),在接下来的20%epochs( 61-85 epochs), 仍旧是uniform sampling,也uniformly sample才构建MCT,在后面的epochs采用MCT方法采样来训练(86-120epochs),其实整个过程大部分都在uniform sample,整个过程应该是:【无约束uniform sample】--> 【有约束uniform sample】-->【有约束MCT sample】,其实到MCT sample的时候,lr只剩下不到一半,0.05448左右了。
没有用蒸馏,但是搜索这个阶段因为MCT的原因感觉效率很高。
1、supernet的训练程度没有很高,都低于60%
2、随着训练epoch的增加,搜出来的架构acc居然在震荡,
具体:
1-60epochs是在无约束uniform sample,得益于此,搜到的结果一直稳定提升,
60-85epcoh也仍旧在uniform sample,但是是有FLOPs的约束,
不过,搜到的acc也在上升,
但是一换成MCT采样,就是85epoch之后,搜到的结构就不好了,acc在下降/震荡,这个说明这个MCT没用,或者其实MCT没用好,毕竟在搜索阶段的MCT优势对比过EA其实是可以的,但是训练阶段的MCT sample好像差强人意,也是日后可以改进的点
【消融实验】
【在ImageNet上评估这些技术的不同组合的性能】
- 点赞
- 收藏
- 关注作者
评论(0)