美文网首页
AutoML自动超参调优

AutoML自动超参调优

作者: jxy2018 | 来源:发表于2018-09-27 16:49 被阅读0次

    现在AutoML非常的火,各大云平台都在推出自己的AutoML服务,包括Google Cloud,Amazon SageMaker,MS Azure等等。AutoML要解决的问题主要是释放机器学习过程中的人力投入,包括:

    • 数据预处理
    • 特征提取
    • 模型选择/模型构建
    • 模型超参优化
    • 结果的评估

    本文主要关注的是模型超参优化的自动化。

    调参系统架构

    AutoML自动调参又可以称作黑箱超参优化(Blackbox hyperparameter optimization)。比较常见的做法是将调参系统和训练系统分离开,模型、数据和训练过程由用户来控制,调参系统给训练系统建议一组或多组参数,训练系统反馈结果,然后调参系统根据反馈结果产生下一组建议的参数。这个过程一直迭代直至满足了终止条件。


    调参系统架构

    调参算法

    调参算法的输入是用户指定的参数及其范围,比如设定学习率范围为[0.0001, 0.01]。比较常见的算法为网格搜索,随机搜索和贝叶斯优化等。

    1. Grid search

    遍历所有可能的参数组合。网格搜索很容易理解和实现,例如我们的超参数A有2种选择,超参数B有3种选择,超参数C有5种选择,那么我们所有的超参数组合就有2 * 3 * 5也就是30种,我们需要遍历这30种组合并且找到其中最优的方案,对于连续值我们还需要等间距采样。实际上这30种组合不一定取得全局最优解,而且计算量很大很容易组合爆炸,并不是一种高效的参数调优方法。

    1. Random search

    限定搜索次数,随机选择参数进行实验。业界公认的Random search效果会比Grid search好,Random search其实就是随机搜索,例如前面的场景A有2种选择、B有3种、C有5种、连续值随机采样,那么每次分别在A、B、C中随机取值组合成新的超参数组合来训练。虽然有随机因素,但随机搜索可能出现效果特别差、也可能出现效果特别好,在尝试次数和Grid search相同的情况下一般最值会更大

    1. Bayesian Optimization

    业界的很多参数调优系统都是基于贝叶斯优化的,如Google Vizier [1], SigOpt[2].
    该算法要求已经存在几个样本点(一开始可以采用随机搜索来确定几个初始点),并且通过高斯过程回归(假设超参数间符合联合高斯分布)计算前面n个点的后验概率分布,得到每一个超参数在每一个取值点的期望均值和方差,其中均值代表这个点最终的期望效果,均值越大表示模型最终指标越大,方差表示这个点的效果不确定性,方差越大表示这个点不确定是否可能取得最大值非常值得去探索。

    Early Stop算法

    在调参的过程中,有的参数在训练的过程中,观察曲线的趋势,会发现它是不太有希望在训练结束达成目标的,这个时候,将这些任务终止掉,释放资源,继续别的参数的尝试。这样可以快速试错,快速调整。[1]

    1. Performance Curve Stopping Rule: 对训练曲线做回归分析,对于一段曲线,预测最终能达到的准确率,如果太低,则停掉。

    2. Median Stopping Rule: 在Step s的准确率如果小于其他观测到的训练曲线在step s处的平均值,则将这次尝试停掉。

    开源调参框架

    我调研了Github上开源的超参调优系统,按照受关注程度排序如下:

    调参框架 GitHub star 算法 语言
    Hyperopt https://github.com/hyperopt/hyperopt 2358 1. Random Search 2. Tree of Parzen Estimators (TPE) 3. 设计中,未实现: Bayesian optimization Python
    BayesianOptimization https://github.com/fmfn/BayesianOptimization 1687 Bayesian Optimization Python
    Spearmint https://github.com/HIPS/Spearmint 1062 Bayesian Optimization Python
    Advisor https://github.com/tobegit3hub/advisor 320 1. Random Search Algorithm 2. Grid Search Algorithm Baysian Optimization 3. Early Stop Python
    RoBO https://github.com/automl/RoBO 230 Bayesian Optimization Python
    SMAC3 https://github.com/automl/SMAC3 208 Baysian Optimization Python3
    Bayesopt https://github.com/rmcantin/bayesopt 163 Bayesian Optimization Python
    Autoweka https://github.com/automl/autoweka 146 Baysian Optimization Java

    总结

    现在的调参系统基本上都是基于贝叶斯优化的思想,将调参任务作为一个黑箱优化的问题。在后面的博客中,我会详细介绍贝叶斯超参调优的思想。

    Reference

    [1] Google Vizier A Service for Black-Box Optimization
    [2] SigOpt: https://sigopt.com/

    相关文章

      网友评论

          本文标题:AutoML自动超参调优

          本文链接:https://www.haomeiwen.com/subject/qabeoftx.html