文章目录

  • 贝叶斯优化
    • 贝叶斯优化器的介绍
    • 采集函数(Acquisition Function,AC)
      • UCB(Upper confidence bound)
      • PI(probability of improvement)
      • EI(Expected improvement)
    • 算法流程
    • 贝叶斯优化的一个模拟实验
      • 探索(exploration)与利用(exploitation)
      • 贝叶斯优化过程
    • 贝叶斯优化的应用

贝叶斯优化

  这篇blog参考github上一个基于高斯过程回归的贝叶斯优化开源项目(python):https://github.com/fmfn/BayesianOptimization


贝叶斯优化器的介绍

  贝叶斯优化在不知道目标函数(黑箱函数)长什么样子的情况下,通过猜测黑箱函数长什么样,来求一个可接受的最大值。和网格搜索相比,优点是迭代次数少(节省时间),粒度可以到很小,缺点是不容易找到全局最优解。
  贝叶斯优化流程图如下:


  贝叶斯优化有两个核心过程,先验函数(Prior Function,PF)与采集函数(Acquisition Function,AC),采集函数也可以叫效能函数(Utility Funtcion),但一般还是称呼为采集函数,见下面引用论文A Tutorial on Bayesian Optimization of Expensive Cost Functions, with Application to Active User Modeling and Hierarchical Reinforcement Learning的话。PF主要利用高斯过程回归(也可以是其它PF函数,但高斯过程回归用的多);AC主要包括EI,PI,UCB这几种方法,同时exploration与exploitation的平衡,也是通过AC来完成的。

The process of deciding where to sample next requires the choice of a utility function…To make clear which function we are discussing, we will refer to this utility as the acquisition function (also sometimes called the infill function)


采集函数(Acquisition Function,AC)

  常见的采集函数有下面三种,UCB,PI,EI,先介绍最好理解的UCB。

UCB(Upper confidence bound)

  UCB=μ(x)+kσ(x)UCB=\mu (x)+k\sigma (x)UCB=μ(x)+kσ(x),k为调节参数,直观地理解为上置信边界。

PI(probability of improvement)

  PI(x)=P(f(x)≥f(x+)+υ)=Φ(μ(x)−f(x+)−υσ(x))PI(x)=P(f(x)\geq f(x^{+})+\upsilon)=\Phi (\frac{\mu(x)-f(x^{+})-\upsilon}{\sigma(x)})PI(x)=P(f(x)≥f(x+)+υ)=Φ(σ(x)μ(x)−f(x+)−υ​)
  超参数υ\upsilonυ用于调节exploitation与exploitation,υ=0\upsilon=0υ=0更倾向于收敛到f(x+)附近,f(x^{+})附近,f(x+)附近,
Φ(⋅)表示正态累计分布函数,f(x+)表示现有的最大值。\Phi(·)表示正态累计分布函数, f(x^{+})表示现有的最大值。Φ(⋅)表示正态累计分布函数,f(x+)表示现有的最大值。
  其原理就是找到未知点的函数值比f(x+)f(x^{+})f(x+)大的概率,取这些点中概率最大的点,具体比f(x+)f(x^{+})f(x+)大多少不考虑,这里通过Z-scores标准化法,让每个未知点函数值大于f(x+)f(x^{+})f(x+)的概率可以进行比较。
  Z-scores标准化法,x−μσ\frac{x-\mu}{\sigma}σx−μ​,x为观察点,μ\muμ为所有观察点的均值,σ\sigmaσ为所有观察点标准差,x−μσ\frac{x-\mu}{\sigma}σx−μ​的概率密度函数符合标准正态分布。

EI(Expected improvement)

