fbnetv3中的predictor

fbnetv3中的predictor

作者想做的是网络超参和网络结构的联合搜索,并且定义了如下的网络结构的候选值以及超参的候选值

image

给定搜索空间\(\Omega\),以及计算资源\(C\),超参和网络搜索的目标如下:

image

并且作者在正文中说到:

The search space \(\Omega\) is typically combinatorially large, making exhaustive evaluation an impossibility. To address this complexity, we design a two-stage search algorithm: (1) coarse-grained search, followed by (2) fine-grained search, as shown in Algorithm 1. We explain the details below

作者定义了两个搜索方式,一个是粗粒度的搜索,一个是细粒度的搜索。

粗粒度搜索(Constrained Iterative Optimization)

image

作者定义了一个predictor,如上图,这个predictor,由一个encoder和两个head组成

  1. 第一个head是proxy head,这个head用来预训练encoder(如上图),从网络结构表示(architecture representations)中预测网络的统计参数,比如flops和params。网络结构表示(architecture representations)用一系列的one-hot的类别变量和整数范围变量表示。

  2. 第二个head是accuracy predictor,它同时接受网络训练的超参(training recipes)和网络结构表示(architecture representation),并且在受限的iterative optimization上进行finetune

step1:预训练embedding layer

作者pre-train embedding layer,作者随意的产生一系列的网络结构,然后根据这个网络结构来预测网络的flops和params,之所以不直接统计就是因为作者想用这种数据来预训练embedding layer,一种后期用于更加精细网络精度预测方法。之后作者transfer pretrained embedding layer来初始化acc predictor。通过实验发现,这样能够提升预测的精度和可靠性(flops和params是可以统计出来的,所以精度比较高,acc可能并不是那么好统计)

image

step2:constrained iterative optimization

作者在搜索空间中采用quasi monte carlo 采样来产生一系列的arch-recipe构成一个采样池。然后作者迭代的构建网络索取函数,具体的步骤如下

  1. 根据预测的精度(已经训练好的了?),作者先选取一个比较好的candidates
  2. 训练和评估candidates(这里的意思是根据arc-hyper来在数据上训练,之后评估candidate精度如何?)
  3. 然后优化predictor(根据上面的acc来评估这个arch-hyper pair精度如何?)

上述这种迭代的shriking candidate space的方法可以避免不必要的评估和改善exploration的效率。

对于上述方法我有个问题

以及作者得到的ACC是在数据集合上的ACC吗?如果是的话,如何在给定recipe-arch pair的基础上来得到该网络和超参在数据集上的精度呢?是对于这个pool里面的sample都进行了完整的训练吗?根据作者的算法描述应该是的

早停机制

在constrained iterative optimization第一次迭代的时候,作者通过早停机制和最终的acc来rank sample;然后计算rank correlation,来找到一个合适的epoch使得其correlation超过某个阈值。找到这个阈值之后,作者对所有的\((A, h)\)都训练相同的epoch。这样可以减小迭代次数

image

predictor training

作者先固定pretrained的embedding,然后train predictor 50个epoch,然后entire model再train 50 epoch。用huber loss作为loss。

细粒度搜索

上述的arch-recipe pair是第一代(first generation)产生的结果。接下来作者对其进行变异,然后根据之前训练的predictor \(u\) 来重新预测这个选出来的一系列的children \(C\) 得到分数 \(s\)。作者计算每一代的最高分数的增益,当改善饱和的时候作者停止迭代产生新种群。

notice:

作者说acc predictor可以在不同的资源的限制下搜索网络。并且这个acc可以很快的对candidate进行评估,JointNAS需要fine-grained search,并且几乎不需要计算代价。

整体而言,作者的pipeline如下

image

搜索空间

作者定义的搜索空间包括hyper和arch。如上面的表格所示。总的来讲,网络结构搜索空间有\(10^{17}\),超参搜索空间包含\(10^7\)

实验中,autotrain,只搜索超参。joint search,则超参和网络结构一起搜。

实验

作者在imagenet上做实验,随机选取200类来减少训练时间。然后从trainset随机保留1w张作为val set。

作者的sample pool有20k,在iterative optimization阶段,batch size和iteration分别为48和4。sample candidates训练150个epoch。

获取candidates的精度,不是已经有搜索到的lr的超参?如果是第二阶段变异的话,又为何涉及到超参数?

作者首先假设网络结构固定的话,搜索超参看一下表现如何

image

smple pool有2.5w个samples。

精度如下

image

比如最后一行,达到相同的精度用更少的参数。

并且作者发现,不同的模型需要不同的超参,置换两个模型搜到的超参会极大的掉点。

posted on 2021-05-26 14:11  YongjieShi  阅读(126)  评论(0编辑  收藏  举报

导航