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

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

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

论文: Hierarchical Representations for Efficient Architecture Search

Introduction


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

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

Architecture Representations


Flat Architecture Representation

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

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

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

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

Hierarchical Architecture Representation

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

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

Primitive Operations

  低层的原操作共六种( ℓ = 1 \ell=1 =1, M t = 6 M_t=6 Mt=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 C C。另外每层都有 n o n e none none操作,代表节点 i i i和节点 j j j之间没有连接

Evolutionary Architecture Search


Mutation

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

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

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

  • 添加边: o k ( ℓ − 1 ) = n o n e o_k^{(\ell -1)}=none ok(1)=none o k ′ ( ℓ − 1 ) ≠ n o n e o_{k^{'}}^{(\ell -1)}\ne none ok(1)=none
  • 修改存在的边: o k ( ℓ − 1 ) ≠ n o n e o_k^{(\ell -1)}\ne none ok(1)=none o k ′ ( ℓ − 1 ) ≠ n o n e o_{k^{'}}^{(\ell -1)}\ne none ok(1)=none o k ( ℓ − 1 ) ≠ o k ′ ( ℓ − 1 ) o_k^{(\ell -1)}\ne o_{k^{'}}^{(\ell -1)} ok(1)=ok(1)
  • 删除存在的边: o k ( ℓ − 1 ) ≠ n o n e o_k^{(\ell -1)}\ne none ok(1)=none o k ′ ( ℓ − 1 ) = n o n e o_{k^{'}}^{(\ell -1)}= none ok(1)=none

Initialization

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

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

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

Search Algorithms

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

Implementation

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

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

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

Experiments and Results


Experimental Setup

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

Architecture Search on CIFAR-10

  200卡,初始种群为200,层级 L = 3 L=3 L=3,每层模版的操作分别为 M 1 = 6 M_1=6 M1=6 M 2 = 6 M_2=6 M2=6 M 3 = 1 M_3=1 M3=1,每层( ℓ ≥ 2 \ell \ge2 2)的节点图分别为 ∣ G ( 2 ) ∣ = 4 |G^{(2)}|=4 G(2)=4 ∣ G ( 3 ) ∣ = 5 |G^{(3)}|=5 G(3)=5,层2的模版跟一个跟模版输入维度一样 1 × 1 1\times 1 1×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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值