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

商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020

出品 | AI科技大本营(ID:rgznai100)

导读:在CVPR 2020上,商汤移动智能事业群-3DAR-身份认证与视频感知组提出了基于贪心超网络的One-Shot NAS方法,显著提升了超网络直接在大规模数据集上的搜索训练效率,并在标准ImageNet数据集上取得了300M FLOPs量级的SOTA。GreedyNAS论文通过提出一种贪心的超网络结构采样训练方法,改善了训练得到的超网络对结构的评估能力,进而帮助搜索算法得到精度更高的结构。

动机与背景

在目前的神经结构搜索领域中,One-Shot NAS方法由于其搜索开销小被广泛应用,这些方法使用一个权重共享的超网络(supernet)作为不同网络结构的性能评估器,因此,supernet的训练对搜索结果的好坏至关重要。然而,目前的方法一般采用了一个基本的假设,即supernet中每一个结构是同等重要的,supernet应该对每个结构进行准确评估或相对排序。然而,supernet中所包含的结构量级(搜索空间的size)是非常巨大的(如 7^{21} ),因此准确的评估对于supernet来说是非常困难的,导致supernet中结构的表现与其真实表现相关性很差 [1]。

在本篇论文中,我们提出一种贪心超网络来减轻supernet的评估压力,使得supernet更加贪心地注重于有潜力的好结构,而不是全体。具体而言,在supernet训练过程中,我们提出了一种多路径拒绝式采样方法(multi-path sampling with rejection)来进行路径滤波 (path filtering),使得有潜力的好结构得到训练。通过这种方法,supernet的训练从整个搜索空间贪心地缩小到了有潜力的结构组成的空间中,因此训练的效率得到了提升。同时,为了进一步增大有潜力结构的采样概率与提高训练效率,我们基于exploration and exploitation准则,使用一个经验池存储评估过的“好”结构,用来加强贪心度并为后续的搜索提供好的初始点。本论文搜索出的结构在ImageNet (mobile setting) 下取得了 SOTA(state-of-the-art) 的结果。


主要思路

巨大的搜索空间带来的评估压力使supernet难以准确地区分结构的好坏,由于所有结构的权重都是在supernet中高度共享的,如果一个差的结构被训练到了,好的结构的权重也会受到干扰。这样的干扰会削弱好网络的最终评估精度,影响网络的搜索结果。同时,对差的结构进行训练相当于对权重进行了没有必要的更新,降低supernet的训练效率。

多路径拒绝式采样

针对上述问题,一个直接的想法就是基于贪心策略,在训练过程中只训练好的结构。但很显然,我们并不知道一个随机初始化的搜索空间中哪些结构是好的。假设对于一个supernet,我们考虑其搜索空间A的一个完备划分,即:

搜索空间可以如上划分为好的空间与差的空间,且好空间中每一个结构的ACC均大于差空间,即

于是,一个理想的采样策略是直接在好空间中进行采样即可。然而根据上面的不等式,确定所有结构中哪些是来自好空间需要遍历整个搜索空间,计算开销是无法接受的。为了解决这个问题,我们首先考虑从全空间中进行的一个均匀采样,那么每个path来自好空间的概率为:

为了得到需要的来自于好空间的结构,我们进一步考虑一个多维的Bernoulli实验,那么有如下的结论:

我们取m = 10和m = 20,对定理1的概率进行绘制,如Figure 2所示,可见这种采样下得到来自好空间中的path的概率是很高的。

于是,我们可以对采样到的多个结构进行评估筛选的方法提升采样到“好”结构的概率,即每次采样m个结构,从中选取评估指标最高的k个结构进行训练。但是,对结构进行评估需要在验证集上计算其ACC,这样会增加非常多计算量(我们的ImageNet验证集大小为50k)。为了减少评估网络的消耗,我们从验证集中随机选取了一小部分(如1000张图)组成小验证集,并使用在小验证集上的loss作为结构的排序指标。使用小验证集进行评估,在保证评估准确性的前提下,相较uniform sampling方法只增加了很少的计算代价,详见论文实验部分。

