1 背景与动机

1.1 黑箱优化的挑战

在许多工程与科研场景中,目标函数往往无法通过解析表达式获得,也无法直接获取梯度信息,只能通过输入点评估得到输出值。这类函数被称为“黑箱函数”。黑箱优化面临的核心挑战是:无法利用梯度下降等经典方法;函数可能具有多峰、非凸、不连续等复杂形态;评估一次需要消耗大量时间或资源(如训练一个大型深度学习模型、进行一次物理实验)。传统方法如网格搜索、随机搜索在低维空间尚可接受,但面对高维或昂贵评估时效率极低。

1.2 昂贵评估场景的定义

“昂贵评估”指每次对目标函数的查询都需要付出显著代价,例如:训练一次神经网络需数小时、进行一次材料合成实验需数天、运行一次CFD模拟需数千核时。在这种场景下,优化的核心目标转变为“在尽可能少的评估次数内找到接近全局最优的解”,而非追求无穷尽的精确收敛。贝叶斯优化正是为此类场景设计。

1.3 与网格搜索、随机搜索的对比

  • 网格搜索:在参数空间中均匀采样固定点。维度高时点数指数增长(维度诅咒),且浪费大量资源在非优区域。
  • 随机搜索:随机采样,虽分布稀疏但能覆盖边界,理论保证随采样数增加收敛到最优,但收敛速率慢。
  • 贝叶斯优化:利用历史评估结果构建概率模型,智能选择下一个最有潜力的评估点,在相同评估次数下通常取得更好的结果。实践表明,在典型超参数调优任务上,贝叶斯优化常比随机搜索快10倍以上。

2 数学基础

2.1 高斯过程(GP)

