当前位置: 首页 > 编程日记 > 正文

单v100 GPU,4小时搜索到一个鲁棒的网络结构

640?wx_fmt=jpeg


作者 | Slumbers,毕业于中山大学,深度学习工程师,主要方向是目标检测,语义分割,GAN

责编 | Jane


NAS最近也很火,正好看到了这篇论文,解读一下,这篇论文是基于DAG(directed acyclic graph)的,DAG包含了上亿的 sub-graphs, 为了防止全部遍历这些模型,这篇论文设计了一种全新的采样器,这种采样器叫做Gradient-based search suing differential Architecture Sampler(GDAS),该采样器可以自行学习和优化,在这个的基础上,在CIFAR-10上通过4 GPU hours就能找到一个最优的网络结构。


640?wx_fmt=png


目前主流的NAS一般是基于进化算法(EA)和强化学习(RL)来做的。EA通过权衡validation accuracy来决定是否需要移除一个模型,RL则是validation accuracy作为奖励来优化模型生成。作者认为这两种方法都很消耗计算资源。作者这篇论文中设计的GDAS方法可以在一个单v100 GPU上,用四小时搜索到一个优秀模型。


GDAS


这个采用了搜索robust neural cell来替代搜索整个网络。如下图,不同的操作(操作用箭头表示)会计算出不同的中间结果(中间结果用cycle表示),前面的中间结果会加起来闯到后面。


640?wx_fmt=jpeg


在优化速度上,传统的DAG存在一些问题:基于RL和EA的方法,需要获得反馈都需要很长一段时间。而这篇论文提出的GDAS方法能够利用梯度下降去做优化,具体怎么梯的下面会说到。此外,使用GDAS的方法可以sample出sub-graph,这意味着计算量要比DAG的方法小很多。


绝大多数的NAS方法可以归为两类:Macro search和micro search


Macro search


顾名思义,实际上算法的目的是想要发现一个完整的网络结构。因此多会采用强化学习的方式。现有的方法很多都是使用Q-learning的方法来学习的。那么会存在的问题是,需要搜索的网络数量会呈指数级增长。最后导致的结果就是网络会更浅。


Micro Search


这种不是搜索整个神经网络,而是搜索neural cells的方式。找到指定的neural cells后,再去堆叠。这种设计方式虽然能够设计更深的网络,但是依旧要消耗很长时间,比如100GPU days,超长。这篇文章就是在消耗上面做优化。

算法原理


DAG的搜索空间


前面也说了DAG是通过搜索所谓的neural cell而不是搜索整个网络。每个cell由多个节点和节点间的激活函数构成。节点我们用 640?wx_fmt=svg来表示,节点的计算如下图。每个节点有其余两个节点(下面公式中的节点i和节点j)来生成,而中间会从一个函数集合 640?wx_fmt=svg中去sample函数出来, 这个F数据集的组成是1)恒等映射 2)归零 3)3x3 depthwise分离卷积 4)3x3 dilated depthwise 分离卷积 5)5x5 depthwise分离卷积 6)5x5 dilated depthwise 分离卷积。7)3x3平均池化 8) 3 x 3 最大池化。


640?wx_fmt=svg


那么生成节点I后,再去生成对应的cell。我们将cell的节点数记为B,以B=4为例,该cell实际上会包括7个节点, 640?wx_fmt=svg是前面两层的cell的输出(实际上也就是上面公式中的k和j),而 640?wx_fmt=svg则是我们(1)中计算出来的结果。 640?wx_fmt=svg也就是该cell的output tensor实际上是 640?wx_fmt=svg四个节点的output的联结。


将cell组装为网络


刚刚上面的这种叫做normal cell,作者还设计了一个reduction cell, 用于下采样。这个reduction cell就是手动设计的了,没有像normal cell那样复杂。normal cell 的步长为1,reduction cell步长为2, 最后的网络实际上就是由这些cell组装起来的。如下图:


640?wx_fmt=jpeg


搜索模型参数


搭建的工作如上面所示,好像也还好,就像搭积木,这篇论文我觉得创新的地方在于它的搜索方法,特别是通过梯度下降的方式来更新参数,很棒。具体的搜索参数环节,它是这么做的:


