SMASH方法使用辅助网络生成次优权重来支持网络的快速测试,从结果来看,生成的权重与正常训练的权重在准确率上存在关联性,整体搜索速度很快,仅需要单卡进行搜索,提供了一个很好的新思路。



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

论文: SMASH: One-Shot Model Architecture Search through HyperNetworks

Introduction


  常规的网络设计需要耗费大量的时间进行验证,为了节约验证时间,论文提出训练一个辅助网络HyperNet,用于动态生成不同结构模型的权重。尽管使用这些生成权重的性能不如常规学习到的权重,但在训练初期,使用生成权重的不同网络的相对性能可以在一定程度上映射出其最优状态时的相对性能。因此,论文提出one-shot模型结构搜索SMASH(one-Shot Model Architecture Search through Hypernetworks),结合辅助网络生成的权重,可以仅使用一轮训练来对大量的结构进行排序。

One-Shot Model Architecture Search through HyperNetworks


  SMASH的逻辑如算法1,核心是通过辅助网络HyperNet根据不同的网络结构生成对应的权重,然后根据验证集表现进行排序:

  • 首先训练辅助网络HyperNet,在每个训练阶段,随机采样一个网络,然后使用HyperNet生成权重,end-to-end地对其进行完整的反向训练。
  • 在训练好HyperNet后,随机采样大量的网络结构,使用HyperNet生成的权重,然后在测试集上验证性能。
  • 选择性能最好的结构进行最终的训练测试。

  SMASH包含两个核心部分:

  • 如何生成网络结构。论文采用基于存储体(memory bank)的前向网络,能够生成复杂且多分支的拓扑结构,并且能够使用二进制向量进行编码。
  • 如何根据网络结构生成权重。训练一个辅助网络HyperNet,直接学习二进制结构编码到权重空间的映射。

  论文认为,只要HyperNet学习到如何生成有效的权重,那么在验证集上,使用生成权重的网络的准确率会和正常训练的网络的准确率产生关联,此时,网络的结构将会变成影响验证集准确率的主要因子。

Defining Variable Network Configurations

  为了能够生成多种的网络结构并且方便编码输入HyperNet,论文采用存储体(memory-bank)的方式进行网络表示,将网络视为一系列初始为0的存储体,每层的操作视为对存储体的读写。对于单分支网络,网络包含一个大的存储体,每次操作都覆盖存储体的内容(对ResNet是相加),对于DenseNet的多分枝网络,则读取所有前面的存储体,然后将结果写入空的存储体,而对于FractalNet,则构造更为复杂。

  SMASH的基础模型包含多个block,如图2(b),每个block包含多个特定分辨率的存储体,前后block间的存储体分辨率为1/2倍,通过\(1\times 1\)卷积加平均池化进行下采样,\(1\times 1\)卷积和全连接输出层的权重是学习来的,不是生成的。

  在采样网络时,每个block中的存储体个数以及每个存储体的channel数都是随机的,而block中的层则随机选择读写模式以及处理数据的op操作。当读入多个存储体时,在channel维度对存储体的tensor进行concat,而写入时则将结果与每个存储体中的tensor相加。在实验中,层仅允许读取所属的block的存储体。

  op操作包含用于降维\(1\times 1\)卷积、多个常规卷积和非线性激活,如图2(a),每次随机选择4个卷积中一个激活,包括其卷积核大小,输出channel等超参也是随机的,\(1\times 1\)卷积的输出channel数与op的输出channel数成一定比例,比例也是随机选取的,特别说明:

  • \(1\times 1\)卷积的权重由HyperNet生成,其它卷积则通过正常训练获得(算法1的first loop)。
  • 为了保证可变的深度,每个block仅学习4个卷积,并且在block的op操作中共享其权值。限制最大卷积核大小以及最大输出channel数,假设选择的op操作的参数小于最大值,则将权重裁剪至目标大小。
  • 下采样卷积和输出层同样基于输入的channel数对权重进行裁剪。

  在设计时,为了让网络更多地采用HyperNet产生的权重,仅在下采样层中以及输出层之前使用BatchNorm,主要由于很难通过生成的方式产生这种运行时统计的结果。为了弥补这一举措,使用WeightNorm的改进版,将生成的\(1\times 1\)卷积核除以其欧几里得范数进行正则化(不是单独正则化各channel),这对SMASH十分有效,仅带来些许的性能下降。

Learning to map architectures to weights

  Hypernet采用全卷积网络,这样输出的\(W\)可以根据输入\(c\)的大小改变而改变,输入\(c\)为4维tensor(BCHW),batch size为1,这样输出就不会存在完全独立性。输出\(W\)的每个channel都对应\(c\)的一个子集,而权重\(W\)对应op操作的信息都embedding在\(c\)的channel中。

  假设op读取1,2,4存储体然后写入2,4存储体,则输入\(c\)的1、2和4 channel会填入1,代表输入的存储体,而6、8 channel也会填入1,代表输出的存储体,剩余的channel用于描述op的其它超参数,比如膨胀值(dilation),输入\(c\)的width方向是对op操作的输出channel数的编码。

  基于以上的Hypernet结构,naïve的实现要求输入\(c\)的大小和\(W\)的大小一致或者使用上采样来产生更多的输出,但这样效果不好。论文使用channel-based的权重压缩方法,不仅能够减小\(c\)的大小,还能保持HyperNet的表达能力。简单讲就是将输入\(c\)的分辨率设定为\(W\)的大小进行\(1/k\),HyperNet的输出channel设定为\(k\),最后将结果reshape成\(W\)的大小,具体可以看看论文的附录B。

Experiments


