• 基于层级表达的高效网络搜索方法 | ICLR 2018


    论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构。论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习

    来源:【晓飞的算法工程笔记】 公众号

    论文: Hierarchical Representations for Efficient Architecture Search

    Introduction


      由于网络的验证需要耗费很长的时间,神经网络结构搜索计算量非常巨大,很多研究通过降低搜索空间的复杂度来提高搜索的效率。论文通过加入分层网络结构来约束搜索空间,在最初几层仅使用卷积和池化等简单操作,逐步到高层将底层的block进行组合搭建,最后将最高层的block堆叠成最终的网络。由于搜索空间设计够好,网络的搜索方法仅用进化算法或随机搜索足以。
      论文总结如下:

    • 提出对神经网络结构的层级表达
    • 通过实验证明搜索空间的设计十分重要,可以降低搜索方法的投入,甚至随机搜索也可以
    • 提出可扩展的进化搜索方法,对比其它进化搜索方法有更好的结果

    Architecture Representations


    Flat Architecture Representation

      将神经网络结构定义为单输入、单输出的计算图,图中每个节点代表特征图,每条有向边为基本操作(卷积、池化等),所以网络的表达$(G,o)$包含两部分:

    1. 一个有效的操作集合$o={o_1,o_2,...}$
    2. 一个邻接矩阵$G$,用以指定操作的神经网络图,$G_{ij}=k$为节点$i$和节点$j$间的操作为$o_k$

      将操作集$o$和邻接矩阵$G$组合起来就得到网络的结构

      每个节点$i$的特征图$x_i$由其前面的节点$j$通过公式2计算而得,$|G|$是图中节点数量,$merge$将多个特征图合并成一个的操作,这里直接使用depthwise concatentation,由于element-wise addition要求维度一致,比较不灵活,而且如果融合特征后接的是$1 imes 1$卷积,这就其实类似于做concatienation

    Hierarchical Architecture Representation

      层级结构表达的关键是找到不同的层级的模版,在构建高层模版时使用低层的模版作为积木(operation)进行构建

      对于$L$层的层级关系,$ell$层包含$M_{ell}$个模版,最高层$ell=L$仅包含一个模版,对应完整的网络,最低层$ell=1$是元操作集,定义$o_m{(ell)}$为$ell$层的第$m$个模版,为低层模版$o{(ell)}={o_1^{(ell -1)},o_2^{(ell -1)},...,o_1^{(ell - 1)}}$根据公式3的组合。最终的层级结构表达为$({{G_m{(ell)}}_{m=1}M}_{ell=2}L,o{(1)})$,由每层的模版的网络结构关系和最底层操作定义,如图1

    Primitive Operations

      低层的原操作共六种($ell=1$,$M_t=6$):

    • 1 × 1 convolution of C channels
    • 3 × 3 depthwise convolution
    • 3 × 3 separable convolution of C channels
    • 3 × 3 max-pooling
    • 3 × 3 average-pooling
    • identity

      使用时,所有元操作为stride=1,以及进行padded来保留分辨率,卷积后都接BN+ReLU,维度固定为$C$。另外每层都有$none$操作,代表节点$i$和节点$j$之间没有连接

    Evolutionary Architecture Search


    Mutation

      分层基因的变异包含以下步骤:

    • 采样一个非原始层$ellge2$作为目标层
    • 在目标层采样一个模版$m$作为目标模版
    • 在目标模版中采样一个后继节点$i$
    • 在目标模版中采样一个前置节点$j$
    • 随机替换当前操作$o_k^{(ell -1)}$为其它操作$o_{k{'}}{(ell -1)}$

      对于当前层级只有两层的,第一步直接将$ell$设为2,变异可总结为公式4,$ell$,$m$,$i$,$j$,$k^{'}$从各自区域的均匀分布中随机抽样得到,上面的突变足够对模版产生3种修改:

    • 添加边:$o_k^{(ell -1)}=none$,$o_{k{'}}{(ell -1)} e none$
    • 修改存在的边:$o_k^{(ell -1)} e none$,$o_{k{'}}{(ell -1)} e none$,$o_k^{(ell -1)} e o_{k{'}}{(ell -1)}$
    • 删除存在的边:$o_k^{(ell -1)} e none$,$o_{k{'}}{(ell -1)}= none$

    Initialization

      基因指代完整的网络,基因的种群初始化包含两个步骤:

    1. 建立一个不重要的基因,每个模版都使用identity进行连接
    2. 对基因进行大批量的随机变异来多样化

      对比以前的研究使用常见的网络进行基因初始化,这样的初始化不仅能很好地覆盖不常见的网络的搜索空间,还能去除人工初始化带来的传统偏向

    Search Algorithms

      论文的进化算法基于锦标赛选择(tournament selection),首先对初始化的种群网络进行训练和测试得到分数,然后从种群中随机获取5%的基因,表现最好的基因进行突变得到新网络,在训练和测试后放入种群中,重复进行上述选取与放回,种群数量不断增大,最终取种群表现最好的基因
      论文也使用随机搜索进行实验,基因种群随机生成,然后进行训练和验证,选取最好的模型,这种方法的主要好处在于能整个种群并行化计算,减少搜索时间

    Implementation

      论文使用异步分布式进行实现,包含一个controller和多个worker,分别负责基因的进化和测试,两者共享一个内存表格$mathcal{M}$,记录基因及其准确率(fitness),还有一个数据队列$mathcal{Q}$,包含待测试的基因

      当有worker空余时,controller使用锦标赛选择从$mathcal{M}$中选择一个基因进行突变,然后放到队列$mathcal{Q}$中等待测试

      worker从$mathcal{Q}$中拿到待测试的基因,测试后放到$mathcal{M}$中,训练是从头开始训练的,没有使用权值共享加速

    Experiments and Results


    Experimental Setup

      在实验中,没有对整体网络进行搜索,而是使用提出的方法进行卷积单元(cell)的搜索,这样能够在小网络上快速进行网络测试然后迁移到较大的网络。具体的各结构如图2,每个cell后面接$2c$维度和$stride=2$的$3 imes 3$分离卷积,用于升维和降低分辨率,最后一个cell后面接$c$维度和$stride=1$的$3 imes 3$分离卷积

    Architecture Search on CIFAR-10

      200卡,初始种群为200,层级$L=3$,每层模版的操作分别为$M_1=6$,$M_2=6$和$M_3=1$,每层($ell ge2$)的节点图分别为$|G{(2)}|=4$和$|G{(3)}|=5$,层2的模版跟一个跟模版输入维度一样$1 imes 1$的卷积来降维。对于用于对比的不分层的搜索方法,则使用11个节点的计算图。从图3来看,论文提出的方法在收敛速度、准确率和参数量上都不错

      为了进一步展示论文方法的效果,对图3中间的结果的每轮增量进行了可视化。在P100 GPU上,每个网络的测试需要花费1小时,进化共7000轮,200张卡共需要1.5天

    Architecture Evaluation on CIFAR-10 and ImageNet

    CONCLUSION


      论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构。论文的搜索方法简单,从实验结果看来,200张卡共需要1.5天,达到很不错的准确率,值得学习

    APPENDIX A



    如果本文对你有帮助,麻烦点个赞或在看呗~
    更多内容请关注 微信公众号【晓飞的算法工程笔记】

    work-life balance.

  • 相关阅读:
    布隆过滤器(Bloom Filter) 未完待续
    [面试]future模式
    R语言入门(2)-数据对象
    R语言入门(1)-初识R语言
    [面试] Java GC (未整理完)
    [面试]StringBuilder StringBuffer源码粘贴(并非源码分析, 请绕道)
    [面试]synchronized
    [面试]volatile类型修饰符/内存屏障/处理器缓存
    [面试]死锁-最简单的死锁demo
    [面试]Actor模型
  • 原文地址:https://www.cnblogs.com/VincentLee/p/13187338.html
Copyright © 2020-2023  润新知