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

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

作者 | VincentLee

来源 | 晓飞的算法工程笔记

导读:为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture search, CARS),最大化利用学习到的知识,如上一轮进化的结构和参数。首先构造用于参数共享的超网,从超网中产生子网,然后使用None-dominated排序策略来选择不同大小的优秀网络,整体耗时仅需要0.5 GPU day。

简介

目前神经网络结构搜索的网络性能已经超越了人类设计的网络,搜索方法大致可以分为强化学习、进化算法以及梯度三种,有研究表明进化算法能比强化学习搜索到更好的模型,但其搜索耗时较多,主要在于对个体的训练验证环节费事。可以借鉴ENSA的权重共享策略进行验证加速,但如果直接应用于进化算法,超网会受到较差的搜索结构的影响,因此需要修改目前神经网络搜索算法中用到的进化算法。为了最大化上一次进化过程学习到的知识的价值,论文提出了连续进化结构搜索方法(continuous evolution architecture search, CARS)。

首先初始化一个有大量cells和blocks的超网(supernet),超网通过几个基准操作(交叉、变异等)产生进化算法中的个体(子网),使用Non-dominated 排序策略来选取几个不同大小和准确率的优秀模型,然后训练子网并更新子网对应的超网中的cells,在下一轮的进化过程会继续基于更新后的超网以及non-dominated排序的解集进行。另外,论文提出一个保护机制来避免小模型陷阱问题。

方法

论文使用基因算法(GA)来进行结构进化,GA能提供很大的搜索空间,对于结构集为种群大小。在结构优化阶段,种群内的结构根据论文提出的pNSGA-III方法逐步更新。为了加速,使用一个超网用来为不同的结构共享权重,能够极大地降低个体训练的计算量

Supernet of CARS

从超网中采样不同的网络,每个网络可以表示为浮点参数集合以及二值连接参数集合,其中0值表示网络不包含此连接,1值则表示使用该连接,即每个网络可表示为对完整的浮点参数集合是在网络集合中共享,如果这些网络结构是固定的,最优的可通过标准反向传播进行优化,优化的参数适用于所有网络以提高识别性能。在参数收敛后,通过基因算法优化二值连接,参数优化阶段和结构优化阶段是CARS的主要核心

参数优化

参数为网络中的所有参数,参数为mask操作,只保留对应位置的参数。对于输入,网络的结果为-th个网络,为其参数

给定GT ,预测的损失为,则的梯度计算如公式1

由于参数应该适用于所有个体,因此使用所有个体的梯度来计算的梯度,计算如公式2,最终配合SGD进行更新

由于已经得到大量带超网共享参数的结构,每次都集合所有网络梯度进行更新会相当耗时,可以借鉴SGD的思想进行min-batch更新。使用个不同的网络进行参数更新,编号为。计算如公式3,使用小批量网络来接近所有网络的梯度,能够极大地减少优化时间,做到效果和性能间的平衡。

结构优化

对于结构的优化过程,使用NSGA-III算法的non-dominated排序策略进行。标记个不同的网络,为希望优化的个指标,一般这些指标都是有冲突的,例如参数量、浮点运算量、推理时延和准确率,导致同时优化这些指标会比较难。

首先定义支配(dominate)的概念,假设网络的准确率大于等于网络,并且有一个其它指标优于网络,则称网络支配网络,在进化过程网络可被网络代替。利用这个方法,可以在种群中挑选到一系列优秀的结构,然后使用这些网络来优化超网对应部分的参数。

尽管non-dominated排序能帮助选择的更好网络,但搜索过程仍可能会存在小模型陷阱现象。由于超网的参数仍在训练,所以当前轮次的模型不一定为其最优表现,如果存在一些参数少的小模型但有比较高的准确率,则会统治了整个搜索过程。因此,论文基于NSGA-III提出pNSGA-III,加入准确率提升速度作为考虑

假设优化目标为模型参数和准确率,对于NSGA-III,会根据两个不同的指标进行non-dominated排序,然后根据帕累托图进行选择。而对于pNSGA-III,额外添加考虑准确率的增长速度的non-dominated排序,最后结合两种排序进行选择。这样,准确率增长较慢的大模型也能得到保留。如图2所示,pNSGA-III很明显保留的模型大小更广,且准确率与NSGA-III相当。

