ProxylessNAS论文和算法解析

ProxylessNAS,论文的全名是Direct Neural Architecture Search on Target Task and Hardware。

之前介绍的方法,搜索的方式基本上都是在小的数据集(比如Cifar-10)搜索出一个最好的Cell架构,然后通过堆叠的方法扩展到大数据集上(比如ImageNet)上做实验。然而,在这一篇论文看来,在小数据集上搜索出来的架构对于大数据集不一定就是好的。基于此观点,ProxylessNAS直接在大数据集上对Cell架构进行搜索,直接找到适合大数据集的Cell架构。

ProxylessNAS借鉴了DARTS论文的思想,将Cell架构空间参数化。但是Cell架构空间是非常大的,如果想在ImageNet上堆叠如此众多的Cell架构空间,会导致模型参数和显存占用异常巨大,训练也难以进行。

ProxylessNAS采用了一种叫做Binary Gate的方法,Node的特征图不再是前继Node经过operation后的加权和,而是让两个Node之间每次只有一个operation被激活,其他的operation都处于抑制的状态,这样的话每次就不用全部训练所有的operation参数和架构参数。具体架构如下图所示。

图1. ProxylessNAS的binarized架构图
ProxylessNAS论文和算法解析_第1张图片

从图1中可以看出,网络的基本结构和DARTS相似,只是在output之前加了一层Binary Gate,Binary Gate每次只有一个元素是1,其他全是0,这样在训练时候就不用去更新0对应的模型操作参数和架构参数,每次的前向推理和后向传播只在少数几条路径上进行。这种方法让网络架构就算是在大数据集上搭建大模型也能进行搜索训练。

ProxylessNAS的搜索方法也和DARTS相似,是交替进行的。搜索的步骤为:

  1. 训练模型参数时,将架构参数固定住,两个Node之间用Binary Gate选择其中一个operation进行训练,如图1-(1)所示;
  2. 训练架构参数时,固定住模型参数,重新选取Binary Gate(同步骤1)进行架构参数训练,如图1-(2)所示。

除了以精度为目标外,ProxylessNAS还支持硬件latency作为约束条件的优化搜索。其中一种方法是对各种操作的latency进行建模,并把整个模型的latency加入Loss公式中,共同在搜索步骤中优化。

L o s s = L o s s C E + λ 1 ∥ w ∥ 2 2 + λ 2 E [ l a t e n c y ] Loss=Loss_{CE}+\lambda_{1}\|w\|_{2}^{2}+\lambda_{2} E[latency] Loss=LossCE+λ1w22+λ2E[latency]

Loss公式中的最后一项即为latency的建模及其在Loss中的权重。

还有一种方法是采用RL的方法,这里就不再赘述,有兴趣的读者自行阅读文章。

作者同样在Cifar-10和ImageNet上做实验。Cifar-10上以PyramidNet为backbone进行改造, s t a g e = 3 stage=3 stage=3 b l o c k = 18 block=18 block=18 e d g e = 12 edge=12 edge=12(对应NASNet的operation空间),最后一个block的输出通道为400。ImageNet上以MobileNet V2为backbone,对MBConv的操作增加了几种卷积核和ratios作为operation的搜索空间。最终实验结果如下两图所示。

图2. ProxylessNAS在Cifar-10上的实验性能
ProxylessNAS论文和算法解析_第2张图片

图3. ProxylessNAS在ImageNet上的实验性能
ProxylessNAS论文和算法解析_第3张图片

在Cifar-10上ProxylessNAS比同等参数量的其他NAS方法精度更高,甚至比一些更大参数量的方法都要好。在ImageNet上,ProxylessNAS也超越了其他的NAS方法,同时具有更少的latency。

你可能感兴趣的:(AutoML,Deep,Learning)