这是我在海康威视研究院实习的工作,被AAAI-2020接收为Spotlight。


论文地址:http://xxx.itp.ac.cn/pdf/2002.12580v1

引子

上一个阶段的网络结构搜索(NAS)研究,主要在两个方面。1)各类搜索方法,从强化学习、进化算法等到梯度下降;2)各类网络结构或者配置,从各种算子到通道数,“万物皆可搜”。近期的NAS研究热点主要在探究高效、快速的NAS。搜索方法方面,现在比较时髦的是one-shot方法,处在发展阶段,也存在一些问题。one-shot方法将多个subnet并联在一个supernet里面,大概而论,并联在supernet中的subnet越多,one-shot方法将会更慢,对于搜索结构也会有随机性。很多人质疑,各种搜索方法都是在一个人为事先优选的「子搜索空间」基础上进行的。在这种人为优选子搜索空间中,所包含的各结构之间效果分布较为集中,上下限差距不大或者极端的结构分布很少,也就是说,这是一个效果接近于最优的「次优子结构空间」。那问题在于,NAS作为AutoML的一个重要部分,是要对之前一些需要人的经验或试错的工作进行自动化处理的,自动寻找这个「次优子结构空间」也是NAS的应有之义。我们进行NAS,首要的是承认了各种结构是不平等的。不平等自然是最直白的一种关系。上一阶段的NAS工作大多在搜索方法和不同任务空间上钻研,现在,是时候注意一下,在一个任务上,整个结构搜索空间中各个结构之间是否具有一定的关系呢?我们知道这个世界是普遍联系的,同理,网络搜索空间,也是由结构以及结构之间的关系构成的。如果我们掌握了结构之间关系,就可以有先见之明,从而达到NAS加速效果。这是一个问题。各种网络结构或者配置方面,在之前的工作中,有算子选择、通道数搜索,然而对层数搜索的NAS工作是不够完善的。我们知道,one-shot方法中supernet是并联的,但是层是串联的,现在如何得到一个one-shot的层数搜索框架呢?这也是一个问题。这篇文章中,我们可以找到以上两个问题,即网络结构关系和卷积神经网络层数搜索的答案。

工作

首先问题的定义,layer assignment search,可以泛泛理解成层数搜索。详细来说,这里的层指的是一个单元,比如resnett的bottleneck,plane net的conv-bn-relu等;还有,CNN中,一般用下采样(stride conv/pooling)划分阶段,每一个阶段会堆叠若干层,比如resnet,四个阶段,各阶段层数为3,4,6,3,每一个层就是一定的算力。

不同layer assignment的ResNet-50

值得说明的一点,以上不同layer assignment的ResNet50是具有相同FLOPs的。可以计算验证。实际项目中,尤其在边缘设备算力限制情况下,如果不能用ResNet50,就需要确定一个阶段里分配几层算力,这就是layer assignment search 问题。这里面包含了两个意思,第一,就是总层数,第二,就是给定层数下各层的分配。然后回答到一个问题:整个结构搜索空间中各个结构之间是否具有一定的关系呢?答案是有的,就是,后面一层的最好层分配结构继承自前一层的最好层分配结构。由浅至深。层层下去,去除了网络空间的冗余。示意图如下:


将这种关系命名为Neural Inheritance Relation(NIR)。将这个关系作为先验,构建一个one-shot搜索框架,当然是针对层数搜索的,即是Neural Inheritance Relation Guided One-Shot Layer Assignment Search 。


如上图所示,层数搜索的one-shot框架。一个包含了诸多层的supernet首先被构建出来,每次采样,在每个阶段要从浅到深的进行,将采样得到的各阶段layer连接起来,就是一个 candidate subnet。采样从浅层开始,举个例子,图中有两个下采样,划分起三个阶段。那么第0次采样是1-1-1的层分配,第一次采样全部的candidate只要三个:1-1-2,1-2-1,2-1-1。每个采样得到的subnet将会被公平的进行若干次训练,评估出最好结构,标记为optimal-1。这个时候运用NIR,第2次只采样与optimal-1有继承关系的下一层subnet,依然只有三个。事实上每一次采样数等于阶段数。算法步骤如下:


算法的加速效果,首先从理论上来讲,一个阶段(group)数为n,层(layer)数为m的CNN,穷尽所有,层数搜索的搜索空间具体大小如下层数搜索的搜索空间复杂度为 ,我们这种NIR神经网络结构关系引导的搜索,实际搜索空间复杂度为 ,为搜索踩了一脚油门。本文在CIFAR-100上搭建了层数搜索数据集,在Tiny-ImageNet, ImageNet上进行了实验。


具体的详情请见paper:https://arxiv.org/abs/2002.12580我们将层数搜索单独摘出来,更加存粹的探究神经网络结构之间的关系,并希望网络结构关系的思路,可以给NAS社区带来一些insight,进一步得到更加通用的高效NAS方案。作者:知乎-孟让地址:https://www.zhihu.com/people/mengrang

历史文章推荐

  • 你的毕业论文过了吗?《如何撰写毕业论文?》

  • 卡尔曼滤波系列——经典卡尔曼滤波推导

  • 谈谈CNN中的位置和尺度问题

  • 目标检测和感受野的总结和想法

  • 一代传奇 SIFT 算法 专利到期!

  • CNN真的需要下采样(上采样)吗?

  • 人体姿态估计的过去,现在,未来

  • 2018-2019年度 Top10 综述

  • 【Awesome】Few-Shot Learning论文阅读列表

  • 你有哪些deep learning(rnn、cnn)调参的经验?

  • 给研究新生的建议,光看论文是学不好的,一定要看书,看书,看书!

  • 不是我们喜新厌旧,而是RAdam确实是好用,新的State of the Art优化器RAdam

  • 机器学习中的评价指标

  • CVPR2019 |《胶囊网络(Capsule Networks)综述》,附93页PPT下载