基于exploration and exploitation策略的路径候选池

在前面提到的路径滤波中,我们通过评估可以区分出较好的结构,为了进一步提升训练效率,受蒙特卡洛树搜索(Monte Carlo tree search)[4] 和 deep Q-learning[5] 中常用的exploration and exploitation策略启发,我们提出使用一个路径候选池用于存放训练过程中评估过的“好”结构,并进行重复利用。具体而言,候选池可以看作是一个固定大小的有序队列,其只会存储所有评估过结构中得分前n(候选池大小) 的结构。

有了候选池的帮助,我们可以选择从搜索空间中或候选池中采样结构。从候选池中采样的结构是好结构的概率更高,但可能会牺牲结构的多样性。为了平衡exploration与exploitation,我们采用ϵ-采样策略,即以一定的概率从整个搜索空间A或候选池P中采样结构α:

在网络刚开始训练时评估过的结构较少,候选池中存储的结构是好结构的可信度不高,因此从候选池中采样的概率ϵ 在开始时设为0,并线性增加至一个较高的值(在实验中,我们发现0.8是一个较优的值)。若候选池中的结构都来自好空间,通过使用候选池,定理1中好网络的采样概率q提升为:

因此,采样10个结构,至少有5个好结构的概率由88.38%提升至99.36% 。

基于候选池的early stopping策略

候选池的更新为supernet的训练情况提供了一个很好的参考。若候选池发生的更新(顺序变换、进出)较少,可以认为超网络中较好的网络维持着一个相对稳定的排序,这也说明此时的supernet已经是一个较好的性能评估器,因此训练进程可以提前结束,而不需要训练至网络完全收敛。

在实际使用中,我们会比较当前候选池P与t轮迭代前的候选池P_t的差异度,若差异度低于某个数值(我们的实验使用0.08),训练停止。差异度的定义如下:

基于候选池的搜索策略

Supernet训练结束后,我们可以使用验证集的ACC评估结构的好坏。本文使用 NSGA-II 进化算法[3] 进行结构搜索。我们在进化算法中使用候选池中的结构进行population的初始化,相较于随机初始化,借助于候选池能够使进化算法有一个更好的初始,提升搜索效率及最终的精度。

如 Figure 3 所示,我们在同一个训练好的supernet上使用了随机初始化与候选池初始化两种方式进行搜索,使用候选池初始化搜索到的结构的准确率平均会比随机初始化要高。

实验结果

为了与目前的one-shot方法进行对比,我们首先在与 ProxylessNAS[6] 一样的 MobileNetV2 搜索空间上进行结构搜索,结果见 Table 1 。

同时为了进一步提升网络性能,我们在加入了SE的更大搜索空间上进行搜索,结果见 Table 2 。

Ablation Study

多路径拒绝式采样中的路径评估相关性

我们对随机初始化、uniform sampling、greedy方法训练得到的supernet下的小验证集指标与完整验证集ACC相关性进行了评估,如 Table 3 所示。可见在小验证集上使用loss相比ACC会得到更高的相关性,我们的贪心方法训练出的supernet有着更好的相关性。

我们对不同大小小验证集与完整验证集的相关性进行了评估(Figure 4 左图),同时对uniform-sampling算法在不同迭代轮数下的相关性作了评估(Figure 4 右图)。可以看出我们的算法在较小的验证集大小上仍能保持较高的相关性,在精度与效率的权衡下,我们最终选取 1000 作为小验证集大小。

对多路径贪心采样及候选池效果的评估

我们在MobileNetV2的search space下评估了多路径贪心采样及候选池的效果,如 Table 4 所示。

总结

超网络训练是单分支One-Shot NAS 方法的关键。与目前方法的对所有分支一视同仁不同,我们的方法贪心地注重于有潜力的好分支的训练。这种贪心地分支滤波可以通过我们提出的多分支采样策略被高效地实现。我们提出的 GreedyNAS 在准确率和训练效率上均展现出了显著的优势。

