Thomas Elsken 等作者arXiv选自机器之心编译

鸡生蛋与蛋生鸡,纵览神经架构搜索方法


谷歌渐进式的架构搜索CMU 的可微架构搜索,利用神经网络自动搭建不同的神经网络架构已经受到广泛的关注。最近弗莱堡大学的研究者发表了一篇论文纵览不同的神经架构搜索方法,他们从神经网络的搜索空间、搜索策略以及性能评估策略等三个方向探讨了不同的思路与方法。

深度学习感知任务中取得的成功主要归功于其特征工程过程自动化:分层特征提取器是以端到端的形式从数据中学习,而不是手工设计。然而,伴随这一成功而来的是对架构工程日益增长的需求,越来越多的复杂神经架构是由手工设计的。神经架构搜索(NAS)是一个自动架构工程过程,因此成为自动化机器学习的合理发展方向。NAS 可以看做 AutoML 的子领域,与参数优化和元学习有诸多交叉之处。我们根据三个维度对 NAS 方法进行分类:搜索空间、搜索策略及性能评估策略:

  • 搜索空间。搜索空间定义了原则上可以表征的架构。结合有关任务属性的先验知识,可以减少搜索空间的大小并简化搜索。然而,这样做会引入人类偏见,进而阻碍找到超出人类现有知识的新型架构建筑块。

  • 搜索策略。搜索策略详细说明了如何探索搜索空间。它包含了经典的「探索-利用」权衡;一方面,我们需要快速找到性能良好的架构,另一方面,我们应该避免过早收敛到次优架构区域。

  • 性能评估策略。NAS 的目标是找到对未知数据实现高预测性能的架构。性能评估指的是评估这类性能的过程:最简单的选项是对数据执行标准架构训练和验证,但是这样做计算成本昂贵,而且限制了可以探索的架构数量。因此,近期的研究多集中于开发降低这些性能评估成本的方法上。

上面三个方向可以参考图 1 进行说明,本文也是根据这三个维度构建的。

图 1:神经架构搜索方法图解。搜索策略从一个预定义的搜索空间中选择架构 A。该架构被传递到一个性能评估策略,接下来该策略将 A 的评估性能返回给搜索策略。

论文:Neural Architecture Search: A Survey

论文地址:https://arxiv.org/abs/1808.05377v1

摘要:在过去几年中,深度学习在很多方面都取得了显著进步,比如图像识别、语音识别机器翻译等。取得这一进展的一个关键因素是新型神经架构。目前使用的架构大部分都是由专家手动开发的,而这个过程非常耗时且易出错。正因如此,人们对于自动神经架构搜索的方法越来越感兴趣。我们对这一研究领域的现有工作进行了概述,并按照搜索空间、搜索策略和性能评估策略三个维度对其进行了分类。

2 搜索空间

搜索空间定义了 NAS 方法在原则上可能发现的神经架构。我们现在讨论最近的研究成果中常见的搜索空间。

链式结构神经网络空间是一个相对简单的搜索空间,如图 2(左)所示。链式结构神经网络架构 A 可以写成一个 n 层序列,其中第 i 层接收第 i-1 层的输出作为输入,而第 i 层的输出则作为第 i + 1 层的输入,即 A = Ln ◦ . . . L1 ◦L0。然后将搜索空间参数化为:(i)最大层数 n 可能是无界的;(ii)每一层都可以执行的操作类型,如池化层、卷积层,或更高级的层类型,如深度可分离卷积层(Chollet, 2016)或扩张卷积层(Yu and Koltun, 2016);(iii)与操作相关的参数,如卷积层的滤波器数、核大小和步长,或者全连接网络(Mendoza et al, 2016)的单元数。要注意(iii)中的参数要以 (ii) 为条件,因此搜索空间的参数化长度不是固定的,而是一个条件空间。

图 2:不同架构空间示意图。图中每个节点与神经网络中的一个层对应,例如卷积层或池化层。不同类型的层由不同的颜色显示。从 L_i 到 L_j 的边缘表示 L_i 接收 L_j 的输出作为输入。图左:链式结构空间的元素。图右:具有额外的层类型、多个分支和跳跃式连接的复杂搜索空间的元素。

