GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

神经架构搜索研究指南,只看这一篇就够了

2019 年 10 月 23 日

神经架构搜索研究指南,只看这一篇就够了

从训练到用不同的参数做实验,设计神经网络的过程是劳力密集型的,非常具有挑战性,而且常常很麻烦。但是想象一下,如果能够将这个过程实现自动化呢?将这种想象转变为现实,就是本指南的核心内容。

我们将探索一系列的研究论文,这些论文试图解决具有挑战性的自动化神经网络设计任务。在本指南中,我们假设读者尝试过使用 Keras 或 TensorFlow 等框架从头开始设计神经网络。


基于强化学习的神经结构搜索(2016:Neural Architecture Search with Reinforcement Learning

本文利用递归神经网络(RNN)生成神经网络的模型描述。为了提高 RNN 在验证集上的精度,作者对 RNN 进行了强化学习训练,该方法在 CIFAR-10 数据集上的错误率为 3.65。


本文提出的神经结构搜索是基于梯度的。本文提出的方法是基于以下考虑:神经网络的结构和连通性可以用变长串来描述。被称为控制器的神经网络用于生成这样的字符串。然后,字符串指定的子网络根据真实数据进行训练,并在验证集上得到初始的准确度度量。然后,使用这个准确度数据计算策略梯度,再用后者更新控制器。因此,具有较高准确度的结构可以得到较高的选中概率。


来源:https://arxiv.org/pdf/1611.01578.pdf


来源:https://arxiv.org/pdf/1611.01578.pdf


神经网络结构搜索中,该控制器用于生成神经网络的结构超参数。在下图中,控制器用于生成一个卷积神经网络。控制器预测滤波器高度、滤波器宽度和步长。预测由 softmax 分类器执行,然后作为输入,输入到下一个时间步。一旦控制器完成了生成结构的过程,带有这个结构的神经网络就会建立起来,并用它进行训练。


来源:https://arxiv.org/pdf/1611.01578.pdf


来源:https://arxiv.org/pdf/1611.01578.pdf


于子网络的训练需要花费数小时的时间,为了加快控制器的学习过程,作者采用了分布式训练和异步参数更新的方法。


来源:https://arxiv.org/pdf/1611.01578.pdf


来源:https://arxiv.org/pdf/1611.01578.pdf


该模型与其他模型的错误率对比如下:


来源:https://arxiv.org/pdf/1611.01578.pdf


来源:https://arxiv.org/pdf/1611.01578.pdf


可伸缩图像识别领域的可转移架构学习(2017:Learning Transferable Architectures for Scalable Image Recognition

在本文中,作者在一个小数据集上搜索结构上的一个组成模块,然后将该模块再转换到一个大数据集上。这是因为直接使用大型数据集将非常麻烦和耗时。


作者在 CIFAR-10 数据集上寻找最佳卷积层,并将其应用于 ImageNet 数据集。具体做法是将该层的更多副本堆叠在一起来实现的。每一层都有自己的参数,用于设计卷积架构。作者将这种体系结构称为 NASNet 架构。


他们还引入了正则化技术——ScheduledDropPath——来改进 NASNet 模型中的泛化性能。该方法的错误率为 2.4%。最大的 NASNet 模型平均精度达到 43.1%。


与前一篇文章一样,本文也使用了神经体系结构搜索(NAS)框架。本文的方案中,卷积网络的总体结构是人工预置好的。它们由重复几次的卷积单元组成。每个卷积层具有相同的结构,但权重不同。


该网络有两种类型的单元:返回相同维度特征图的卷积单元(Normal Cell),以及返回特征图的卷积单元(Reduction Cell)。后者特征图的高度和宽度在卷积输出时减少了一半。


来源:https://arxiv.org/pdf/1707.07012.pdf


来源:https://arxiv.org/pdf/1707.07012.pdf


在本文提出的搜索空间中,每个单元接收两个初始隐藏状态作为输入,这两个初始隐藏状态是前两层或输入图像中的两个单元的输出。在给定这两个初始隐藏状态的情况下,控制器 RNN 递归地预测卷积单元结构的其余部分。


来源:https://arxiv.org/pdf/1707.07012.pdf


来源:https://arxiv.org/pdf/1707.07012.pdf


下面是 CIFAR-10 数据集上神经结构搜索的性能:


来源:[https://arxiv.org/pdf/1707.07012.pdf]


来源:https://arxiv.org/pdf/1707.07012.pdf


参数共享的高效神经结构搜索(2018:Efficient Neural Architecture Search via Parameter Sharing

本文作者提出了一种称为高效神经结构搜索(ENAS)的方法。在这种方法中,控制器通过在大型计算图中搜索最优子图来发现神经网络结构。该控制器经过训练,可以选出在验证集上获得最佳准确度的子图。


然后训练所选子图对应的模型,使正则交叉熵损失最小化。参数通常在子模型之间共享,以便 ENAS 能够提供更好的性能。在 CIFAR-10 测试中,ENAS 的错误率为 2.89%,而神经结构搜索(NAS)的错误率为 2.65%。


本文强制所有子模型共享权值,以避免从零开始训练每个子模型达到收敛,从而提高了 NAS 的效率。


本文用单个有向无环图(DAG)表示 NAS 的搜索空间。通过引入一个具有 N 个节点的 DAG,设计出了递归单元,该单元表示局部计算,图中的边表示 N 个节点之间的信息流。


ENAS 的控制器是一个 RNN,它决定在 DAG 中的每个节点上执行哪些计算以及激活哪些边。控制器网络是一个包含 100 个隐藏单元的 LSTM。



来源:https://arxiv.org/pdf/1802.03268.pdf


来源:https://arxiv.org/pdf/1802.03268.pdf


在 ENAS 中,需要学习两组参数:控制器 LSTM 的参数和子模型的共享参数。在训练的第一阶段,对子模型的共享参数进行训练。在第二阶段,对控制器 LSTM 的参数进行训练。这两个阶段在 ENAS 的训练期间交替进行。


来源:https://arxiv.org/pdf/1802.03268.pdf


来源:https://arxiv.org/pdf/1802.03268.pdf


以下是 ENAS 在 CIFAR-10 数据集上的表现情况:


来源:https://arxiv.org/pdf/1802.03268.pdf


来源:https://arxiv.org/pdf/1802.03268.pdf


高效结构搜索的层次化表示(ICLR 2018:Hierarchical Representations for Efficient Architecture Search

该网络中提出的算法在 CIFAR-10 上实现了 3.6%的 top-1 误差,在 ImageNet 上实现了 20.3%的 top-1 误差。作者提出了一种描述神经网络结构的层次化表示方法,证明了用简单的随机搜索可以得到具有竞争力的图像分类网络结构,并提出了一种可扩展的进化搜索方法变体。


对于平面体系结构表示,他们研究了由单源、单汇聚(single-sink)计算图组成的神经网络体系结构家族,该计算图将源处的输入转换为汇聚处的输出。图中的每个节点都对应一个特征图,每个有向边都和某个操作关联,比如池化操作或者卷积操作。此操作转换输入节点中的特征图,并将其传递给输出节点。


来源:https://arxiv.org/abs/1711.00436


来源:https://arxiv.org/abs/1711.00436


对于层次化结构,将在不同层次上有若干个不同的 motifs。在较高层次的 motifs 构建过程中,较低层次的 motifs 被作为构建模组。


来源:https://arxiv.org/abs/1711.00436


来源:https://arxiv.org/abs/1711.00436


这是 CIFAR-10 测试集中不同模型的错误率:



渐进神经结构搜索(ECCV 2018:Progressive Neural Architecture Search

该方法采用基于序列模型的优化策略(SMBO)学习卷积神经网络(CNNs)的结构。本文基于神经结构搜索(NAS)方法。


本文中,搜索算法的任务是识别一个好的卷积单元,而不是一个完整的 CNN。每个单元格包含 B 个块,每个块是应用于两个输入数据的组合运算符。每个输入都可以在组合之前进行转换——例如,通过卷积进行转换。然后根据训练集的大小和最终 CNN 所要求的运行时间,决定叠加起来的单元的数量。


来源:https://arxiv.org/abs/1712.00559


来源:https://arxiv.org/abs/1712.00559


通过使用步长为 1 或步长为 2 的基本单元叠加预定数量的副本,可以将单元叠加转换为 CNN,如上图所示。然后,在步长为 2 的单元之间的步长为 1 的单元数量,调整为最多可以有 N 个。在网络的顶层引入了平均池化和 softmax 分类层。


下图显示了模型在 CIFAR 测试集上的性能:



Auto-Keras:高效的神经结构搜索系统(2018:Auto-Keras: An Efficient Neural Architecture Search System

本文提出了一个框架,使用贝叶斯优化引导网络形变,以提升 NAS 的效率。基于他们的方法,作者构建了一个名为 Auto-Keras 的开源 AutoML 系统。


该方法中,网络的主要组成模块,是在贝叶斯优化算法的指导下,通过神经结构的形变来寻找搜索空间。NAS 空间不是欧氏空间,因此作者设计了一个神经网络核函数来解决这一问题。核函数是将一个神经结构变形为另一个神经结构的编辑距离。


来源:https://arxiv.org/pdf/1806.10282.pdf


来源:https://arxiv.org/pdf/1806.10282.pdf


利用贝叶斯优化来指导网络形态的第二个挑战是获取函数的优化。这些方法不适用于网络形态的树结构的搜索。通过优化树结构空间的获取函数,解决了这一难题。置信度上界(UCB)被选择作为获取函数。


该体系结构的搜索模块是包含贝叶斯优化器和高斯过程的模块。搜索算法在 CPU 上运行,模型训练器模块在 GPU 上进行计算。


该模块在分离的进程中用训练数据训练神经网络,以实现并行化。图模块处理神经网络的计算图,并由搜索模块控制,进行网络形态学操作。模型存储是一个包含经过训练的模型的池子。由于这些模型很大,所以它们存储在存储设备上。



下面是该模型与其他模型在不同数据集上的性能比较:



基于贝叶斯优化和最优传输的神经结构搜索(2018:Neural Architecture Search with Bayesian Optimisation and Optimal Transport

这篇论文提出了一种基于高斯过程(贝叶斯优化,即 BO)的神经结构搜索框架 NASBOT。这是通过在神经网络体系结构的空间中开发一个距离度量来实现的,该距离度量可以通过最优传输程序来计算。


作者提出了一种神经网络结构的(伪)距离,称为 OTMANN(神经网络结构的最优传输度量),可以通过最优传输程序进行快速计算。他们还开发了一个 BO 框架来优化神经网络结构上的函数,称为 NASBOT(使用贝叶斯优化和最优传输的神经结构搜索)。


为了实现 BO 方案,本文提出了一种神经网络结构的核函数,并给出了一种优化神经网络结构获取函数的方法,它采用进化算法对获取函数进行优化。


这个方法有一个初始的网络池,并计算这些网络上的获取函数。然后该网络池的一组 Nmut 个突变被生成出来。首先要做的就是从被评估的网络集合中随机选择 Nmut 个候选对象,这样那些具有较高的函数值的网络更有可能被选中。然后对每个候选对象进行修改,以生成一个新的体系结构。


可以通过增加或减少一个层中的计算单元数量、添加或删除层,或更改现有层的连接结构来更改体系结构。


最后一步是评估这些 Nmut 突变的获取函数,将其添加到初始池中,并重复指定的次数。在实验中,作者使用 NASBOT 来优化获取。通过实验,他们得出结论,NASBOT 的性能优于用于优化采集的进化算法。


来源:https://arxiv.org/abs/1802.07191


来源:https://arxiv.org/abs/1802.07191


与其他模型相比,NASBOT 的性能如下图所示:



SNAS:随机神经结构搜索(ICLR 2019:SNAS: Stochastic Neural Architecture Search

这篇论文的作者提出了随机神经结构搜索(SNAS)。SNAS 是 NAS 的端到端解决方案,在同一轮的反向传播中同时训练神经算子参数和体系结构分布参数。在此过程中,它维护了 NAS 流程的完整性和可微性。


作者将 NAS 重新表述为单元中搜索空间的联合分布参数的优化问题。搜索梯度被用于,利用梯度信息进行泛化的可微损失的体系结构搜索。这种搜索梯度与基于增强学习的 NAS 优化了相同的目标,但为结构决策分配分数时效率更高。


如下所示,搜索空间使用一个有向无环图(DAG)表示,称为父图。在图中,节点 xi 代表隐式表示。边(i, j)表示要在节点之间选择的信息流和操作。


来源:https://arxiv.org/pdf/1812.09926.pdf


来源:https://arxiv.org/pdf/1812.09926.pdf


以下是 CIFAR-10 上 SNAS 和最先进的图像分类器的分类错误:



DARTS:可微结构搜索(ICLR 2019:DARTS: Differentiable Architecture Search

这篇论文以可微的方式构造任务,解决了结构搜索的可伸缩性问题。


本文没有在一组离散的候选结构上进行搜索,而是将搜索空间放宽为连续的。因此,可以通过梯度下降,对体系结构的验证集性能进行优化。基于梯度优化的数据效率提升,使得 DARTS 能够使用更少的计算资源获得出色的性能。该模型的性能也优于 ENAS。DARTS 既适用于卷积网络,也适用于递归网络。


作者寻找一种计算单元作为最终架构的构建模块。通过递归连接,学习单元可以被堆叠成卷积网络或递归网络。一个单元是由 N 个节点的有序序列组成的有向无环图。每个节点都是一个隐式的表示——例如一个特征图——并且每条有向边都与转换节点的一些操作相关联。一个单元格被假定为有两个输入节点和一个输出节点。卷积单元的输入节点定义为前两层的单元输出。最近文献里提到的卷积单元里,它们的输入节点被定义为当前步骤的输入和上一步所携带的状态。对所有中间节点应用缩减操作(例如 concatenation 操作)来生成输出单元。


来源:https://arxiv.org/pdf/1806.09055.pdf


来源:https://arxiv.org/pdf/1806.09055.pdf


该模型与 CIFAR-10 上最先进的图像分类器的比较如下:



原文链接:


https://heartbeat.fritz.ai/research-guide-for-neural-architecture-search-b250c5b1b2e5


2019 年 10 月 23 日 08:072614

评论

发布
暂无评论
发现更多内容

手抖了

shengjk1

随笔杂谈

浅析Python中的列表和元组

王坤祥

Python python升级

Kafka和RocketMQ底层存储之那些你不知道的事

yes的练级攻略

kafka RocketMQ 零拷贝 Mmap

流量明星翻车的“直播卖房”,为什么众盟做成了?

脑极体

熬得住,人生路

shengjk1

随笔杂谈

你看脸吗?

shengjk1

随笔杂谈

每个大火的“线上狼人杀”平台,都离不开这个新功能

ZEGO即构

游戏 RTC 社交

简述Python中变量作用域的规则

王坤祥

Python python升级 Python基础

LeetCode题解:88. 合并两个有序数组,for循环合并数组+sort排序,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

我国开启“逆袭战”,区块链的盛夏来了?

CECBC区块链专委会

云计算 区块链技术

流媒体云时代的声与色,融云铺就的桥与路

脑极体

憋再@官方了,头像加国旗,10行代码给你安排!

王坤祥

Python python升级

架构优化与业务迭代,你会怎么选?

架构精进之路

软件开发

非科班面试阿里,拼多多,银行都问了些啥?

我是程序员小贱

如何理解Python中的可迭代对象、迭代器和生成器

王坤祥

Python python升级

大厂需要你的简历有这些内容!

我是程序员小贱

别让非理性思维毁了你的人生

看山

随笔杂谈 非理性 认知偏差 自控术

我们未曾见过的世界,大到无法想象

王坤祥

ios 极客 apple 苹果 软件推荐

神经网络激活函数为什么要使用非线性函数?

王坤祥

神经网络 激活函数

网站域名备案怎么做?有哪些快速备案的方法?

姜奋斗

网站 备案 网站搭建 域名解析 网站平台

一文搞懂Flink rocksdb中的数据恢复

shengjk1

大数据 flink源码

害怕

shengjk1

随笔杂谈

JAVA位运算

彭阿三

Java 位运算

易观CTO郭炜:如何构建企业级大数据Ad-hoc查询引擎

易观大数据

Cobra 命令自动补全指北

郭旭东

go cobra

低/零代码会让程序员失业吗?

代码制造者

程序员 低代码 零代码 信息化 编程开发

你可能不知道的iPython使用技巧

王坤祥

Python

重点发布!河北行动计划发布!聚焦7大重点任务发展大数据产业

CECBC区块链专委会

区块链技术 落地应用 政策

数据平台、大数据平台、数据中台……你确定能分得清吗?

华为云开发者社区

大数据 数据中台 开发者 数据湖 数据

美丑平等

shengjk1

随笔杂谈

告诉你如何同时拿到腾讯两个部门的offer?

我是程序员小贱

DNSPod与开源应用专场

DNSPod与开源应用专场

神经架构搜索研究指南,只看这一篇就够了-InfoQ