论⽂地址:

https://arxiv.org/abs/2003.11236

Reference

[1] Christian Sciuto, Kaicheng Yu, Martin Jaggi, Claudiu Musat, and Mathieu Salzmann. Evaluating the search phase of neural architecture search. arXiv preprint arXiv:1902.08142, 2019.

[2] Zichao Guo, Xiangyu Zhang, Haoyuan Mu, Wen Heng, Zechun Liu, Yichen Wei, and Jian Sun. Single path oneshot neural architecture search with uniform sampling. arXiv preprint arXiv:1904.00420, 2019.

[3] Kalyanmoy Deb, Amrit Pratap, Sameer Agarwal, and TAMT Meyarivan. A fast and elitist multiobjective genetic algorithm: Nsga-ii. IEEE transactions on evolutionary computation, 6(2):182–197, 2002.

[4] Levente Kocsis and Csaba Szepesv´ari. Bandit based montecarlo planning. In European conference on machine learning, pages 282–293. Springer, 2006.

[5] Volodymyr Mnih, Koray Kavukcuoglu, David Silver, Alex Graves, Ioannis Antonoglou, Daan Wierstra, and Martin Riedmiller. Playing atari with deep reinforcement learning. arXiv preprint arXiv:1312.5602, 2013.

[6] Han Cai, Ligeng Zhu, and Song Han. Proxylessnas: Direct neural architecture search on target task and hardware. arXiv preprint arXiv:1812.00332, 2018.


推荐阅读

  • 如何通过深度学习,完成计算机视觉中的所有工作?

  • 看似毫不相干,哲学与机器学习竟有如此大的交集

  • 黑客用上机器学习你慌不慌?这 7 种窃取数据的新手段快来认识一下

  • “谷歌杀手”发明者,科学天才 Wolfram

  • 清晰架构的 Go 微服务: 程序容器

  • 5分钟!就能学会以太坊 JSON API 基础知识

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

多样化实现Windows phone 7本地数据访问5——深入Rapid Repository

上一篇多样化实现Windows Phone 7本地数据访问<4>——Rapid Repository 中初步的介绍Repid Repository作为Windows phone 7数据库存储原理Repid具有特点以及数据CRUD基本操作.Rapid Repository 是一个基于WP7开源的数据库. 上周联系Rapid 数据库的作者Sean McAlinden.有…

调试Tomcat源码

需要调试Tomcat源码其实很简单&#xff0c; 1.保持你的Tomcat安装文件和源码是版本一致 http://tomcat.apache.org/download-80.cgi 下载安装版和源码2个版本 2.建立Java自由格式项目 先在IDE里配置好Tomcat&#xff0c;这个不复杂。 然后新建一个项目&#xff0c;这个需要…

开源 免费 java CMS - FreeCMS1.9 全文检索

项目地址&#xff1a;http://code.google.com/p/freecms/ 全文检索 从FreeCMS 1.7開始支持 仅仅有创建过索引的对象才干被lucene类标签查询到。 信息类数据会在信息更新、审核、删除、还原操作时自己主动进行全文检索处理。1. 创建索引 从左側管理菜单点击创建索引进入。 您能够…

Spring Mock单元测试

针对post和get import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.…

tar、gzip、gunzip、bzip2、zip、unzip

tar [参数] 文件或目录名 •参数&#xff1a; -c&#xff1a; 建立新的备份档文件。 -f&#xff1a; 对普通文件进行操作。这个参数通常是必选的。 -r&#xff1a; 向备份档文件追加文件。 -x&#xff1a; 从备份档文件中解出文件。 -t&#xff1a; …

港科大谢丹阳教授问诊未来,预测长远趋势与转折点