你正在看吗?

resnet50网络结构_AAAI2020 | 利用网络结构关系加速NAS+Layer相关推荐

  1. 局域网网络风暴检测工具_二层网络结构和三层网络结构的对比

    在网络结构中,有二层网络和三层网络两种选择. 在这里的二层.三层是按照逻辑拓扑结构进行的分类,并不是说ISO七层模型中的数据链路层和网络层,而是指核心层,汇聚层和接入层,这三层都部署的就是三层网络结构 ...

  2. python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...

    原标题:如何利用并发性加速你的python程序(二):I/O 绑定程序加速 雷锋网 AI 科技评论按,本文是工程师 Jim Anderson 分享的关于「通过并发性加快 python 程序的速度」的文 ...

  3. 利用数据缓存加速文件备份

    利用数据缓存加速文件备份 更新时间:2020-01-14 14:11:07 编辑我的收藏 本页目录 背景信息 前提条件 操作步骤 示例 混合云备份本地文件备份客户端已经默认为您开启了利用数据缓存加速文 ...

  4. 闲置台式机+文件服务器,卖不出闲置台式机再利用之我的nas!

    卖不出闲置台式机再利用之我的nas! 2021-05-11 13:41:21 6点赞 13收藏 9评论 [写作说明]:很久没在大妈这里投稿了,这个是一篇水文,既不是教你怎么配置硬件nas,也不是教你怎 ...

  5. 利用KODI轻松开启NAS分享视频方式

    铁威马TOS系统多平台兼容,多协议支持如FTP/AFP/SMB/WebDAV/NFS等等,内网外网访问方式多样化,家庭日常影音视听享受也得到了最大化的便捷度.举个简单例子,在电视盒子或手机端安装KOD ...

  6. 利用树莓派搭建家庭NAS简要

    利用树莓派搭建家庭NAS简要 家庭NAS是用OMV来实现的,目前有两种装法,一种是直接刷ovm4Pi 系统,一种是先安装raspbian(树莓派的debian系统),再安装omv .本文记录的是用第二 ...

  7. NBT封面文章:水稻根系微生物组与氮肥利用效率关系(端午水稻专题)

    文章目录 中科院遗传发育所揭示籼粳稻根系微生物组与氮肥利用效率关系 评论 Reference 作者简介 白洋 储成才 张婧赢 刘永鑫 张娜 猜你喜欢 写在后面 今天端午节,祝大家节日快乐! 大家每年端 ...

  8. GitHub静态资源访问很慢,利用jsDelivr来加速它!

    GitHub静态资源访问很慢,利用jsDelivr来加速它! 前言 由于各种因素,站长对GitHub的速度十分不满意.使用国内对象储存需要收费和备案,对非盈利性站点简直是雪上加霜.所以推荐jsDeli ...

  9. 如何利用并发性加速你的python程序(二):I/O 绑定程序加速

    雷锋网 AI 科技评论按,本文是工程师 Jim Anderson 分享的关于「通过并发性加快 python 程序的速度」的文章的第二部分,主要内容是 I/O 绑定程序加速相关. 在上一篇中,我们已经讲 ...

最新文章

  1. 如何 判断 设备 是否 连接 上 了 wifi
  2. java 操作txt文件
  3. layui遍历json数组_shell脚本:json格式化与字段抓取(下)
  4. 如何在C++中动态建立二维数组
  5. 今天刚学的idea的debug打断点,Ctrl+u进入Evaluate Expression界面,调试程序事半功倍!
  6. 智能判断图片中是否存在某物体_智能家居组件漫谈——人体传感器
  7. android 获取apk的版本信息
  8. 控制台怎么查看错误的详细信息_Java 程序该怎么优化?命令篇
  9. 统计字符串中某个字出现的次数
  10. 【Java】IntegerCache的妙用和陷阱
  11. 碰撞与鲜血:人类与自动驾驶的坎坷摩擦
  12. 运行Java应用必须通过main()方法吗?
  13. 运算放大器分析----虚短和虚断简单计算
  14. 6 个主流 AI 聊天机器人平台
  15. 基于min-max搜索和alpha-beta(α-β)剪枝的五子棋的c语言实现(带简单禁手)
  16. 大疆DJI2019届秋季招聘笔试:机器学习算法工程师
  17. 工作总结以及学习总结和整理的链接
  18. 红茶保质期一年半,我都放了五年了,打开还有茶味,能喝吗?
  19. 在虚拟机里配置mysql环境
  20. MySQL数据库——初识MySQL

热门文章

  1. 第二阶段个人工作总结08
  2. APL开发日志--2013-01-17
  3. Unity.Interception System (2.0)
  4. 折弯弹性计算公式_冲压模具:影响回弹因素、回弹计算公式计算,值得收藏
  5. python中的画布背景设置_教你用python画图—Turtle详细教程
  6. halocn标定找旋转中心_机器人工具坐标系标定原理
  7. python文件读写方法手机_python读取文件—txt文件常用读写操作
  8. maven 公共模块依赖_Maven 子模块 依赖 springboot 子模块的问题
  9. python .py文件变为.so文件进行加密
  10. 一文读懂类加载机制 --- ClassLoader