近期关于 NAS 的研究(Brock et al, 2017; Elsken et al, 2017; Zoph et al, 2018; Elsken et al, 2018; Real et al, 2018; Cai et al, 2018b),结合了手工构建架构中已知的现代设计元素,例如跳跃式连接,它允许构建具有多分支的复杂网络,如图 2 所示(右)。

受到手动使用不同基元构建神经网络架构的激励(Szegedy et al, 2016; He et al, 2016; Huang et al, 2017),Zoph 等人(2018)提议搜索这种基元(将其称为单元),而不是整个架构。他们优化了两种不同的单元:一种保留输入维度的常规单元,另一种是缩小空间维度的缩减单元。如图 3 所示,最终的架构是通过以预定义的方式堆叠这些单元来构建的。

图 3:单元搜索空间图解。左图:两个不同的单元:常规单元(上)和缩减单元(下)(Zoph et al, 2018)。右图:按顺序堆叠单元构建的架构。注意:单元也可以以更复杂的方式组合,例如在多分支空间中,简单地用单元替换层。

与上面讨论的空间相比,这一搜索空间有两大优势:

搜索空间大幅减小,因为单元可能相对较小。例如,Zoph 等人(2018)估计,与之前的成果(Zoph and Le, 2017)相比,这一搜索空间的速度提高了 7 倍,而且性能更好。

通过调整模型中使用的单元数量,可以更容易地将单元转移到其他数据集。Zoph 等人(2018)将 CIFAR-10 上优化后的单元转移到了 ImageNet 数据集并实现了当前最佳性能。

3 搜索策略

许多不同的搜索策略可以用来探索神经架构空间,包括随机搜索、贝叶斯优化、进化算法、强化学习(RL)和基于梯度的方法。从历史上看,进化算法在几十年前就已经被许多研究人员用来演化神经结构(以及它们的权重)。

为了将 NAS 构造为强化学习问题(Baker et al, 2017a; Zoph and Le, 2017; Zhong et al, 2018; Zoph et al, 2018),神经架构的生成可以视为智能体选择的动作,动作空间和搜索空间相同。智能体获得的奖励基于已训练架构在不可见数据上的性能评估。不同的 RL 方法在表示智能体的策略和如何优化它们存在差异:Zoph 和 Le(2017)使用循环神经网络(RNN)策略对一个字符串进行序列采样,该字符串反过来对神经架构进行编码。Baker 等人利用 Q-learning 训练策略,该策略依次选择层的类型和对应的参数

 Cai 等人提出了一个相关方法,将 NAS 构建为序列决策过程:在他们的方法中,状态是当前(部分训练的)架构、奖励是对架构性能的估计,并且该动作对应于遗传算法中应用的 function-preserving 突变,也称为网络态射。

使用 RL 的另一种代替方法是优化神经架构的进化算法。早期的神经进化算法使用遗传算法来优化神经架构及其权重;然而,当扩展到具有数百万个权重的现代神经架构时,它就回天乏术了。

更新的神经进化算法(Real et al, 2017; Suganuma et al, 2017; Liu et al, 2018a; Real et al, 2018; Miikkulainen et al, 2017; Xie and Yuille, 2017; Elsken et al, 2018)使用基于梯度的方法来优化权重,而进化算法仅用于优化神经结构本身。

Real 等人(2018)在一项用例研究中对比了强化学习、进化和随机搜索,得出的结论是:强化学习和进化在最终测试准确度方面表现相当,进化的随时性能更好,并找到了更精简的模型。

贝叶斯优化(BO)是参数优化中最流行的方法之一,但还没有被许多团体应用到 NAS 中,因为典型的 BO 工具箱基于高斯过程并关注低维连续优化问题。架构搜索空间也以分层的方式被搜索,如与进化一起(Liu et al, 2018a)或通过基于序列模型的优化(Liu et al, 2017)。

与上述无梯度优化方法相比,Liu 等人(2018b)提出用搜索空间的连续松弛方法来实现基于梯度的优化:研究者从一系列运算 {O_1, . . . , O_m} 中计算凸组合,而不是固定要在特定层执行的单个运算 O_i(如卷积或池化)。