Testing the SMASH correlation

  对比SMASH生成权重的网络与正常训练的网络的准确率,证明SMASH生成的权重可以快速地比较相对准确率。

Benchmarking

CONCLUSION


  SMASH方法使用辅助网络生成次优权重来支持网络的快速测试,从结果来看,生成的权重与正常训练的权重在准确率上存在关联性,整体搜索速度很快,仅需要单卡进行搜索,提供了一个很好的新思路。





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

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

SMASH:经典One-Shot神经网络搜索,仅需单卡 | ICLR 2018的更多相关文章

  1. CARS: 华为提出基于进化算法和权值共享的神经网络结构搜索,CIFAR-10上仅需单卡半天 | CVPR 2020

    为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture searc ...

  2. NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018

    论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...

  3. [转].NET程序破解仅需三步

    近期开发公司商城,为了简化开发用了V5Shop网店程序.本来预计一个月完工,哪知道出现一堆问题大大增加了我的工作量(早知道还不如全部自己写了). 破V5Shop真不地道,说是免费的,结果程序一大堆问题 ...

  4. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

  5. 【专题教程第8期】基于emWin模拟器的USB BULK上位机开发,仅需C即可,简单易实现

    说明:1.如果你会emWin话的,就可以轻松制作上位机.做些通信和控制类上位机,比使用C#之类的方便程度一点不差,而且你仅会C语言就可以.2.并且成功将emWin人性化,可以做些Windows系统上的 ...

  6. [Android] Robotium手机自动化测试(仅需apk安装包版)——环境搭建 【转】

    Robotium的手机自动化测试,很多都是利用app源代码里的Id定义来开发自动化脚本.而在我开始要为项目中的app写自动化测试脚本的时 候,开发的环境还很不稳定,app也还处于开发的状态中,而且,在 ...

  7. 学会使用DNSPod,仅需三步

    学会使用DNSPod,仅需三步   第一步:在DNSPod添加记录 1.访问 https://www.dnspod.cn网站,在DNSPod官网首页的右上角,有[注册],如下图所示,点击[注册]按钮 ...

  8. tomcat部署应用仅需ip和port访问

    一.使用ip和port访问应用项目: 打开tomcat安装根目录,打开conf目录下server.xml,找到<Host>节点,并且在该节点下新增: <Context   docBa ...

  9. 仅需几行代码 轻松实现ETH代币空投

    仅需几行代码 轻松实现ETH代币空投 批量发送以太坊,部署下面的合约,然后往下面的合约打币,就可以分发 ragma solidity ^0.4.21; contract batchTransfer { ...

  10. 《转载》仅需3分钟,你就能明白Kafka的工作原理

    仅需3分钟,你就能明白Kafka的工作原理 周末无聊刷着手机,某宝网 App 突然蹦出来一条消息“为了回馈老客户,女朋友买一送一,活动仅限今天!”. 买一送一还有这种好事,那我可不能错过!忍不住立马点 ...

随机推荐

  1. Swoole从入门到入土(23)——多进程[进程池Process\Pool]

    Swoole提供的进程池为Process\Pool,基于 Swoole\Server 的 Manager 管理进程模块实现.可管理多个工作进程.该模块的核心功能为进程管理,相比 Process 实现多 ...

  2. java.lang.System快速指南

    1.介绍 在本教程中,我们将快速了解java.lang.System类及其特性和核心功能. 2.IO 系统类是java.lang的一部分,它的一个主要特性是让我们能够访问标准的I/O流. 简单地说,它 ...

  3. 启动MySQL5.7服务无法启动或Table 'mysql.plugin' doesn't exist

    首先说一下我这个是mysql5.7.16免安装版,不过这个问题对于5.7版本应该都适用. 问题重现: 安装过程也说一下吧: 1.将下载的压缩文件解压到指定目录,     我的是:E:\program\ ...

  4. 《系列一》-- 4、xml配置文件解析之[默认]命名空间[标签]的解析

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  5. Hexo - 搭建个人博客的bug集合

    按照很多视频教程进行操作,发现到hexo d这一步后,无法部署到github远端. 目前的解决方法: npm un hexo-deployer-git npm i hexojs/hexo-deploy ...

  6. [BUUCTF][Web][极客大挑战 2019]LoveSQL 1

    打开靶机url,页面显示有两个输入框,框中输入123',发现两个框都有sql注入问题 爆出一下错误 You have an error in your SQL syntax; check the ma ...

  7. linux服务器界面初始--day01

    linux服务器界面初始 ip add show 查看服务器网卡信息还可以使用ifconfig 局域网ip: 192.168.1.0 10.0.0.0 172.16.1.0 如果网卡没有启用,我们需要 ...

  8. SpringCloud Ribbon和Feign 的使用和源码分析

    1. Ribbon 介绍 Ribbon 是 Netflix 公司开源的一款 客户端 负载均衡软件,并被SpringCloud集成 作为SpringCloud 负载均衡的工具 服务端负载均衡 : 即在服 ...

  9. Android的BLE广播数据包解析---Android系列, 蓝牙技术(含BLE)

    一.引言 理解和分析这个数据包结构(这里面也涉及广播间隔时间的设置,设备广播数据间隔设置长了,会影响设备被发现的效率:设置短时,又响应功耗). 我们所说的BLE设备,其实是有区分有两种角色 Centr ...

  10. 使用Kubernetes搭建带有ik分词的Elasticsearch集群

    创建好带有Ik分词的es镜像,并上传到镜像仓库中,创建镜像可参考链接中的文档 https://www.cnblogs.com/hi-lijq/p/16895206.html 编写es_cluster- ...