阳春三月&#xff0c;万象更新&#xff0c;2020年注定是不平凡的一年&#xff01;有激荡就会遇见变革&#xff0c;有挑战就会迎来机遇。今天总会过去&#xff0c;未来将会怎样&#xff1f;香港科大商学院内地办事处重磅推出全新升级的《袁老师访谈录》全新系列【问诊未来院长系…

数字签名与数字证书

先看一下百度百科对数字签名和数字证书的解释&#xff1a; 数字签名&#xff1a; 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证&#xff1a;只要改动报文中任何一位&#xff0c;重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不…

Spring源码分析【3】-SpingWebInitializer的加载

SpingWebInitializer的加载 Spring基于注解的配置代码&#xff1a; public class SpingWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{RootCon…

PyTorch 1.5发布,与AWS联手推出TorchServe

导读&#xff1a;近日 PyTorch 发布了 1.5 版本的更新&#xff0c;作为越来越受欢迎的机器学习框架&#xff0c;PyTorch 本次也带来了大的功能升级。此外&#xff0c; Facebook 和 AWS 还合作推出了两个重要的 PyTorch 库。作者 | 神经星星来源 | HyperAI超神经&#xff08;ID:…

更改时区,时间

整更改ubuntu时区,时间,localePublished by 笨二十一 at 11:56 上午 under Linux/Unix,服务器更改时区&#xff0c;时间执行tzselect按照提示进行选择时区sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime执行sudo ntpdate cn.pool.ntp.orgcn.pool.ntp.org是位于中国…

throttle与debounce的区别

前几天看到一篇文章&#xff0c;我的公众号里也分享了《一次发现underscore源码bug的经历以及对学术界拿来主义的思考》具体文章详见&#xff0c;微信公众号&#xff1a;文中讲了大家对throttle和debounce存在误解&#xff0c;同时提到了《高程3》中实现节流方法存在一些问题&a…

Spring源码分析【0】-框架的基础:继承和接口调用链

Spring源码大量的使用继承和接口调用&#xff0c;现举个例子&#xff0c;不搞清楚这个无法看代码。 public class A extends B{public void f1() {System.out.println("f1 in a");} }public abstract class B extends C {protected abstract void f1();protected Str…

华人计算机视觉科学家黄煦涛逝世,众多AI大牛发文缅怀

当地时间2020年4月25日&#xff0c;华人计算机科学家黄煦涛教授在美国印第安纳州逝世&#xff0c;享年84岁。黄煦涛教授主要从事教学与图像处理、模式识别、计算机视觉和人机交互等方面的研究工作&#xff0c;一生出版了 14 本书&#xff0c;发表了 400 多篇学术论文。在学术研…

七年之痒,再见理想

不确定“再见理想”是“再见了&#xff0c;理想”还是“再次燃起理想”&#xff0c;稀里糊涂地对这句话有感觉。作为程序员&#xff0c;总会有自己的技术价值观和技术理想。工作七年多&#xff0c;开始痒了。 程序员的生活总是喜忧参半&#xff0c;出入体面的写字楼&#xff0c…

HTML5学习笔记二 HTML基础

一、HTML 标题 HTML 标题&#xff08;Heading&#xff09;是通过<h1> - <h6> 标签来定义的. <h1>标题一</h1> <h2>标题二</h2> <h3>标题三</h3> 二、HTML 段落 HTML 段落是通过标签 <p> 来定义的. <p>亲吻你的手还…

程序员感叹一年只能存下15万太少了……网友:潸然泪下

最近有程序员网友晒出自己的年终奖&#xff0c;税后高达15.7万&#xff01;看到这个情形&#xff0c;很多网友表示自己“被打鸡血了”。他强调学习的重要性&#xff0c;学习仍然是在这个时代下&#xff0c;普通人能够逆袭&#xff0c;给家人更好生活的一把利器&#xff01;今天…

Spring源码分析【2】-Tomcat和Sping的连接点

Tomcat是怎么调用上Spring的呢&#xff1f;需要找到这个连接点。 答案就在org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法 new WebappServiceLoader() 回到processServletContainerInitializers 进入org.apache.catalina.startup.Weba…

