微软&中科大提出新型自动神经架构设计方法NAO

近期,来自微软和中国科学技术大学的刘铁岩等人发表论文,介绍了一种新型自动神经架构设计方法 NAO,该方法由三个部分组成:编码器、预测器和解码器。实验证明,该方法所发现的架构在 CIFAR-10 上的图像分类任务和 PTB 上的语言建模任务中都表现强劲,在计算资源明显减少的情况下优于或持平于之前的架构搜索最佳方法。

从几十年前 [13, 22] 到现在 [48, 49, 28, 39, 8],无人干预的神经网络架构自动设计一直是机器学习社区的兴趣所在。关于自动架构设计的最新算法通常分为两类:基于强化学习(RL)的方法 [48, 49, 37, 3] 和基于进化算法(EA)的方法 [42, 35, 39, 28, 38]。在基于 RL 的方法中,对架构组件的选择被看作是一个动作。一系列动作定义了神经网络的架构,其开发集准确率被用作奖励。在基于 EA 的方法中,搜索是通过架构组件的变异和再组合来进行的,性能更优的架构会被筛选出来继续进化。

可以很容易观察到,基于 RL 和 EA 的方法本质上都是在离散的架构空间中执行搜索。因为神经网络架构的选择通常都是离散的,例如 CNN 中的滤波器大小还有 RNN 单元中的连接拓扑(connection topology)。然而,在离散空间中直接搜索最优架构是很低效的,因为随着选择的增加,搜索空间会呈指数增长。本研究提出一种优化网络架构的新方法,将架构映射到一个连续的向量空间(即网络嵌入),利用基于梯度的方法在该连续空间进行优化。一方面,与自然语言的分布式表示类似,架构的连续表示在表示拓扑信息时更加紧凑和有效; 另一方面,由于更加平滑,在连续空间中进行优化比在离散空间内直接搜索容易得多。

研究者将这种基于优化的方法称为神经架构优化(NAO),如图 1 所示。NAO 的核心是一个编码器模型,负责将神经网络架构映射到一个连续表示(图 1 左侧蓝色箭头)。在连续表示上建立一个回归模型来逼近架构的最终性能(如开发集上的分类准确率,图 1 中间黄色部分)。这里值得注意的是,回归模型类似于之前研究中的性能预测器 [4, 27, 11]。新方法与之的区别在于如何利用性能预测器:之前的研究 [27] 使用性能预测器作为启发来选择已生成的架构,以加速搜索过程,而新方法直接优化模块,并通过梯度下降获得更好网络的连续表示(图 1 中间底部黑色箭头)。然后利用优化的表示来产生预测性能更好的新神经网络架构。为了实现这一点,NAO 的另一个关键模块被设计成解码器,从连续表示中恢复离散架构(图 1 右侧红框箭头)。解码器是配备了注意力机制的 LSTM 模型,可以实现精准恢复。这三个组件(即编码器、性能预测器和解码器)在多任务设置中接受联合训练,这有利于连续表示:恢复架构的解码器目标能进一步改善架构嵌入的质量,更有效地预测性能。

图 1:NAO 的总体框架。原始架构 x 通过编码器网络映射到连续表示 e_x。然后通过最大化性能预测器 f 的输出将 e_x 优化为 ex‘,然后使用解码器网络将 ex‘转换为新架构 x‘。

研究者进行了大量实验来验证 NAO 在图像分类和语言建模任务上的有效性。使用之前研究 [48, 49, 37, 27] 常用的架构空间,通过 NAO 找到的架构在 CIFAR-10 上达到了 2.07% 的测试集误差率(使用了 cutout 正则化 [12])。此外,在 PTB 数据集上,该架构实现了 55.9 的困惑度,也超过了神经架构搜索方面的之前最优方法。此外,研究者还展示了:使用最近 [37] 提出的 ENAS 中的权重共享机制来减少子模型参数空间中的较大复杂度,该方法可以提高发现强大的对流和循环架构的效率,例如,在 1 个 GPU 上花费不到 10 小时。研究者将很快发布代码和模型。

论文:Neural Architecture Optimization

论文链接:https://arxiv.org/abs/1808.07233

摘要:自动神经架构设计非常有助于发现强大的神经网络结构。现有的方法,无论是基于强化学习(RL)还是进化算法(EA),都是在离散空间中进行架构搜索,效率非常低。本文提出了一种基于连续优化的自动神经架构设计方法。这种新方法被称为神经架构优化(NAO)。该方法有三个关键部分:(1)编码器,将神经网络架构嵌入/映射到连续空间;(2)预测器,将网络的连续表示作为输入,并预测其准确率;(3)解码器,将网络的连续表示映射回其架构。性能预测器和编码器使我们能够在连续空间中执行基于梯度的优化,以找到潜在的准确率更高的新架构嵌入。然后将这个更优的嵌入使用解码器解码到网络。实验表明,该方法所发现的架构在 CIFAR-10 上的图像分类任务和 PTB 上的语言建模任务中都表现强劲,在计算资源明显减少的情况下都优于或持平于之前的架构搜索最佳方法。其中 CIFAR-10 图像分类任务的测试集误差率为 2.07%,PTB 语言建模任务的测试集困惑度为 55.9。在两个任务中发现的最优架构可被成功迁移到其他任务,如 CIFAR-100 和 WikiText-2。此外,结合最近提出的权重共享机制,我们在计算资源都很有限的情况下(在一个 GPU 上 10 小时)在 CIFAR-10 和 PTB 上发现了功能强大的架构,前一个任务上的最优模型误差率为 3.53%,后一个任务上的困惑度为 56.3。