CARS算法的连续优化

CARS算法的优化包含两个步骤,分别是网络结构优化和参数优化,另外,在初期也会使用参数warmup。

  • Parameter Warmup,由于超网的共享权重是随机初始化的,如果结构集合也是随机初始化,那么出现最多的block的训练次数会多于其它block。因此,使用均分抽样策略来初始化超网的参数,公平地覆盖所有可能的网络,每条路径都有平等地出现概率,每种层操作也是平等概率,在最初几轮使用这种策略来初始化超网的权重。

  • Architecture Optimization,在完成超网初始化后,随机采样个不同的结构作为父代,为超参数,后面pNSGA-III的筛选也使用。在进化过程中生成个子代,是用于控制子代数的超参,最后使用pNSGA-III从中选取个网络用于参数更新。

  • Parameter Optimization,给予网络结构合集,使用公式3进行小批量梯度更新。

Search Time Analysis

CARS搜索时,将数据集分为数据集和验证集,假设单个网络的训练耗时为,验证耗时,warmup共周期,共需要时间来初始化超网的参数。假设进化共轮,每轮参数优化阶段对超网训练周期,所以每轮进化的参数优化耗时,为mini-batch大小。结构优化阶段,所有个体是并行的,所以搜索耗时为。CARS的总耗时如公式5。

实验

实验设置

  • supernet Backbones

超网主干基于DARTS的设置,DARTS搜索空间包含8个不同的操作,包含4种卷积、2种池化、skip连接和无连接,搜索normal cell和reduction cell,分别用于特征提取以及下采样,搜索结束后,根据预设将cell堆叠起来

  • Evolution Details

在DARTS中,每个中间节点与之前的两个节点连接,因此每个节点有其独立的搜索空间,而交叉和变异在搜索空间相对应的节点中进行,占总数的比例均为0.25,其余0.5为随机生成的新结构。对于交叉操作,每个节点有0.5的概率交叉其连接,而对于变异,每个节点有0.5的概率随机赋予新操作。

CIFAR-10的实验

  • Small Model Trap

图3训练了3个不同大小的模型,在训练600轮后,模型的准确率与其大小相关,从前50轮的曲线可以看出小模型陷阱的原因:

  1. 小模型准确率上升速度较快

  2. 小模型准确率的波动较大

在前50轮模型C一直处于下风,若使用NSGA算法,模型C会直接去掉了,这是需要使用pNSGA-III的第一个原因。对于模型B和C,准确率增长类似,但由于训练导致准确率波动,一旦模型A的准确率高于B,B就会被去掉,这是需要使用pNSGA-III的第二个原因

  • NSGA-III vs. pNSGA-III

如图2所示,使用pNSGA-III能避免小模型陷阱,保留较大的有潜力的网络

  • Search on CIFAR-10

将CIFAR分为25000张训练图和25000张测试图,共搜索500轮,参数warmup共50轮,之后初始化包含128个不同网络的种群,然后使用pNSGA-III逐渐进化,参数优化阶段每轮进化训练10周期,结构优化阶段根据pNSGA-III使用测试集进行结构更新

  • Search Time analysis

对于考量模型大小和准确率的实验,训练时间为1分钟,测试时间为5秒,warmup阶段共50轮,大约耗费1小时。而连续进化算法共轮,对于每轮结构优化阶段,并行测试时间为,对于每轮的参数优化阶段,设定大约为10分钟,大约为9小时,所以为0.4 GPU day,考虑结构优化同时要计算时延,最终时间大约为0.5 GPU day

  • Evaluate on CIFAR-10

在完成CARS算法搜索后,保留128个不同的网络,进行更长时间的训练,然后测试准确率。

  • Comparison on Searched Block

CARS-H与DARTS参数相似,但准确率更高,CARS-H的reduction block包含更多的参数,而normal block包含更少的参数,大概由于EA有更大的搜索空间,而基因操作能更有效地跳出局部最优解,这是EA的优势

Evaluate on ILSVRC2012

将在CIFAR-10上搜索到网络迁移到ILSVRC22012数据集,结果表明搜索到的结构具备迁移能力。

