原文:Auto Machine Learning笔记 - Bayesian Optimization

优化器是机器学习中很重要的一个环节。当确定损失函数时,你需要一个优化器使损失函数的参数能够快速有效求解成功。优化器很大程度影响计算效率。越来越多的超参数调整是通过自动化方式完成,使用明智的搜索在更短的时间内找到最佳超参组合,无需在初始设置之外进行手动操作。

贝叶斯优化(Bayesian Optimization)是基于模型的超参数优化,已应用于机器学习超参数调整,结果表明该方法可以在测试集上实现更好的性能,同时比随机搜索需要更少的迭代。此外,现在有许多Python库可以为任何机器学习模型简化实现贝叶斯超参数调整。

1. 超参数是什么?

  • 在模型开始学习过程之前人为设置值的参数,而不是(像bias、weights)通过训练可得到的参数数据。
  • 这些参数定义关于模型更高层次的概念(模型复杂性、学习能力等)。
  • 比如说随机梯度下降算法中的学习速率/learning rate,出于计算复杂度和算法效率等,我们并不能从数据中直接学习一个比较不错的学习速度。但学习速率却又是十分重要的,较大的学习速率不易令模型收敛到较合适的较小值解,而较小的学习速率却又常常令模型的训练速度大大降低。对于像学习速率这样的超参数,我们通常需要在训练模型之前设定。因此,对于超参数众多的复杂模型,调超参技能显得很重要。

2. 常用的调超参方法有哪些?

1.Grid Search 网格搜索/穷举搜索

  • 搜索整个超参数空间,在高维空间容易遇到维度灾难,不实用。
  • 网格搜索是一种昂贵的方法。假设我们有n个超参数,每个超参数有两个值,那么配置总数就是2的N次方。因此,仅在少量配置上进行网格搜索是可行的。
  • 网格搜索可以并行化,使得网格搜索在足够的计算能力下更加可行。
  • 每次trial之间是相互独立的,不能利用先验知识选择下一组超参数。

2.Random Search 随机搜索

  • 稀疏的简单抽样,试验之间是相互独立的,不能利用先验知识选择下一组超参数。
  • 超参通过并行选择,但试验次数要少得多,而性能却相当。一些超参可能会产生良好的性能,另一些不会。

3.Heuristic Tuning 手动调参

  • 经验法,耗时长。

4.Automatic Hyperparameter Tuning 自动超参数调优

  • 自动超参数调整形成了关于超参数设置和模型性能之间关系的知识,能利用先验知识选择下一组超参数。
  • 首先在多个配置中收集性能,然后进行一些推断并确定接下来要尝试的配置。目的是在找到最佳状态时尽量减少试验次数。
  • 这个过程本质上是顺序的,不容易并行化。
  • 调整超参数的大多数方法都属于基于顺序模型的全局优化(SMBO)。这些方法使用代理函数来逼近真正的黑盒函数。SMBO的内部循环是对该替代品的优化,或者对代理进行某种转换。最大化此代理的配置将是下一个应该尝试的配置。SMBO算法在优化替代品的标准以及他们根据观察历史对替代品进行建模的方式上有所不同。最近在文献中提出了几种用于超参数的SMBO方法:

    • Bayesian Optimization
      使用_高斯过程_对代理进行建模,通常优化 Expected Improvement(EI),这是新试验将在当前最佳观察上改进的预期概率。高斯过程是函数的分布。来自高斯过程的样本是整个函数。训练高斯过程涉及将此分布拟合到给定数据,以便生成接近观察数据的函数。使用高斯过程,可以计算搜索空间中任何点的EI。接下来将尝试给出最高的EI。贝叶斯优化通常为连续超参数(例如learning rate, regularization coefficient…)提供 non-trivial/off-the-grid 值,并且在一些好的数据集上击败人类表现。Spearmint是一个众所周知的贝叶斯优化实现。
    • SMAC
      使用_随机森林_对目标函数进行建模,从随机森林认为最优的区域(高EI)中抽取下一个点。
    • TPE
      是SMAC的改进版本,其中两个分离的模型用于模拟后验。众所周知的TPE实现是hyperopt。

3. 概念解释

  • 高斯过程

上图里那么多线就是高斯过程的体现。

