以下为该学习地址的学习笔记
学习地址:Basic tour of the Bayesian Optimization package — Bayesian Optimization documentation
贝叶斯优化简介
贝叶斯优化是一种基于贝叶斯推断和高斯过程的全局优化方法,它试图在尽可能少的迭代次数内找到一个未知函数的最大值。这种技术特别适合用于高成本函数的优化,以及需要在探索(exploration)和利用(exploitation)之间找到平衡的情况。
贝叶斯优化的基本原理
-
后验分布构建:贝叶斯优化通过构建一个描述你要优化的函数的后验分布(通常是高斯过程)来工作。随着观察数据的增加,后验分布会不断改进,算法会逐渐确定参数空间中的哪些区域值得探索,哪些不值得探索。
-
探索与利用的平衡:在每一步迭代中,算法都会根据已知样本(先前探索过的点)拟合一个高斯过程。然后,后验分布结合探索策略(如UCB(上置信界)或EI(期望改进))来确定下一个应该探索的点。
优化过程
贝叶斯优化的过程旨在最小化找到接近最优参数组合所需的步骤数。为此,这种方法使用了一个代理优化问题(寻找采集函数的最大值),虽然这仍然是一个困难的问题,但计算成本较低,并且可以使用常见的工具。因此,贝叶斯优化特别适用于采样目标函数非常昂贵的情况。
关键概念
- 高斯过程:一种用于构建后验分布的非参数贝叶斯模型,它通过已知样本来推断未知函数的分布。
- 采集函数:一种策略函数,用于在每次迭代中决定下一个采样点。常见的采集函数包括上置信界(UCB)和期望改进(EI)。
- 探索(Exploration)与利用(Exploitation):探索是指寻找参数空间中未知或不确定的区域,而利用是指在已知的高潜力区域进行优化。贝叶斯优化通过平衡这两者来提高优化效率。
应用场景
贝叶斯优化适用于以下情况:
- 目标函数的计算代价高昂,例如机器学习模型的超参数调优。
- 需要在尽量少的迭代中找到接近最优的参数组合。
- 需要在探索新的参数区域和利用已有信息之间找到平衡。
通过贝叶斯优化,可以在高成本的函数优化问题中高效地找到最优解,减少不必要的计算开销。详细的讨论和更多的理论基础可以参考相关文献和资料。
1. 确定要优化的函数
这是一个函数优化软件包,因此最重要的第一要素当然是要优化的函数。
免责声明:我们很清楚下面函数的输出如何取决于其参数。显然,这只是一个示例,你不应该指望在实际场景中知道这一点。不过,你应该清楚,你并不需要知道。要使用这个软件包(更广泛地说,要使用这种技术),你所需要的只是一个接收已知参数集并输出实数的函数 f。
贝叶斯优化的核心是对函数进行优化。首先,需要定义一个目标函数(即需要优化的函数)。
def black_box_function(x, y):
"""定义一个我们希望优化的未知内部函数。
这里仅作为示例,在实际场景中,你不应该知道该函数的具体内部实现。
只需要知道这个函数接受一组参数并输出一个实数即可。
"""
return -x ** 2 - (y - 1) ** 2 + 1
此函数返回一个值,该值基于输入参数 x和 y 计算得到。优化的目标是找到使得该函数值最大的参数组合。
2. 开始贝叶斯优化
我们需要实例化一个 BayesianOptimization 对象,指定要优化的函数 f 及其参数和对应的边界 pbounds。贝叶斯优化是一种约束优化技术,因此必须指定每个参数的最小和最大值。
from bayes_opt import BayesianOptimization
# 参数空间的有界区域
pbounds = {'x': (2, 4), 'y': (-3, 3)} # 指定参数 x 和 y 的边界
optimizer = BayesianOptimization(
f=black_box_function, # 需要优化的函数
pbounds=pbounds, # 参数边界
verbose=2, # verbose=1 时仅在观察到最大值时打印,verbose=0 时不打印
random_state=1, # 随机种子,保证结果可重复
)
BayesianOptimization 对象可以直接使用,无需进行大量调优。主要需要关注的方法是 maximize,它用于执行贝叶斯优化过程。
max

最低0.47元/天 解锁文章
722

被折叠的 条评论
为什么被折叠?



