Bayesian Optimization
贝叶斯优化利用以往评估结果和概率模型,在计算资源有限时为计算成本高昂的机器学习工作负载寻找高性能配置。
贝叶斯优化是一种通过从先前评估中学习,为计算成本高昂的函数寻找高性能设置的方法。它会构建输入如何影响结果的概率模型,然后利用该模型选择下一次实验。在机器学习中,这使它适合在有限的计算预算内寻找效果良好的训练配置。
其理论基础包括 Harold Kushner 于 1964 年提出的序贯搜索方法,以及 Jonas Mockus 于 1975 年提出的贝叶斯极值搜索方法。如今,它是超参数调优和自动化机器学习中的核心技术。
贝叶斯优化的工作原理#
目标函数用于衡量候选配置的质量。对于模型训练,评估过程包括使用选定的超参数进行训练,并在验证数据上衡量性能。可调输入包括学习率、批次大小和正则化强度。
代理模型是目标函数的一种计算成本较低的近似模型。高斯过程是一种常见选择:它是对可能函数的概率分布,能够同时预测结果及其不确定性。贝叶斯更新会结合先验假设和观测到的评估结果,生成后验分布。采集函数利用该分布选择另一个候选项;测得的结果会反馈给代理模型,直到评估预算用尽。
这是一种基于机器学习的优化方法:代理模型会从配置—结果对中学习。其不确定性量化有助于确定哪些额外测量具有价值。
采集函数与探索#
候选项选择会在利用和探索之间取得平衡:利用倾向于选择预测表现良好的设置,而探索则会考察不确定的区域。常见采集函数以不同方式体现这种平衡:
- 期望改进(EI):对候选项相对于参考结果的预期改进幅度进行评分。
- 改进概率(PI):对候选项超过参考结果指定幅度的概率进行评分。
- 置信上界(UCB):在最大化问题中,将预测均值与不确定性奖励相结合,从而提高不确定候选项的优先级。
与训练模型或运行物理实验相比,这些采集策略的评估成本很低。它们通过优化来确定下一次成本高昂的评估。
在机器学习和计算机视觉中的应用#
当单次评估耗时较长,且搜索中包含数量适中的关键变量时,贝叶斯优化尤其有用。成熟的应用包括工程设计、材料实验和强化学习控制器调优。
在计算机视觉中,它用于选择卷积神经网络的训练设置。Jasper Snoek、Hugo Larochelle 和 Ryan P. Adams 在他们的2012 年实用贝叶斯优化算法中展示了这一应用,同时还对结构化支持向量机和主题模型进行了调优。
Ultralytics YOLO 通过其 Ray Tune 集成提供贝叶斯搜索:设置 use_ray=True 和 search_alg="bayesopt" 即可为训练超参数选择贝叶斯优化。对于 YOLO26 目标检测,搜索会最大化该任务默认的平均精度均值指标。
相关方法与 Optuna#
网格搜索会评估预先定义的一组组合,而随机搜索会独立采样配置。贝叶斯优化则利用先前结果来指导后续选择。梯度下降使用导数更新参数;贝叶斯优化通过评估和代理模型处理计算成本高昂的黑盒目标。
Optuna 的采样算法包括基于高斯过程的贝叶斯优化、随机采样和树结构 Parzen 估计器(TPE)。TPE 会对与较好和较差结果相关的参数分布进行建模,然后优先选择这两种密度之比更大的候选项。Optuna 是优化框架;所选采样器决定其搜索策略。
Python 示例#
使用 bayesian-optimization 和 pip install bayesian-optimization 进行安装。此示例使用该软件包优化入门示例中的目标函数和边界:
from bayes_opt import BayesianOptimization
def objective(x, y):
"""Return the objective value to maximize."""
return -(x**2) - (y - 1) ** 2 + 1
optimizer = BayesianOptimization(
f=objective,
pbounds={"x": (2, 4), "y": (-3, 3)},
random_state=1,
verbose=0,
)
optimizer.maximize(init_points=2, n_iter=15)
best = optimizer.max
print(f"Best objective: {best['target']:.4f}")输出会报告经过两次随机评估和十五次由采集函数引导的评估后测得的最佳目标值。在这些边界内,精确最大值为 -3,对应 x=2、y=1。










