• 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

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

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

  • 相关阅读:
    《必须知道的.net》读后感 转
    Web Service
    设计模式
    对做“互联网产品”的一些想法
    四大发明之活字印刷——面向对象思想的胜利
    每个IT人都应当拥有的30条技能
    面向对象的本质是什么?
    数据库设计规范 zhuan
    翻动100万级的数据 —— 只需几十毫秒 转
    程序员发展十分重要的12条日常习惯
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/14812450.html
Copyright © 2020-2023  润新知