贝叶斯优化算法(BOA)

  • 贝叶斯优化算法BOA

    • 背景介绍
    • 贝叶斯优化流程
      • 形式化
      • 算法流程
  • 核心算法
      • Prior Function
    • Acquisition Function
  • 参考文献

背景介绍

当前的场景中,会面临很多设计选择问题。比如说在工程师进行方案设计的时候,需要考虑多种细节选择,才能做出一个稳定可靠的方案。糕点师傅在做蛋糕时,会决定各种配料应该使用多少才能做出好吃的蛋糕……在如此多的需要设计选择的场景中,往往需要从多个维度,多个方面去考虑。有时候需要面对很多种选择。对于资深有经验的人,可以从多种选择中快速选择出能够满足要求的方案,比如专业的糕点师很快能知道,要做出一款美味的蛋糕,需要使用几勺糖,多少毫升牛奶,多少克面粉……而对于我这种小白,我可能需要不断去尝试,首先根据自己的尝试任意进行配比,然后做出蛋糕之后品尝一下,看看是否好吃。如果觉得不好吃,还需要重新再组合一个方案,然后再把蛋糕做出来试吃。经过多次迭代后,在浪费了大量的时间和食材(简直惨绝人寰)之后,终于做出了好吃的蛋糕。

然而在很多其他场景中,进行一次方案可行性测试的成本可能非常高。比如说我们不是做蛋糕,是对机器学习模型的参数进行调试,模型的效果怎么样需要运行实际的任务才能知道。但是运行一个要两周才能运行出结果的任务(这种需要较长时间运行的任务是存在的),那么明显按照我做蛋糕那种方法去运行任务,那在得出较好的参数方案的时候需要无法忍受的时间,因此显然是不可取的。另一方面,刚才我们做蛋糕,可能只需要对面粉量、牛奶量、糖量等几个维度进行选择。但是有的场景下,需要对上百个维度进行选择,同时各个维度可选的候选空间也非常大。此外,各个维度属性可能有内部的相互影响。那么靠人工的方法,几乎很难找到最优的维度组合方案。因此在这种情形下,贝叶斯优化算法(BOA)就可以派上用场了。当前BOA运用很广泛,包括用于组合优化、自动机器学习、增强学习、气象、机器人等等

贝叶斯优化流程

形式化

首先为了便于讨论问题,我们形式化一下。贝叶斯优化算法(BOA)主要面向的问题场景是:

X∗=argx∈S max f(x)(1)

X^* = arg_{x\in S} \ max\ f(x)\qquad\qquad\qquad {(1)}

公式(1)中,S是x的候选集。目标是从S中选择一个x,使得 f(x) f(x) 的值最小或者最大。可能 f(x) f(x) 的具体公式形态无法得知,但是假如选择一个 x x ,可以通过实验或者观察得出f(x)f(x) 的值。 f(x) f(x)是一个黑盒的函数。对应到背景中我们做蛋糕的例子,就是 S S 是各个原料的组合候选集,xx就是其中的具体某一种方案(如白糖15g,牛奶13ml……)。而 f(x) f(x)的结果就是蛋糕的味道。选择了一个原料组合方案 x x,那么可以通过实验的方法获得在该方案下蛋糕的口感f(x)f(x)。

算法流程

那么,现在我们的目标就是从 S S中,找到一个xx使得 f(x) f(x)最大(最小)。其基本的思想是首选对 f(x) f(x) 有一个猜想的先验分布模型,然后利用后续新获取到的信息,来不断优化那个猜想模型,使模型越来越接近真实的分布。

Created with Raphaël 2.1.0 开始 (1)猜想的分布模型M (2)根据模型M选择一个新的X (3)获得X对应的F(X) (4)(X,F(X))是否满足需求? 结束 (5)利用(X,F(X))修正模型M yes no

上面这个图是个大致的简图。先不用太深入,我们先简单看看流程。
Step(1)
第一步首先是有一个先验的猜想。既然我们是需要求出满足条件的 x x,那么如果我们知道了f(x)f(x)的函数曲线图,是不是就可以直接算出 x x了呢?但是我们不知道f(x)f(x)长什么样,函数有什么分布特点。所以我们只能先猜一下。一般我们常见的假设是 f(x) f(x)函数满足高斯分布(GP),就是正态分布,通俗地讲就是假如两个点 x1,x2 x_1,x_2比较接近,那么对应的 y1,y2 y_1,y_2也是比较接近。高斯分布回归.当然除了GP也还有其他分布,对于不同问题需要选用不同的分布假设。假如这里我们选用了高斯分布,现在我如果有两组(任意组)数据 [x0,f(x)0], [x1,f(x)1] [x_0,f(x)_0],\ [x_1,f(x)_1] ,将这两组数据输入GP模型中,两个真实值加入猜想模型,能够对模型进行修正,使其更接近目标函数真实的分布**。

