机器学习项目中最折腾人的环节是什么?是特征工程?是模型选择?还是参数调优?
先来看看机器学习项目实战可划分为哪几个具体阶段。
《零基础学机器学习》一书将机器学习项目的实战过程归纳如下:
问题定义,即抓准机器学习应用场景
数据准备和特征工程
模型(算法)的选择
机器学习(训练机器的过程),确定参数和超参数
评估和性能优化
在项目实战中,这些步骤还需要反复迭代,以实现最优的效果。待到机器学习模型训练完毕,参数都确定后,还要进行最后的部署,让模型在生产系统中上线工作。
上面的流程中,模型的选择和构建是关键。不过最耗时的,要数特征工程和超参数调优,以及模型的上线部署环节。
特征工程的麻烦,参数调优之苦恼,资深的机器学习调包侠和炼丹师们一定早有体会。但是机器学习模型的部署过程难度何在呢?主要在于算法需要针对每个不同的实际场景进行配置和调整,因此经常变动,这使得部署过程也非常耗费人工,效率不高且容易出错。有时候会因为赶时间,过早将模型从实验阶段转移到生产阶段,导致它们发挥不出最佳效果;也有时会因为花了太多时间进行参数调优导致部署延迟。
如何解决这几个痛点?
随着机器学习的普及,近年来自动化机器学习(Automated machine learning, AutoML)框架开始出现在炼丹师们的视野之中。AutoML的目的是尽可能将特征工程、参数配置、模型选择以及上线部署过程自动化,使整个机器学习项目变得更加高效。
调参和部署的负担减轻之后,炼丹师们就可以花更多时间来关注机器学习模型本身,尝试不同的架构,设计并优化新的算法。
自动机器学习包括下面内容:
自动化特征工程
自动化模型选择和超参数调整
自动选择神经网络架构
自动部署机器学习模型
原来由手工完成的各个机器学习环节都可以通过自动化机器学习框架进行。
自动化特征工程
机器学习算法的性能很大程度上取决于数据特征的质量。对于数据科学家来说,特征工程是一项劳动密集型的工作,涉及大量的试验,深厚的领域知识。自动化特征工程的目的是通过不断迭代、调整,自动创建出新的特征集,直到模型达到令人满意的准确性为止。
下面就列出并简要描述一些自动特征功能工程的框架,这些框架可以用于结构化的事务和关系数据集。
DataRobot使用“模型蓝图”来实现自动化特征工程,该模型将不同的预处理步骤堆叠在机器学习过程中。它对数据应用的标准预处理技术包括one-hot编码,插补,类别计数,文本的n-gram token等等。链接:https://www.datarobot.com/blog/automated-feature-engineering/
H2O的Driverless AI 是一个自动化机器学习的平台,包含自动化特征工程,模型验证,模型调整,模型选择和模型部署。其中的特征工程自动化工具包括:日期转换器,从分类到数字编码的交叉验证,文本转换器(使用TF-IDF或count),one-hot编码,Ewma Lags转换器,文本簇间距转换器等等。链接:https://www.h2o.ai/products/h2o-driverless-ai/
tsfresh是一个Python库,用于计算和提取时间序列数据中的特征,例如中值,均值,样本熵,分位数,偏度,方差,值计数,峰数等。它主要用于时间序列数据,对于其它类型数据,可以与上述其他工具结合使用。链接:https://tsfresh.readthedocs.io/en/latest/text/introduction.html
不过,自动化特征工程仍是一项艰巨的任务。而且,有一些数据科学家并不赞成特征工程的自动化,认为有可能产生不正确的结果,或会生成错误的标签以非透明的方式对数据进行分类。因此,应谨慎使用自动化特征工程工具,并抽查自动特征工程结果是否有意义。
自动化模型选择和超参数调整
对数据特征进行预处理后,就到了机器学习算法的寻找和选择的环节。机器学习算法的目的是根据数据特征来训练机器模型,以预测新数据的标签值。
典型机器学习模型包括:
聚类模型
分类模型
回归模型
基于神经网络的模型
基于关联规则的模型等
每种算法都适合于特定类型的问题。通过自动化模型选择工具,可以针对手头的特定任务,遍历所有合适的模型,并选择产生最高准确性或最低误差的模型。
当然,没有一种机器学习算法在所有数据集上都能有最佳表现,而且超参数调整过程也必不可少。实际上,在模型选择过程中,调包侠们会尝试使用不同的变量,不同的系数或不同的超参数。这个过程极大的考验他们的经验、技巧和耐心。
因此,下列自动选择模型和超参数调整的AutoML框架将可能会是调包侠们的救星:
Auto-sklearn是Mathias Feurer,Aaron Klein等人创建的Python库。Sklearn作为非常常见的机器学习算法框架尽人皆知,而Auto-sklearn解决了机器学习中的两个核心过程:从大量分类和回归算法列表中选择算法以及超参数优化。Auto-sklearn可以从决策树,高斯朴素贝叶斯,梯度提升,kNN,LDA,SVM,随机森林和线性分类器(SGD)中进行自动选择。链接:https://automl.github.io/auto-sklearn/master/
R语言的auto.arima软件包对于时间序列数据处理很有妙用,该软件包使用AIC作为优化指标。链接:https://www.rdocumentation.org/packages/forecast/versions/8.4/topics/auto.arima
R语言的 caret包则可以在超参数空间中执行搜索,找到给定模型的最佳参数配置。例如,它可以寻找神经网络中最佳的隐藏层数,随机森林中的最合适的树木个数和随机变量数等。链接:https://cran.r-project.org/web/packages/caret/
H2O的Driverless AI 可以通过h2o.automl包同时自动训练多种算法。例如同时训练GLM,Xgboost,随机森林,深度学习,集成模型等不同模型来进行结果比较。链接:http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html
DataRobot也可以同时自动训练多种算法,并选择一种算法来获得最高的准确性。再这个过程中,它允许数据科学家手动干预和调整模型。链接:https://www.datarobot.com/blog/automated-feature-engineering/
微软Azure中,包含Automated ML工具包,它利用协同过滤和贝叶斯优化来自动化机器学习过程中特征工程,算法选择和超参数配置。链接:https://docs.microsoft.com/en-us/azure/machine-learning/tutorial-auto-train-models
Azure Automated ML
Google Cloud AutoML则在此领域进行了创新。在Cloud AutoML中,从用户那里获取已贴好标签的数据后,就可以直接训练计算机视觉,自然语言处理和翻译的模型,并自动调试参数,优化算法。链接:https://cloud.google.com/automl/
Google Cloud AutoML
TPOT是用于自动机器学习的Python库,它利用遗传算法来优化机器学习,包括数据清洗,特征选择,特征预处理,特征构造,模型选择和参数优化等。TPOT库会基于scikit-learn中的机器学习库进行模型的自动选择。链接:http://epistasislab.github.io/tpot/
亚马逊的云服务Amazon Sage Maker则提供了用于模型构建,培训和部署的功能。它可以通过贝叶斯优化自动调整算法。链接:https://aws.amazon.com/sagemaker/features/
HyperDrive也是Microsoft的产品,通过随机搜索,网格搜索或贝叶斯优化来搜索超参数空间并进行参数优化。在HyperDrive中可以调度程序,通过优化质量和成本等选项提前终止参数搜索。链接:https://www.microsoft.com/en-us/research/publication/hyperdrive-exploring-hyperparameters-pop-scheduling/
自动化神经网络架构选择
在深度学习时代,设计和构建神经网络架构是机器学习世界中最繁琐的任务之一。针对各种不同的场景,炼丹师们总是要尝试遍历各种不同神经网络架构,以优化手头任务的目标函数。这是非常耗时并且经常容易出错的工作。有时以及调好的网络会因为数据的一点点变化而突然神秘的变得不再好用……
Google最近提出了采用进化算法和强化学习来实现神经网络搜索的想法,以找到最佳的神经网络体系结构。从本质上讲,这是在训练过程中创建一个个的层,然后堆叠这些层以创建出适宜的深度神经网络体系结构。
最近,该领域的研究引起了很多关注,值得一提的著名研究论文包括:
NASNet —— 学习可扩展的体系结构以实现可伸缩的图像识别。链接:https://arxiv.org/abs/1707.07012
AmoebaNet—— 图像分类器体系结构搜索的正则化进化。链接:https://arxiv.org/abs/1802.01548
ENAS —— 高效的神经体系结构搜索。链接:https://arxiv.org/pdf/1802.03268.pdf
自动部署
一般来说,调包侠和炼丹师们会把机器学习项目的焦点集中在算法的开发和参数的调试上,而模型的部署和在产品中的运行则很少被提及。不过,其中也存在诸多的挑战。
因此,也有些公司和开源项目正在尝试自动部署的自动化,对于并不了解DevOps的调包侠和炼丹师们来说,这些工具其实大有用途:
Seldon提供了以R,Python,Java和NodeJS构建的模型,并自动将其部署到Kubernetes集群,并可以与kubeflow,IBM深度学习框架,NVIDIA TensorRT和DL Inference Server,Tensorflow Serving进行集成。链接:https://github.com/SeldonIO/seldon-core
Redis-ML 是Redis数据库中的一个模块,可将机器学习模型部署到生产系统中,它目前仅支持随机森林(分类和回归),线性回归和逻辑回归算法。链接:https://github.com/RedisLabsModules/redisml
Microsoft Machine Learning Service可将机器学习模型部署为可扩展的Kubernetes集群的Web服务。链接:https://docs.microsoft.com/en-gb/azure/machine-learning/tutorial-deploy-models-with-aml
Amazon SageMaker可将机器学习模型部署到的HTTPS终端节点,用于为应用程序推断/预测新数据的值。链接:https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html
Google Cloud ML也可以实现类似的Web部署功能,通过对托管机器学习模型的Web服务的HTTP调用来进行数据推断。链接:https://cloud.google.com/ai-platform/prediction/docs/online-predict
H2O.ai通过Java MOJO(模型对象优化)的概念来部署机器学习模型。MOJO支持AutoML,深度学习,DRF,GBM,GLM,GLRM,K-Means,堆叠集成,SVM,Word2vec和XGBoost模型。它与Java类型环境高度集成。对于非Java模型(例如R或Python),可以将模型另存为序列化对象并加载。链接:http://docs.h2o.ai/h2o/latest-stable/h2o-docs/productionizing.html
TensorFlow Serving可将Tensorflow机器学习模型部署到生产系统中。只需要几行代码,就可以通过Tensorflow模型生成API。链接:https://www.tensorflow.org/tfx/guide/serving
好了,上面把从数据收集特征工程、模型选择、参数调试,到生产部署过程中的自动化机器学习框架和当前可用的AutoML工具几乎全都撸了一遍,如果你颇有兴趣,可以参照我在每一个工具后面附注的资料链接进行深入的学习!最后,祝各位调包侠和炼丹师项目实战成功。
上述内容编译自Fatos Ismali的博文《自动化机器学习概览》和黄佳著的《零基础学机器学习》,转载请注明出处。
福利时间
本次我爱计算机视觉联合【人民邮电出版社】为大家带来 10 本正版新书。
在本文评论中回复推荐一个计算机视觉、自然语言处理、语音处理与识别等相关由开源代码的论文,包含论文名称+论文地址+开源地址。
2 月 16 日下午 5 点前,留言最走心对大家最有帮助的(由CV君定)10 名读者将获赠《零基础学机器学习》正版图书 1 本。
为防止作弊,该活动不搞无意义的点赞,CV君希望你的留言对大家有价值、有帮助!
本书已开售,大家也可以在以下链接够购买:
备注:ML
AutoML&NAS交流群
自动机器学习、神经架构搜索等技术,
若已为CV君其他账号好友请直接私信。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net