【阅读笔记】DARTS: Differentiable Architecture Search

2024-01-28 14:58

本文主要是介绍【阅读笔记】DARTS: Differentiable Architecture Search,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:

Hanxiao LiuKaren SimonyanYiming Yang
CMUDeepMindCMU
hanxiaol@cs.cmu.edusimonyan@google.comyiming@cs.cmu.edu

Liu, Hanxiao, Karen Simonyan, and Yiming Yang. “Darts: Differentiable architecture search.” arXiv preprint arXiv:1806.09055 (2018).

发布时间: 24 Jun 2018

昨天看了这篇文章,感觉挺有意思的,将神经网络的结构也作为参数来进行梯度下降优化,给结构的选择以科学的方式。

Abstract

本文的核心思想是通过以可微的方式进行结构搜索。
与传统的在离散的和不可微的搜索空间上采用进化或强化学习搜索结构的方法不同,本文的方法是基于将结构表示的松弛(relaxation),允许使用梯度下降高效搜索架构。
在CIFAR-10,ImageNet,Penn Treebank和WikiText-2上进行了大量实验,表明本文的算法擅长于发现用于图像分类的高性能卷积结构和用于语言建模的循环神经网络结构,同时比现有技术的非微分搜索技术要快几个数量级。

1 Introduction

发现最先进的神经网络架构需要人类专家的大量工作。
最近,人们越来越有兴趣开发自动化算法解决神经网络结构的设计。
自动搜索架构在诸如图像分类 (Zoph and Le, 2016; Zoph et al., 2017; Liu et al., 2017b,a; Real et al., 2018)和object detection (Zoph et al., 2017)上有着广泛的探索。

现有最好的架构搜索算法尽管性能卓越,但在计算上要求很高。
例如,获得CIFAR-10和ImageNet的最新架构需要1800 GPU天的强化学习(RL) (Zoph et al., 2017) 或3150 GPU天的进化学习 (Real et al., 2018)。
虽然已经提出了几种加速方法,如强加搜索空间的特定结构(Liu et al., 2017b,a),对每个单独架构的权重或性能预测(Brock et al., 2017; Baker et al., 2018) ,以及跨体系结构的权重共享 (Pham et al., 2018b; Cai et al., 2018),但可扩展性(scalability )的根本challenge依然存在。
主流方法效率低下的内在原因, e.g. based on RL, evolution, MCTS (Negrinho and Gordon, 2017), SMBO (Liu et al., 2017a) or Bayesian optimization (Kandasamy et al., 2018),是在于把结构搜索视为一个在离散域的黑箱优化问题,这导致需要大量的架构评估。

在这项工作中,作者从另一个角度来看问题,并提出了一种称为DARTS(可微分的结构搜索,Differentiable Architecture Search)的高效架构搜索方法。
取代搜索一组离散的候选架构,松弛(relaxation)搜索空间使之连续,从而使架构可以通过梯度下降的方法对其在验证集上的性能进行优化。
因为基于梯度的优化,与低效的黑盒搜索不同,使得DARTS使用比现有技术数量级较少的计算资源实现具有竞争力的表现。
它也优于另一种最近的高效架构搜索方法,ENAS (Pham et al., 2018b).
值得注意的是,DARTS比许多现有方法简单,因为它不涉及任何controllers (Zoph and Le, 2016; Baker et al., 2016; Zoph et al., 2017; Pham et al., 2018b),hypernetworks (Brock et al., 2017) ,或表现预测因子performance predictors (Liu et al., 2017a)。

在一个连续的领域内搜索体系结构的想法并不新鲜(Saxena and Verbeek, 2016; Ahmed and Torresani, 2017; Shin et al., 2018),与先前的工作有几个主要区别在于:

  • 虽然之前的工作试图对结构的特定方面进行微调,如卷积网络中的滤波器形状或分支模式,但是DARTS能够在丰富的搜索空间内发现具有复杂图形拓扑的高性能架构。
  • 此外,DARTS不限于任何特定架构系列,能够搜索卷积网络和循环网络。