结论

为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture search, CARS),最大化利用学习到的知识,如上一轮进化的结构和参数。首先构造用于参数共享的超网,从超网中产生子网,然后使用None-dominated排序策略来选择不同大小的优秀网络,整体耗时仅需要0.5 GPU day。

Pareto相关理论:

https://blog.csdn.net/qq_34662278/article/details/91489077

论文地址:

https://arxiv.org/abs/1909.04977

【end】

精彩推荐

中国「远程办公」大考·线上峰会
10+位来自华为、阿里、微软、CODING等名企的专家大牛为大家做全天直播!
在线答疑、吐槽评论、现场抽奖等与大咖多维互动,不出家门,用程序员的方式来共同“抗”疫!
扫码或者点击阅读原文,限时免费报名。

推荐阅读

  • 远程办公是一阵“过渡风”还是会“继续燃烧”?

  • 先马后看!详解线性回归、朴素贝叶斯、随机森林在R和Python中的实现应用!(附代码)

  • 美国AI公司30亿人脸数据被黑,遭科技巨头联合“封杀”

  • 探索处理数据的新方法,8 个重点带你搞懂云数据库——DBaaS(数据库即服务)到底是什么!

  • 36万美元套利!3 个步骤揭秘黑客DeFi闪电贷操盘全过程

  • 近一半程序员单身、年薪低于 15 万,程序员扎心现状大调查!

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

相关文章:

在.Net Micro Framework中显示汉字

摘要:MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体。在.Net Micro Framework SDK中提供了一个叫做TFConvert.exe的工具,我们可以用它在命令行下将PC机上的TrueType或者OpenT…

汇编语言使用C库函数和Linux动态链接

使用printf 代码 #cpuid2.s -- Using C labrary calls .section .data output: .asciz "The processor Vender is %s\n".section .bss .lcomm buffer, 12 .section .text .globl _start _start: movl $0, %eax cpuid …

springJDBC实现查询方法二

无废话&#xff0c;看代码&#xff1a; Overridepublic List<Sites> queryAllSites(Pager pager) {String sql "select * from sakai_site order by SITE_ID limit ?,?";Object[] obj new Object[]{pager.getStart(),pager.getLimit()};List<Sites> …

全球计算机视觉顶会CVPR 2020论文出炉:腾讯优图17篇论文入选