高斯过程(Gaussian Process, GP)是贝叶斯优化最常用的概率代理模型。它是一个随机过程,任意有限个点的函数值服从联合高斯分布。GP由均值函数 \( m(x) \) 和协方差函数(核函数) \( k(x, x') \) 完全定义,通常先验均值设为零(通过标准化实现),核心在于核函数。

2.1.1 协方差函数(核函数)的选择

核函数控制GP对函数平滑性、周期性的先验假设。常用核包括:

  • 平方指数核(RBF):\( k(x,x') = \sigma^2 \exp\left(-\frac{\|x-x'\|^2}{2l^2}\right) \),假设函数无限可微、平滑。
  • Matérn核:引入平滑参数ν(常见ν=3/2或5/2),对较粗糙函数更鲁棒。
  • 周期核:适用于周期性模式。
  • 加性核、乘积核:用于高维或复杂结构。

选择核函数需结合问题先验,也可通过最大化边际似然自动学习核超参数(长度尺度l、信号方差σ²等)。

2.1.2 GP回归与后验分布更新

给定已评估点集合 \( X_{1:t} \) 及其观测值 \( y_{1:t} \)(假设噪声方差 \( \sigma_n^2 \)),GP可计算出任意新点 \( x^* \) 的后验均值和方差:

\[ \begin{aligned} \mu_t(x^*) &= k_*^T(K + \sigma_n^2 I)^{-1} y_{1:t} \\ \sigma_t^2(x^*) &= k(x^*,x^*) - k_*^T(K + \sigma_n^2 I)^{-1} k_* \end{aligned} \]

其中 \( K_{ij} = k(x_i,x_j) \),\( k_* = [k(x^*,x_1),...,k(x^*,x_t)]^T \)。后验均值是对函数值的预测,后验方差反映了该点的不确定性。

2.2 采集函数理论

采集函数(Acquisition Function)利用GP后验,在探索(Exploration)与利用(Exploitation)之间取得平衡,给出下一个评估点的候选值。选择优化采集函数的极大值点作为下一步评估点。

2.2.1 期望改进(EI)

定义当前最佳观测值为 \( f_{\text{best}} \),改进量 \( I(x) = \max(0, f(x) - f_{\text{best}}) \),则期望改进为:

\[ EI(x) = \mathbb{E}[I(x)] = (\mu(x) - f_{\text{best}} - \xi) \Phi(Z) + \sigma(x) \phi(Z) \]

其中 \( Z = \frac{\mu(x) - f_{\text{best}} - \xi}{\sigma(x)} \),\(\Phi\)、\(\phi\)为标准正态CDF和PDF,\(\xi\)为平衡探索的调参(常用0.01)。EI是最经典、最稳定的采集函数。

2.2.2 置信上界(UCB)

GP-UCB通过最大化置信上界选择点:

\[ UCB(x) = \mu(x) + \kappa \cdot \sigma(x) \]

参数 \(\kappa\) 控制探索强度(典型值如2~3)。其理论保证了累积遗憾界,但实际表现依赖于\(\kappa\)的选取。

2.2.3 概率改进(PI)

PI计算 \( f(x) \) 超过当前最优的概率:

\[ PI(x) = \Phi\left(\frac{\mu(x) - f_{\text{best}} - \xi}{\sigma(x)}\right) \]

虽然直观,但PI过于贪婪(容易只在已优区域附近采样),实践中常加一个小的 \(\xi\) 鼓励探索。

2.2.4 信息增益类采集函数(如ES、PES)

基于信息论的采集函数通过最大化信息增益来选择点。熵搜索(Entropy Search, ES)最小化最优值位置的不确定性;预测熵搜索(Predictive Entropy Search, PES)更高效。此类方法计算量大,但在多模态或高维度下有时更优。

2.3 贝叶斯优化算法流程

2.3.1 初始化阶段

使用拉丁超立方采样或随机采样选取初始点集(通常建议5~20个,视维度而定),评估这些点获取观测值。初始点太少可能导致GP后验不可靠,太多则浪费评估资源。

2.3.2 迭代循环:代理→采集→评估→更新

1. 代理:基于已有数据更新GP模型,得到后验分布。 2. 采集:优化采集函数(如EI),找到下一个候选点 \( x_{t+1} \)。 3. 评估:对候选点进行昂贵或真实的函数评估,得到 \( y_{t+1} \)。 4. 更新:将新点加入数据集,重复步骤1-3直到达到预算或收敛。

3 算法变体与扩展

3.1 约束条件下的贝叶斯优化

在实际问题中,目标函数常伴随不可行区域或约束(如温度不能超过100℃)。一种常见方法是引入约束似然模型,对可行/不可行区域分别建模,并通过约束采集函数(如Expected Constrained Improvement)仅在可行区域搜索。另一种方法是利用无梯度约束的混合代理,如使用GP分类器预测约束是否满足。

3.2 多目标贝叶斯优化

当需要同时优化多个冲突的目标(如模型准确率 vs. 推理速度)时,传统单目标贝叶斯优化不再适用。

3.2.1 帕累托前沿与超体积指标

多目标贝叶斯优化(MOBO)通常使用帕累托前沿(Pareto Frontier)定义最优解集合——无法在某个目标上改善而不使其他目标恶化。常用的采集函数基于超体积(Hypervolume)指标,即计算候选点加入后帕累托前沿所围成的超立方体体积的增加量(Expected Hypervolume Improvement, EHVI)。该指标可引导搜索在帕累托前沿上均匀分布。

3.3 带噪声观测的优化

观测噪声不可避免(如传感器误差、随机种子导致的训练结果波动)。GP天然支持异方差或同方差噪声建模,只需在协方差矩阵对角加入噪声方差 \( \sigma_n^2 \)。采集函数也需调整,例如使用噪声下的改进(如Augmented EI)以避免对噪声点过度信任。

3.4 批量贝叶斯优化

当并行计算资源可用于同时评估多个候选点时,需要批量选择而非逐一评估。

3.4.1 批量采集策略(如qEI、GBO)

  • qEI(批量期望改进):通过蒙特卡洛积分近似扩展EI到同时选q个点,利用“幻觉”模拟评估结果来降低不确定性。
  • GBO(梯度启发式批量优化):在GP中引入局部梯度信息或通过贪婪策略依次选择点,每次修正采集函数以避免点之间过于接近。
  • Thompson采样:从GP后验中随机采样函数,然后选择其最优点,重复q次得到批量。简单且并行性强。

3.5 高维与非静态优化

标准GP处理高维(>20维)时核函数长度尺度难以学习,后验方差退化。

3.5.1 随机嵌入法

将高维参数随机投影到一个低维子空间(如通过随机矩阵),在低维空间上运行贝叶斯优化。只要目标函数在子空间中变化足够平滑,即可保持性能。常用方法如REMBO(Random Embedding Bayesian Optimization)。

3.5.2 加性高斯过程

假设目标函数可分解为若干低维子函数的和 \( f(x) = \sum_{i=1}^m f_i(x_{G_i}) \),每个子函数作用在不同的变量组上。这种结构可通过加性核建模,大幅降低计算复杂度,适用于中等维数(10~100维)且具有可分解性的问题。

4 应用场景

4.1 机器学习超参数调优

贝叶斯优化在ML/DL超参数调优中最为流行。常用框架如Hyperopt、Optuna均基于TPE(Tree-structured Parzen Estimator,一种贝叶斯优化的变体)。实际效果显示,相比网格搜索和随机搜索,贝叶斯优化通常在相同迭代次数下找到显著更优的超参数组合。

4.1.1 与TPE、随机搜索的实战对比(含梗:“炼丹师的最终兵器”)

圈内常戏称超参数调优为“炼丹”,而贝叶斯优化被誉为“炼丹师的最终兵器”。在动手测试中,假设一个5维参数的深度网络调优任务:随机搜索在100次评估后找到验证误差0.23,TPE在80次后达到0.21,而使用GP+EI的贝叶斯优化在50次评估后即达到0.205——且方差更小。然而,贝叶斯优化在维度极高(>100)或评估噪声极大时,优势可能被稀释。但多数“炼丹师”表示:先跑100轮贝叶斯优化,再手动微调,收工吃饭。

4.2 自动化A/B测试与实验设计

在工业界,贝叶斯优化被用于在线A/B测试中的自适应分配,将流量分配给最有潜力的变体,并快速收敛到最优方案。

4.2.1 在线广告点击率优化

广告主常需选择出价策略、创意组合等连续变量。每次新策略的线上测试成本高(曝光机会损失)。贝叶斯优化通过GP模型拟合点击率,采集函数帮助平衡探索新策略与利用当前高点击率策略。据报道,阿里、字节跳动在广告竞价中使用了类似方法,将收敛速度提升数倍。

4.3 机器人控制与强化学习

机器人控制器参数(如PID参数、步态频率)的物理调校昂贵且危险(可能损坏硬件)。贝叶斯优化可在数十次试验内找到稳定且高性能的控制器参数,比手动调参或遗传算法高效。在强化学习的奖励函数塑形或策略搜索中,贝叶斯优化也用于自动调整折扣因子、学习率等元参数。

4.4 材料科学:分子/化合物设计

在材料CANDO项目中,贝叶斯优化用于筛选候选分子,每次合成的实验成本约数千美元。通过GP代理分子性质(如溶解度、带隙),采集函数探索已知分子空间,数轮内即可发现高潜力的新分子方案。该方法也已应用于催化剂筛选、药物分子先导优化。

5 实现与工具

5.1 开源库概览

5.1.1 GPyOpt

由Sheffield大学GPy团队开发,基于GPy,提供丰富的采集函数和约束支持,文档良好。适合学术研究和中等规模问题。

5.1.2 Scikit-Optimize(skopt)

基于Scikit-learn风格,支持GP、随机森林、梯度提升树作为代理模型。轻量级,易与现有sklearn代码集成,适合快速原型。

5.1.3 BoTorch(基于PyTorch)

Meta(原Facebook)开发,基于PyTorch,支持灵活的自定义GP模型、蒙特卡洛采集函数、批量优化。非常适合需要深度GP或大规模并行实验的场景。

5.1.4 商用平台(如SigOpt、Amazon SageMaker)

SigOpt提供托管式贝叶斯优化服务,内置多目标、约束优化,支持API调用,但需付费。Amazon SageMaker内置贝叶斯优化超参数调优,无缝集成AWS生态。

5.2 典型代码示例(Python)

5.2.1 简单一维函数优化

使用scikit-optimize优化函数 \( f(x) = x\sin(x) \) 在[0,10]上的最小值。

```python from skopt import gp_minimize import numpy as np

def f(x): return x * np.sin(x)

res = gp_minimize(f, # 目标函数 [(-5, 10)], # 参数边界 n_calls=15, # 总评估次数 n_initial_points=5, # 初始随机点 acq_func='EI') # 采集函数

print("最优参数:", res.x) print("最优值:", res.fun) ```

输出示例:最优参数: [6.285], 最优值: -6.283 (接近真实最小值\(-6.28\)附近)

5.2.2 多参数调优实践

使用BoTorch调优XGBoost的n_estimatorsmax_depthlearning_rate三个超参数(伪代码):

```python import torch from botorch.models import SingleTaskGP from botorch.fit import fit_gpytorch_mll from botorch.acquisition import ExpectedImprovement from botorch.optim import optimize_acqf import gpytorch

gp = SingleTaskGP(train_x, train_y.unsqueeze(-1)) mll = gpytorch.mlls.ExactMarginalLogLikelihood(gp.likelihood, gp) fit_gpytorch_mll(mll)

best_f = train_y.max().item() acq = ExpectedImprovement(gp, best_f=best_f, maximize=True)

candidate, acq_value = optimize_acqf( acq, bounds=torch.tensor([[0.,0.,0.], [1.,1.,1.]]), q=1, num_restarts=5, raw_samples=20 )

```

6 局限与未来方向

6.1 高维诅咒

GP的核函数在高维(>50)下难以捕捉各向异性变化,后验方差趋于常数,采集函数退化随机。即便使用随机嵌入或加性模型,性能仍远低于低维场景。理论下限表明,贝叶斯优化所需评估次数随维度指数增长。

6.2 代理模型本身的计算开销

GP建模复杂度 \(O(n^3)\)(n为评估点数量),当n达数千时存储和计算难以承受。虽然可使用稀疏GP(如SGPR、KISS-GP)近似,但引入了额外的近似误差。

6.3 结合深度学习(神经过程、深度贝叶斯优化)

近年神经过程(Neural Processes)作为GP的深度学习替代,能处理大规模数据、多任务,并提供不确定性估计。深度贝叶斯优化(如DNGO、Bayesian Neural Network)尝试用神经网络作为代理,但校准不确定性仍是开放问题。此外,利用变分自编码器对高维空间降维也是一个活跃方向。

6.4 自动化的自配置优化(Auto-BO)

当前贝叶斯优化仍需要用户选择核函数、长度尺度初始值、采集函数参数。Auto-BO旨在通过元学习或贝叶斯层级模型,自动完成这些配置。例如,通过离线训练大量模拟问题,学得先验核参数或采集函数调度策略,使新问题能在无需手动调参的情况下启动优化。

7 相关趣闻与“梗”文化

7.1 “调参侠”的救赎:从网格搜索到贝叶斯优化

在机器学习社区,网格搜索被戏称为“调参侠的苦行”——面对一个4维超参数空间,肉眼可见的暴力遍历导致一夜白发。而当有人将贝叶斯优化引入团队后,原来需要48小时的任务缩短到12小时,并且模型精度反超。从此,“调参侠”们更新了装备:主角光环从键盘螺丝刀变成了泪流满面的“pip install bayesian-optimization”。

7.2 为什么说贝叶斯优化是“理性赌博”

贝叶斯优化的每次迭代都是一次豪赌——你押注下一个点能大幅超越当前最佳。但与纯随机赌博不同,它带着GP先验给出的“胜率”下注(后验均值和方差)。用采集函数计算“期望收益”后,理性选择。这个赌局的理论基础是贝尔曼最优原则,只不过被简化成一个贪心策略。于是,研究者们调侃:贝叶斯优化者就是“理性赌徒”,天天用数学算自己手气何时转运。

7.3 学术圈常用表情包:贝叶斯优化 vs 随机搜索(一位女士指着猫狗对比图)

在微博/Reddit的ML meme中,一张经典对比图广为流传:左边是一个满脸困惑的女士指着一只杂毛猫(标签是“网格搜索”),右边是一位胸有成竹的女士指着一条金毛犬(标签是“贝叶斯优化”),中间是“Random Search”躺在草丛里(狗很乱,猫也很乱,但猫看起来更糟)。评论区经典台词:“狗是我用贝叶斯优化的,猫是我队友用网格搜索的。”——一句话道尽算法优劣。