基于层级表达的高效网络搜索方法 | ICLR 2018
论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构。论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习
来源:【晓飞的算法工程笔记】 公众号
论文: Hierarchical Representations for Efficient Architecture Search

Introduction
由于网络的验证需要耗费很长的时间,神经网络结构搜索计算量非常巨大,很多研究通过降低搜索空间的复杂度来提高搜索的效率。论文通过加入分层网络结构来约束搜索空间,在最初几层仅使用卷积和池化等简单操作,逐步到高层将底层的block进行组合搭建,最后将最高层的block堆叠成最终的网络。由于搜索空间设计够好,网络的搜索方法仅用进化算法或随机搜索足以。
论文总结如下:
- 提出对神经网络结构的层级表达
- 通过实验证明搜索空间的设计十分重要,可以降低搜索方法的投入,甚至随机搜索也可以
- 提出可扩展的进化搜索方法,对比其它进化搜索方法有更好的结果
Architecture Representations
Flat Architecture Representation
将神经网络结构定义为单输入、单输出的计算图,图中每个节点代表特征图,每条有向边为基本操作(卷积、池化等),所以网络的表达$(G,o)$包含两部分:
- 一个有效的操作集合$o={o_1,o_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
基因指代完整的网络,基因的种群初始化包含两个步骤:
- 建立一个不重要的基因,每个模版都使用identity进行连接
- 对基因进行大批量的随机变异来多样化
对比以前的研究使用常见的网络进行基因初始化,这样的初始化不仅能很好地覆盖不常见的网络的搜索空间,还能去除人工初始化带来的传统偏向
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


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

基于层级表达的高效网络搜索方法 | ICLR 2018的更多相关文章
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- 自动网络搜索(NAS)在语义分割上的应用(二)
前言: 本文将介绍如何基于ProxylessNAS搜索semantic segmentation模型,最终搜索得到的模型结构可在CPU上达到36 fps的测试结果,展示自动网络搜索(NAS)在语义分割 ...
- 2013 ACM网络搜索与数据挖掘国际会议
ACM网络搜索与数据挖掘国际会议" title="2013 ACM网络搜索与数据挖掘国际会议"> 编者按:ACM网络搜索与数据挖掘国际会议(6th ACM Conf ...
- 自动网络搜索(NAS)在语义分割上的应用(一)
[摘要]本文简单介绍了NAS的发展现况和在语义分割中的应用,并且详细解读了两篇流行的work:DARTS和Auto-DeepLab. 自动网络搜索 多数神经网络结构都是基于一些成熟的backbone, ...
- 基于Delphi的三层数据库系统的实现方法
基于Delphi的三层数据库系统的实现方法 1 引言 当前的数据库应用系统中,按其结构划分为两类,一类是两层结构的数据库应系统,另一类是多层结构的数据库应用系统. 两层结构的数据库应用系统包括客 ...
- 公布一个基于 Reactor 模式的 C++ 网络库
公布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...
- 基于CNN的人群密度图估计方法简述
人群计数的方法分为传统的视频和图像人群计数算法以及基于深度学习的人群计数算法,深度学习方法由于能够方便高效地提取高层特征而获得优越的性能是传统方法无法比拟的.本文简单了秒速了近几年,基于单张图像利用C ...
- 基于Solr和Zookeeper的分布式搜索方案的配置
1.1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...
- R-FCN:基于区域的全卷积网络来检测物体
http://blog.csdn.net/shadow_guo/article/details/51767036 原文标题为“R-FCN: Object Detection via Region-ba ...
随机推荐
- 前端 vue-cli+Webpack 项目开发环境配置、创建一个vue-demo
一.软件及命令: (1)下载node.js 最新的LTS 版本,下载 msi格式的(直接点击安装即可). (2)命令1:npm install cnpm -g 命令2:cnpm install web ...
- 大型可视化项目用什么工具好呢?——不如了解一下阿里云DataV尊享版
随着信息化的发展和进步,可视化大屏开始为社会各行业提供全面应用.目前越来越多的需求显示希望大屏能够更直观的还原出所要展示数据可视化的真实场景,让整个项目更立体.更有科技感,让项目在面对复杂操作时能灵活 ...
- 看板 | 漫话之减少WIP(在制品)
传统的流水线生产模式中,生产流程按生产程序进行划分,而各部分因动作的难度或复杂程度的差异导致用时不同. 例如:一个产品进行组装用时2分钟,完成装箱工作只需10秒.在这种情况下,组装动作用时长.产出慢, ...
- Java实现 蓝桥杯 算法提高 p1001
算法提高 P1001 时间限制:1.0s 内存限制:256.0MB 提交此题 当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说 ...
- Java实现N*N矩阵旋转(360度)
N*N矩阵旋转 Description 给你一个n*n的矩阵,你的任务是将它逆时针旋转角度d. [输入] 输入的第一个数为T,表示接下来有T组数据. 每组数据的格式如下: 第一行为两个整数n,d.1& ...
- java实现立方和等式
考虑方程式:a^3 + b^3 = c^3 + d^3 其中:"^"表示乘方.a.b.c.d是互不相同的小于30的正整数. 这个方程有很多解.比如: a = 1,b=12,c=9, ...
- Java实现第九届蓝桥杯倍数问题
倍数问题 题目描述 [题目描述] 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n ...
- 逐点分析,这样做Web端性能测试
前言: 71%用户希望在手机上打开网页能跟电脑一样快: 5秒钟被认为是用户能忍受的最长响应时间,如果响应时间超过5秒,50%的移动用户会放弃: 33%失望的用户会使用竞品替代: 用户尝试三次出现同样性 ...
- Python 在线免费批量美颜,妈妈再也不用担心我 P 图两小时啦
引言 首先我承认自己标题党了,我就想提升点阅读量我容易么我,前几天的篇纯技术文阅读量都扯着蛋了. 毕竟阅读量太低实在是没有写下去的动力,我只能用点小手段偶尔提升下阅读量. 这篇文章我转换下套路,先放结 ...
- 遇到Error:Execution failed for task ':app:transformClassesWithDexForDebug'的解决方案
原因:项目中包含了所有的google play service 解决:只需要使用必要的服务即可 将compile 'com.google.android.gms:play-services:8.1.0 ...