首先我们的优化目标和手工设计的网络别无二致,都是最大释然估计:


640?wx_fmt=svg


而上式中的Pr,实际上可写成:


640?wx_fmt=svg


这个 640?wx_fmt=svg实际上是node i和node j的函数分布,k则是F的基数。而Node可以表示为:


640?wx_fmt=svg


640?wx_fmt=svg是从 640?wx_fmt=svg中sample出来的,而


640?wx_fmt=svg


这个 640?wx_fmt=svg实际上是node i和node j的函数分布,k则是F的基数。而Node可以表示为:


640?wx_fmt=svg


其中 640?wx_fmt=svg是从离散分布 640?wx_fmt=svg中间sample出来的函数。这里问题来了,如果直接去优化Pr,这里由于I是来自于一个离散分布,没法对离散分布使用梯度下降方法。这里,作者使用了Gumbel-Max trick来解决离散分布中采样不可微的问题,具体可以看这个问题下的回答


如何理解Gumbel-Max trick? 

TL;DR: Gumbel Trick 是一种从离散分布取样的方法,它的形式可以允许我们定义一种可微分的,离散分布的近似取样,这种取样方式不像「干脆以各类概率值的概率向量替代取样」这么粗糙,也不像直接取样一样不可导(因此没办法应对可能的 bp )。


于是这里将这个离散分布不可微的问题做了转移,同时对应的优化目标变为:


640?wx_fmt=svg


这里有个 640?wx_fmt=svg的参数,可以控制 640?wx_fmt=svg的相似程度。注意在前向传播中我们使用的是等式(5), 而在反向传播中,使用的是等式(7)。结合以上内容,我们模型的loss是:


640?wx_fmt=svg


我们将最后学习到的网络结构称为A,每一个节点由前面T个节点连接而来,在CNN中,我们把T设为2, 在RNN中,T设为1


在参数上,作者使用了SGD,学习率从0.025逐渐降到1e-3,使用的是cosine schedule。具体的参数和function F 设计上,可以去看看原论文。


总的来说,我觉得这篇论文最大的创新点是使用Gumbel-Max trick来使得搜索过程可微分,当然它中间也使用了一些手动设计的模块(如reduction cell),所以速度会比其余的NAS更快,之前我也没有接触过NAS, 看完这篇论文后对现在的NAS常用的方法以及未来NAS发展的趋势还是有了更深的理解,推荐看看原文。


原文地址:

https://zhuanlan.zhihu.com/p/71907399


(*本文仅代表作者观点,转载请联系作者)


公开课推荐


AutoML 这两年已经成为业内研究与应用的重点。本期公开课,我们将邀请第四范式资深算法科学家为大家讲解 AutoML 技术发展史、解读核心与主流方法、分享技术工程实践案例,为开发者在学习、研究与应用道路上答疑解惑!


640?wx_fmt=png

推荐阅读

  • 阿里达摩院做AI这两年

  • 如何用爬虫技术帮助孩子秒到心仪的幼儿园(基础篇)

  • Python三十年技术演变史

  • 知识体系、算法题、教程、面经,这是一份超赞的AI资源列表

  • GitHub 第一!这位 60 后程序员火了!

  • 特朗普要解禁华为?美七家科技公司联合要求恢复供货

  • Erlang 二十年,如何在编程语言中占据一席之地?

  • 如今区块链在企业级应用中的尴尬, 只因没看懂这4大主链2大场景……

  • 云计算将会让数据中心消失?


640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

关于pyecharts 地图显示添加数据的问题

echarts : 香港地区显示(人口密集的人口数目) http://echarts.baidu.com/examples/editor.html?cmap-HK series: [ { name: 香港18区人口密度, type: map, mapType: HK …

MMX Intrinsics各函数介绍

SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #…

大数据中台向AI中台演进是大势所趋?

来源 | 宜信技术学院&#xff08;ID:CE_TECH&#xff09;导读&#xff1a;自从阿里巴巴提出“中台”的概念之后&#xff0c;这个词汇就成为各领域企业关注的焦点&#xff0c;很多人在考虑建设自己的中台。然而&#xff0c;构建中台是否真有必要&#xff1f;是否所有的企业都要建…