EI(x)={(μ(x)−f(x+))Φ(z)+σ(x)Φ(z)σ>00σ=0EI(x)=\begin{cases} (\mu (x)-f(x^{+}))\Phi(z)+\sigma(x)\Phi(z) & \sigma>0 \\ 0 & \sigma=0 \end{cases}EI(x)={(μ(x)−f(x+))Φ(z)+σ(x)Φ(z)0​σ>0σ=0​
z=μ(x)−f(x+)σz=\frac{\mu(x)-f(x^{+})}{\sigma}z=σμ(x)−f(x+)​
  Φ(⋅)\Phi(·)Φ(⋅)为正态累计分布函数,ϕ(⋅)\phi(·)ϕ(⋅)为正态概率密度函数,f(x+)f(x^{+})f(x+)表示现有的最大值。
  EI函数解决了PI未考虑未知点,比已知最大点大多少的问题,EI函数求的是未知点函数值比f(x+)f(x^{+})f(x+)大的期望。具体推导过程需要看文献A Tutorial on Bayesian Optimization of Expensive Cost Functions, with Application to Active User Modeling and Hierarchical Reinforcement Learning。[我有空仔细看看在回来补上,当时大体看看没看懂。]


算法流程

输入:输入:输入:
target:黑箱函数~~~~target:黑箱函数    target:黑箱函数
x:自变量取值范围~~~~x:自变量取值范围    x:自变量取值范围
Y:可以接受的黑箱函数因变量取值~~~~Y:可以接受的黑箱函数因变量取值    Y:可以接受的黑箱函数因变量取值
输出:输出:输出:
x:贝叶斯优化器猜测的最大值的x值~~~~x:贝叶斯优化器猜测的最大值的x值    x:贝叶斯优化器猜测的最大值的x值
target(xnew):贝叶斯优化器猜测的最大值的函数值~~~~target(xnew):贝叶斯优化器猜测的最大值的函数值    target(xnew):贝叶斯优化器猜测的最大值的函数值

伪代码:

def BayesianOptimization(target,x,Y):IF 初始化?Yes: xold为已知的所有点中目标函数取得最大值的自变量值IF target(xold)>Y?     Yes:   return xold,target(xold)    #撞了大运,还没开始迭代就结束了No:    PassNo:  随机初始化While    target(xnew)<Y:利用PF(高斯过程回归)求解未知点(在事先定义的自变量范围内,有成千上万个未知点)的均值与方差利用AC(EI或PI或UCB)找到贝叶斯优化器猜测的最大值的点xnew,一般是AC函数最大点return   xnew,target(new)

贝叶斯优化的一个模拟实验

  假设我们想知道下面这个黑箱函数在(-2,10)的最大值,f(x)=e−(x−2)2+e−(x−6)210+1x2+1,f(x)=e^{-(x-2)^2}+e^{\frac{-(x-6)^2}{10}}+\frac{1}{x^2+1},f(x)=e−(x−2)2+e10−(x−6)2​+x2+11​,最大值大概是14,我们假定找到一个点其函数值大于13,就已经可以接受了,返回该函数值。

探索(exploration)与利用(exploitation)

  探索(exploration):简单来说就是尽量选择远离已知点的点为下一次用于迭代的参考点,即尽量探索未知的区域,点的分布会尽可能的平均。
  利用(exploitation):简单来说就是尽量选择靠近已知点的点为下一次用于迭代的参考点,即尽量挖掘已知点周围的点,点的分布会出现一个密集区域,容易进入局部最大。
  如下,上面的图表示贝叶斯优化器以利用为主,下面图表示贝叶斯优化器以探索为主。

  在上文提到的github项目中,通过kappa这个参数平衡探索和利用,如上,上面的图kappa=0.1,下面的图kappa=10,我们下面的代码取kappa等于1.96,即UCB=μ(x)+1.96σ(x)UCB=\mu (x)+1.96\sigma (x)UCB=μ(x)+1.96σ(x),github示例中kappa取的是中间值5,这里取1.96是为了让下面演示贝叶斯优化过程中,UCB就是95%置信区间的上界,更好理解UCB是什么,详细请看下面的贝叶斯优化过程。

贝叶斯优化过程

  下面第一个图产生的两个点(红点)其实是初始化过程产生的,和贝叶斯优化没有什么关系,为了方便分析,这里默认初始化的两个点也是贝叶斯优化前两次迭代过程产生的,也就是说,在经过几次迭代,即标题中的"After xxx Steps",就有xxx个点的值显示在每次迭代的上面的图中(红点标注),每次迭代的下面的图是根据UCB确定的。

  看第9步迭代结果,可见第9步迭代结果就已经很接近真实的最大值,如果我们认为大于1.3的结果我们就可以接受,所以第9个确定的点就是可以接受的点,这时贝叶斯优化器就会退出迭代,把该点的值和函数值返回。
  与网格搜索相比较,贝叶斯优化器可以很快地确定一个可以接受的的值,这在求黑箱函数任意函数值的时间复杂度很高时,显得尤其的有优势,同时贝叶斯优化器没有搜索细度的限制。缺点是返回的结果不一定是真实的最大值(网格搜索也不一定能找到)。

  下面以第5次迭代到第6次迭代为例,讲解一下具体的步骤

  如左上图,在经过了五次迭代后,左上图已经有五个确定的点(红点标出),但是此时的最大的已确定点3达不到预期的要求(假设我们要求找到的点的函数值一定要大于1.3,不大于1.3就继续猜),因此贝叶斯优化器需要根据已知的情况(五个确定的点)进一步猜测最大点在哪里,按照UCB策略,贝叶斯优化器就计算出左下的AC函数,AC函数图像我不说也能猜到,就是左上图中的蓝色边界上界,而AC函数最大值就是贝叶斯优化器猜的第六个点的位置,计算该点的函数值,看右上图,发现点6确实比点3好一点,但是还达不到要求,继续猜第7个点的位置,就是右下图新的AC函数取得最大值的位置。
  现在说一下左上图和右上图中的虚线和蓝色区间,虚线表示高斯回归过程求得的未知点的均值μ\muμ,同时高斯过程也会给出未知点的标准差σ\sigmaσ(和已知点相比,未知点太多了),而蓝色区间就是μ±1.96σ\mu \pm 1.96\sigmaμ±1.96σ,所以可见越是靠近已知点,标准差越小,越是远离已知点,标准差越大,此时说明高斯过程回归对这个未知点越不确定。
  95%的置信区间是μ±1.96σ\mu \pm 1.96\sigmaμ±1.96σ,理解为未知点的均值落在μ±1.96σ\mu \pm 1.96\sigmaμ±1.96σ区间内的概率为0.95(已经很高了),关于置信区间计算,可以看Blog:https://blog.csdn.net/bitcarmanlee/article/details/82709774
  关于高斯过程回归,有空我在单独写一篇blog介绍。


贝叶斯优化的应用

  贝叶斯优化器用于调参,可以很快找到一个可以接受的超参数值,和网格搜索相比,优点是迭代次数少(节省时间),粒度可以到很小,缺点是不容易找到全局最优解。例如我们想调logistic回归的正则化超参数,就把黑箱函数设置成logistic回归,自变量为超参数,因变量为logistic回归在训练集准确度,设置一个可以接受的黑箱函数因变量取值,例如0.95,得到的超参数结果就是可以让logistic回归分类准确度超过0.95的一个超参数。

贝叶斯优化(BayesianOptimization)相关推荐

  1. 贝叶斯优化BayesianOptimization

    神经网络有很多超参数(学习率,正则等等).如何寻找最好的超参数组合,穷举搜索 Grid Search 效率太低:随机搜索比穷举搜索好一点:目前比较好的解决方案是贝叶斯优化. 1.贝叶斯优化的优点 贝叶 ...

  2. 超参数优---贝叶斯优化及其改进(PBT优化)

    目录 参考文献: 简介 贝叶斯优化方法为什么好 贝叶斯优化的适用条件 贝叶斯优化的历史与在神经网络中的应用 贝叶斯优化基本原理与流程 贝叶斯优化的经典变种及其文章 Python中的贝叶斯优化库 贝叶斯 ...

  3. python实现贝叶斯优化_贝叶斯优化的并行实现

    python实现贝叶斯优化 The concept of 'optimization' is central to data science. We minimize loss by optimizi ...

  4. 贝叶斯优化python包_贝叶斯全局优化(LightGBM调参)

    这里结合Kaggle比赛的一个数据集,记录一下使用贝叶斯全局优化和高斯过程来寻找最佳参数的方法步骤. 1.安装贝叶斯全局优化库 从pip安装最新版本 pip install bayesian-opti ...

  5. xgboost参数_具有贝叶斯优化的XGBoost和随机森林

    作者 | Edwin Lisowski 编译 | CDA数据分析师 XGBoost and Random Forest with Bayesian Optimisation 在这篇文章中,我们将介绍带 ...

  6. 贝叶斯优化优化参数,以Kmeans为例

    文章目录 步骤一:构造黑盒目标函数 步骤二:确定取值空间 步骤三:构造贝叶斯优化器 全部代码 贝叶斯优化有几个步骤: 构造黑盒目标函数 确定取值空间 构造贝叶斯优化器 下面以kmeans为例: 步骤一 ...

  7. sklearn模型使用贝叶斯优化调参(以随机森林为例)

    文章目录 1. 构造数据源 2. 构造黑盒目标函数 3. 确定取值空间 4. 构造贝叶斯优化器 5. 运行,导出结果与最优参数 全部代码 贝叶斯优化github地址:https://github.co ...

  8. 随机森林、LGBM基于贝叶斯优化调参

    前言 本文基于孕妇吸烟与胎儿问题中数据集与前期处理 针对随机森林与LGBM模型网格搜索效率低,使用贝叶斯调参提高效率 有关于贝叶斯优化包相关参数说明详解可以看GitHub地址 将处理好的数据用dill ...

  9. 基于贝叶斯优化的离散组合序列问题调研

    基于贝叶斯优化的离散组合序列问题调研 标题 发表时间 作者 期刊 引用量 摘要 问题 心得体会 Applying Bayesian Approach to Combinatorial Problem ...

最新文章

  1. spring 两次进入拦截器_4.SpringBoot 拦截器Fliter,Interceptor,Controller……
  2. linux安装R包的安装
  3. 如何确认mongodb数据插入是否成功_go连接mongodb
  4. 这头像是代表入职送理发福利吗?
  5. windows server2008R2 64位 配置 mysql-8.0.15-winx64
  6. Mysql的concat concat_ws group_concat
  7. HDFS的API操作-创建文件和文件夹
  8. 如何将视频设置为网页背景
  9. wegame登录cf显示服务器人数已满,电一再现万人排队进游戏的盛况?老玩家:感觉回到了三年前...
  10. 别看微信,微博,头条用户都很多,自媒体作者也很多
  11. 云计算之openstack(N版)neutron网络服务最佳实践
  12. 瀑布流JavaScript
  13. matlab sizeof size,使用Matlab进行MEXing C时,size_t和mwSize之间的差异
  14. pycharm中文乱码
  15. Atitit 面试技术点最小化问题法总结 目录 1. Web 前端 1 1.1. Jq 常用操作哪些?? 1 1.2. 查询后如何绑定后端数据到表格 2 1.3. 提交后怎么接受表单数据 2 2.
  16. 蛋白质分子动力学模拟
  17. C#之Chart控件使用
  18. LBP—局部二值模式
  19. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(6)
  20. mac电脑显示器分辨率显示异常

热门文章

  1. Windows下的Socket编程——基本步骤
  2. python: if, and, bool 联合使用需要加括号()
  3. shell脚本配置运行python程序,小技巧之 Linux 软连接的使用
  4. android打包apk不能安装程序,Android Studio 打包apk后应用未安装
  5. (林大oj1276)
  6. 基于MaxScale中间件的MySQL读写分离
  7. oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析
  8. 解决点击按钮使屏幕横屏,iPad无效
  9. 领悟《信号与系统》之 非周期信号的傅里叶变换
  10. Mysql rbo和cbo_oracle的优化——RBO和CBO简介以及optimizer_mode参数说明