全球计算机视觉顶级会议CVPR2020 (IEEE Conference on Computer Vision and Pattern Recognition&#xff0c;即IEEE国际计算机视觉与模式识别会议) 即将于2020年6月14日-19日在美国西雅图召开。本届大会总共录取来自全球论文1470篇&#xff0c;腾讯优图实验室入选17篇。 作为…

gcc使用总结

1.基本选项 -o 指定输出文件名。如果不给出这个选项&#xff0c;gcc就给出预设的可执行文件a.out。 # cc -o XX XX.c -c 编译、汇编到目标代码&#xff0c;不进行链接 -v 打印较多信息&#xff0c;显示编译器调用的程序。 -E 仅作预处理&#xff0c;不进行编译、汇编…

websecurity - Web Security Testing Framework 超级牛B扫描器

Windows – Websecurify 0.3.exehttp://websecurify.googlecode.com/files/Websecurify%200.3.exeLinux – Websecurify 0.3.tgzhttp://websecurify.googlecode.com/files/Websecurify%200.3.tgzMac – Websecurify 0.3.dmghttp://websecurify.googlecode.com/files/Websecurif…

C中的qsort函数和C++中的sort函数的理解与使用

一、qsort()函数 原型&#xff1a;_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); 参数解释&#xff1a;1、待排序数组首地址&#xff1b;2、数组中待排序元素数量&#xff1b;3、各元素的占用空间的大小&#xff1b;4、指向函数的指…

机器学习新闻综述:2019年AI领域不得不看的6篇文章

作者 | Limarc Ambalina翻译 | 火火酱&#xff0c;编辑 | Carol出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;在这篇机器学习新闻综述中&#xff0c;我们将回顾一些2019年以来在人工智能各个领域广泛传播或产生影响的重大新闻。此外&#xff0c;我们还将…

GDB attach到进程

要调试守护进程等已经启动的进程或是调试陷于死循环的进程可以使用attach命令 格式 attach pid C语言代码 #include <stdio.h> int main(void) { int marks[10]; int i; for(i0;i<12;i) { scanf("%d",&marks[i]); …

Chrome使用技巧和编辑框拖动怪问题。

常用快捷键&#xff1a;ctrlshiftt 重新打开刚关闭的网页ctrlh 打开历史记录ctrl 放大。ShiftEscape 查看任务管理器据说Chrome能调整编辑区大小&#xff0c;我没发现。倒发现Chrome一个问题&#xff0c;选中编辑框中的文字&#xff0c;一直拖动鼠标&a…

Linux中断研究

2019独角兽企业重金招聘Python工程师标准>>> 研究linux系统&#xff0c;不管是做驱动、协议栈还是进程调度等等&#xff0c;都离不开中断。这说明&#xff0c;要想编写正确的linux代码&#xff0c;不了解中断是不行的。 话说曾几何时&#xff0c;在大学的课堂里&…

linux环境内存分配原理

Linux的虚拟内存管理有几个关键概念&#xff1a; Linux 虚拟地址空间如何分布&#xff1f;malloc和free是如何分配和释放内存&#xff1f;如何查看堆内内存的碎片情况&#xff1f;既然堆内内存brk和sbrk不能直接释放&#xff0c;为什么不全部使用 mmap 来分配&#xff0c;munm…

大脑芯片公司Neuralink计划在人脑内植入芯片,他们到底想干什么?

作者 | James Murphy翻译 | 火火酱&#xff0c;编辑 | Carol出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;说实话&#xff0c;科幻电影在遇到Neuralink时也不得不甘拜下风。2019年7月&#xff0c;埃隆马斯克(Elon Musk)宣布&#xff0c;他的公司正在研发…

判断链表是否存在环(及其延伸)

有一个单链表&#xff0c;其中可能有一个环&#xff0c;也就是某个节点的next指向的是链表中在它之前的节点&#xff0c;这样在链表的尾部形成一环。问题&#xff1a;1、如何判断一个链表是不是这类链表&#xff1f;2、如果链表为存在环&#xff0c;如果找到环的入口点&#xf…

iOS跳转到各种系统设置界面

定位服务 定位服务有很多APP都有&#xff0c;如果用户关闭了定位&#xff0c;那么&#xff0c;我们在APP里面可以提示用户打开定位服务。点击到设置界面设置&#xff0c;直接跳到定位服务设置界面。代码如下&#xff1a; //定位服务设置界面 NSURL *url [NSURL URLWithString:…

Linux内存管理大图(第三稿)

网友画的还不错就转了 &#xff0c;该作者一共画了3版 v0.1 v0.2 v0.3 原文地址&#xff1a;http://bbs.chinaunix.net/thread-2018659-1-1.html

VNC的安装与使用

VNC的安装与使用。 说明&#xff1a;文章内容比较简单&#xff0c;献给那些初学者作为参考。 文章分为两部分&#xff0c;第一部分为VNC简介&#xff0c;第二部分为VNC的安装与使用。 文章为小弟结合书籍与小弟的实际操作总结出来的&#xff0c;如有错误与疏漏之处…

百度「AI战疫」:首次开源肺炎CT影像分析AI模型,让诊断从分钟到秒

自疫情爆发以来&#xff0c;多家科技公司纷纷加入了抗击疫情的战役中。 其中&#xff0c;排查疫情是这场战役的重中之重&#xff0c;而 CT 影像已成为新冠肺炎筛查和病情诊疗的重要依据。 然而&#xff0c;在当前疫情诊疗的关键时期&#xff0c;存量患者和新增患者总体数量庞…

Linux_DNS服务器

目录 目录DNS DNS ServerServerSite Master DNS ServerForward DomainReverse Resolution Slave DNS ServerForward lookupReverse lookupSplit DNS ServerDNS DNS(Domain Name System&#xff0c;域名系统)&#xff0c;在Internet上作为域名和IP地址映射的一个分布式数据库&am…

多场景下的AI疫情防控“天网”:解读云边端联动下的全栈AI技术

在全民抗疫的特殊时期下&#xff0c;伴随着春运返潮&#xff0c;企业陆续复工&#xff0c;从重点防控的机场、火车站等场所&#xff0c;到学校、企业、社区等密集型场所&#xff0c;都是不能忽视的地点。除了人工逐一测量体温排查外&#xff0c;我们还发现&#xff0c;在人员复…

DHCP配置与DHCP中继代理2

实验二&#xff1a;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Step1、配置DHCP中继代理1) 打开“管理工具”→“路由和远程访问”窗口&#xff0c;启用路由和远程访问&#xff0c;按向导提示完成操作。<?xml:namespac…

查看CPU是i386架构和x86_64架构

查看处理器是32位还是64位 #cat /proc/cpuinfo 检查flags行中有没有lm标记&#xff0c;lm是Long Mode的简写&#xff0c;表示支持64位模式。 #getconf LONG_BIT 输出&#xff1a;32 #getconf WORD_BIT 输出&#xff1a;32 32位的系统中int类型和long类型一般都是4字节&…

malloc一次性最大能申请多大内存空间

受用户态内存地址空间的限制。64 位系统下分配几个 T 不成问题。 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。作者&#xff1a;zz matrix链接&#xff1a;http://www.zhihu.com/question/20836462/answer/22833295来源&#xff1a;知乎考…

MD5算法之C#程序

MD5算法比较特别&#xff0c;最适合用汇编语言来写&#xff0c;好多高级语言对之无能无力或效率极低。 比如我最开始尝试用Python和Euphoria编写&#xff0c;发现不太容易。相比而言&#xff0c;C#作为C家簇 中新兴的一门.net语言&#xff0c;功能比较全面。花了一晚上的工夫终…

unix环境汇编语言常用工具

汇编器 MASM&#xff1a;微软的汇编器不支持unix NASM&#xff1a;unix环境下兼容微软平台 GAS&#xff1a;GNU 的免费软件包&#xff0c;unix环境下最流行跨平台汇编器 安装GNU汇编器 检查binunits RedHat #rpm -qa |grep binunits Debian #dpkg -l|grep binunit 下载地…

用Python远程登陆服务器的最佳实践

来源 | Python编程时光&#xff08;ID: Cool-Python&#xff09;在使用 Python 写一些脚本的时候&#xff0c;在某些情况下&#xff0c;我们需要频繁登陆远程服务去执行一次命令&#xff0c;并返回一些结果。在 shell 环境中&#xff0c;我们是这样子做的。$ sshpass -p ${pass…

Exchange Server 2013 LAB Part 4.内部客户端访问

关于Exchange服务器内部客户端访问的更详细介绍&#xff0c;请参考Exchange Server 2010链接&#xff1a;http://xutonglin.blog.51cto.com/8549515/1390715每个组织在AD林中都至少有一台客户端访问服务器和一台邮箱服务器。另外&#xff0c;每个AD站点中都必须至少有一台客户端…

VirtualBox安装64位Linux

VirturlBox安装64位的Linux 原因 virtualbox 本身不带 64 位支持&#xff0c;它的 64 位支持依赖于通过cpu虚拟技术把cpu的64位指令直接映射过去。 所以&#xff0c;要支持64位必须&#xff1a; 1.你的cpu支持64位。 2.你的cpu支持虚拟化&#xff0c;并且你的bios支持把cpu虚…

6个步骤,告诉你如何用树莓派和机器学习DIY一个车牌识别器!(附详细分析)...

作者 | Robert Lucian Chiriac翻译 | 天道酬勤&#xff0c;编辑 | Carol出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;几个月前&#xff0c;作者开始考虑让汽车能够具备检测和识别物体的能力。他很喜欢这个主意&#xff0c;因为已经见识到了特斯拉的能力…

推荐bpython

可能很多人都对ipython比较熟悉&#xff0c;但是我这里要推荐的是bpython&#xff0c;我发现用起来更加顺手。详细的信息可以从其官方网站上获得。下面介绍几个主要的feature&#xff08;使用系统为Linux&#xff09;&#xff1a;1. 语法高亮&#xff1a;2. 自动提示&#xff0…