要使用贝叶斯优化,需要一种能灵活地在目标函数上建立分布的方法。这比在实数上建立分布更棘手,因为我们需要一个这样的分布来表示我们对每个x的f(x)的信念。如果x包含连续的超参数,那么我们必须为f(x)建模无限多的x,即构造它的分布。对于这个问题,高斯过程是一种优雅的方法。实际上,高斯过程生成多维高斯分布,并且存在足够灵活以模拟任何目标函数的模样。

  • Prior Function 先验函数
    基于概率分布,用于描述目标函数的分布,拟合目标函数曲线。不同的分布,PF不同,效果是不一样的。
  • Acquisition Function 收获函数 = max(mean + var)
    用于从候选集中选择一个新的点。贝叶斯优化的效果与AF的设计有较大的关系,由于此类function可能陷入局部最优解,因此在选点时,需考虑不能过早进入局部最优。AF计算EI,用来选择下一个采样点。

    • mean均值大:
      多去采样这些点会帮助我们更好的了解这个函数形态。
    • var方差大:
      表示我们对该点的了解甚少。
  • 采样点
    每一个采样点就是原理解析里的黑点。每个采样点是基于前面n个点的多变量高斯分布的假设以及最大化AF而得到的,现目前为止认为的y的最大值最可能出现的位置。

    • 一开始,采样数据少,算法会采标准差大的点。采样一定数目后,标准差的值会下降很多,此时采样点的选择就更多的受到均值的影响,采样点就更大概率的出现在真正最大值附近。

4. Bayesian Optimizer 原理解析

贝叶斯优化基于高斯过程。

  • 上图2个evaluations黑点,是两次评估后显示替代模型的初始值估计,会影响下一个点的选择,穿过这两个点的曲线可以画出非常多条,如上上图
  • 红色虚线曲线是实际真正的目标函数
  • 黑色实线曲线是代理模型的目标函数的均值
  • 灰色区域是代理模型的目标函数的方差
  • 只有两个点,拟合的效果稍差,根据下方的紫色的EI曲线,最左侧的最大值EI为下一个点

  • 3个evaluations黑点
  • 灰色区域是代理模型的目标函数的方差,黑点越多,灰色区域面积越小,误差越小
  • 根据下方的紫色的EI曲线,左侧的最大值EI为第四个拟合点

  • 4个evaluations黑点
  • 黑点越多,灰色区域面积越小,误差越小,代理模型越接近真实模型的目标函数
  • 根据下方的紫色的EI曲线,最大值EI为第五个拟合点,同理类推…

  • 8个黑点
  • 黑色代理曲线已经十分接近红色真实目标函数,灰色区域也越来越小,拟合效果不错。

5. Bayesian Optimizer 基本思想

一句话总结:建立目标函数的概率模型,并用它来选择最有希望的超参数来评估真实的目标函数。

基本思想是:利用先验知识逼近未知目标函数的后验分布从而调节超参。花一点时间选择下一个超参数,以减少对目标函数的调用。

  1. 建立代理模型的目标函数(Prior Function/先验函数)
  2. 找到在代理上表现最佳的超参数(利用EI值,根据Acquisition Function得出EI)
  3. 将这些超参数应用于真正的目标函数
  4. 更新包含新结果的代理模型
  5. 重复步骤2-4,直到达到最大迭代次数或时间

基于顺序模型的优化方法(SMBO)是贝叶斯优化的形式化。顺序是指一个接一个地运行试验,每次通过应用贝叶斯推理和更新概率模型(代理)来尝试更好的超参数。

6. Bayesian Optimizer 在python中的包

Python中有几个贝叶斯优化库,它们在目标函数的代理算法上有所不同。

  • Spearmint(高斯过程代理)
  • SMAC(随机森林回归)
  • Hyperopt(Tree Parzen Estimator-TPE)

7. Bayesian Optimizer 优点

  • 能利用先验知识高效地调节超参数,每个试验不独立,前一个推动下一个选择
  • 通过减少计算任务而加速寻找最优参数的进程
  • 不依赖人为猜测所需的样本量为多少,优化技术基于随机性,概率分布
  • 在目标函数未知且计算复杂度高的情况下极其强大
  • 通常适用于连续值的超参,例如 learning rate, regularization coefficient
  • 在测试集表现优秀于手工调参结果,泛化性/鲁棒性好
  • 不易陷入局部最优:
    EI的计算根据 Acquisition Function收获函数计算所得:

    • 探索开发是解释现象和优化算法的常用术语。
    • 对于贝叶斯优化,一旦找到局部最优解,会在这个区域不断采样,很容易陷入局部最优。为了减轻这个,贝叶斯优化会使用“ 收获函数Acquisition Function ” 来平衡“探索”和“开发”,下一个点的选择要在这两者之间存在权衡。
    • 下一个选择点(x)应该具有高均值(开发)和高方差(探索)。