本文的贡献可以总结如下:

  • 引入了一种适用于卷积和循环结构的可微分网络体系结构搜索的新算法。
  • 通过实验表明本文的方法具有很强的竞争力。
  • 实现了卓越的结构搜索效率(4个GPU:1天内CIFAR10误差2.83%; 6小时内PTB误差56.1),这归因于使用基于梯度的优化而非非微分搜索技术。
  • 证明 DARTS 在 CIFAR-10 和 PTB 上学习的体系结构可以迁移到 ImageNet 和 WikiText-2 上

DARTS的实现可在https://github.com/quark0/darts 上找到。

2 Differentiable Architecture Search

在Sect. 2.1,用一般形式描述搜索空间,其中结构(或其中的单元cell)的计算过程被表示为有向无环图。
然后为搜索空间引入一个简单的连续松弛方案,使得架构及其权重的联合优化目标可微(Sect. 2.2)。
最后,本文提出了一种近似技术,使算法在计算上可行和高效(Sect. 2.3)。

2.1 Search Space

Following 前人的工作,搜索一个计算单元(cell)作为最终架构的基石。
学习过的单元可以堆叠起来形成一个卷积网络,或者递归连接形成一个循环网络。

单元是由N个有序节点组成的有向无环图。
每个节点 x ( i ) x^{(i)} x(i)都是一个latent representation(例如卷积网络中的特征映射),每个有向边是对 x ( i ) x^{(i)} x(i)的某种运算 o ( i , j ) o^{(i,j)} o(i,j)
假设每个单元有两个输入节点和一个输出节点。
对于卷积单元,输入节点被定义为前两层的单元输出(Zoph et al. 2017)。
对于循环单元,输入节点被定义为当前步骤的输入以及上一步骤中的状态。
通过对所有中间节点应用reduction操作(例如concatenation)来获得单元的输出。

每个中间节点都是基于所有它之前的节点进行计算的:
x ( i ) = ∑ j &lt; i o i , j ( x ( j ) ) x^{(i)}=\sum_{j&lt;i}o^{i,j}(x^{(j)}) x(i)=j<ioi,j(x(j))
还包括一个特殊的零操作来指示两个节点之间没有连接。
因此学习的任务减少到学习其连边的操作。

2.2 Continuous Relaxation and Optimization

Let O O O be a set of candidate operations (e.g., convolution, max pooling, zero) where each operation represents some function o ( ⋅ ) o(\cdot) o() to be applied to x ( i ) x^{(i)} x(i).
To make the search space continuous, we relax the categorical choice of a particular operation as a softmax over all possible operations(把操作当作是一堆操作的softmax的结果):
o ˉ ( i , j ) ( x ) = ∑ o ∈ O e x p ( α o ( i , j ) ) ∑ o ′ ∈ O e x p ( α o ′ ( i , j ) ) o ( x ) \bar{o}^{(i,j)}(x)=\sum_{o\in O}\frac{exp(\alpha^{(i,j)}_{o})}{\sum_{o&#x27;\in O}exp(\alpha^{(i,j)}_{o&#x27;})}o(x) oˉ(i,j)(x)=oOoOexp(αo(i,j))exp(αo(i,j))o(x)
where the operation mixing weights for a pair of nodes ( i , j ) (i, j) (i,j) are parameterized by a vector α i , j \alpha^{i,j} αi,j of dimension ∣ O ∣ |O| O.
After the relaxation, the task of architecture search reduces to learning a set of continuous variables { α i , j } \{\alpha^{i,j}\} {αi,j}.
At the end of search, a discrete architecture is obtained by replacing each mixed operation o ˉ i , j ( x ) \bar{o}^{i,j}(x) oˉi,j(x) with the most likely operation, i.e., o ( i , j ) = a r g m a x o ∈ O   α o ( i , j ) o(i,j) = argmax_{o\in O}~\alpha^{(i,j)}_{o} o(i,j)=argmaxoO

这篇关于【阅读笔记】DARTS: Differentiable Architecture Search的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653982

相关文章

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