自动机器学习(AutoML)是近年来的一个热门研究方向,比如机器之心曾报道过的谷歌的基于进化算法的神经网络架构搜索方法。近日,来自德国 USU Software AG 和斯图加特大学的两位研究者发布了一篇 AutoML 综述论文,总结了近年来 AutoML 方面的新进展。机器之心整理编译了文章的主体结构,并重点翻译介绍了各种方法的基本思想和未来研究方向,数学描述和实验评估等细节请参阅原论文。
顺便一提,这篇论文着重于经典机器学习,对神经网络着墨不多,对神经架构搜索感兴趣的读者请参阅机器之心的专栏文章《神经网络架构搜索(NAS)综述(附 AutoML 资料推荐)》
论文地址:https://arxiv.org/abs/1904.12054
机器学习已经成为我们日常生活中很多方面的重要组成部分。但是,构建表现优良的机器学习应用需要非常专业的数据科学家和领域专家。自动机器学习(AutoML)的目标是让领域专家即使没有统计学和机器学习方面的广泛知识也能自动构建机器学习应用,从而减少对数据科学家的需求。这篇综述论文总结了学术界和产业界的 AutoML 方面的近期进展。论文首先将对 AutoML 问题进行整体的阐述,然后会介绍用于解决 AutoML 的各种子问题的方法,最后还会呈现这些方法在合成数据和现实数据上的实验评估结果。
1 引言
机器学习(ML)近年来的重要性与日俱增:自动语音识别、自动驾驶汽车和「工业 4.0」的预测性维护都基于机器学习。现在的机器学习已经能够在曾被认为对计算机而言过于复杂的任务上击败人类,比如 AlphaGo(Silver et al., 2017)在围棋上击败了人类冠军。这些案例都是由非常专用和复杂的机器学习流程(ML pipeline)驱动的。
为了构建这样一个机器学习流程,必需一支训练有素的人类专家团队:有机器学习算法和统计学方面渊博知识的数据科学家;往往有特定领域的长期经验的领域专家。这些人类专家需要一起合作,才能构建起合理的机器学习流程,其中包含专门的数据预处理、领域驱动的有意义的特征工程和微调后的模型,这样才能得到出色的预测能力。通常而言,这个过程是一个非常复杂的任务,以一种不断试错的迭代方式执行。也因此,构建优良的机器学习流程需要漫长的时间和高昂的成本。
根据「没有免费的午餐定理(no free lunch theorem)」(Wolpert and Macready, 1997),单个优化算法不可能在所有方面都优于其它所有优化算法。这意味着对所有机器学习任务都普遍更优的机器学习流程是不存在的。因此,不可能将一个表现优良的机器学习流程迁移至新领域后还能表现出色。相反,为了得到最优的结果,必须为每个新数据集构建新的机器学习流程。但是,以人工方式为每个问题都构建一个专用机器学习流程非常耗时间,因此也有很高的成本。因此,实践者往往会使用次优的默认机器学习流程。
AutoML 的目标是通过自动化来改进当今的机器学习应用构建方法。通过自动化超参数优化(HPO)等繁琐的任务,AutoML 能助益机器学习专家实现更高的效率;也能让领域专家可以无需依赖数据科学家,靠自己构建机器学习流程。
AutoML 其实并非一个新趋势。这一趋势从 1990 年代就开始了,那时已有商业解决方案通过网格搜索为所选分类算法提供自动 HPO(Dinsmore, 2016)。2004 年,第一个有效的 HPO 策略问世。对于有限的设定(比如调整某个支持向量机的 C 和 γ (Chen et al., 2004)),研究证明引导式搜索策略能在更短的时间内得到比网格搜索更好的结果。2004 年还发表了首个用于自动特征选择的方法(Samanta, 2004)。
全模型选择(Escalante et al., 2009)是首次尝试自动构建完整的机器学习流程,其做法是同时选择一个预处理、特征选择和分类算法,并调整每个方法的超参数。经过在多种数据集上的测试,这种与领域无关的方法的潜力得到了证明(Guyon et al., 2008)。
自 2011 年开始,研究者们提出了很多应用贝叶斯优化来进行超参数调节(Bergstra et al., 2011; Snoek et al., 2012)和模型选择(Thornton et al., 2013)的不同方法。2015 年出现了首个无需领域知识进行自动特征工程的方法(Kanter and Veeramachaneni, 2015)。
自 2016 年以来,构建任意形状的流程已成为了可能(Olson and Moore, 2016)。2017 和 2018 年,随着多个全球玩家发布商用 AutoML 解决方案(Golovin et al., 2017; Clouder, 2018; Baidu, 2018),AutoML 主题在媒体上受到了很大的关注(Google, 2019)。
与此同时,AutoML 领域的研究得到了很大的推动,实现了很多性能提升。近期的方法能将 AutoML 流程的运行时间从数小时降低至几分钟(Hutter et al., 2018)。
这篇论文回顾和总结了涉及机器学习各方面自动化的研究:确定流程的形状、为流程中的每个阶段选择一个机器学习算法并调节每个算法。此外,文中还分析了最流行的开源 AutoML 框架。这份调查关注的是经典的机器学习,而没有考虑神经网络,尽管仍有很多思想可以迁移用于神经网络。对神经网络的全面概述,尤其是网络架构搜索方面的概述,请参阅 Baker et al. (2016) 和 Zoph and Le (2017)。
本论文的贡献如下:
我们引入了一种数学形式描述,覆盖自动机器学习流程创建的整个过程。
就我们所知,这篇论文是第一篇覆盖构建机器学习流程的每个步骤的 AutoML 技术的调查。
我们在合成数据和现实数据上对所有给出的算法执行了广泛的实验评估。这些实验能在相同条件下为当前的前沿算法提供公平的比较。
这样做能让读者全面地了解当前前沿的 AutoML 算法。本文将介绍自动构建机器学习流程的所有重要阶段,并会评估已有的方法。这能揭示当前方法的局限以及提出新的有待解决的问题。
第 2 节将给出自动构建机器学习流程的数学上坚实可靠的描述。第 3 节将呈现用于确定流程结构的不同策略。第 4 节将介绍用于机器学习模型选择和 HPO 的多种方法,并会提供理论解释。接下来,第 5 和 6 节将分别介绍用于自动数据清理和特征工程的方法。第 7 节将描述用于提升所生成的流程的性能以及降低优化运行时间的措施。第 8 节将简要描述已有的 AutoML 实现和框架。第 9 节将在多个不同数据集上评估这些框架。最后,第 10 节会阐述未来的研究机会,第 11 节是一个简短总结。
2 问题描述
机器学习流程是多种算法的顺序组合,这些算法可将特征向量转换成目标值,即分类问题的类别标签。我们可以不失一般性地将这些算法分为三个集合:数据清理、特征工程和建模。
机器学习流程:流程的结构可被视为一个任意的有向无环图(DAG),其中每个节点都表示一个数据处理、特征工程或建模算法,边则表示输入数据集在不同算法间的流动。每个机器学习流程都可视为一个三元组,其中包含结构的 DAG、每个节点所选算法的向量、每个所选算法的超参数的向量。
流程性能:给定一个流程,可通过一个损失(loss)度量来计算流程的性能。
流程创建问题:给定一组算法且它们有可参考的超参数域。流程创建问题是指选出一套能够最小化损失的联合算法和超参数。
3 流程结构创建
构建机器学习流程的首个任务是创建流程结构。这一主题也被称为架构搜索,已在设计神经网络方面备受关注,比如(Zoph and Le, 2017; Liu et al., 2017)。在经典的机器学习方面,这一主题针对自然语言处理等多种特定问题加以解决(Agerri et al., 2014)。让人惊讶的是,还没有人发表针对通用流程构建的文章。然而,常见的最佳实践表明存在一种基本的机器学习流程布局,如图 2 所示(Kégl, 2017; Ayria, 2018; Zhou, 2018)。
首先,通过多个不同步骤清理输入数据,比如插补缺失的数据和对类别输入进行 one-hot 编码。接下来,在特征工程阶段选择相关特征和创建新特征。这个阶段高度依赖于底层领域。最后,在之前选择的特征上训练单个模型。
图 2:机器学习流程原型。首先清理数据,然后提取特征,最后经过转换的输入通过一个机器学习模型以创建预测结果。
3.1 固定的形状
很多 AutoML 框架并不解决结构选择问题,因为它们被预设为了一种固定的流程形状,如图 3 所示,比如(Komer et al., 2014; Feurer et al., 2015a; Swearingen et al., 2017; Parry, 2019; McGushion, 2019)。这个流程很接近最佳实践的流程,是一个线性序列:包含多个数据清理步骤、一个特征选择步骤、一个变量与处理步骤和刚好一个建模步骤。预处理步骤会从已知的众多算法中最多选择一个算法,比如各种矩阵分解算法。在数据清理方面,流程形状各有不同,但通常会实现插补和缩放两个步骤。
图 3:大多数 AutoML 框架使用的固定机器学习流程。在实现数据清理步骤方面略有不同。
通过使用固定形状的流程,就完全消除了确定图结构的复杂性;流程创建问题就被简化为了选择预处理算法和建模算法的问题。尽管这种方式能极大简化流程创建问题,但在复杂数据集上会得到较差的流程表现。但是,对于很多有高质量训练数据的问题而言,简单的流程结构可能就足够了。
3.2 可变形状
为了获得最好的结果,数据科学专家通常会为给定的机器学习任务构建高度专用的流程。固定形状的机器学习流程缺乏适应特定任务的灵活性。现有的几种自动构建灵活流程的方法全都基于同样的原理思想:包含一组机器学习原语(即基本算法)、一个克隆数据集的算子和一个组合多个数据集的算子(称为数据集复制器和特征联合)。数据集复制器(data set duplicator)的作用是在流程中创建并行的路径;并行路径可以通过特征联合(feature union)加入。图 4 展示了使用这三种算子的一个流程。下面要介绍的多种方法都是通过结合这些原语来完成一个流程。
图 4:针对特定机器学习任务的专用机器学习流程
3.2.1 遗传编程
自动构建灵活的机器学习流程的首个方法来自 Olson and Moore (2016)。Olson et al. (2016a) 基于遗传编程(Banzhaf et al., 1997)。遗传编程是一种迭代式的、与领域无关的优化方法,源自生物演化思想。给定一个问题的一组可能的解(称为一个「种群(population)」,使用一个适应度函数(fitness function)来进行评估。基于每个个体的表现,它们特定比例的遗传物质会被传递给下一代。表现差的个体会灭绝,而表现好的个体会产生后代。后代要么通过两个亲代交配来创建,要么通过单个亲代突变来创建。这一流程重复固定数代,并且每代都有固定数量的个体;第一代通常是随机生成的。最后,将表现最佳的个体用作最终解。图 5 给出了这一流程的图示。
图 5:遗传编程过程图示。初始种群是随机创建的。整个种群会根据一个目标函数进行评估,然后选出一些表现最佳的个体。然后使用这些亲代来生成一个新种群。
遗传编程已经在自动程序代码生成方面被使用了很长时间(Poli et al., 2008)。但是,在流程结构选择方面的应用近期才开始。首先,创建随机的流程结构并在训练数据集上进行评估。再选出表现最佳的流程以创建下一代。通过选择流程的子图可以将两个个体结合起来组成一个新图。通过向图添加随机节点、移除随机选择的节点或用新节点替换随机选择的节点,都可以实现突变。通过这种方式,可以生成任意形状的流程。但是,在目标函数评估的数量方面,遗传编程并不非常高效(Cooper and Hinde, 2003)。因为每次目标函数评估都有相对高的成本,所以这一方法需要相当长的优化周期。
3.2.2 分层规划
分层任务网络(HTN)(Ghallab et al., 2004)是一种更直接的方法。HTN 是一种源自自动规划的方法,会递归地将复杂问题划分为更简单的子问题。这些子问题会再次被分解,直到剩下基本的终端操作。这一流程可以表示为一个图结构。每个节点表示一个(可能不完整的)流程;每条边表示都一个将复杂步骤分解为子步骤的过程。当所有的复杂问题都被替换为机器学习原语时,就创建出了一个机器学习流程。使用这种抽象方法,寻找机器学习流程结构的问题就被简化为了寻找图中最佳叶节点的问题(Mohr et al., 2018)。
3.2.3 Self-Play
self-play(Lake et al., 2017)是一种强化学习策略,近来由于 AlphaZero(Silver et al., 2017)的成功而备受关注。这种算法不是从固定的数据集中学习,而是通过自我对抗来创建新的训练示例。流程结构搜索也可被视为一场博弈(Drori et al., 2018):机器学习流程和训练数据集是当前的盘面状态 s;每一步玩家都可从三个动作 a 中选择一个:添加、移除或替换流程中的单个元素。流程的损失被用作分数 ν(s)。
在一个迭代过程中,为了评估流程 s_i,使用一个神经网络来预测其分数 ν(s_i) 和在该状态选择某个动作的概率 P(s_i , a)。如果没有训练,这些预测基本都是随机的。因此,这些预测会被传递给一个蒙特卡洛树搜索(Browne et al., 2012)。在这个树中,每个节点表示一个流程结构,每条边都是一个可能的动作。基于状态和动作概率选择一个节点。如果之前没有访问过该节点,则在数据集上评估据此得到的流程,并使用其表现来更新神经网络。有最低预测损失的节点被选作下一个状态。这三个步骤不断重复,直到耗尽训练预算。self-play 方法的一个常见缺点是收敛速度慢(Brandt et al., 2010),这使得这一方法相当不适用于 AutoML。
4 算法选择和超参数优化
给定一个图的形状、一个损失函数、一个训练集和一个验证集。对于图中的每个节点,都必须选择一个算法,并通过超参数配置它。这一节将介绍各种用于算法选择和配置的方法。
Thornton et al. (2013) 首先引入了一个之后被其他很多人采用的概念,即:组合式算法选择与超参数优化(CASH)问题。这一概念是指不先后分别执行算法选择和超参数优化,而是两者同时执行。这一问题被构建为了一个黑盒优化问题,进而可得到相当类似于前述流程创建问题的最小化问题。
下面将介绍一些不同的优化策略。
4.1 网格搜索
网格搜索是首个用于系统性探索配置空间的方法。顾名思义,网格搜索会创建一个配置网格并评估所有配置。
4.2 随机搜索
随机搜索(Anderson, 1953)也是一种著名方法,即通过为每个超参数独立地随机选择值来生成候选配置。通过遍历分层的依赖图,可以隐式地处理条件超参数。这一过程重复 k 次。图 7 描述了通过随机选择为两个超参数选择的配置。
图 7:用于最小化 Branin 函数(见 9.2 节)的不同搜索策略的受测配置。网格搜索测试的是均匀分布在二维搜索空间上的配置。随机搜索随机选择配置。引导式搜索策略会利用表现良好区域的知识,会更多地测试接近局部最小值的配置。
4.3 序列式基于模型的优化
CASH 问题可被视为一个回归问题:可基于被测试的超参数配置使用标准的回归方法近似损失函数。这一概念可通过算法 1 给出的序列式基于模型的优化(SMBO)(Bergstra et al., 2011; Hutter et al., 2011; Bergstra et al., 2013)体现。
算法 1:序列式基于模型的优化
图 8:SMBO 过程示意图。一组配置和分数元组会在初始化过程中创建。这些样本可用于创建目标函数的回归模型。接下来,选择一个新的配置并通过目标函数评估它。最后,将新元组加入到样本集中。
4.4 进化算法
SMBO 的一种替代方法是进化算法(Coello et al., 2007)。进化算法是多种受生物进化启发的基于种群的优化算法的集合。进化算法的所有实例都遵循图 5 给出的同样的抽象过程。首先,随机创建一个初始的种群。然后,使用一个目标函数评估当前一代中每个个体的表现,并选出表现最佳的个体。再基于这些亲代创建新一代。这三个步骤不断重复直到结束。
一般而言,进化算法适用于各种各样的优化问题,因为它不需要关于目标函数的假设。由于新一代的创建或多或少是随机的和未加引导的,所以相比于贝叶斯优化,进化算法在目标函数评估数量方面并不非常高效。但是,因为一代中的所有个体都是彼此独立地评估的,所以这一方法尤其适合在集群中分散计算负载。
产生新一代的方法取决于特定的算法实例。下面是两种常见的算法实例。
4.4.1 遗传编程
4.4.2 粒子群优化
4.5 多臂赌博机学习
「利用与探索」问题方面一个得到了广泛研究的模型是多臂赌博机问题(Robbins, 1952)。一个赌博者能够使用 K 台不同的老虎机,且每台机器都基于一个未知的分布提供奖励。这位赌博者可以操作任意他想使用的机器固定次数。为了最大化他的奖励,这位赌博者必须尽快找到有最高奖励概率的老虎机,并一直使用它。
4.6 梯度下降
梯度下降(Bottou, 2010)是一种非常强大的优化方法,是一种迭代式的最小化算法。该算法从一个随机点开始,沿最大梯度的相反方向移动以选择下一个点。这样,就会创造一个向局部最小值收敛的单调序列。如果目标函数是凸函数,则这个局部最小值即是全局最小值。
5 自动数据清理
数据清理是构建机器学习流程的一个重要方面。数据清理的目标是通过移除数据错误来提升数据集的质量。常见的错误类别是输入数据缺失值、无效值或多个数据集的项之间缺乏联系(Rahm and Do, 2000)。
6 自动特征工程
特征工程是指根据给定的数据集为后续的建模步骤生成和选择特征的过程。这个步骤对完整的机器学习流程而言至关重要,因为整体的模型表现非常依赖于可用的特征。通过构建优良的特征,机器学习流程的表现可以增加很多倍(Pyle, 1999)。但是,有太多无关特征会增加训练时间(维度灾难),还可能导致过拟合。特征工程任务非常特定于领域,而且非常难以泛化。即使对于数据科学家,也很难了解一个特征的影响,因为领域知识是必需的。由此导致的后果是,特征工程主要是由试错驱动的人工的且耗时的任务。
7 性能提升
这一节将介绍不同的性能提升。这些提升覆盖多种技术,有加速优化流程的技术,也有提升所生成的机器学习流程的整体性能的技术。
7.1 多保真近似
7.2 早停
7.3 可扩展性
7.4 集成学习
7.5 元学习
8 已有框架
这一节将介绍最流行的开源 AutoML 框架。首先会给出 CASH 算法的实现和分析,接下来会讨论用于创建完整机器学习流程的框架。
8.1 CASH 算法
表 1:不同 CASH 算法的比较。报告了使用过的求解器,并且涉及是否考虑了搜索空间的结构(Λ)、是否实现了并行化以及是否存在单次估计的超时。
8.2 AutoML 框架
表 2:不同 AutoML 框架的比较。报告了使用过的 CASH 求解器和流程结构。此外,还列出了是否是集成学习(Ensem.)、元学习(Meta)、流程的并行评估或是否支持单次评估的超时。
9 实验
这一节提供了不同 CASH 算法和流程构建算法的实验评估。下面展示了部分结果,更多结果请参阅原论文。
表 5:所有被测 CASH 求解器在 OpenML100 基准套件上的结果。本表格给出了平均误分类率、运行时间(小时)和每个 CASH 算法的失败评估的百分比。
表 6:几种 AutoML 框架在所选的 OpenML 数据集上的误分类百分率。标注有 * 的数据集的平均误分类率大于 30%。标注有 – 的项始终不能生成一个机器学习流程。
10 讨论和未来研究机会
目前而言,AutoML 完全聚焦于监督学习。尽管某些方法可能也适用于无监督学习或强化学习,但研究者总是会针对监督学习测试他们提出的方法。此外,所有已有的高级 AutoML 框架都只支持分类和回归任务。针对无监督学习或强化学习的专门研究可以助力 AutoML 框架的发展,进而解决当前还未显露的学习问题。此外,专门的方法也能提升这些任务的性能表现。
当前的大多数文献在处理 CASH 问题时,要么通过引入新的求解器,要么是提升已有方法的表现。可能的解释是 CASH 完全与领域无关,因此相对而言更容易自动化。但是,CASH 仅仅是自动构建机器学习流程方面的一小部分。数据科学家通常会把 60–80% 的时间用在清理数据集和特征工程上(Pyle, 1999),用于微调算法的时间只有 4%(Press, 2016)。这样的分布却与当前的研究努力不匹配。我们没能找到任何覆盖先进数据清理方法的文献。在特征创建方面,所有的方法都基于深度特征合成。在构建灵活的流程方面,目前被提出的不同方法仅有三种。这三个领域中任意方向的进一步研究都有望高度提升自动创建的机器学习流程的整体表现。
目前而言,研究者关注的都是流程创建过程中的单个点。如果将动态形状的流程与自动特征工程和复杂精细的 CASH 方法相结合,有望超越当前已有的框架。但是,研究空间的复杂度也会提升到一个全新层面,这可能需要实现高效搜索的新方法。尽管如此,长期目标应该是自动构建完整流程,且其中每个单个组件都是经过优化的。
AutoML 的目标是完全自动化机器学习流程的创建,以让领域专家能使用机器学习。除了少数一些文献(如 Friedman and Markovitch, 2015; Smith et al., 2017),当前的 AutoML 算法都是以黑箱形式设计的。尽管这对经验不足的使用者而言很方便,但这种方法也有两个重大缺陷:
领域专家有关于数据集的深度知识。使用这些知识,搜索空间可以大幅缩减。
近些年来,机器学习的可解释性日益重要(Doshi-Velez and Kim, 2017)。用户想要能够理解获得模型的方式。使用人工设计的机器学习模型,模型的推理方式往往已经对用户而言未知了。通过自动化创建模型,用户基本上将没有机会理解选择特定流程的原因。
人类引导式机器学习(Langevin et al., 2018; Gil et al., 2019)的目标是向领域专家提出简单的问题以引导对搜索空间的探索。领域专家可以通过自己的经验引导模型创建。这一领域的进一步研究有望得到更深刻的模型,从而更接近真实地刻画现实世界的依赖关系。同时,领域专家可能有机会更好地理解机器学习模型的推理。这能促进对所提出的流程的接纳认可。
AutoML 框架通常有可被用户调节的超参数。但是,这基本上正是 AutoML 一开始就试图解决的同一问题。研究自动设计超参数更少的框架是可行的(Feurer and Hutter, 2018)。
11 总结
自 1990 年代以来,AutoML 主题已行过千里之路。但是,自动生成的流程还不能超越人类专家水平(Guyon et al., 2016)。AutoML 很可能将继续作为一个热门研究主题,并在不远的将来创造更好的整体 AutoML 框架。