优化数据库的方法及SQL语句优化的原则

优化数据库的方法&#xff1a; 1、关键字段建立索引。 2、使用存储过程&#xff0c;它使SQL变得更加灵活和高效。 3、备份数据库和清除垃圾数据。 4、SQL语句语法的优化。&#xff08;可以用Sybase的SQL Expert&#xff0c;可惜我没找到unexpired的序列号&#xff09; 5、清理删…

各大浏览器 CSS3 和 HTML5 兼容速查表

2019独角兽企业重金招聘Python工程师标准>>> 不知不觉中&#xff0c;支持 CSS3 和 HTML5 的浏览器变得越来越多&#xff0c;甚至包括最新版的 IE&#xff0c;当然&#xff0c;所谓支持仅仅是部分支持&#xff0c;因为 CSS3 和 HTML5 的W3C 规范都尚未形成。如果你现…

Spring源码分析【1】-Tomcat的初始化

org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig.webConfig() 进入org.apache.catalina.startup.ContextConfig.processServletContainerInitializers processServletContainerInitializers参考&#xff1a;Spring源…

360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访

「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈&#xff0c;反映其对于行业的思考、未来趋势判断、技术实践&#xff0c;以及成长经历。 本文为 「AI 技术生态论」系列访谈第21期&#xff0…

Delphi 正则表达式语法(3): 匹配范围

// [A-Z]: 匹配所有大写字母var reg: TPerlRegEx; begin reg : TPerlRegEx.Create(nil); reg.Subject : CodeGear Delphi 2007 for Win32; reg.RegEx : [A-Z]; reg.Replacement : ◆; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆ode◆ear ◆elphi 200…

基础算法整理(1)——递归与递推

程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&…

php正则表达式函数 preg_replace用法

preg_replace (PHP 3> 3.0.9, PHP 4 ) preg_replace -- 执行正则表达式的搜索和替换说明 mixedpreg_replace( mixed pattern, mixed replacement, mixed subject [, int limit])在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit&#xff0c;则…

面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!

最近几年&#xff0c;Python莫名火了起来&#xff0c;很多公司都想赶上这“莫名”的热潮&#xff0c;招聘到大牛人才。但是&#xff0c;最近一个HR在社交网站的吐槽又火了&#xff1a;那么问题来了&#xff0c;市面上为什么鲜有企业满意的优秀的Python程序员&#xff1f;企业到…

Spring源码分析【5】-Spring MVC处理流程

org.apache.catalina.core.ApplicationFilterChain.doFilter 获取Filter org.apache.catalina.core.ApplicationFilterChain.internalDoFilter org.springframework.web.filter.DelegatingFilterProxy.doFilter invokeDelegate org.springframework.security.web.FilterCha…

Mysql——外键

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;外键 外键&#xff1a;foreign key&#xff0c;&#xff08;外边的键&#xff0c;键不在本表中&#xff09;&#xff1a;如果一张表中有一个字段&#xff08;非主键&#xff09;指向另一张表的主键&#x…

揭开「拓扑排序」的神秘面纱

作者 | 小齐本齐责编 | Carol来源 | 码农田小齐Topological sort 又称 Topological order&#xff0c;这个名字有点迷惑性&#xff0c;因为拓扑排序并不是一个纯粹的排序算法&#xff0c;它只是针对某一类图&#xff0c;找到一个可以执行的线性顺序。这个算法听起来高大上&…

Spring源码分析【6】-ThreadLocal的使用和源码分析

Spring代码使用到了ThreadLocal java.lang.ThreadLocal.set getMap java.lang.Thread.threadLocals定义 回到set 如果map为null 则createMap

《软件的破解》

本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的&#xff0c;根据我自己的学习经历&#xff0c;如果你直接照着很多破解教程去学习的话&#xff0c;多半都会把自己搞得满头的雾水&#xff0c;因为有很多的概念要么自己不是很清楚&#xff0c;…