分享好友 最新动态首页 最新动态分类 切换频道
贝叶斯优化(原理+代码解读)
2024-12-27 21:18

希望这篇文章能够让你无痛理解贝叶斯优化,记得点赞!




贝叶斯优化什么



既然是优化,就有优化命题的存在,比如要在某个区间内去最大化某个函数

如果这个函数计算比较容易,甚至还可以知道它的梯度,那事情就好办了,一阶、二阶优化算法换着上就完事。


https://zhuanlan.zhihu.com/p/169835477


但现实往往没有那么理想,这个函数的一阶、二阶导数信息我们可能是没有的,甚至计算一次函数的值都很费劲(给定一个x,计算f(x) 的计算量很大。


比如神经网络中的超参数优化),这时候就要求助 gradient-free 的优化算法了,这类算法也很多了,贝叶斯优化就属于无梯度优化算法中的一种,它希望在尽可能少的试验情况下去尽可能获得优化命题的全局最优解。




概述



由于我们要优化的这个函数计算量太大,一个自然的想法就是用一个简单点的模型来近似f(x),这个替代原始函数的模型也叫做代理模型,贝叶斯优化中的代理模型为高斯过程,假设我们对待优化函数的先验(prior)为高斯过程,经过一定的试验我们有了数据(也就是evidence),然后根据贝叶斯定理就可以得到这个函数的后验分布。


有了这个后验分布后,我们需要考虑下一次试验点在哪里进一步收集数据,因此就会需要构造一个acquisition函数用于指导搜索方向(选择下一个试验点),然后再去进行试验,得到数据后更新代理模型的后验分布,反复进行。


综上所述,贝叶斯优化的流程为:



高斯过程



高斯过程是多元高斯分布向无穷维的扩展,如果说高斯分布是随机变量的分布,则高斯过程是函数的分布,它可以由均值函数和协方差函数组成

这里的均值和协方差函数的推导和具体形式先省略不管,感兴趣的可以看之前的博文,需要明确的是我们已经可以根据高斯过程的后验分布对这个未知函数在任意位置的值做出预测,均值包括方差。


关于高斯过程的更多可见:

https://zhuanlan.zhihu.com/p/158720213




acquisition函数



Typically, acquisition functions are defined such that high acquisition corresponds to potentially high values of the objective function, whether because the prediction is high, the uncertainty is great, or both. 


也就是说贝叶斯优化选择的搜索方向为预测值大的位置或者不确定性大的位置,这样才有可能搜到目标函数的最优解。

因此贝叶斯优化中很多工作关注点在于acquisition函数的设计:


最大化提升概率


最容易想到的就是我希望下一次试验的结果比当前所有观测结果都要好

或者说这个新采样的函数值更优的概率要大

但是光这样考虑是有点目光短浅的,它忽略了对不确定性的考虑,一味追求选择大概率肯定大于f(x)+的点,也就是一直在exploitation,这样的缺点是可能就陷入了局部最优,忽略了潜在的最优解。改进的方法也很简单,加个偏置就可以了

最大化提升量


提升的概率大并不意味着提升得多,一种量化的角度就是考虑提升量(可以不严谨地理解为梯度下降法中,不仅要下降,而且要下得更多一点)

那么要求得下一次试验点就可以最大化期望的提升量

由于代替模型为高斯过程,提升量Ι的似然满足标准正态分布,进一步可以推导(不会推导想了解推导的再留言吧)得到

最大化置信上界


由于我们的代理模型是高斯过程,预测为分布,即有均值也有方差,那么就可以构造一个置信上界

这样的上界同时考虑了预测值的大小以及不确定性,高斯过程在观测数据的位置不确定性(方差)小,在未探索区域的不确定大。




Talk is Cheap



让我们来解读一下源码,一探究竟


首先定义个Bayesian_opt的类,其中的代理模型高斯过程从sklearn拉出来就好了


from sklearn.gaussian_process import GaussianProcessRegressorself.GP = GaussianProcessRegressor(...)


定义acquisition function


def PI(x, gp, y_max, xi):    mean, std = gp.predict(x, return_std=True)    z = (mean - y_max - xi)/std    return norm.cdf(z)def EI(x, gp, y_max, xi):    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)def UCB(x, gp, kappa):    mean, std = gp.predict(x, return_std=True)    return mean + kappa * std


寻找acquisition function最大的对应解,更精细化的可以去优化一下,这里仅展示随机采样的方式。


