自动机器学习综述
自从计算机时代开始,科学家和工程师们就一直想知道如何像人类一样,给计算机注入学习的能力。艾伦·图灵是第一批提出智能理论的科学家之一,该理论设想有一天计算机能够达到与人类同等的智能水平。从那时起,机器学习领域发生了一系列巨大的飞跃。我们已经看到机器学习在许多情况下击败或至少匹配特定的人类认知能力,例如在ResNet(一种深度残留的网络架构)的情况下超越了人类在图像识别方面的表现,或者微软的语音转录系统几乎达到人类水平的表现。
「机器学习优点」:机器学习的最大好处之一是,它可以应用于人类今天面临的几乎任何问题。然而,有了这些好处,也有一些挑战。
「痛点」:机器学习算法需要针对每个不同的现实场景进行配置和优化。这使得人工操作非常密集,并且从监督开发的人员那里花费了大量的时间。此手动流程也容易出错、效率不高且难于管理。更不用说配置和优化不同类型算法的专业知识的匮乏。
「自动机器学习初衷」:如果配置、调优和模型选择是自动化的,那么部署过程将更加高效,并且人们可以关注更重要的任务,例如模型可解释性、道德规范和业务结果。因此,机器学习模型构建过程的自动化具有重要的现实意义。
进入自动机器学习
注:在自动机器学习的定义中,包括:
- 自动化工程特点
- 自动的模型选择和超参数调优
- 自动神经网络架构选择(NAS)
- 自动部署
这篇文章将探索目前可用于上述每个自动化过程的框架,以帮助读者了解今天在自动化机器学习方面可能出现的情况。在探讨每个过程之前,让我们简要地讨论端到端机器学习流程,并指出每个过程在该流程中发生的位置。
端到端机器学习流程
从上面的图可以明显看出,机器学习流程不仅仅包括建模阶段。它还包括「问题定义、数据收集和部署」。这篇博文的重点仍将放在“「建模」”和“「部署」”阶段。这就是我们想从自动化的角度来探索的。如果建模和部署阶段可以自动化,那么专家就可以更多地关注问题定义、数据理解、遵守道德标准,并确保部署的模型为业务生成有影响的见解,而不会引起任何道德问题。
对于建模和部署阶段的每个部分,我们将探索来自开源社区、供应商(如谷歌、Microsoft和Amazon)和其他参与者的框架。
自动特征工程
通常情况下,机器学习算法的良好性能在很大程度上取决于模型使用的「特征的质量」。对于数据科学家来说,特征工程是一项非常手工和劳动密集型的任务,它涉及大量的试验和错误、深入的领域知识,以及(目前)机器不擅长的东西:直觉。自动化特征工程的目的是「迭代地创建新的特征集」,直到ML模型达到令人满意的准确度分数。现在让我们来框定我们试图自动化的过程。
功能工程流程通常是这样的:收集数据集,例如,从电子商务网站收集关于客户行为的数据集。作为一个数据科学家,你通常会喜欢创建新的功能,如果还没有在数据中,如:
- “客户下单的频率”
- “上次购买后的天数或小时数”
- “顾客通常购买的商品类型”
其目的是创建一种算法,「自动从数据生成或综合这些类型的特征」。现在我们将列出并简要描述一些用于自动化特性工程的框架。请注意,在一种称为深度学习的专门机器学习形式中,通过深度学习模型层中的多重矩阵转换自动从图像、文本和视频中提取特征是很典型的。我们在这篇文章中讨论的特性工程类型主要涉及结构化的事务和关系数据集,尽管我们也将简要地讨论深度学习中的特性工程。
框架:
- 「数据科学机器」是由麻省理工学院的Max Kanter和Kalyan Verramachaneni进行的一个研究项目。他们的研究论文概述了深度特征合成算法的内部工作原理,该算法使用原语的概念来为实体(数据中唯一的观察)和实体之间的关系生成特征。基本类型本质上是应用于数据的数学函数(sum、mean、max、min、average等),这些函数返回不区分大小写的数字结果,并且可以由人类解释为表示不同的东西。在我们的电子商务示例中,sum可用于计算针对特定客户的所有订单所花费的美元金额。以飞机票务平台为例,它可用于计算客户已购买的当年机票的数量。不同的用例但是相同的数学原语。这是在Featuretools Python库下开源的,可以尝试下载并试用它。Featuretools是由Feature Labs开发的,它将数据科学机器研究论文中的工作进行了操作化。Feature Labs是数据科学机器的创造者Max和Kalyan创建的一家公司。
- DataRobot使用一个称为模型蓝图的概念来实现自动化特征工程,该概念在机器学习管道中堆叠了不同的预处理步骤。特性工程部分不像在Featuretools中那样利用原语的概念。然而,它确实对数据应用了一些标准的预处理技术(基于所使用的ML算法,例如随机森林、逻辑回归等),如单热编码、输入、类别计数、在自由文本列中出现的n个字符标记、比率等。
- H2O的无人驾驶人工智能是一个自动机器学习的平台。它可以用于自动化特性工程、模型验证、模型调优、模型选择和模型部署。在这一部分,我们将只讨论无人驾驶AI的自动特性工程部分。无人驾驶智能支持一系列的所谓的“transformers”,可以应用于一个数据集。
- tsfresh是一个用于从时间序列数据中计算和提取特征的Python库。它提取了中位数、均值、样本熵、分位数、偏度、方差、值计数、峰数等特征。它没有泛化所有类型的数据集。它更针对于时间序列数据。但是,它可以与上面提到的其他工具一起使用。
自动化特性工程仍然是一项难以完成的任务。也有很多不支持自动化特性工程的争论,因为它会产生不正确的结果,或者用不透明的方式使用错误的标签对观察结果进行分类。因此,自动化特性工程需要谨慎对待,特别是在高度管制的环境中,比如金融服务,在每个决策过程中,可解释性和可说明性都是至关重要的。
自动选择模型和超参数调整
一旦特征被预处理,你需要找到一个机器学习算法来训练这些特征,并能够预测新观察的目标值。与功能工程不同,模型选择具有丰富的选择和选项。有「聚类模型、分类和回归模型、基于神经网络的模型、基于关联规则的模型」等等。每个算法适用于某个类的问题和自动模型选择这个模型我们可以过滤空间贯穿所有合适的模型为一个特定的任务,选择一个产生最高精度(如最低AIC)或最低误码率(例如RMSE)。可以理解的是,没有一种机器学习算法在所有数据集上都表现得最好(No Free Lunch theory),有些算法需要进行超参数调优。事实上,在选择模型时,我们倾向于尝试不同的变量、不同的系数或不同的超参数。在回归问题中,存在一种方法,可以使用F-test、t-test、ajdusted R-squared等技术自动选择最终模型中使用的预测变量。这种方法称为逐步回归。但是这种方法容易出错。
自动选择模型的框架:
- auto-sklearn是由Mathias Feurer, Aaron Klein, Katharina Eggensperger等人创建的Python库。这个库主要处理机器学习中的两个核心过程:从分类和回归算法的广泛列表中选择算法和超参数优化。这个库不执行特性工程,因为数据集特性是通过组合使用数学原语(如Featuretools)来创建新特性的。Auto-sklearn类似于Auto-WEKA和Hyperopt-sklearn。下面是auto-sklearn可以从决策树、高斯朴素贝叶斯、梯度增强、kNN、LDA、SVM、随机森林和线性分类器(SGD)中选择的一些分类器。在预处理步骤上,它支持以下几个方面:内核主成分分析,选择百分位数,选择率,一热编码,归位,平衡,缩放,特征聚集,等等。同样,从通过组合现有特性来丰富数据集的角度来看,这些都不能理解为特性工程步骤。
- 有些算法会自动地通过一系列不同的变量配置来优化某些指标。这类似于寻找可变的重要性。通常,通过理解变量存在的上下文和域,人们可以很好地完成这项工作。例如:“夏季销量增加”或“最昂贵的商品来自西伦敦居民”。这些变量可以由人类领域专家自然地暗示出来。然而,还有另一种方法来理解一个变量的重要性,那就是看这个变量在统计上有多重要。这是由决策树(使用所谓的基尼指数或信息增益)等算法自动完成的。随机森林也这样做,但与决策树不同,随机森林运行多个决策树,以创建引入了随机性的多个模型。
- 对于时间序列数据,我们倾向于讨论汽车。R中的arima包使用AIC作为优化指标。自动生成的算法。arima在后台使用Hyndman-Khandakar来实现这一点,在下面的OText书中有详细的解释。
- 如前所述,H2O无人驾驶AI可以用于自动化特征工程。它还可以用来自动训练多个算法在同一时间。这是由h2o实现的。automl包。它可以自动训练您的数据使用多种不同的算法与不同的参数,如GLM, Xgboost随机森林,深度学习,集成模型,等等。
- DataRobot还可以用于同时自动训练多个算法。这是通过使用经DataRobot科学家调整过的模型实现的,因此能够使用预先设置的超参数运行几十个模型。它最终会选择一个准确率最高的算法。它还允许数据科学家手动干预和调整模型,以提高准确性。
- 微软在9月宣布了自己的自动化机器学习工具包。事实上,该产品本身被称为automatic ML,属于Azure机器学习产品。微软的自动ML利用协同过滤和贝叶斯优化来搜索机器学习的空间。Microsoft指的是数据预处理步骤、学习算法和超参数配置的组合。在上面讨论的许多模型选择技术中,ML学习过程中自动化的典型部分是超参数设置。微软的研究人员发现,只调优超参数有时可以与随机搜索相媲美,因此理想情况下,整个端到端流程应该是自动化的。
- 谷歌也在这个领域进行了创新,推出了谷歌云自动化。在Cloud AutoML谷歌中,通过只从用户获取标记数据并自动构建和训练算法,数据科学家能够训练计算机视觉、自然语言处理和翻译的模型。
Google CloudML
- TPOT是用于自动化机器学习的Python库,它利用遗传编程优化机器学习管道。ML管道包括数据清理、特征选择、特征预处理、特征构建、模型选择和参数优化。TPOT库利用了scikit-learn中可用的机器学习库。
TPOT Machine Learning Pipeline
- Amazon Sage Maker提供了建模、培训和部署的能力。它可以自动调整算法,为了做到这一点,它使用了一种叫做贝叶斯优化的技术
- HyperDrive是微软的产品,是为全面的超参数探索而建立的。超参数搜索空间可以用随机搜索、网格搜索或贝叶斯优化来覆盖。它实现了一个调度器列表,您可以选择通过联合优化质量和成本来提前终止探索阶段。
神经网络结构选择
在机器学习的世界中,最乏味的任务之一就是设计和构建神经网络架构。通常情况下,人们会花费数小时或数天的时间尝试使用不同的超参数迭代不同的神经网络体系结构,以优化手头任务的目标函数。这非常耗时,而且容易出错。「谷歌引入了利用进化算法和强化学习实现神经网络搜索的思想」,以设计和寻找最优的神经网络结构。本质上,这是在训练创建一个层,然后堆叠这些层来创建一个深层的神经网络架构。近年来,这一领域的研究引起了广泛关注,并提出了许多研究论文。以下是该领域所有研究论文的最新列表:http://www.ml4aad.org/automl/literat-on-neuralarchitecturesearch/。值得注意的研究论文有:
- NASNet-学习可扩展的图像识别的可转移的体系结构
The NASNet algorithm
- AmoebaNet-基于AmoebaNet正则化演化的图像分类器体系结构搜索
- ENAS-高效的神经结构搜索
自动部署
机器学习社区的很多关注都集中在学习算法的开发上,而不是端到端机器学习流程中最重要的部分,那就是ML模型的部署和产品化。在将机器学习模型部署到生产环境中存在许多固有的挑战。
有一些公司和开源项目正在尝试将这个过程自动化,并尽可能减少数据科学家的痛苦,因为他们不一定具备DevOps技能。以下是在这个领域工作的框架和公司的列表:
- Seldon-提供了一些方法来包装用R、Python、Java和NodeJS构建的模型,并将其部署到Kubernetes集群中。它提供与kubeflow、IBM用于深度学习的fabric、NVIDIA TensorRT、DL推理服务器、Tensorflow服务等的集成。
- Redis-ML-是Redis(内存中分布式键值数据库)中的一个模块,它允许将模型部署到生产环境中。它目前只支持以下算法:随机森林(分类和回归)、线性回归和逻辑回归。
- Apache MXNet的模型服务器用于服务从MXNet或Open Neural Network Exchange (ONNX)导出的深度学习模型。
- Microsoft机器学习服务允许您将模型作为web服务部署在可伸缩的Kubernetes集群上,并且可以将模型作为web服务调用。
- 可以使用Amazon SageMaker将模型部署到HTTPS端点,应用程序利用该端点对新数据观察进行推断/预测。
- 谷歌云ML还支持模型部署和通过对托管模型的web服务的HTTP调用进行推断。默认情况下,它将模型的大小限制为250 MB。
- H2O通过利用Java mojo(优化的模型对象)的概念来支持模型的部署。mojo支持自动、深度学习、DRF、GBM、GLM、GLRM、K-Means、堆栈集成、支持向量机、Word2vec和XGBoost模型。它与Java类型环境高度集成。对于非java编程模型(如R或Python),可以将模型保存为序列化对象,并在推断时加载。
- TensorFlow服务用于将TensorFlow模型部署到生产环境中。在几行代码中,您就可以将tensorflow模型用作预测的API。
- 如果您的模型已经被训练并导出为PMML格式,那么Openscoring可以帮助您将这些PMML模型作为推断的REST api提供服务。
- 创建GraphPipe的目的是将ML模型部署与框架特定的模型实现(例如Tensorflow、Caffe2、ONNX)解耦。
参考文献:
[1] J. M. Kanter and K. Veeramachaneni, “Deep feature synthesis: Towards automating data science endeavors,” in IEEE International Conference on Data Science and Advanced Analytics, 2015, pp. 1–10.
[2] The Dangers of Automated Model Selection http://www.learnbymarketing.com/743/dangers-of-auto-model-select/
[3] Finding Important Variables in Your Data http://www.learnbymarketing.com/603/variable-importance/