2019独角兽企业重金招聘Python工程师标准>>>
为什么需要自动机器学习
对于机器学习的新用户而言,使用机器学习算法的一个主要的障碍就是算法的性能受许多的设计决策影响。随着深度学习的流行,工程师需要选择相应的神经网络架构,训练过程,正则化方法,超参数,等等,所有的这些都对算法的性能有很大的影响。于是深度学习工程师也被戏称为调参工程师。
自动机器学习(AutoML)的目标就是使用自动化的数据驱动方式来做出上述的决策。用户只要提供数据,自动机器学习系统自动的决定最佳的方案。领域专家不再需要苦恼于学习各种机器学习的算法。
自动机器学习不光包括大家熟知的算法选择,超参数优化,和神经网络架构搜索,还覆盖机器学习工作流的每一步:
- 自动准备数据
- 自动特征选择
- 自动选择算法
- 超参数优化
- 自动流水线/工作流构建
- 神经网络架构搜索
- 自动模型选择和集成学习
超参数优化 Hyper-parameter Optimization
学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,后者成为超参数。比如,支持向量机里面的C, Kernal, game;朴素贝叶斯里面的alpha等。
超参数优化有很多方法:
最常见的类型是黑盒优化 (black-box function optimization)。所谓黑盒优化,就是将决策网络当作是一个黑盒来进行优化,仅关心输入和输出,而忽略其内部机制。决策网络通常是可以参数化的,这时候我们进行优化首先要考虑的是收敛性。
以下的几类方法都是属于黑盒优化:
- 网格搜索 (grid search)
Grid search大家都应该比较熟悉,是一种通过遍历给定的参数组合来优化模型表现的方法。网格搜索的问题是很容易发生维度灾难,优点是很容易并行。 - 随机搜索 (random search)
随机搜索是利用随机数求极小点而求得函数近似的最优解的方法。
很多时候,随机搜索比网格搜索效果要更好,但是我们可以从上图看出,它们都不能保证找到最优解。 - 贝叶斯优化
贝叶斯优化是一种迭代的优化算法,包含两个主要的元素,输入数据假设的模型和一个采集函数用来来决定下一步要评估哪一个点。每一步迭代,都使用所有的观测数据fit模型,然后利用激活函数预测模型的概率分布,决定如何利用参数点,权衡是Explaoration还是Exploitation。相对于其它的黑盒优化算法,激活函数的计算量要少很多,这也是为什么贝叶斯优化被认为是更好的超参数调优的算法。
黑盒优化的一些工具:
- hyperopt
hyperopt 是一个Python库,可以用来寻找实数,离散值,条件维度等搜索空间的最佳值。 - Google Vizier
Google的内部的机器学习系统 Google Vizier能够利用迁移学习等技术自动优化其他机器学习系统的超参数 - advisor
Google Vizier的开源实现。 - katib
基于Kubernetes的超参数优化工具
由于优化目标具有不连续、不可导等数学性质,所以一些搜索和非梯度优化算法被用来求解该问题,包括我们上面提到的这些黑盒算法。此类算法通过采样和对采样的评价进行搜索,往往需要大量对采样的评价才能获得比较好的结果。然而,在自动机器学习任务中评价往往通过 k 折交叉验证获得,在大数据集的机器学习任务上,获得一个评价的时间代价巨大。这也影响了优化算法在自动机器学习问题上的效果。所以一些减少评价代价的方法被提出来,其中多保真度优化(multi-fidelity methods)就是其中的一种。这里的技术包括:基于学习曲线来决定是否要提前终止训练,探索-利用困境(exploration exploitation)的多臂老虎机算法 (Multi-armed bandit)等等。
另外还有一些研究是基于梯度下降的优化。
超参数优化面临许多挑战:
- 对于大规模的模型或者复杂的机器学习流水线而言,需要评估的空间规模非常大
- 配置空间很复杂
- 无法或者很难利用损失函数的梯度变化
- 训练集合的规模太小
- 很容易过拟合
相关参考
- https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning.html
- http://numbbo.github.io/workshops/index.html
- https://www.blog.google/products/google-cloud/cloud-automl-making-ai-accessible-every-business/
- https://scikit-learn.org/stable/modules/grid_search.html
- https://yq.aliyun.com/articles/68266
-
https://arxiv.org/abs/1807.02811
-
http://gpss.cc/gpmc17/slides/LancasterMasterclass_1.pdf
-
https://yq.aliyun.com/articles/661786
-
https://blog.csdn.net/xbinworld/article/details/79372777
元学习 Meta Learning
元学习也就是‘学习如何学习’,通过对现有的学习任务之间的性能差异进行系统的观测,然后学习已有的经验和元数据,用于更好的执行新的学习任务。这样做可以极大的该静机器学习流水线或者神经网络架构的设计,也可以用数据驱动的方式取代手工作坊似的算法工程工作。
从某种意义上来说,元学习覆盖了超参数优化,因为元数据的学习包含了:超参数,流水线的构成,神经网络架构,模型构成,元特征等等。
机器学习的算法我们又称为‘学习器’,学习器就是假定一个模型,该模型拥有很多未知参数,利用训练数据和优化算法来找到最适合这些训练数据的参数,生成一个新的算法,或者参数已知的模型,并利用该模型/算法来预测新的未知数据。如果说世界上只有一个模型,那么问题就简单了,问题是模型有很多,不同的模型拥有不同的超参数,我们往往还会把模型和算法组装在一起构成复合模型和机器学习的流水线,这个时候,我就需要知道解决不同的问题要构建那些不同的模型。元学习就在这个时候,我们可以把超参数,流水线,神经网络架构这些都看成是一个新的模型的未知参数,把不同学习任务的性能指标看成是输入数据,这样我们就可以利用优化算法来找到性能最好的那组参数。这个模式可以一直嵌套,也就是说,你可以有‘元元元学习‘,当然我希望你不要走得太远,找不到回来的路。
元学习的方法包括:
元学习的一个很大的挑战就是如果通过很少的训练数据来学习一个复杂的模型,这就是one-shot或者few-shot的问题。
像人类的学习一样,每次学习无论成功失败,我们都收获一定的经验,人类很少从头学习。在构建自动学习的时候,我们也应该充分利用已有的每一次的学习经验,逐步的改进,使得新的学习更加有效。
相关参考:
- https://en.wikipedia.org/wiki/Meta_learning_(computer_science)
- https://lilianweng.github.io/lil-log/2018/11/30/meta-learning.html
- https://towardsdatascience.com/whats-new-in-deep-learning-research-understanding-meta-learning-91fef1295660
- https://medium.com/huggingface/from-zero-to-research-an-introduction-to-meta-learning-8e16e677f78a
- https://bair.berkeley.edu/blog/2017/07/18/learning-to-learn/
神经网络架构搜索 Neural Architecture Search
提起AutoML,其实大多数人都是因为Google的AutoML系统才知道这个故事的。随着深度学习的流行,神经网络的架构变得越来越复杂,越来越多的手工工程也随之而来。神经网络架构搜索就是为了解决这个问题。
NAS主要包含三个部分:
- 搜索空间 search space
- 搜索策略 search strategy
- 性能估计策略 performance estimation strategy
相关参考
- https://medium.com/aifrontiers/understand-automl-and-neural-architecture-search-4260a0942116
- https://towardsdatascience.com/everything-you-need-to-know-about-automl-and-neural-architecture-search-8db1863682bf
- https://ai.googleblog.com/2017/11/automl-for-large-scale-image.html
- https://www.fast.ai/2018/07/16/auto-ml2/
自动化特征工程
自动化特征工程可以帮助数据科学家基于数据集自动创建能够最好的用于训练的特征。
Featuretools是一个开源库,用来实现自动化特征工程。它是一个很好的工具,旨在加快特征生成的过程,从而让大家有更多的时间专注于构建机器学习模型的其他方面。换句话说,它使你的数据处于“等待机器学习”的状态。
Featuretools程序包中的三个主要组件:
-
实体(Entities)
-
深度特征综合(Deep Feature Synthesis ,DFS)
-
特征基元(Feature primitives)
-
一个Entity可以视作是一个Pandas的数据框的表示,多个实体的集合称为Entityset。
-
深度特征综合(DFS)与深度学习无关,不用担心。实际上,DFS是一种特征工程方法,是Featuretools的主干。它支持从单个或者多个数据框中构造新特征。
-
DFS通过将特征基元应用于Entityset的实体关系来构造新特征。这些特征基元是手动生成特征时常用的方法。例如,基元“mean”将在聚合级别上找到变量的平均值。
参考:
- https://towardsdatascience.com/automated-feature-engineering-in-python-99baf11cc219
- https://towardsdatascience.com/why-automated-feature-engineering-will-change-the-way-you-do-machine-learning-5c15bf188b96
- https://www.kaggle.com/willkoehrsen/automated-feature-engineering-tutorial
- https://medium.com/data-from-the-trenches/automatic-feature-engineering-an-event-driven-approach-b2ca09d166f
- https://medium.com/@rrfd/simple-automatic-feature-engineering-using-featuretools-in-python-for-classification-b1308040e183
- https://blog.datarobot.com/automated-feature-engineering
其它自动机器学习工具集
以下列出一些开源的自动机器学习工具空大家参考,选择。
- Auto-Sklearn
- AutoKeras
- TPOT
- H2O AutoML
- Python auto_ml
参考:
- 自动机器学习(AutoML)最新综述
-
自动机器学习工具全景图:精选22种框架,解放炼丹师
-
开源自动机器学习(AutoML)框架盘点
-
揭秘 | 谷歌自动化机器学习真的那么神吗?
-
分享一篇比较全面的AutoML综述