【综述专栏】走马观花AutoML
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
地址:https://www.zhihu.com/people/zijie0
作者介绍:周远(花名:字节),观远数据联合创始人与首席数据科学家。致力于算法前沿技术在泛消费零售领域的应用落地,深度参与主导了多个AI项目在行业头部,世界五百强客户的应用和上线,也和团队一起多次斩获智能零售方向的Hackathon冠军。曾就职于微策略,阿里云从事商业智能产品与云计算系统研发工作,拥有十多年的行业经验。目前研究兴趣主要包括可解释机器学习,AutoML和云原生机器学习系统方向。
01
02
把模型的学习率参数设为0.01,训练模型,获取评估指标的得分,比如准确率为0.7。 把模型学习率设为0.1,训练模型,再次获取评估指标,比如下降到了0.65。 根据上述的观察结果,接下来我们可能尝试一个比0.01更小的值,以此类推。
实际的任务的超参个数比较多,而且往往会有相互影响,导致搜索空间很复杂。而且超参跟预测指标之间的关系,往往也不是理想的平滑凸函数。所以我们如何通过已有尝试,去选择下一个探索点,需要引入更复杂的方法。 除了预测指标外,我们往往还会有其它连带需要优化的目标,比如希望训练/预测的时间尽可能短,消耗的计算资源尽可能少,这就会变成一个多目标的优化问题。 人类专家在做算法调优时,不会每次都从头开始,而往往会考虑历史上碰到过的类似问题,把过去的经验带入到新问题中,最典型的比如选取之前有效的参数作为初始尝试点,使用之前表现好的模型来做fine-tune等。这背后是一个多任务优化问题,而我们收集的数据,也多了一个层面,就是任务本身的信息。 同样,我们在做调优时会有大量的时间在等待模型训练,但很多模型是可以在训练过程中输出验证集指标的,对于不靠谱的超参数,我们可能盯着训练过程一阵子之后就提前停止了。这个思想也可以融入到自动化优化过程中去,提升搜索效率。 超参数本身只是整个建模过程中的一个优化部分,其它的例如前期的数据获取,实验设计,建模过程中的数据处理,特征工程,特征选择,模型选择与设计,模型融合,包括后续的模型解释,误差分析,监控/异常检测等环节,也都有机会使用智能算法来自动化提效。 另外还有模型学习本身的自动优化,例如人类能从几张图片中就学会识别一个新物体,随着年龄经验的增长,学习掌握新知识的能力会逐渐增强。如何能让机器学习算法也拥有类似的自动化的“经验增长”能力,而不依靠使用者的经验积累,也是一个重要的话题。
03
3.1 定义
连续型,例如前面提到的learning rate 整数型,例如决策树的深度,CNN中的channel数 类别型,例如优化目标函数,神经网络中的激活函数等
3.2 Model-free Optimization
3.3 Population-base
3.4 贝叶斯优化
Surrogate model,我们希望能有一个模型学习到现在已知数据形成的分布情况,尤其是在已知点附近,我们对结果输出的信心会比较高,在没有被探索过的区域,我们对结果输出的分布会有很大的不确定性。 Acquisition function,利用模型输出的预测值及不确定性,我们希望平衡探索未知区域与利用已知区域信息,选择接下来的探索点。直观点说就是一方面想看看我没有尝试过的区域情况会如何,另一方面也不是完全瞎找,要综合我们的已知信息,比如我们尝试过学习率大于1的那些区域明显效果都比较差,应该在效果较好的0.01附近找更有可能的点。
# Internal GP regressor
self._gp = GaussianProcessRegressor(
kernel=Matern(nu=2.5),
alpha=1e-6,
normalize_y=True,
n_restarts_optimizer=5,
random_state=self._random_state,
)
suggestion = acq_max(
ac=utility_function.utility,
gp=self._gp,
y_max=self._space.target.max(),
bounds=self._space.bounds,
random_state=self._random_state
)
EI(expected improvement) UCB(upper confidence bound) ES(entropy search)
def _ei(x, gp, y_max, xi):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
mean, std = gp.predict(x, return_std=True)
a = (mean - y_max - xi)
z = a / std
return a * norm.cdf(z) + std * norm.pdf(z)
3.4.1 GP和kernel的改进
模型overhead:GP的fit过程的复杂度是 ,predict的复杂度是 ,当搜索的量级较大时,模型的overhead会较为明显。 Kernal scalability:GP的标准kernel在高维空间中的很容易失效,除非把评估数量也以指数级增加,但这明显是不可行的。 参数限制:标准的GP只能处理连续型参数,如果是整数型,类别型,需要做额外的处理。
3.4.2 其它surrogate model
3.5 参数空间
整数型参数,例如随机森林中树的数量,需要在优化过程中把连续变量round到整数形式。 类别型参数,可以使用one-hot等预处理方式。 条件参数,在RF这类surrogate model中,对在某些条件下不活跃的参数,可以用一个默认值代替,活跃的参数则正常输入。另外在Jenatton et al., 2017 [25]等工作中,为structured configuration spaces设计了各种特殊的kernels。
3.6 带约束的优化
3.7 Multi-fidelity Optimization
3.7.1 Multi-fidelity设定
3.7.2 Learning Curve-Based Prediction
3.7.3 Bandit-Based Selection
3.7.4 Adaptive Fidelities
3.8 Ensemble
3.9 多目标优化
3.10 实际应用
当可以应用Multi-Fidelity来做模型评估时,选择BOHB,这是目前综合表现最好且效率最高的方法。 当无法应用Multi-Fidelity时: 连续型的参数组合,模型评估开销较大:使用基于GP的贝叶斯优化。 维度较高,且较为复杂的参数空间:使用基于随机森林或者TPE的SMAC方法。 连续型的参数空间,且模型评估开销低:使用CMA-ES方法。
3.11 开放问题
Benchmark方面还没有比较好的标准,从这么多论文来看大家用的评估方法都不太一致,通常也不会使用独立的测试集,带有代码实现的文章也不多,导致比较难判断到底哪个方法才是目前的SoTA。 灰盒优化方面的工作可以进一步深入,前面提到的Multi-Fidelity优化是一个方向,其它包括现在比较火的gradient based model如何更好的做HPO也有进一步探索提升的空间。另外config本身也有往动态化配置优化的趋势。 Scalability,一方面来说,模型训练开销导致很多大型问题例如ImageNet的参数调优还比较难使用HPO里的各种技术。另一方面在目前大规模分布式集群算力日渐提升的情况下,如何利用这些算力做分布式的HPO,与MLSys相关研究结合,也是一个值得思考的方向。 泛化能力,由于需要在训练数据集上做多次训练和评估来进行参数调优,HPO算法比较容易在训练数据上过拟合,本身的泛化能力会更加受制于数据量或数据使用方式上的问题。有一些简单的方法例如在每次做模型评估时更换shuffle可以一定程度上缓解这个问题。也有一些研究例如Shilton et al., 2019 [49]也提出需要寻找stable optima而不是sharp optima的想法。另外在ensemble方面,应该也有不少挖掘空间。 整体pipeline的构建,目前HPO的应用大多数还是集中在单纯的模型参数优化方面,而对于整个pipeline空间的搜索与构建还没有比较有效的方法可以超过固定pipeline优化的效果。TPOT以及后续会提到的ML-Plan有做过一些这方面的尝试,不过整体可以提升的空间还很大。
04
对于通常效果较好的知识进行迁移,主要是模型配置方面的迁移。 跨任务的模型效果的评估,会引入task的meta feature来进行学习。 从类似任务构建的模型开始训练,例如很多few-shot learning里会用元学习器来设定初始化参数。
4.1 从模型评估中学习
4.1.1 任务无关的配置推荐
4.1.2 配置空间设计
4.1.3 配置迁移
4.2 从任务属性中学习
4.2.1 Meta-Features
数据集中的instance,特征,类别,缺失值,异常值的数量等 数据集中的各类统计信息,如skewness, kurtosis,correlation,covariance等 信息论中的各种指标,例如class entropy,mutual innformation,nuose-signal ratio等 模型指标,比如用决策树模型来拟合,获取到的叶节点数,树的深度等。 Landmarks,使用一些简单模型来拟合数据,获取模型指标作为特征,例如单层神经网络,朴素贝叶斯,线性回归等。
4.2.2 Warm-starting from Similar Tasks
4.2.3 Meta-models
参数推荐:例如前面提到的使用kNN模型来找到最类似的任务,输出表现最好的参数。也有一些思路(Sanders et al., 2017)[74]类似之前的tunability的工作,只不过用meta-model来预测模型参数是否需要进行搜索优化。 参数ranking:参考Sun, Pfahringer, 2013 [75]的ART forest,以及Pinto et al., 2017 [76]的autoBagging。两者用的meta-model都是集成树模型(后者用的是xgb),效率高且自带特征选择作用。 预测参数效果:例如早期的Guerra et al., 2008 [77]使用SVM regressor针对不同的分类算法分别构建meta-model,输入task的meta-feature来预测模型所能达到的预测准确率。Reif et al., 2014 [78]也使用了类似的方法,还把这部分的meta learning集成到了RapidMiner中进行应用(可惜没找到对应代码)。除了预测模型性能,也有同时考虑预测模型训练时间的一些工作,例如Yang et al., 2018 [79],并把预测输出应用到后续模型选择中去。Eggensperger et al., 2017 [80]的想法更为大胆,针对一个具体的task来构建surrogate model预测参数的评估效果,这样就可以省去耗时的模型评估时间进行快速的参数搜索优化了。
4.2.4 To Tune or Not to Tune
是否需要进行调优 在一定时间限制之内的搜索调优能够获得的提升度 如何进行调优
4.2.5 Pipeline合成
4.3 从之前的模型中学习
4.3.1 Learning Update Rules
4.3.2 Few-shot Learning
4.3.3 Beyond Supervised Learning
4.4 总结
05
5.1 搜索空间
5.2 黑盒优化
5.3 超越黑盒优化
5.4 前沿方向
06
6.1 数据准备
van den Burg et al., 2018 [122]中设计了自动检测csv文件类型的方法 Valera and Ghahramani, 2017 [123]提出了自动分类数据类型的方法 Sutton et al., 2018 [124]希望能够实现数据收集过程中错误的自动检测发现
6.2 特征工程
Featuretools [125],比较知名的自动化特征工程库,几乎成了自动化特征工程代名词…… Luo et al., 2019 [126]第四范式去年发表的一篇自动化特征工程的文章,要是有开源就更好了 :) tsfresh [127]比较知名的时间序列领域的自动化特征工程库
07
7.1 Auto-sklearn
7.2 TPOT
7.3 Automatic Statistician
一种开放式的模型语言,达到足以捕捉各种现实世界现象的表达能力 一种搜索程序,可以高效地探索上述定义的模型语言空间 一种评估模型的原则方法,能够权衡复杂性,数据特性和资源使用情况等 一种自动解释模型的流程,使模型的假设能够准确且可理解的方式传达给非专业人员
7.4 AutoGluon
7.5 Optuna
与各类模型框架的集成做的非常好,对于新手用户来说上手非常方便 自带了pruner功能,可以用上hyperband等高级技术,搜参效率大大提升 支持分布式运行超参优化任务 对优化搜索结果可视化支持
7.6 其它
外部链接:
[1]https://openaccess.thecvf.com/content_cvpr_2018/papers/Zoph_Learning_Transferable_Architectures_CVPR_2018_paper.pdf
[2]https://arxiv.org/pdf/1604.00772.pdf
[3]https://github.com/CMA-ES/pycma
[4]https://blog.otoro.net/2017/10/29/visual-evolution-strategies/
[5]https://github.com/fmfn/BayesianOptimization
[6]https://www.jgoertler.com/visual-exploration-gaussian-processes/
[7]https://papers.nips.cc/paper/2012/file/05311655a15b75fab86956663e1819cd-Paper.pdf
[8]https://gpflow.readthedocs.io/en/master/notebooks/advanced/kernels.html
[9]https://zhuanlan.zhihu.com/p/76269142
[10]https://github.com/fmfn/BayesianOptimization/blob/master/examples/exploitation_vs_exploration.ipynb
[11]https://distill.pub/2020/bayesian-optimization/
[12]https://ml.informatik.uni-freiburg.de/papers/10-LION-TB-SPO.pdf
[13]https://arxiv.org/pdf/1301.1942.pdf
[14]https://arxiv.org/pdf/1706.01445.pdf
[15]https://assets.amazon.science/92/84/597ee2e7493cab02ec8a25cc02ff/structured-variational-auto-encoded-optimization..pdf
[16]https://arxiv.org/pdf/1806.01619.pdf
[17]https://www.cs.toronto.edu/~rgrosse/aistats2017-additive.pdf
[18]https://ml.informatik.uni-freiburg.de/papers/16-NIPS-BOHamiANN.pdf
[19]https://www.zhihu.com/people/crowowrk
[20]https://www.ismll.uni-hildesheim.de/pub/pdfs/schilling2015-ecml.pdf
[21]https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf
[22]https://ilija139.github.io/pub/aaai-17.pdf
[23]https://arxiv.org/pdf/1706.00764.pdf
[24]https://arxiv.org/pdf/1805.03463.pdf
[25]http://proceedings.mlr.press/v70/jenatton17a/jenatton17a.pdf
[26]https://arxiv.org/pdf/1402.0929.pdf
[27]https://link.springer.com/article/10.1007/s10115-018-1238-2
[28]https://arxiv.org/pdf/1508.03666.pdf
[29]https://arxiv.org/pdf/1403.5607.pdf
[30]https://arxiv.org/pdf/1511.09422.pdf
[31]https://ml.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf
[32]https://github.com/automl/pylearningcurvepredictor
[33]https://openreview.net/pdf?id=S11KBYclx
[34]https://arxiv.org/pdf/1406.3896.pdf
[35]http://proceedings.mlr.press/v51/jamieson16.pdf
[36]https://www.jmlr.org/papers/volume18/16-558/16-558.pdf
[37]https://arxiv.org/pdf/1807.01774.pdf
[38]https://github.com/automl/HpBandSter
[39]https://www.aclweb.org/anthology/D15-1253.pdf
[40]https://arxiv.org/ftp/arxiv/papers/1812/1812.02855.pdf
[41]https://papers.nips.cc/paper/5086-multi-task-bayesian-optimization.pdf
[42]http://proceedings.mlr.press/v54/klein17a/klein17a.pdf
[43]https://papers.nips.cc/paper/2016/file/605ff764c617d3cd28dbbdd72be8f9a2-Paper.pdf
[44]https://arxiv.org/pdf/1703.06240.pdf
[45]https://arxiv.org/pdf/1605.06394.pdf
[46]https://www.semanticscholar.org/paper/Automatic-Frankensteining%3A-Creating-Complex-Wistuba-Schilling/d22e4a40a5c27e492d510a9ca5948d739e1d0e81
[47]https://www.slds.stat.uni-muenchen.de/bibrefs/pdfs/multi_objective_parameter_configuration.pdf
[48]http://proceedings.mlr.press/v48/shahc16.pdf
[49]https://arxiv.org/pdf/1902.07846.pdf
[50]https://www.cs.ubc.ca/~hoos/Publ/XuEtAl10.pdf
[51]https://link.springer.com/content/pdf/10.1023/A:1021713901879.pdf
[52]https://arxiv.org/pdf/1710.04725.pdf
[53]https://arxiv.org/pdf/1802.09596.pdf
[54]https://github.com/PhilippPro/tunability
[55]https://arxiv.org/pdf/2007.07588.pdf
[56]https://pdfs.semanticscholar.org/8ba6/e168522732996d96b1e9fd4d00573a223a4d.pdf
[57]https://link.springer.com/article/10.1007/s10994-017-5684-y
[58]https://arxiv.org/pdf/1802.02219.pdf
[59]https://arxiv.org/pdf/1712.02902.pdf
[60]https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf
[61]https://link.springer.com/chapter/10.1007/978-3-319-97304-3_4
[62]https://ml.informatik.uni-freiburg.de/papers/15-IDA-Fast.pdf
[63]https://ipvs.informatik.uni-stuttgart.de/mlr/spp-wordpress/wp-content/uploads/wistuba-ecml-2015.pdf
[64]https://arxiv.org/pdf/1810.03548.pdf
[65]https://www.researchgate.net/publication/220551435_Meta-learning_approaches_to_selecting_time_series_models
[66]https://arxiv.org/pdf/1710.06219.pdf
[67]https://upcommons.upc.edu/bitstream/handle/2117/113229/Bilalli+et+al.pdf;jsessionid=5ABC2668742AF93E48A66BF42C2377B0?sequence=1
[68]https://cin.ufpe.br/~rbcp/papers/neurocomputing_2011-18-mar.pdf
[69]http://ceur-ws.org/Vol-1201/paper-03.pdf
[70]http://proceedings.mlr.press/v28/bardenet13.pdf
[71]https://link.springer.com/chapter/10.1007/978-3-319-23525-7_6
[72]http://proceedings.mlr.press/v33/yogatama14.pdf
[73]https://proceedings.neurips.cc/paper/2018/file/b59a51a3c0bf9c5228fde841714f523a-Paper.pdf
[74]https://scholarsarchive.byu.edu/cgi/viewcontent.cgi?referer=&httpsredir=1&article=7392&context=etd
[75]https://pdfs.semanticscholar.org/ed1e/dd7ae1e8fbbce6803d58bf4003fb0fe91aae.pdf
[76]https://arxiv.org/pdf/1706.09367.pdf
[77]http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.591.6745&rep=rep1&type=pdf
[78]https://www.dfki.de/fileadmin/user_upload/import/6712_Automatic_Classifier_Selection_for_Non-Experts.pdf
[79]https://arxiv.org/pdf/1808.03233.pdf
[80]https://arxiv.org/pdf/1703.10342.pdf
[81]http://ceur-ws.org/Vol-1201/paper-05.pdf
[82]http://143.54.25.88/index.php/bracis/article/view/85/72
[83]https://papers.nips.cc/paper/2018/file/b59a51a3c0bf9c5228fde841714f523a-Paper.pdf
[84]https://proceedings.neurips.cc/paper/2015/file/11d0e6287202fced83f79975ec59a3a6-Paper.pdf
[85]https://www.aaai.org/Papers/ICML/2003/ICML03-111.pdf
[86]http://cui.unige.ch/~kalousis/papers/2014/NguyenEtAl-IJAIR2014-LearningToPlanDMworkflowsWithMetaMining.pdf
[87]https://ris.uni-paderborn.de/download/3852/3853/38.pdf
[88]https://dl.acm.org/doi/pdf/10.1145/2908812.2908918
[89]https://github.com/PGijsbers/gama
[90]https://www.cs.columbia.edu/~idrori/AlphaD3M.pdf
[91]https://lilianweng.github.io/lil-log/2018/11/30/meta-learning.html
[92]https://papers.nips.cc/paper/2014/file/375c71349b295fbe2dcdca9206f20a06-Paper.pdf
[93]http://www.iro.umontreal.ca/~lisa/pointeurs/bengio_1995_npl.pdf
[94]https://arxiv.org/pdf/1804.00222.pdf
[95]https://github.com/tensorflow/models/tree/archive/research/learning_unsupervised_learning
[96]https://arxiv.org/pdf/1606.04474.pdf
[97]https://arxiv.org/pdf/1611.03824.pdf
[98]https://github.com/deepmind/learning-to-learn
[99]http://www.cs.toronto.edu/~rsalakhu/papers/oneshot1.pdf
[100]https://arxiv.org/pdf/1605.06065.pdf
[101]https://arxiv.org/pdf/1606.04080.pdf
[102]https://github.com/karpathy/paper-notes/blob/master/matching_networks.md
[103]https://arxiv.org/pdf/1703.05175.pdf
[104]https://openreview.net/pdf?id=rJY0-Kcll
[105]https://arxiv.org/pdf/1703.03400.pdf
[106]https://arxiv.org/pdf/1803.02999.pdf
[107]https://github.com/openai/supervised-reptile
[108]https://arxiv.org/pdf/1707.03141.pdf
[109]https://papers.nips.cc/paper/2017/file/51e6d6e679953c6311757004d8cbbba9-Paper.pdf
[110]https://arxiv.org/pdf/1611.02779.pdf
[111]https://arxiv.org/pdf/1806.04798.pdf
[112]https://arxiv.org/pdf/1806.09055.pdf
[113]https://papers.nips.cc/paper/8056-transfer-learning-with-neural-automl.pdf
[114]https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/viewFile/16755/16568
[115]http://proceedings.mlr.press/v80/pham18a/pham18a.pdf
[116]http://proceedings.mlr.press/v97/ying19a/ying19a.pdf
[117]https://arxiv.org/pdf/2005.02960.pdf
[118]https://openaccess.thecvf.com/content_CVPR_2020/papers/Elsken_Meta-Learning_of_Neural_Architectures_for_Few-Shot_Learning_CVPR_2020_paper.pdf
[119]https://arxiv.org/pdf/2006.08573.pdf
[120]https://arxiv.org/pdf/2005.05859.pdf
[121]https://arxiv.org/pdf/2006.13799.pdf
[122]https://arxiv.org/pdf/1811.11242.pdf
[123]http://proceedings.mlr.press/v70/valera17a/valera17a.pdf
[124]https://dl.acm.org/doi/pdf/10.1145/3219819.3220057
[125]https://dai.lids.mit.edu/wp-content/uploads/2017/10/DSAA_DSM_2015.pdf
[126]https://arxiv.org/pdf/1904.12857.pdf
[127]https://github.com/blue-yonder/tsfresh
[128]https://arxiv.org/pdf/1402.4304.pdf
[129]https://www.zhihu.com/question/360250836/answer/1224137065
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“综述专栏”历史文章
自然语言处理面试题
group convolution (分组卷积)详解
最简单的self-supervised方法
神经网络可解释性综述
什么是知识图谱|知识图谱入门|概述
《Multitask Learning》多任务学习发展的关键节点
图神经网络综述
初探Explainable AI
超详细的NLP预训练语言模型总结清单!
Transformer的9种变体概览
知识图谱综述
各细分学习领域调研(A Survey for Learning Fields)
Distributed Training:强化学习并行训练论文合集
用放大镜看Transformer——总体和各个模块的结构到底是什么样的
注意力机制到底是什么——基于常识的基本结构介绍
更多综述专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!