原文链接:https://arxiv.org/pdf/1910.05733.pdf 发表:ICCV 2019
编辑:牛涛
code:无
作者认为,尽管One-Shot NAS很高效,但是典型的oneshot方法需要1)随机采样一堆网络 2)挨个验证 3)选最好的。大多数采样的网络没用不说,采样到的也只是搜索空间内的一小部分,离最优解可能相差甚远。本文提出一种根据提出的evaluator进行采样的NAS方法,比起随机选更容易选到最优解。
本质上讲本文就是在讨论如何从一个全连接(即一个cell中所有节点都相连的拓扑结构)中抠出每个cell的子结构。对于这样的全连接网络(文章成为template network),作者采用均匀采样的方式确定每个node的输入,有顺序均匀采样的方式决定这两个输入要进行何种操作,如下
之所以有顺序是因为如果两个输入相同时,不至于出现操作也相同导致重复的情况。在更新网络参数的时候,只根据采样结果更新采样到的操作中的参数,这样不仅省显存,均匀采样也防止网络倾向于浅且快速收敛的结构。
那么如何更新结构参数呢?首先对于两个输入,对应有两个概率分布参数,有它生成的分布进行采样决定输入情况;对于操作,由于是有序均匀采样,因此共有
种可能性,说白了就是N个操作里抽两个那么多。对应会有个概率分布向量,从这个里抽样得到对应的操作。但是采样每个传递梯度,因此类似于DARTS,在更新结构参数的时候每个node的输出写成了所有输入及操作的概率求和,如下
上式先给定操作,然后分别对所有输入求和,在对所有操作概率求和,得到一个mix-operation。其实本质上,可以将输出看为所有操作关于输入的概率求和,会有一个操作对是概率很大的,那这一项所对应的加权求和又会受到输入概率分布影响,所以其实操作概率最大且输入概率最大的那一组可能得到的输出,会占整个输出的很大一部分。在网络参数确定的情况下,我们就是要通过梯度下降找到这样的组合。
值得一提的是,网络参数是在训练集上更新的,而结构参数是在验证集上(和之前的DARTS也类似)。
当template network中的网络参数与estimator对应的结构参数都收敛后,我们根据estimator的概率分布采样1000次并验证得到最好的那个。由于template network已经收敛,采样得到的网络就是已经效果很好的,按理说不需要再进行额外训练了。算法的伪代码如下: