太长不看系列1、作者认为以前的NAS在sample layer的op的时候,都是独立的,没有考虑之前layer的采样情况( they often consider each layer separately while ignoring the dependencies between the operation choices on different layers),搜索阶段的进化算法只允许变异和交叉操作,没有考虑层间的关系,导致了次优结果。所以用Monte Carlo Tress(MCT)方法捕捉层间依赖,存储过往op采样和性能信息。2、并且存在MCT的信息在search阶段会用得上,具体的话,MCT是用训练损失作为对架构性能的奖励来更新的3、当然,为了准确地评估众多的node,在训练和搜索阶段提出了节点通信和分层节点选择方法4、在搜索阶段用MCT方法抽一定约束下的20个子架构用验证集刷精度,用就好那个就完成了搜索过程,减少不少计算量和工作量,442M FLOPs 在Imagenet能有78.0% Top-1 acc5、消融实验做的不错!
个人感觉:
MCT的训练方法在这里没用好,甚至在起负向作用,我指的是MCT sample这个方法可能用的不是很好,但是不可否认的是uniform+MCT sample (tau 76.22 in CIFAR-10)方案明显相关性系数kendall tau 比uniform sampe(tau 72.41 in CIFAR-10)更高,但是却不见得能搜到一个更好的结果比起uniform sample(下图),因为训练是uniform + MCT sample,搜索是MCT搜索,估计是这个训练和搜索的GAP导致的,一般的理解是,当抽supernet的架构acc排序和单架构从头 训练的acc排序相关性越一致越能够搜到一个更好的结构,意味supernet更能够预测不同架构的性能,在跑EA的时候更加精确,但是从这里的结果看居然起到了一个反效果,只能归结于训练和搜索的GAP了 。
其中Ltr(αt)表示第t次迭代下的架构αt的训练loss。上面第一条公式的 L波浪线t 表示超网络在第t次迭代下滑动平均的loss,所以Q值就表示为滑动平均的loss比上当前的loss的值,感觉这里有点问题,如果一个架构本来loss就比较持续性高且稳定,那么这个Q值不低的,但是这个loss高一般acc也就不高了,那其实这个架构是不是不咋地但是被判定为Q值高而不错?(我猜的)接着,MCT的采样方法基于Upper Confidence Bounds for Trees (UCT):
因为MCT已经存储了每个子网的奖励,所以我们可以直接使用奖励最高的子网作为最终的架构,然而,这些奖励只限于训练损失,因此对性能不够准确,因此仍需要在验证集上评估子网以获得更好的结果, 所以就是拿search number个架构用验证集刷一下,看看哪个好就用哪个,具体多少个search number 看下图:首先可以看到直接冲最高奖励的子架构,其实就能达到很好的效果超过用EA和random sampling的搜索方案,然后抽50个search number 来刷一下验证集取最好基本也能达到了最好的效果,以后都用search number = 20,因为够好了【这部分的试验都在CIFAR-10】。具体的话,就是使用分层节点选择和MCT进行体系结构搜索,对于一个路径(子网)的采样,从MCT的根节点中分层次选择最优节点,阈值常数nthird为6。如果子节点的平均访问次数低于 nthrd,我们随机抽样由这些子节点组成的路径,然后使用一批(即128)验证数据eval这个架构,直到达到阈值。选取所有节点后,得到具体的子网(结构);然后,使用完整的验证数据集对其进行评估。此外,重复这个过程对子网进行抽样,直到达到预定义的搜索次数(即20次)。然后,我们选择验证精度最好的结构从头开始训练评估