分享好友 最新动态首页 最新动态分类 切换频道
贝叶斯优化(原理+代码解读)
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

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

最新文章
现成家政小程序源码小程序开发搭建
随着科技的日新月异,我们的生活也在不断地改变。其中,家政服务行业也在逐步与科技融合,为消费者提供更加便捷、高效的服务。而家政小程序的开发,正是这一趋势的明显体现。本文将详细介绍家政小程序的开发过程及其优势。一、家政小程序的
用AI画美女: 一键生成超逼真美女写真,轻松打造你的AI女友!
在这个科技飞速发展的时代,AI技术似乎已经渗透到我们生活的方方面面。尤其是在美图软件的热潮中,AI绘画工具的融合,让我们能以意想不到的方式生成美丽的图像。想象一下,一键生成超逼真的美女写真,仿佛你身边真的出现了一位AI女友,这到
开发游戏需要哪些资质 游戏研发好后如何拿到版号?
二、手机游戏运营备案之前需要准备什么材料(一)、首先我们需要办理文网文许可证办理原因:因为游戏属于文化产品,游戏运营属于文化活动,无论是文化产品,还是文化活动,文网文许可证,都是必不可少的资质。办理条件(当地省级文化厅办理):
贵州新型城镇化:推动“强省会”“双城记”实现“3个100万”
“上学和就医都在家门口,方便得很!”今年48岁的成信梅是贵州省毕节市七星关区撒拉溪镇中山村人,得益于易地扶贫搬迁政策,一家6口从交通不便、自然环境恶劣的大山深处搬到柏杨林街道和美社区,享受到了便捷的教育、医疗、就业等公共服务
最新疫情情况安徽合肥,最新疫情情况安徽合肥,科技之光照亮抗疫之路
在合肥的街头巷尾,智能测温系统已经成为疫情防控的第一道防线,这款产品巧妙地结合了人工智能和大数据分析技术,实现了高精度、高效率的体温检测,无需接触,它即可快速准确地检测行人体温,有效预防疫情扩散,其高效的检测速度和精准的测
网页链接怎么做
网页链接怎么如何进行制作,怎样做好外部链接就成为搜索引擎优化推广人的论题,网站怎么正确的利用外部链接做搜索引擎优化优化?锚文本链接要有相关度(推荐学习:web前端视频教程)先来说一下,搜索引擎优化外链锚文本要到什么网站去做才
购买商标“蚝功坊”29类食品详细指南
  随着市场对品牌认知度的提升,商标作为企业的重要资产之一,其价值日益凸显。对于那些想要进入特定市场的创业者或者小企业主来说,直接购买一个已经注册并具有一定知名度的商标,无疑是一条快速启动业务的有效途径。在众多可选的类别中
淘宝秒杀是什么意思?淘宝秒杀活动如何设置?(淘宝秒杀是什么活动)
秒杀活动几乎在任何电商平台都是常见的,秒杀商品一般价格都很低,不过抢到的机会却比较少,可以说这是考验你网速的,那淘宝秒杀是什么意思?接下来我们就来给大家讲解一下这方面的内容。一、淘宝秒杀是什么意思?秒杀就是网络卖家发布一些超
企业产品营销推广策划案例
企业产品营销推广策划案例(精选3篇)  一、公司简介  本公司以“与绿色同行,与自然为本”为企业宗旨,号召广大人民热爱大自然,保护大自然。  本公司以生产绿色产品为主(包括绿色食品,绿色日用品,等绿色系列品),创建于20__年1月
申请一个微信小程序有哪些需要注意的事项
相信有使用微信的用户,早就在微信平台上面接触了一种,不需要下载安装,只需要打开就能够使用的软件。这些软件有之前很火跳一跳、斗地主、弹球等等,其实这些软件都叫做微信小程序。不少企业、商家、个人用户
相关文章
推荐文章
发表评论
0评