Step(2)
第一步有了修正后的GP。我们根据某些方法,来从修正后的GP中,选择一个感兴趣的点 xi x_i。选择的标准是,相对于候选集中的其他点,假如给GP输入 [xi,f(xi)] [x_i,f(x_i)],会使得GP更快更准确地向目标函数的真实分布接近,也就是GP的收益最大。或者这个点相对于目标函数中的其他点,他的 f(xi) f(x_i)更优。

Step(3)
选出了一个新的 xi x_i之后,利用实验或者观察或者什么方式,获取到 f(xi) f(x_i)之后,判断选出的这个点是否是我们想找到的点。这个点可能是一个最优解,也可能是个较优解。假如符合我们的目标需求,比如选出的这个蛋糕配置方案做出来的蛋糕已经是还算好吃的了,那么就可以终止算法推出,得出我们想要的 x x。

Step(4)
反之,假如上一步找出的点还达不到我们的需求,那这个点也不能浪费,将其输入返回到GP模型,再次对其修正,重新开始Step(2)

经过上面的初步分析后,我们大概了解了贝叶斯优化的整个流程。从上面描述的流程可以看出,贝叶斯优化最核心的步骤是Step(1),Step(2)。在Step(1)中我们猜想的分布模型,以及Step(2)中支持我们做出选择新的点的方法,这里我们定义一下一般这个方法叫Acquisition function(后面简称AC函数)。这个收益(损失)函数指导我们选择下一个点。只要把这两个东西确定了,那么整个算法就确定了。从这里也可以看出BOA是一个迭代运行的算法框架,由两个组件组成,一个是先验模型,一个是AC函数。这两者的作用分别如下:

  • 先验模型(prior function)基于概率分布,用于描述目标函数的分布(可以理解为用于拟合目标函数曲线)
  • AC函数用于从候选集中选择一个新的点。BOA的运行效果,和AC函数的设计有很大关系。由于此类函数可能陷入局部最优解,因此在选点的时候,需要考虑到很多方面因素,不能过早进入局部。因此需要进行多方面权衡,然后综合之后选点。选出的点的质量直接影响算法的收敛速度以及最终解的质量。
    这里再给一个更加具体的流程图。这图和开始的简图差不多,我也就不多解释了,应该大致能看懂。

核心算法

上面说了BOA最核心的两个组件Prior Function以及Acquisition Function(AC)。

Prior Function

上面说到,当我们不知道目标函数曲线是什么样的时候,我们就只能猜(概率)。主要的方式有含参、不含参、线性、非线形等。比如有高斯过程(GP),认为目标函数满足多变量高斯分布。当然也有存在其他的函数,在选择PF的时候,需要谨慎选择模型,不同的模型效果是不一样的。

Acquisition Function

在经历过PF的选择后,那么就要对PF模型进行进一步修正。让他修正的方法很简单,就是给他尽量滴提供更多的真实样本点[xi,f(xi)][x_i,f(x_i)]呗。那么应该提供什么样本点呢?假如我们把所有候选集中的样本点都提供给模型,那么目标函数曲线其实就出来了。但是很明显,根据BOA的使用场景,我们无法将所有的样本点都提供出来,因为产生一个真实样本点的成本很高。那么我们就应该选择那种能够提供更多信息给模型的点。就像我们打游戏,假如我们血有限的话,那么就尽量去打得分多的怪。那么AC函数(Acquisition Function)就指导我们如何选点。那么AC函数也分很多种类。

  1. Improvement-based policies
    这种方法的基本思想是选择收益最高的点。包括如PI、EI等方式

    1. Optimistic policies
      这种方法主要采用上限置信区间(upper confidence bound)。常用的如GP-UCB等方法
    2. Information-based policies
      此类方式思想是利用后验信息来进行选点。常用有Thompson sampling 和 entropy search。基于熵的方法感觉发展空间还比较大,有一些相关工作都有用到这个
    3. Portfolios of acquisition functions
      这类方法就是将多种AC方法进行集成,最近的工作比如有ESP

    参考文献

[1] Taking the Human Out of the Loop: A Review of Bayesian Optimization


算法部分讲的很简单,后面再进行补充。文中有理解不正确的地方,欢迎各位大佬拍砖