8. 其他优秀文章与论文链接

【转载】AutoML--超参数调优之Bayesian Optimization的更多相关文章

  1. 【深度学习篇】--神经网络中的调优一,超参数调优和Early_Stopping

    一.前述 调优对于模型训练速度,准确率方面至关重要,所以本文对神经网络中的调优做一个总结. 二.神经网络超参数调优 1.适当调整隐藏层数对于许多问题,你可以开始只用一个隐藏层,就可以获得不错的结果,比 ...

  2. 评价指标的局限性、ROC曲线、余弦距离、A/B测试、模型评估的方法、超参数调优、过拟合与欠拟合

    1.评价指标的局限性 问题1 准确性的局限性 准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷.比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率.所以,当 ...

  3. Spark2.0机器学习系列之2:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

    Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation).举个例子,例如10折交叉验证(10-fold cross valida ...

  4. Bayesian Optimization使用Hyperopt进行参数调优

    超参数优化 Bayesian Optimization使用Hyperopt进行参数调优 1. 前言 本文将介绍一种快速有效的方法用于实现机器学习模型的调参.有两种常用的调参方法:网格搜索和随机搜索.每 ...

  5. Hbase记录-client访问zookeeper大量断开以及参数调优分析(转载)

    1.hbase client配置参数 超时时间.重试次数.重试时间间隔的配置也比较重要,因为默认的配置的值都较大,如果出现hbase集群或者RegionServer以及ZK关掉,则对应用程序是灾难性的 ...

  6. XGBoost参数调优完全指南(附Python代码)

    XGBoost参数调优完全指南(附Python代码):http://www.2cto.com/kf/201607/528771.html https://www.zhihu.com/question/ ...

  7. Spark机器学习——模型选择与参数调优之交叉验证

    spark 模型选择与超参调优 机器学习可以简单的归纳为 通过数据训练y = f(x) 的过程,因此定义完训练模型之后,就需要考虑如何选择最终我们认为最优的模型. 如何选择最优的模型,就是本篇的主要内 ...

  8. XGBoost参数调优

    XGBoost参数调优 http://blog.csdn.net/hhy518518/article/details/54988024 摘要: 转载:http://blog.csdn.NET/han_ ...

  9. JBOSS参数调优

        阅读目录 JBOSS参数调优 jvm调优讲解1 JVM调优讲解2 JVM常见配置汇总 JBOSS生产环境下JVM调优 JBOSS瘦身 JBoss性能优化:内存紧张的问题终于解决了(转载)--- ...

随机推荐

  1. shell 脚本不能执行多条?何解

    #!/bin/sh ps -e | grep svnserve | awk '{print $1}'  | xargs kill -9 svnserve -d -r /projects/svn --c ...

  2. (replace find)nyoj113-字符串替换

    113-字符串替换 内存限制:64MB 时间限制:3000ms 特判: No通过数:171 提交数:388 难度:2 题目描述: 编写一个程序实现将字符串中的所有"you"替换成& ...

  3. 利用jieba,word2vec,LR进行搜狐新闻文本分类

    一.简介 1)jieba 中文叫做结巴,是一款中文分词工具,https://github.com/fxsjy/jieba 2)word2vec 单词向量化工具,https://radimrehurek ...

  4. 运维监控-基于yum的方式部署 Zabbix Agent 4.0 版本

    运维监控-基于yum的方式部署 Zabbix Agent 4.0 版本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 上一篇博客我们分享了如何基于yum的方式部署zabbix 4. ...

  5. JSON与XML之间的转换

    public class JsonTest { private final Logger cLogger = Logger.getLogger(getClass()); /** * XML转JSON ...

  6. 设计模式---接口隔离模式之适配器模式(Adapter)

    一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不 ...

  7. Bootstrap模态框修改出现的位置和大小

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Linux系统中errno对应的中文意思 errno.h

    /usr/include/asm/errno.h #define EPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* No s ...

  9. 使用java的wsimport.exe生成wsdl的客户端代码【转】

    使用java的wsimport.exe工具生成wsdl的客户端代码 wsimport -keep -d d:\ -s d:\src -p com.map -verbose http://192.168 ...

  10. 阻塞式I/O实现简单TCP通信

    一.技术简介 (1)服务端打开两个端口9999和6666监听外来连接: (2)服务端的子进程通过端口9999监听外来消息,通过端口6666发送消息: (3)客户端的子进程处理外来消息,父进程发送消息 ...