zoukankan      html  css  js  c++  java
  • 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

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

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

  • 相关阅读:
    [SSRS] Use Enum values in filter expressions Dynamics 365 Finance and Operation
    Power shell deploy all SSRS report d365 FO
    display method in Dynamics 365 FO
    How To Debug Dynamics 365 Finance and Operation
    Computed columns and virtual fields in data entities Dynamics 365
    Azure DevOps for Power Platform Build Pipeline
    Create readonly entities that expose financial dimensions Dynamics 365
    Dataentity call stack dynamics 365
    Dynamics 365 FO extension
    Use singletenant servertoserver authentication PowerApps
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/14812450.html
Copyright © 2011-2022 走看看