zoukankan      html  css  js  c++  java
  • 【ProxylessNAS】2019-ICLR-ProxylessNAS Direct Neural Architecture Search on Target Task and Hardware-论文阅读

    ProxylessNAS

    2019-ICLR-ProxylessNAS Direct Neural Architecture Search on Target Task and Hardware

    来源:ChenBong 博客园


    Introduction

    ProxylessNAS 可以直接在大数据集(ImageNet)上搜索,搜索代价(200个epochs)跟普通训练(120个epochs)是同一 level 的。

    ProxylessNAS 的在 CIFAR-10 和 ImageNet 上都是 SOTA (under latency constraints <= 80s)。

    在DARTS框架上改的。


    Motivation

    由于 NAS 的计算代价过高,之前工作都需要依赖 proxy 来做。

    PS: 常见的 proxy

    1. 先在小数据集(CIFAR)上搜索,然后迁移到大数据集(imagenet)。
    2. 先搜索一个比较浅的网络,然后重复堆叠同样的结构单元来得到更深的网络。
    3. 只训练少量 epoch (e.g. 5 epoch),然后就 validate。

    image-20200718164603036

    • 无需 proxy 的 NAS

    • 针对特定硬件:一个有意思的点是,大家往往为 general CNN 定制硬件(GPU,TPU),却没有人反过来为硬件定制 specific CNN。


    Contribution

    image-20200718164344522

    • 只要训练一个网络,GPU Hours 方面的消耗就不再是问题
    • 在搜索时仅有一条路径处于激活状态。这样一来 GPU 显存就从 O(N) 降到了 O(1)
    • 直接搜索整个Net,并不需要堆叠cell来实现
    • search for hardware。主要考虑的硬件指标是延迟 latency。第一个探讨为不同平台自动定制 CNN 结构的研究。

    Method

    Search Space

    Denote a neural network as (N(e, ... , e_n)) where (e_i) represents a certain edge in the directed acyclic graph (DAG).

    网络N表示为DAG(有向无环图): (N(e_1, ... , e_n)) ,其中 (e_i) 表示DAG的某条边,节点代表feature map,边 (e_i) 代表计算操作,每条边都有一组输入的feature map和一组输出的feature map,因此一条边可以看作一个类似block的结构,只不过这个block只有一个输入和一个输出(其他文章中典型的block 一般有2个输入,1个输出)。

    本文中DAG的 edge:

    image-20200718170714321

    其他文章中的blcok:

    image-20200718170629344

    Let (O = {o_i}) be the set of N candidate primitive operations (e.g. convolution, pooling, identity, zero, etc).

    候选操作的集合 (O = {o_i}) ,集合中有N个元素


    To construct the over-parameterized network that includes any architecture in the search space, instead of setting each edge to be a definite primitive operation, we set each edge to be a mixed operation that has N parallel paths (Figure 2), denoted as (m_O).

    DAG中的每条边代表一个混合操作,记为 (m_O) ,每条边可以看做一个block,其中有多条路径


    As such, the over-parameterized network can be expressed as (N(e_1 = m^1_ O, ... , e_n = m^n_O)) .

    例如一个过度参数化的网络可以表示为 (N(e_1 = m^1_ O, ... , e_n = m^n_O))


    Given input x, the output of a mixed operation (m_O) is defined based on the outputs of its N paths.

    在一个edge(blcok)内部,给定 input x,输出 (m_O) 是由N条路径的输出来定义的。

    image-20200718170714321


    In One-Shot, (m_O(x)) is the sum of ({o_i(x)}), while in DARTS, (m_O(x)) is weighted sum of ({o_i(x)}) where the weights are calculated by applying softmax to N real-valued architecture parameters ({α_i}) :

    (m_{mathcal{O}}^{ ext {One-Shot }}(x)=sum_{i=1}^{N} o_{i}(x))

    (m_{mathcal{O}}^{mathrm{DARTS}}(x)=sum_{i=1}^{N} p_{i} o_{i}(x)=sum_{i=1}^{N} frac{exp left(alpha_{i} ight)}{sum_{j} exp left(alpha_{j} ight)} o_{i}(x))

    在one-shot中,是将多条路径的输出直接求和;在DARTS中是将多条路径的输出按“结构参数的权重”求和。


    As shown in Eq. (1), the output feature maps of all N paths are calculated and stored in the memory, while training a compact model only involves one path.

    Therefore, One-Shot and DARTS roughly need N times GPU memory and GPU hours compared to training a compact model.

    因此要同时存储N(op个数)条路径的结果,最终只会保留一条路径,因此需要(训练一个compact model)N倍的显存和N倍的计算时间。


    image-20200718172535086


    Specifically, rather than repeating the same mobile inverted bottleneck convolution (MBConv), we allow a set of MBConv layers with various kernel sizes {3, 5, 7} and expansion ratios {3, 6}.

    实际上的op set是{MB3/6 Conv3×3 / 5×5 / 7×7},共2*3=6种op。

    MB3/6 指的是MobileNet V2中block的expansion ratios分别为3和6

    image-20200718193036452


    如何直接搜索整个Net?

    论文引入了Gate的概念,门在op的后面,控制路线的通断,而门的选取概率和它的结构参数有关

    (g=operatorname{binarize}left(p_{1}, cdots, p_{N} ight)=left{egin{array}{cl}{[1,0, cdots, 0]} & ext { with probability } p_{1} \ cdots & \ {[0,0, cdots, 1]} & ext { with probability } p_{N}end{array} ight.) ,其中 (p_{i}=frac{exp left(alpha_{i} ight)}{sum_{k} exp left(alpha_{k} ight)})

    每条路径对应一个结构参数 (α_i ∈ R) (图中写作α,β...),N条路径的结构参数作softmax,得到N个概率 (p_i ∈ R) ,按照这组概率进行抽样,得到一组gate向量g=[1, 0, ..., 0]

    DARTS是将多个路径的输出按“结构参数”的权重求和。

    而ProxylessNAS是将“结构参数”转化为概率分布,按照概率分布抽一条路径计算路径输出,作为该block的输出。

    因此ProxylessNAS 一次只需要计算一条路径,而DARTS/one-shot 一次需要计算N条路径,因此所需要的显存/计算量为原来的1/N。


    梯度回传?

    由于这种采样机制不会显示的包含他的结构参数(而DARTs是包含的,所以他可以直接用求导进行梯度回传),所以他在这里门的选取概率才会与结构参数相关联,这样在求导的时候才可以隐式的回传回去。

    在这里ProxylessNAS用之前的BinaryConnect的梯度回传处理方法。其实在这里,你可以认为他们把binaryConnect之前在CNN内部的操作,放大到对Network PATH上,实际上一些操作也是从CNN的内部结构中借鉴过来的,比如,DropPATH 对应 DropOut。

    &&最后一步求导过程?

    image-20200718174256996

    其中 (δ_{ij}=1) if (i=j) and (δ_{ij}=0) if (i≠j).

    这样看起来就可以进行求导了,但是每次对一个操作进行求导仍然需要对剩余其他的操作求偏导。计算量还是不小,作者提出了一个想法来解决这个问题,选择一个网络一定是因为它比其他的网络更优秀。作者只采样两条路径,然后对两条路径进行梯度回传。

    && 增强/衰减?

    这样,在每个更新步骤中,一个采样路径被增强(路径权重增加),另一个采样路径被衰减(路径权重减小),而所有其他路径保持不变。

    在某种意义上,网络会偏向于采样结构参数大的网路,意味着这些网络也更容易得到训练。类比就是,穷人越来越穷,富人越来越富,然后最终的网络选取最富的那一条。如果只选取一条路径,这样没办法在比较中差异化网络,选取两条应该是在计算消耗以及精确度之间的一个Trade-off.


    详细的训练过程。

    step1: 初始化各项参数(网络参数指CNN的卷积参数,结构参数指各个op的选择系数)
    step2: 固定结构参数,与此同时对路径随机采样(每个edge采样2条路径),然后训练网络参数。
    step3: 固定网络参数,按照上述的方法来采样两条路径,对结构参数进行更新。
    循环2,3直到网络收敛或迭代固定次数,出现差异化大的网络,在每一步选取结构参数最大的op


    加入硬件延时约束-可微的方法

    图中F(·)代表latency预测函数, α,β,σ等为结构参数

    image-20200718175321941

    image-20200718175402478


    加入硬件延时约束-强化学习方法

    &&

    image-20200718175655612


    Experiments

    cifar10

    image-20200718175736439

    在 CIFAR-10,ProxylessNAS 达到了新的 the state-of-the-art 2.08%。而且值得一提的是,对比之前的最好模型 AmoebaNet,我们模型仅用了 1/6 的参数就达到了更好的性能(5.7M v.s. 34.9M)。


    ImageNet

    image-20200718175754199

    在 ImageNet 上,ProxylessNAS 在维持同等的 latency 的前提下,TOP-1准确率提升了 2.6%。此外,在各个 width setting下,我们的模型始终大幅优于 MobilenetV2:为了达到 74.6% 的精度,MobilenetV2 需要 143ms的 inference time,而我们模型仅需要 78ms(1.83x 倍)。与 MnasNet 相比,我们所消耗的搜索资源要得多 (1/200),但模型却在提升 0.6% Top-1 的略微提升了速度。在 target GPU 时,ProxylessNAS 更是到了 75.1% 的 accuracy,且运行速度比 Mobilenet 快 20%


    image-20200718175830314


    image-20200718175845816


    Hardware

    下图展示了三个硬件平台上搜索到的 CNN 结构:GPU / CPU / Mobile。

    总的来说,GPU 模型短而宽CPU / Mobile 长而瘦,feature map downsample 时大家都喜欢 larger kernel / more channels 更多的操作。希望这个能给之后设计高效 CNN 带来一些灵感。

    GPU延时和深度关系较强,和宽度关系较弱,因此短而宽。

    image-20200718193036452


    同时我们观察到一些有趣现象:针对GPU优化的模型在CPU和移动端上运行速度并不快,反之亦然。之前将一种 CNN deploy 到多个平台上的做法并不是最优的。

    image-20200718191205671


    Conclusion


    Summary

    • 搜索空间的op很少,只限制在MobileNet V2的6种block里进行搜索,搜索空间越小,搜索越快
    • latency 预测函数F(·),应该是用查表的方法
    • Dropout => Drop Path,权重二值化=>路径二值化

    Reference

    ProxylessNAS论文笔记: https://licharyuan.github.io/2019/04/17/ProxylessNAS论文笔记/

    作者知乎回答:https://www.zhihu.com/question/296404213/answer/547163236

    ProxylessNAS:http://www.fenggangliu.top/2020/04/10/ProxylessNAS/

    【论文阅读】—— MobileNetV2, Inverted Residuals and Linear Bottlenecks:http://vincentho.name/2018/12/11/【论文阅读】——-MobileNetV2-Inverted-Residuals-and-Linear-Bottlenecks/

  • 相关阅读:
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十一)
    install ubuntu on Android mobile phone
    Mac OS, Mac OSX 与Darwin
    About darwin OS
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十)
    Linux下编译安装qemu和libvirt
    libvirt(virsh命令总结)
    深入浅出 kvm qemu libvirt
    自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (八)
  • 原文地址:https://www.cnblogs.com/chenbong/p/13337587.html
Copyright © 2011-2022 走看看