贝叶斯优化 Bayesian Optimization相关推荐

  1. 贝叶斯优化算法python实例_贝叶斯优化/Bayesian Optimization

    最近心情不好,写篇文章让大家开心一下吧.介绍一下世界上最好的算法:贝叶斯优化. 背景介绍 近年来深度神经网络大火,可是神经网络的超参(hyperparameters)选择一直是一个问题,因为大部分时候 ...

  2. 【机器学习】一文看懂贝叶斯优化/Bayesian Optimization

    点击上方,选择星标,每天给你送干货! 来自:AI部落联盟 今天想谈的问题是:什么是贝叶斯优化/Bayesian Optimization,基本用法是什么? 本文的定位是:帮助未接触.仅听说过.初次接触 ...

  3. python机器学习手写算法系列——贝叶斯优化 Bayesian Optimization

    Bayesian Optimization 贝叶斯优化在无需求导的情况下,求一个黑盒函数的全局最优解的一系列设计策略.(Wikipedia) 最优解问题 最简单的,获得最优解的方法,就是网格搜索Gri ...

  4. 贝叶斯优化 Bayesian Optimization

    一.介绍   在机器学习的许多模型中,包括决策树.支持向量机.神经网络,都存在着大量的超参数需要凭经验设定(学习率.决策树深度.神经元个数等),也可以使用grid search或者random sea ...

  5. 贝叶斯优化(Bayesian Optimization)深入理解

    目前在研究Automated Machine Learning,其中有一个子领域是实现网络超参数自动化搜索,而常见的搜索方法有Grid Search.Random Search以及贝叶斯优化搜索.前两 ...

  6. [机器学习]超参数优化---贝叶斯优化(Bayesian Optimization) 理解

    背景 很多算法工程师戏谑自己是调参工程师,因为他们需要在繁杂的算法参数中找到最优的组合,往往在调参的过程中痛苦而漫长的度过一天.如果有一种方式可以帮助工程师找到最优的参数组合,那一定大有裨益,贝叶斯超 ...

  7. 贝叶斯优化(Bayesian Optimization)只需要看这一篇就够了,算法到python实现

    贝叶斯优化 (BayesianOptimization) 1 问题提出 神经网咯是有许多超参数决定的,例如网络深度,学习率,正则等等.如何寻找最好的超参数组合,是一个老人靠经验,新人靠运气的任务. 穷 ...

  8. 论文: 贝叶斯优化方法和应用综述(1)--------陈述设计类问题举例子,与 model-free优化计算的对比

    陈述:     就是想看一下贝叶斯学派的陈述,从不同的学派的对比,看看有什么优缺点,然后自己思考下.  摘要: 通过设计恰当的概率代理模型和采集函数,贝叶斯优化框架只需经过少数次目标函数评估即可获得理 ...

  9. 超参数优化 贝叶斯优化框架_mlmachine-使用贝叶斯优化进行超参数调整

    超参数优化 贝叶斯优化框架 机器 (mlmachine) TL; DR (TL;DR) mlmachine is a Python library that organizes and acceler ...

最新文章

  1. cd-rom门锁定什么意思_CD-ROM的完整形式是什么?
  2. Succinctly 中文系列教程(二) 20220109 更新
  3. g120xa变频器调试参数_西门子G120XA变频器如何进行快速调试
  4. CentOS 7/RHEL 7忘记root密码最简单的修改方法
  5. 记:从百度空间搬家到博客园--写博客要写的舒服
  6. Atitit 通用接口的设计与实现attilax 总结
  7. stm32usb功能设备以及在linux下的USB相关总线、设备驱动笔记
  8. uva 10066 LCS
  9. 笔记本显示服务器未能登录,win10系统出现User profile service服务未能登录的解决方案...
  10. zabbix_get [12429]: Check access restrictions in Zabbix agent configuration
  11. 【AI名利场·人物】Gowild创始人邱楠:倔强顽强创新着,将AI虚拟生命进行到底...
  12. Halcon OCR字符识别
  13. JavaScript的强引用和弱引用
  14. 在线Excel转公式工具
  15. CEPII-两国间的地理距离数据
  16. #I. 哆啦A梦的时光机(bfs经典习题)
  17. PL2303串口无法识别
  18. S905L(P212)ATV 6.0 7.1修复版固件(android tv)
  19. CrossPoint:自监督3D点云场景理解(CVPR2022)
  20. VH-HFCN based Parking Slot and Lane Markings Segmentation on Panoramic Surround View

热门文章

  1. 走进Vue.js 1.0-姜威-专题视频课程
  2. 是谁用Python弹奏一曲东风破
  3. 【图形处理】字模软件与汉字取模(GB2312、GBK,BIG5)(草稿)
  4. 软件开发可行性分析九个流程的理解
  5. 总价加激励费用合同计算
  6. ReadEveryDay From LuoJiLab
  7. 小米4c如何添加语言,小米4C输入法怎么切换 小米4C输入法切换教程
  8. 真约数求法 c语言,数学:求一个数的真约数(因数)的个数及所有约数之和
  9. 【Linux系统管理】10 Shell 编程进阶篇
  10. 光场相机重聚焦--焦点堆栈深度估计法