WordPress标签

1、分类目录调用函数&#xff1a; <?php wp_list_cats();?> 2、调用页面函数&#xff1a; <?php wp_nav_menu( array( theme_location > ast-menu-primary, container > false ) ); ?> 3、转载于:https://blog.51cto.com/okowo/…

SSE3和SSSE3 Intrinsics各函数介绍

SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #…

kubernetes学习笔记之十三:基于calico的网络策略入门

一、.安装calico [rootk8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml clusterrole.rbac.authorization.k8s.io "calico" created clusterrole.rbac.authorization.k8s.i…

设计模式之抽象工厂模式(Abstract Factory)摘录

面向对象系统的分析和设计实际上追求的就是两点&#xff1a;高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factor…

grub设置密码的方法

grub设置密码的方法&#xff1a;一、grub设置明文口令的方法&#xff1a;修改/etc/grub.conf配置文件就可以了.[root RedHat ~] # vi /etc/grub.conf #注&#xff1a;此为链接文件&#xff0c;指向 /boot/grub/grub.conf#boot/dev/hdbdefault0timeout5splashimage(hd0,0)/gr…

web服务器(IIS)的操作步骤

转载于:https://blog.51cto.com/14118520/2335646

微软全球AI总监:Azure AI是OpenAI技术商业化变现唯一、排他性合作方

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;7 月 24 日下午&#xff0c;微软在北京举行了媒体交流会。会上&#xff0c;微软全球副总裁&#xff0c;人工智能平台负责人 Eric Boyd 介绍了 Azure AI 近期的最新进展情况&#xff0c;并带…

NYOJ_16_矩形嵌套

有点小坑的严格单调递增序列&#xff0c;主要是排序那里坑了一下。 思路&#xff1a;矩形的嵌套&#xff1f; (a<c&&b<d)||(a<d&&b<c)? 不&#xff0c;只要在建点时保证a<b&#xff0c;条件就会少一个&#xff0c;直接a<c&&b<…

抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

作者 | James Vincent等编译 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;在过去的一年中&#xff0c;AI 生成书面文字的能力大大提高。通过扫描庞大的文本数据集&#xff0c;机器学习软件可以生成从短篇小说到歌词的各种令人信服的样本。…

JS 总结之事件循环

众所周知&#xff0c;JavaScript 为了避免复杂&#xff0c;被设计成了单线程。 ⛅️ 任务 单线程意味着所有任务都需要按顺序执行&#xff0c;如果某个任务执行非常耗时&#xff0c;线程就会被阻断&#xff0c;后面的任务需要等上一个任务执行完毕才会进行。而大多数非常耗时的…

设计模式之工厂方法模式(Factory Method)摘录

23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factory(抽象工厂模式)&#xff1b;3、Singleton(单例模式)&#xff1b;4、Builder(建造者模式)&#xff1b…

SpanBERT:提出基于分词的预训练模型,多项任务性能超越现有模型!

作者 | Mandar Joshi, Danqi Chen, Yinhan Liu, Daniel S. Weld, Luke Zettlemoyer, Omer Levy译者 | Rachel责编 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】本文提出了一个新的模型预训练方法 SpanBERT &#xff0c;该方法能够更好地表示和预测…

XP与Windows 7(Win7)等操作系统Ghost备份

XP与Windows 7&#xff08;Win7&#xff09;等操作系统Ghost备份 2013年5月5日 前提&#xff1a;备份还原win7的话&#xff0c;此种Ghost备份方法只针对没有100MB保留分区的win7安装方式。去掉100MB的方法可以参考《Windows7&#xff08;win7&#xff09;系统重装与破解》&…

SSE4.1和SSE4.2 Intrinsics各函数介绍

SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #…

Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力

Nacos近期发布了0.7.0版本&#xff0c;该版本支持对接第三方CMDB获取CMDB数据、使用Selector机制来配置服务的路由类型、支持单机模式使用MySQL数据库、上线Node.js客户端&#xff0c;并修复了一些bug。对接CMDB实现就近访问在服务进行多机房或者多地域部署时&#xff0c;跨地域…

数十篇推荐系统论文被批无法复现:源码、数据集均缺失,性能难达预期

作者 | Maurizio Ferrari Dacrema译者 | 凯隐责编 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】来自意大利米兰理工大学的 Maurizio 团队近日发表了一篇极具批判性的文章&#xff0c;剑指推荐系统领域的其他数十篇论文&#xff0c;指出这些论文中基…

crontab 总结

2019独角兽企业重金招聘Python工程师标准>>> 1.写法 每三天执行一次&#xff1a;0 0 */3 * * root command&#xff0c;注意&#xff1a;* * */3 * * root command 这样写是不对的。其它每N小时执行一次也类似 &#xff08;后续补充&#xff09; 转载于:https://…

ubuntu安装thrift

ubuntu环境下安装thrift-0.10.0 1.解压 2.编译安装 ./configure -with-cpp -with-boost -without-python -without-csharp -with-java -without-erlang -without-perl -with-php -without-php_extension -without-ruby -without-haskell -without-go make sudo make install3.是…

AES(Advanced Encryption Standard) Intrinsics各函数介绍

AES为高级加密标准&#xff0c;是较流行的一种密码算法。 SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #…

轻松应对Java试题,这是一份大数据分析工程师面试指南

作者 | HappyMint转载自大数据与人工智能&#xff08;ai-big-data&#xff09;导语&#xff1a;经过这一段时间与读者的互动与沟通&#xff0c;本文作者发现很多小伙伴会咨询面试相关的问题&#xff0c;特别是即将毕业的小伙伴&#xff0c;所以决定输出一系列面试相关的文章。本…

【Elasticsearch 5.6.12 源码】——【3】启动过程分析(下)...

版权声明&#xff1a;本文为博主原创&#xff0c;转载请注明出处&#xff01;简介 本文主要解决以下问题&#xff1a; 1、ES启动过程中的Node对象都初始化了那些服务&#xff1f;构造流程 Step 1、创建一个List暂存初始化失败时需要释放的资源&#xff0c;并使用临时的Logger对…

C++中的封装、继承、多态

封装(encapsulation)&#xff1a;就是将抽象得到的数据和行为(或功能)相结合&#xff0c;形成一个有机的整体&#xff0c;也就是将数据与操作数据的源代码进行有机的结合&#xff0c;形成”类”&#xff0c;其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程&…

比尔盖茨护犊子 称iPad让大批用户沮丧

为什么80%的码农都做不了架构师&#xff1f;>>> 在5月6日接受美国CNBC电视台访问时&#xff0c;微软前任掌门人比尔盖茨维护了自家反响不那么好的Surface系列平板电脑&#xff0c;同时他还不忘吐槽了一把iPad。 当 谈到日渐颓败的PC市场时&#xff0c;盖茨称平板电…

小心陷阱:二维动态内存的不连续性

void new_test() {int** pp;pp new int*[10];for(int i0; i<10; i){pp[i] new int[10];}//pp[0], pp[1], ... , pp[9]在内存中连续;//a1 pp[0][0], pp[0][1], ... , pp[0][9]在内存中也是连续的;//a2 pp[1][0], pp[1][1], ... , pp[1][9]在内存中也是连续的;//...//a9 …

超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图

作者 | Saikat Basu等译者 | 陆离责编 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;导读&#xff1a;现如今&#xff0c;即使可以借助卫星图像和绘制软件&#xff0c;创建精确的道路图也依然是一个费时费力的人力加工过程。许多地区&#xff0c;特别是在发…

npm包发布记录

下雪了&#xff0c;在家闲着&#xff0c;不如写一个npm 包发布。简单的 npm 包的发布网上有很多教程&#xff0c;我就不记录了。这里记录下&#xff0c;一个复杂的 npm 包发布&#xff0c;复杂指的构建环境复杂。 整个工程使用 rollup 来构建&#xff0c;其中会引进 babel 来转…

设计模式之单例模式(Singleton)摘录

23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factory(抽象工厂模式)&#xff1b;3、Singleton(单例模式)&#xff1b;4、Builder(建造者模式)&#xff1…