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



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

论文: 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\times 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

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

  • 采样一个非原始层$\ell\ge2$作为目标层
  • 在目标层采样一个模版$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)}\ne none$
  • 修改存在的边:$o_k^{(\ell -1)}\ne none$,$o_{k{'}}{(\ell -1)}\ne none$,$o_k^{(\ell -1)}\ne o_{k{'}}{(\ell -1)}$
  • 删除存在的边:$o_k^{(\ell -1)}\ne 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\times 3$分离卷积,用于升维和降低分辨率,最后一个cell后面接$c$维度和$stride=1$的$3\times 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\times 1$的卷积来降维。对于用于对比的不分层的搜索方法,则使用11个节点的计算图。从图3来看,论文提出的方法在收敛速度、准确率和参数量上都不错

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

Architecture Evaluation on CIFAR-10 and ImageNet

CONCLUSION


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

APPENDIX A





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

最新文章

  1. exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb
  2. java基础学习05(面向对象基础01--类实例分析)
  3. SRM 595 DIV2 1000
  4. Android 基础
  5. JQuery 插件FlexiGrid 之完全配置与使用
  6. linux c 多线程编程
  7. Part 2 How are the URL's mapped to Controller Action Methods?
  8. android:在ViewPager中使用Button
  9. Java中的static、final关键字
  10. MVC5中使用Log4Net
  11. re模块正则表达式
  12. log4j2 自定义配置文件,java载入
  13. linux安装目录
  14. win7下安装Office2010老是出现提示安装MSXML6.10.1129.0,下载官方MSXML后提示安装成功却也安装不了
  15. Python的方法和语法解释
  16. 窗体Form的FormStyle属性设置为fsStayOnTop时属性设置不起作用问题探讨。
  17. PHP自带调试函数
  18. Lambda多表联合
  19. Mysql分区表及自动创建分区Partition
  20. sqlite3使用简介

热门文章

  1. Spring boot Sample 002之spring-boot-banner
  2. python数据类型 列表+元组
  3. 【HBase】HBase架构中各种组件的作用
  4. 微信小程序单选按钮radio选中的值value的获取方法,setTimeout定时器的用法
  5. JavaScript (一) js的介绍及基本语法变量
  6. ASP.NET MVC 数据传递进阶 从数据库拿到数据后的三种方式
  7. Java实现 蓝桥杯 算法训练 Beaver's Calculator
  8. Java实现 LeetCode 526 优美的排列(DFS)
  9. Java实现 LeetCode 48 旋转图像
  10. java实现 洛谷 P1425 小鱼的游泳时间