fbnetv3中的predictor

FBNetV3提出了一种两阶段的搜索算法,包括粗粒度和细粒度搜索,以解决网络结构和超参数的联合优化问题。在粗粒度搜索中,通过预训练的predictor预测网络性能,然后在有限计算资源下进行迭代优化。早停机制用于减少不必要的评估。在细粒度搜索中,对第一代搜索结果进行变异并重新预测。实验表明,这种方法能够在保持精度的同时减少参数数量。作者在ImageNet上进行了实验,验证了方法的有效性。
摘要由CSDN通过智能技术生成

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

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

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

在R语言predictor(预测变量)常常用于建立和应用统计模型。在建立模型时,我们使用predictor来描述可能影响结果变量的变量或因素。 具体来说,在R语言,我们可以将各种类型的预测变量(包括数值型、分类型等)作为输入,并使用相应的统计方法和模型来预测结果变量。预测变量可以是单个变量,也可以是多个变量的组合。 对于线性回归模型,predictor通常是数值型自变量,例如年龄、收入等,用于预测数值型依赖变量,如销售量、房价等。通过拟合线性回归模型,我们可以基于predictor的值来预测结果变量的值。 对于分类问题的逻辑回归模型,predictor可以是数值型或分类型变量。例如,我们可以使用性别、年龄、学历等变量作为predictor,来预测一个人是否购买某个产品。逻辑回归模型通过估计predictor与结果变量之间的关系,从而预测结果的概率。 除了线性回归和逻辑回归,R语言还有其他许多统计模型可用于预测。例如,决策树、随机森林和支持向量机等模型都可以用predictor来预测结果变量。 在使用predictor进行预测时,我们首先需要拟合模型,然后使用模型的predict函数并提供predictor的值,来预测结果变量的值。通过这种方式,我们可以基于历史数据的观察值和predictor的值,对未来的结果进行预测。 总而言之,R语言predictor主要用于描述可能影响结果变量的变量或因素,并通过各种统计模型来进行预测。这为我们提供了建立和应用模型的强大工具,用于解决各种实际问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值