4 性能评估策略

前一章节讨论了搜索策略,即希望机器能自动搜索到一个神经网络架构 A,并能最大化它在某些性能度量上的表现,这些度量可能是在未知数据上的准确率等。为了引导神经架构的搜索过程,这些策略需要评估当前搜索到架构 A 的性能。最简单的方式即在训练集中训练搜索到的架构 A,并在验证数据中评估它的性能。然而,从头训练这样的一个架构经常导致 NAS 算法需要数千 GPU 和数天的时间,这种计算力的需求太大(Zoph and Le, 2017; Real et al, 2017; Zoph et al, 2018; Real et al, 2018)。

为了降低计算力负担,我们完全可以基于完整训练后实际性能的低保真度度量来评估性能,这也可以称为代理度量。这种低保真度包括更短的训练时间((Zoph et al, 2018; Zela et al, 2018)、在子数据集上训练(Klein et al, 2017a)、在低分辨率图像上训练(Chrabaszcz et al, 2017)、或者在每一层使用较少卷积核的网络上训练(Zoph et al, 2018; Real et al, 2018)等。虽然这些低保真度的近似方法降低了计算成本,但它们同样在估计中也引入了偏差,这样性能通常会被低估。不过只要搜索策略仅依赖于排序不同的架构,那么相对排序仍然是稳定的,这也就不是什么问题。然而,最近的研究表明,当简单的近似和完整评估之间的差异太大,相对排序的变化可能会非常大(Zela et al, 2018),我们需要逐渐增加保真度(Li et al, 2017; Falkner et al, 2018)。

5 未来方向

在这一节,我们将讨论几个 NAS 当前和未来的研究方向。大多数已有的研究聚焦于图像分类的 NAS。因此我们认为扩展到图像分类之外,将 NAS 应用到更少被探索的领域非常重要。值得注意的是,在这一方向走出的第一步是将 NAS 应用到语言建模(Zoph and Le, 2017)、音乐建模(Rawal and Miikkulainen, 2018)和生成模型(Suganuma et al, 2018);强化学习生成对抗网络或传感融合上的应用可能是未来有潜力的方向。

另一个方向是为多任务问题(Liang et al, 2018; Meyerson and Miikkulainen, 2018)和多目标问题(Elsken et al, 2018; Dong et al, 2018; Zhou et al, 2018)开发 NAS 方法,其中资源有效性的度量与对未见过数据的预测性能一起被用作目标函数

尽管 NAS 的性能非常惊艳,但它无法解释为什么特定架构表现良好,也无法说明独立运行的架构将会有多么相似。识别常见的特性,更好地理解这些对性能有显著影响的机制,并探索这些特性是否能泛化到不同的问题也是未来重要的研究方向。

理论架构搜索神经架构搜索综述论文论文
4
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

遗传编程技术

遗传编程或称基因编程,简称GP,是一种从生物演化过程得到灵感的自动化生成和选择计算机程序来完成用户定义的任务的技术。从理论上讲,人类用遗传编程只需要告诉计算机“需要完成什么”,而不用告诉它“如何去完成”,最终可能实现真正意义上的人工智能:自动化的发明机器。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

元学习技术

元学习是机器学习的一个子领域,是将自动学习算法应用于机器学习实验的元数据上。现在的 AI 系统可以通过大量时间和经验从头学习一项复杂技能。但是,我们如果想使智能体掌握多种技能、适应多种环境,则不应该从头开始在每一个环境中训练每一项技能,而是需要智能体通过对以往经验的再利用来学习如何学习多项新任务,因此我们不应该独立地训练每一个新任务。这种学习如何学习的方法,又叫元学习(meta-learning),是通往可持续学习多项新任务的多面智能体的必经之路。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

特征工程技术

特征工程是利用数据所在领域的相关知识来构建特征,使得机器学习算法发挥其最佳的过程。它是机器学习中的一个基本应用,实现难度大且代价高。采用自动特征工程方法可以省去采用人工特征工程的需求。Andrew Ng 说“挖掘特征是困难、费时且需要专业知识的事,应用机器学习其实基本上是在做特征工程。”

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

推荐文章
暂无评论
暂无评论~