def acq_max(ac, gp, y_max, bounds, random_state, n_warmup=10000):    # 随机采样选择最大值    x_tries = np.random.RandomState(random_state).uniform(bounds[:, 0], bounds[:, 1],                                   size=(n_warmup, bounds.shape[0]))    ys = ac(x_tries, gp=gp, y_max=y_max)    x_max = x_tries[ys.argmax()]    max_acq = ys.max()    return x_max


主函数


while iteration < n_iter:    # 更新高斯过程的后验分布    self.GP.fit(X, y)    # 根据acquisition函数计算下一个试验点    suggestion = acq_max(            ac=utility_function,            gp=self.GP,            y_max=y.max(),            bounds=self.bounds,            random_state=self.random_state        )    # 进行试验(采样),更新观测点集合    X.append(suggestion)    y.append(target_func(suggestion))    iteration += 1

↑火爆课程,限时优惠券!

最新文章
十大WordPress博客插件
博主需要什么样的插件呢?自托管的WordPress博客网站需要两种插件——一种是为了提高网站的性能、安全性和可搜索性的插件,另一种是专门添加与博客相关的功能的插件。世界各地的WordPress用户和第三方设计人员创建了五万四千多个WordPress
海外黄冈网站推广:探索海外市场,助力黄冈网站推广新机遇。
黄冈的教育资源及优势留学生活与适应建议如何选择合适的课程和学校提升英语能力的小技巧社交网络的重要性  黄冈,位于中国湖北省,以其丰富而优质的教育资源闻名。这里拥有众多知名中学,如黄冈中学,其毕业生在全国高考中的表现常年居于
小红书核心代理商|小红书投放找我们|小红书聚光常见问题之推广定向问题
● 定向选项提示:小红书的信息流广告有三种定向选项:通投、智能定向和定向。在选择定向时,您可以根据需要选择其中一种。选择通投后,广告将面向小红书平台上的所有用户,同时您还可以根据性别、年龄、地域等条件进行筛选;选择智能定向
用AI一键生成超逼真美女写真,神器推荐与操作教程大揭秘!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字时代,越来越多的人开始追求创造与分享,尤其是在社交媒体平台上,一张精美的美女
搜狗浏览器如何更换搜索引擎
  搜狗浏览器内置了多种常用搜索引擎供您选择,点击浏览器右上角搜索栏搜索引擎图标即可更换,如图所示  搜狗浏览器是首款给网络加速的浏览器,可明显提升公网教育网互访速度2-5倍,通过业界首创的防假死技术,使浏览器运行快捷流畅且
震撼展示:不休的乌拉拉法师引导闪电技能效果,绝美法师技能效果图鉴
本文目录导读:引导闪电技能效果描述绝美法师技能效果图鉴构想“不休的乌拉拉”是一款以原始石器时代为背景的休闲放置类手游,其中法师职业以其强大的魔法技能而备受玩家喜爱,关于法师的“引导闪电”技能,虽然具体的效果可能因游戏版本更
淘宝类目排名优化怎么做?影响因素有哪些?
淘宝类目排名优化是指提高商品在淘宝平台上的分类页中的排名,增加曝光和点击率的一种方式。以下是几种常见的淘宝类目排名优化方法:1. 关键词优化:在商品标题、卖点、描述等位置合理使用与商品相关的关键词,可以增加商品在淘宝分类页中
淘宝直通车出价计算公式是什么?如何算出价?
就是在直通车推广的宝贝上排在你的下一名的这个人的出价,下一名出价X下一名质量得分/您的质量得分+0.01元就是你的实际出价淘宝直通车排名按照你的出价和质量得分相乘最终得出来的数值,按照从大到小排序流量价值=成交一笔的利润/成交一笔
幼儿述职报告参考8篇
通过认真对待述职报告,我们能够展示出自己的工作态度和效率,赢得领导的信任和赞许,有了述职报告,我们的解决问题能力和应对挑战能力才能被领导认可和提升,以下是公开课小编精心为您推荐的幼儿述职报告参考8篇,供大家参考。幼儿述职报
网贷协商一次性还款的公司可靠吗?探讨其可信度与风险
网贷协商一次性还款的公司可靠吗?小编导语随着互联网金融的发展,网贷行业逐渐成为了许多人获取资金的一种方式。随着借款人数的增加,逾期还款的问也日益严重。在这种背景下,许多借款人选择与网贷公司进行协商,希望能够以一次性还款的方
相关文章
推荐文章
发表评论
0评