贝叶斯优化包的高级学习

以下内容为该学习地址的学习笔记,是该栏的第二篇

学习地址:Advanced tour of the Bayesian Optimization package — Bayesian Optimization documentation

1. Suggest-Evaluate-Register范式

贝叶斯优化是一种用于优化复杂和昂贵的目标函数的策略,特别适用于函数评估开销高或不可微的情况。它通过构建一个代理模型(通常是高斯过程)来近似目标函数,然后使用这个模型来选择下一个评估点,以期望最大化目标函数。

核心概念

  1. 代理模型:贝叶斯优化使用高斯过程(GP)作为代理模型,来近似目标函数。代理模型提供了目标函数在所有未评估点上的预测分布。

    高斯过程是一种非参数的贝叶斯方法,用于回归和分类任务。它通过假设目标函数的所有可能值都服从一个联合高斯分布,来进行预测。

    为什么用GP作为代理模型

    1. 不确定性估计:GP能够自然地提供预测的不确定性估计,这是选择采集函数时非常有用的信息。每个预测点不仅有一个均值,还有一个方差,表示对这个预测的信心程度。
    2. 灵活性:GP是一种非参数模型,不需要指定具体的函数形式,只需指定一个协方差函数(核函数)。这使得它能够很好地拟合复杂和非线性的目标函数。
    3. 良好的性能:在小数据集上,GP通常具有良好的预测性能。对于贝叶斯优化,通常每次评估目标函数的代价很高,因此数据点相对较少,GP在这种情况下表现出色。
  2. 采集函数:采集函数(如UCB、EI、PI等)根据代理模型提供的信息,选择下一个评估点。采集函数在探索(探索未知区域)和利用(利用已知高值区域)之间进行权衡。

    • 探索(Exploration):探索未知区域,即选择那些尚未评估或评估次数较少的点。这样做的目的是发现可能的全局最优解。
    • 利用(Exploitation):利用已知的高值区域,即选择那些已经显示出高目标值的点。这样做的目的是在已知的优良区域内进一步优化。

    采集函数通过在这两者之间进行权衡,来决定下一个采样点。不同类型的采集函数有不同的平衡策略:

    • UCB(Upper Confidence Bound):上置信界采集函数平衡了均值和不确定性,通过调整参数(如kappa)来控制探索和利用的比例。
    • EI(Expected Improvement):期望改进采集函数评估在某一点上期望的目标值改进量。
    • PI(Probability of Improvement):改进概率采集函数评估在某一点上目标值超过当前最优值的概率。
  3. 黑盒函数:目标函数被视为“黑盒”,即其内部机制未知,只能通过输入-输出对来了解其行为。

在贝叶斯优化中,maximize 方法实际上是对 suggestproberegister 方法的封装。如果需要对优化循环进行更细粒度的控制,可以使用Suggest-Evaluate-Register范式。

以下是一个关于贝叶斯优化的示例,展示了如何在分布式环境中运行贝叶斯优化,即在不同的核心/机器/服务器上并行评估目标函数。具体可以查看示例文件夹中的 async_optimization.py 脚本。

首先,定义目标函数、参数边界,并实例化优化对象。这个函数是一个简单的二次函数,目的是模拟一个需要优化的复杂函数。

# 定义黑盒函数
def black_box_function(x, y):
    return -x ** 2 - (y - 1) ** 2 + 1

注意,黑盒函数的评估不会由优化器对象执行。我们模拟一个情景:黑盒函数可能在不同的机器上执行,可能用不同的语言编写,甚至可能是化学实验的结果。无论具体情况如何,只要不直接调用 probemaximize 方法,优化器对象将忽略黑盒函数。

  • f=None:表示优化器不会自动评估目标函数。 通常在贝叶斯优化中,优化器会在内部调用目标函数来评估某个点的目标值。但是,有些情况下我们希望手动控制目标函数的评估过程。例如,目标函数可能在不同的机器上并行计算,或者目标函数的计算非常复杂,需要特别的处理。这时,将f设为None,可以让用户自己决定何时以及如何评估目标函数。
  • pbounds:定义参数的搜索空间,即x22之间,y33之间。这有助于优化器在合理的范围内进行探索,避免在无效或不合理的区域浪费时间和计算资源。 贝叶斯优化需要知道参数的范围,以便在这个范围内进行采样和优化。pbounds定义了每个参数的上下界。
  • verbose=2:设定输出信息的详细程度。参数控制优化过程中的日志输出详细程度。常见的取值有:
    • 0:无输出。
    • 1:输出基本信息。
    • 2:输出详细信息,包括每一步优化的结果和状态。
  • random_state=1:固定随机种子以保证结果的可重复性。贝叶斯优化中有许多随机过程,例如初始采样点的选择和代理模型中的随机因素。为了确保每次运行的结果一致,可以固定随机种子。这可以确保每次运行代码时,生成的随机数序列是相同的,从而保证优化结果的一致性和可重复性。这对于调试和对比不同优化方案特别重要。
# 实例化贝叶斯优化对象
from bayes_opt import BayesianOptimization

optimizer = BayesianOptimization(
    f=None,  # 由于我们要手动控制评估过程,这里设置为None
    pbounds={'x': (-2, 2), 'y': (-3, 3)},  # 参数边界
    verbose=2,  # 输出详细程度
    random_state=1,  # 随机种子,确保结果可复现
)

创建一个采集函数实例:我们还需要一个 UtilityFunction 实例。这个函数用于决定下一次采样的点。

  • kind="ucb":表示使用上置信界(UCB)作为采集函数。
  • kappa=2.5:UCB的参数,用于调节探索与利用的平衡。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值