表 1:CIFAR-10 数据集上不同 CNN 模型的表现。

B 是单元内的节点数。N 是发现的正常单元(normal cell)被展开形成最终 CNN 架构的次数。F 表示滤波器大小。#op 是对单元中一个分支的不同操作数,是自动架构设计算法的架构空间尺度指标。M 是经过训练以获得所需性能的网络架构总数。/ 表示该标准对特定算法无意义。NAONet-WS 表示 NAO 发现的架构和权重共享方法。

表 2:CIFAR-100 数据集上不同 CNN 模型的表现。NAONet 代表 NAO 在 CIFAR-10 上发现的最优架构。

表 3:PTB 数据集上不同模型和技术的表现。与 CIFAR-10 实验类似,NAO-WS 代表具备权重共享机制的 NAO。

表 4:WT2 数据集上不同模型和技术的表现。NAONet 代表 NAO 在 PTB 上发现的最优架构。

原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/9823682.html

时间: 2024-10-08 00:31:38

微软&中科大提出新型自动神经架构设计方法NAO的相关文章

关于项目中的DAL数据接入层架构设计

摘要:项目中对关系型数据库的接入再寻常不过,也有海量的ORM工具可供选择,一个一般性的DAL数据接入层的结构却大同小异,这里就分享一下使用Hibernate.Spring.Hessian这三大工具对DAL层的具体实现方法,也是对之前使用的一个总结. 关键词:Hibernate, Spring, Hessian, DAL, 数据接入层, 架构设计 注意:以下配置或代码运行在Hibernate4.2.5,Spring3.2.4,Hessian4.0.37,Tomcat7.0.47环境下 一.Mode

DDD不是架构设计方法

一文读懂DDD 2019-05-28 19:18 by 春哥大魔王, 413 阅读, 3 评论, 收藏, 编辑 何为DDD DDD不是架构设计方法,不能把每个设计细节具象化,DDD是一套体系,决定了其开放性,体系中可以用任何一种方法来解决这些问题,但是如果一些关键问题没有具体方案落地,可能让团队无所适从. 有的小伙伴觉得DDD太虚了,具体在我们进行业务代码编写落地中DDD主要解决什么问题呢? 总结起来说主要目的有两点: 建立业务术语,统一PM/RD/QA需求沟通术语. 梳理业务边界,将业务领域逻

两种观点兼顾的架构设计方法

过去,许多人认为架构设计是从领域需求出发,后来专家们逐渐改变了.因为领域需求只是架构设计的单一观点.今天,专家们倡导<需求分析>与<接口设计>两项观点兼顾,才能产出优质的架构设计. 随着互联网/大数据的潮流,软件产业逐渐远离过去大量制造.固定流程与稳定需求的ERP软件时代,而碎片化.互换性变成新时代的致胜关键,因此<接口设计>观点变得优先,由设计引导需求分析,成为最有效的架构设计新模式. 例如,谷歌公司副总MarissaMayer提倡:"创意爱上限制"

atitit.架构设计---方法调用结果使用异常还是返回值

atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. java BlockingQueue的提示 2 5. 方案::两个都使用,一个api返回bool,一个throw 异常... 2 1. 应该返回BOOL类型还是异常 现在我遇到一个问题,我有一个函数,它要实现的功能是启动一个线程,然后让此线程监视一个事件. 但我应该返回BOOL类型还是异常哪? 作者:: 

【转】双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的nginx,nginx对于静态资源请求就直接在本机检索并返回,对于php的动态请求,则负载均衡到server1和server2.对于SQ

双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构. 架构简介 此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的Nginx,nginx对于静态资源请求就直接在本机检索并返回,对于PHP的动态请求,则负载均衡到server1和server2.对于S

在verilog中关于inout口的两种设计方法

在学习IIC的时候我们知道这么设计inout inout   scl : reg    scl_reg ,  scl_en ; scl  = scl_en ?   scl_reg : 1'dz ; 当scl_en 有效输出scl_reg 的波形,就是output,否则就是input. 后来在工作中遇到了一个IIC的IP核 ,这个IIC的IP核接口是这样子的 1 mi2c U_mi2c( 2 .CLK (clock), 3 .NRST (reset), 4 .A (a), 5 .DI (di),

看懂架构设计中的服务隔离

前言 我们在做系统架构设计的时候,经常离不开的一个话题就是进行服务的隔离设计. 那什么是「服务隔离」呢? 顾名思义,它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖.当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务. 其实隔离设计并非软件行业独创,它是借鉴于造船行业.行业有一个专业术语叫做「舱壁隔离」.利用舱壁将不同的船舱隔离起来,如果某一个船舱进了水,那么就可以立即封闭舱门,形成舱壁隔离,只损失那一个船舱,其他船

架构设计的方法学

约公元前25年,古罗马建筑师维特鲁威说:"理想的建筑师应该既是文学家又是数字家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算."(好难哪,软件构架设计师的要求呢?大家好好想想吧.)   本文目录   一.与构架有关的几个基本概念:   二.构架设计应考虑的因素概揽:   三.程序的运行时结构方面的考虑:   四.源代码的组织结构方面的考虑:   五.写系统构架设计文档应考虑的问题   六.结语   一.与构架有关的几个基本概念:   1.模