2025-11-18T19:13:14.156692

NUBO: A Transparent Python Package for Bayesian Optimization

Diessner, Wilson, Whalley
NUBO, short for Newcastle University Bayesian Optimization, is a Bayesian optimization framework for optimizing expensive-to-evaluate black-box functions, such as physical experiments and computer simulators. Bayesian optimization is a cost-efficient optimization strategy that uses surrogate modeling via Gaussian processes to represent an objective function and acquisition functions to guide the selection of candidate points to approximate the global optimum of the objective function. NUBO focuses on transparency and user experience to make Bayesian optimization accessible to researchers from all disciplines. Clean and understandable code, precise references, and thorough documentation ensure transparency, while a modular and flexible design, easy-to-write syntax, and careful selection of Bayesian optimization algorithms ensure a good user experience. NUBO allows users to tailor Bayesian optimization to their problem by writing a custom optimization loop using the provided building blocks. It supports sequential single-point, parallel multi-point, and asynchronous optimization of bounded, constrained, and mixed (discrete and continuous) parameter input spaces. Only algorithms and methods extensively tested and validated to perform well are included in NUBO. This ensures that the package remains compact and does not overwhelm the user with an unnecessarily large number of options. The package is written in Python but does not require expert knowledge of Python to optimize simulators and experiments. NUBO is distributed as open-source software under the BSD 3-Clause license.
academic

NUBO: A Transparent Python Package for Bayesian Optimization

基本信息

  • 论文ID: 2305.06709
  • 标题: NUBO: A Transparent Python Package for Bayesian Optimization
  • 作者: Mike Diessner, Kevin Wilson, Richard D. Whalley (Newcastle University)
  • 分类: cs.LG (Machine Learning), cs.MS (Mathematical Software), stat.ML (Statistics - Machine Learning)
  • 发表时间: arXiv v2, 2024年6月3日
  • 论文链接: https://arxiv.org/abs/2305.06709
  • 开源地址: www.nubopy.com
  • 许可证: BSD 3-Clause

摘要

NUBO(Newcastle University Bayesian Optimization)是一个专为优化昂贵黑盒函数设计的贝叶斯优化框架,适用于物理实验和计算机模拟器等场景。该框架通过高斯过程进行代理建模,使用采集函数指导候选点选择,以最少的函数评估次数逼近全局最优。NUBO强调透明性和用户体验,通过清晰的代码、精确的引用和详尽的文档确保透明性;通过模块化设计、易用语法和精选算法确保良好的用户体验。框架支持顺序单点、并行多点和异步优化,适用于有界、约束和混合(离散与连续)参数空间。仅包含经过充分测试和验证的算法,保持包的紧凑性,避免选择过载。

研究背景与动机

1. 要解决的核心问题

许多科学和工程领域都面临昂贵黑盒函数的优化问题

  • 函数没有已知或可解析的数学表达式
  • 每次函数评估成本高昂(材料成本、计算成本、时间成本)
  • 无法获得导数信息
  • 不适合大量函数评估

典型应用场景包括:

  • 计算流体动力学中的参数优化
  • 化学工程中的分子设计和药物发现
  • 机器学习模型的超参数调优
  • 神经网络架构搜索

2. 问题的重要性

传统优化算法(如Adam、L-BFGS-B、差分进化)依赖于:

  • 导数信息(通常不可获得)
  • 大量函数评估(对昂贵函数不可行)

贝叶斯优化提供了样本高效的替代方案,但现有实现存在问题。

3. 现有方法的局限性

通过详细对比分析(表1),现有Python包存在以下问题:

包名代码行数并行优化异步优化主要问题
BoTorch38,419代码库过于庞大(29倍于NUBO),难以理解
bayes_opt1,241不支持并行和异步优化
SMAC311,217功能受限
pyGPGO2,029功能受限
GPyOpt4,605已停止维护
Spearmint3,662非模块化设计,灵活性差

关键问题

  • 复杂性vs透明性:BoTorch功能强大但代码复杂(160个文件),非专家用户难以理解
  • 功能局限:多数包不支持并行/异步优化
  • 选择过载:提供大量选项,非专家用户难以决策

4. 研究动机

跨学科研究人员(非统计学/计算机科学专家)提供:

  • 透明:简洁代码(仅1,322行,20个文件)
  • 易用:模块化设计,直观语法
  • 高效:支持并行/异步/约束/混合优化
  • 可靠:仅包含经过验证的算法

核心贡献

  1. 轻量级实现:用1,322行代码实现完整的贝叶斯优化框架,代码量仅为BoTorch的3.4%,但提供相当的功能
  2. 全面的优化策略支持
    • 顺序单点优化(sequential single-point)
    • 并行多点优化(parallel multi-point)
    • 异步优化(asynchronous)
    • 约束优化(constrained)
    • 混合参数优化(mixed discrete-continuous)
  3. 透明性设计理念
    • 清晰的代码结构
    • 精确的学术引用
    • 详尽的文档(论文+网站)
  4. 用户友好的模块化架构
    • 灵活的构建块设计
    • 直观的Python语法
    • 精选的高效算法
  5. 性能验证:在基准测试中与主流包(BoTorch、SMAC3等)性能相当或更优,证明简洁性不以性能为代价
  6. 开源生态系统:基于PyTorch生态(Torch、GPyTorch),确保良好的可扩展性和GPU加速支持

方法详解

任务定义

贝叶斯优化旨在解决d维最大化问题:

x=argmaxxXf(x)x^* = \arg\max_{x \in X} f(x)

其中:

  • 输入空间 X[a,b]dX \in [a,b]^d:通常为超矩形有界连续空间
  • 目标函数 f(x)f(x):昂贵的、无导数的黑盒函数
  • 观测 yi=f(xi)+ϵy_i = f(x_i) + \epsilon:带噪声 ϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2)
  • 训练数据 Dn={(xi,yi)}i=1nD_n = \{(x_i, y_i)\}_{i=1}^n

扩展任务(NUBO支持):

  • 约束优化subject to gi(x)=0,hj(x)0\text{subject to } g_i(x) = 0, \quad h_j(x) \geq 0
  • 混合参数:部分维度为离散值

模型架构

整体算法流程(Algorithm 1)

输入:评估预算N,初始点数n₀,代理模型M,采集函数α
1. 通过空间填充设计采样n₀个初始点,获得观测
2. 设置训练数据D_n = {X₀, y₀}
3. While n ≤ N - n₀:
   a. 用D_n训练代理模型M(高斯过程)
   b. 最大化采集函数α找到候选点x*_n
   c. 评估x*_n得到y*_n,加入D_n
   d. n = n + 1
4. 返回最高观测值对应的点x*

核心组件

1. 代理模型:高斯过程(Gaussian Process)

先验分布f(Xn)N(m(Xn),K(Xn,Xn))f(X_n) \sim \mathcal{N}(m(X_n), K(X_n, X_n))

NUBO的配置选择

  • 均值函数:常数均值 μconstant(x)=c\mu_{\text{constant}}(x) = c
  • 协方差核:Matérn 5/2 ARD核 ΣMateˊrn(x,x)=σf2(1+5rl+5r23l2)exp(5rl)\Sigma_{\text{Matérn}}(x, x') = \sigma_f^2 \left(1 + \frac{\sqrt{5}r}{l} + \frac{5r^2}{3l^2}\right) \exp\left(-\frac{\sqrt{5}r}{l}\right) 其中 r=xxr = |x - x'|

自动相关性确定(ARD)

  • 每个输入维度有独立的长度尺度 ldl_d
  • 大长度尺度 → 维度不重要
  • 小长度尺度 → 维度重要

后验分布f(X)Dn,XN(μn(X),σn2(X))f(X^*) | D_n, X^* \sim \mathcal{N}(\mu_n(X^*), \sigma_n^2(X^*))

μn(X)=K(X,Xn)[K(Xn,Xn)+σy2I]1(ym(Xn))+m(X)\mu_n(X^*) = K(X^*, X_n)[K(X_n, X_n) + \sigma_y^2 I]^{-1}(y - m(X_n)) + m(X^*)

σn2(X)=K(X,X)K(X,Xn)[K(Xn,Xn)+σy2I]1K(Xn,X)\sigma_n^2(X^*) = K(X^*, X^*) - K(X^*, X_n)[K(X_n, X_n) + \sigma_y^2 I]^{-1}K(X_n, X^*)

超参数估计:通过最大化对数边际似然(MLE): logP(ynXn)=12(ynm(Xn))[K+σy2I]1(ynm(Xn))12logK+σy2In2log2π\log P(y_n | X_n) = -\frac{1}{2}(y_n - m(X_n))^\top[K + \sigma_y^2 I]^{-1}(y_n - m(X_n)) - \frac{1}{2}\log|K + \sigma_y^2 I| - \frac{n}{2}\log 2\pi

2. 采集函数(Acquisition Functions)

解析采集函数(用于顺序单点优化)

期望改进(Expected Improvement, EI)αEI(X)=(μn(X)ybest)Φ(z)+σn(X)ϕ(z)\alpha_{\text{EI}}(X^*) = (\mu_n(X^*) - y_{\text{best}})\Phi(z) + \sigma_n(X^*)\phi(z) 其中 z=μn(X)ybestσn(X)z = \frac{\mu_n(X^*) - y_{\text{best}}}{\sigma_n(X^*)}

上置信界(Upper Confidence Bound, UCB)αUCB(X)=μn(X)+βσn(X)\alpha_{\text{UCB}}(X^*) = \mu_n(X^*) + \sqrt{\beta}\sigma_n(X^*)

优化器:L-BFGS-B(有界)或SLSQP(约束)

蒙特卡洛采集函数(用于并行/异步优化)

通过重参数化技巧近似: αEIMC(X)=max(ReLU(μn(X)+Lzybest))\alpha_{\text{EI}}^{\text{MC}}(X^*) = \max(\text{ReLU}(\mu_n(X^*) + Lz - y_{\text{best}}))

αUCBMC(X)=max(μn(X)+βπ2Lz)\alpha_{\text{UCB}}^{\text{MC}}(X^*) = \max\left(\mu_n(X^*) + \sqrt{\frac{\beta\pi}{2}}|Lz|\right)

其中:

  • LL:协方差矩阵Cholesky分解的下三角矩阵 LL=KLL^\top = K
  • zN(0,I)z \sim \mathcal{N}(0, I):标准正态样本

批量优化策略

  1. 联合优化(joint):同时优化所有批量点
  2. 贪婪顺序(sequential):逐点优化,固定之前的点(实证表现更好)

优化器:Adam(随机)或L-BFGS-B/SLSQP(固定基础样本)

技术创新点

1. 透明性与简洁性的平衡

  • 代码量对比:NUBO(1,322行)vs BoTorch(38,419行)
  • 文件数对比:20个 vs 160个
  • 设计哲学:避免过度抽象,保持函数和对象易于追踪

2. 模块化设计

用户可通过4步构建自定义优化循环:

# 1. 定义输入空间
bounds = torch.tensor([[0., 0., ...], [1., 1., ...]])

# 2. 训练高斯过程
gp = GaussianProcess(x_train, y_train, likelihood)
fit_gp(x_train, y_train, gp, likelihood)

# 3. 定义采集函数
acq = UpperConfidenceBound(gp=gp, beta=4)

# 4. 优化采集函数
x_new, _ = single(func=acq, method="L-BFGS-B", bounds=bounds)

3. 混合优化的实用解决方案

  • 策略:枚举所有离散组合,对每个组合优化连续参数
  • 实现:通过字典指定离散维度和可能值
  • 局限:离散维度或值过多时计算昂贵(论文坦诚说明)

4. 异步优化支持

  • 场景:评估时间不确定时继续优化
  • 实现:将待评估点作为固定点传入 x_pending
  • 优势:充分利用计算资源

5. 决策流程图(Figure 3)

提供清晰的算法选择指南:

  • 是否异步?→ 是否并行?→ 是否约束?
  • 每个分支推荐具体的采集函数和优化器组合

实验设置

数据集

使用两个标准基准函数(来自虚拟仿真实验库24):

  1. 2D Levy函数
    • 维度:2
    • 特点:多峰,多个局部最优
    • 全局最优:0.00
  2. 6D Hartmann函数
    • 维度:6
    • 特点:多个局部极小值,一个全局极小值
    • 全局最优:3.32237
    • 输入空间:0,1

两个函数均被取负以转换为最大化问题。

评价指标

  1. 最优观测值:当前迭代的最佳输出(平均±标准误)
  2. 收敛速度:达到全局最优所需的评估次数
  3. 每次迭代时间:算法计算开销

对比方法

对比5个主流Python包:

  1. BoTorch (v0.8.4):功能最全面
  2. bayes_opt (v1.4.3):轻量级
  3. SMAC3 (v2.0.0):中等复杂度
  4. pyGPGO (v0.5.0):轻量级
  5. NUBO (v1.0.3):本文方法

统一配置

  • 代理模型:高斯过程
  • 采集函数:上置信界(UCB)
  • 运行次数:10次重复实验
  • 硬件:Apple Mac mini (M2, 16GB)

实现细节

顺序优化

  • 初始点:通过拉丁超立方采样生成
  • Levy:30次评估
  • Hartmann:60次评估

并行优化

  • 批量大小:4
  • Levy:30次评估(7.5批)
  • Hartmann:100次评估(25批)

实验结果

主要结果

表2:最终性能对比

包名2D Levy (顺序)6D Hartmann (顺序)2D Levy (并行)6D Hartmann (并行)
NUBO-0.04 (±0.06)3.28 (±0.06)-0.04 (±0.04)3.27 (±0.06)
BoTorch-0.21 (±0.20)3.27 (±0.07)-0.27 (±0.21)3.26 (±0.06)
SMAC3-0.71 (±0.58)2.70 (±0.38)--
bayes_opt-0.64 (±0.74)3.20 (±0.13)--
pyGPGO-0.28 (±0.31)2.64 (±1.05)--

关键发现

  1. NUBO在所有测试中最接近真实最优值(Levy: 0.00, Hartmann: 3.32)
  2. 方差最低:结果稳定性最好
  3. 轻量级包中表现最佳:优于bayes_opt和pyGPGO
  4. 与复杂包竞争力强:与BoTorch和SMAC3相当

表3:计算效率对比

包名2D Levy (顺序)6D Hartmann (顺序)2D Levy (并行)6D Hartmann (并行)
NUBO0.60s1.88s0.07s2.20s
BoTorch0.09s0.22s0.00s0.19s
SMAC30.08s0.25s--
bayes_opt0.14s0.24s--
pyGPGO0.23s0.65s--

分析

  • NUBO每次迭代耗时较高(最多2.20s)
  • 但对于昂贵黑盒函数,这可忽略不计
    • 物理实验:可能需要小时/天
    • 复杂仿真:可能需要分钟/小时
    • 额外2秒相对于评估成本微不足道

收敛曲线分析(Figure 1)

A) 2D Levy顺序优化

  • NUBO快速收敛到全局最优
  • bayes_opt和pyGPGO波动较大
  • SMAC3表现较差

B) 6D Hartmann顺序优化

  • 所有方法均收敛
  • NUBO和BoTorch最接近真实最优
  • SMAC3和pyGPGO方差大

C) 2D Levy并行优化

  • NUBO和BoTorch表现相似
  • 并行策略有效

D) 6D Hartmann并行优化

  • NUBO略慢于BoTorch达到高值
  • 但最终值更优且更稳定

案例研究结果(Section 4)

任务:6D Hartmann函数,第一维为离散参数(11个值)

设置

  • 初始点:30(5×维度)
  • 优化迭代:10次
  • 批量大小:4
  • 采集函数:MC-UCB (β=4, 128样本)

结果

  • 第53次评估找到最优解
  • 输入:0.4, 0.9136, 1.0, 0.5669, 0.0, 0.0802
  • 输出:3.2133(真实最优3.32237)
  • 误差:仅3.3%

对比随机和LHS采样(Figure 5):

  • NUBO显著优于随机采样和拉丁超立方采样
  • 70次评估后最接近真实最优

实验发现

  1. 简洁性不牺牲性能:1,322行代码实现与38,419行的BoTorch相当的性能
  2. 稳定性优势:标准误最小,适合实际应用
  3. 并行策略有效:贪婪顺序策略在实际问题中表现良好
  4. 混合优化可行:成功处理离散-连续混合参数空间
  5. 计算开销可接受:对于昂贵黑盒函数,额外的秒级开销可忽略

相关工作

Python实现对比

特性NUBOBoTorchGPyOpt其他
模块化部分
并行优化
异步优化
代码复杂度低-中
维护状态活跃活跃已归档活跃

其他语言实现

  • R语言
    • rBayesianOptimization:基础功能
    • ParBayesianOptimization:支持并行

主要研究方向

  1. 超参数优化:机器学习模型调优(Spearmint, SMAC3)
  2. 神经架构搜索:BANANAS等
  3. 科学应用:流体动力学、化学工程、材料设计

NUBO的定位

  • 目标用户:跨学科研究人员(非ML专家)
  • 设计理念:透明性 > 功能丰富性
  • 应用场景:物理实验和仿真优化

结论与讨论

主要结论

  1. NUBO成功实现了透明性和性能的平衡
    • 用极少的代码(1,322行)实现完整功能
    • 性能与复杂包(BoTorch)相当或更优
  2. 全面的功能支持
    • 顺序/并行/异步优化
    • 约束和混合参数空间
    • 易于定制的模块化设计
  3. 适合跨学科应用
    • 清晰的文档和代码
    • 直观的API设计
    • 精选的可靠算法
  4. 开源生态良好
    • 基于PyTorch生态
    • BSD 3-Clause许可
    • 活跃维护

局限性

论文坦诚指出的限制:

  1. 计算效率
    • 每次迭代比BoTorch慢约10倍
    • 但对昂贵黑盒函数可忽略
  2. 混合优化的可扩展性
    • 枚举策略在离散维度/值过多时不可行
    • 未提供更高效的替代方案
  3. 功能覆盖
    • 不支持多保真度优化(multi-fidelity)
    • 不支持多目标优化(multi-objective)
    • 不支持高维优化专用方法
  4. 算法选择有限
    • 仅包含两种采集函数(EI、UCB)
    • 未包含其他流行方法(如知识梯度、熵搜索)

潜在问题:

  1. 基准测试有限
    • 仅测试2个合成函数
    • 缺少真实世界应用案例对比
    • 未测试高维问题(>10维)
  2. 超参数敏感性
    • β参数选择缺乏自动化指导
    • 蒙特卡洛样本数的影响未充分分析
  3. 可扩展性验证不足
    • 未测试大规模并行(批量>4)
    • GPU加速能力未展示

未来方向

论文明确提出的扩展计划:

  1. 多保真度优化:利用不同精度的仿真加速优化
  2. 多目标优化:同时优化多个相互冲突的目标
  3. 高维优化:开发适用于高维空间的专用方法(如嵌入、随机嵌入等)

深度评价

优点

1. 方法创新性(中等)

  • 非算法创新:未提出新的贝叶斯优化算法
  • 工程创新:在简洁性和功能性间找到优秀平衡点
  • 设计创新:模块化架构降低使用门槛

2. 实验充分性(良好)

优点

  • 与5个主流包横向对比
  • 10次重复实验,提供统计显著性
  • 包含顺序和并行两种场景
  • 详细的案例研究

不足

  • 基准函数仅2个,维度较低
  • 缺少真实应用对比
  • 未测试极端场景(高维、大批量)

3. 结果说服力(强)

  • 定量证据:在所有测试中达到最优或接近最优
  • 稳定性:标准误最小
  • 代码量对比:客观量化简洁性优势
  • 诚实报告:坦诚计算效率劣势

4. 写作清晰度(优秀)

  • 结构清晰:背景→方法→实验→案例
  • 公式详尽:完整的数学推导
  • 代码示例丰富:每个功能都有代码片段
  • 可视化有效:流程图、收敛曲线、对比图

5. 可复现性(优秀)

  • 开源代码和文档
  • 详细的实验设置
  • 提供复现材料
  • 明确的版本信息

不足

1. 方法局限性

  • 枚举策略的低效:混合优化在离散维度多时不可行
  • 算法选择保守:仅EI和UCB,未包含更现代的方法(如qKG、MES)
  • 缺少自适应策略:β等超参数需手动调整

2. 实验设计缺陷

  • 基准测试单薄
    • 仅2个合成函数
    • 最高维度仅6D
    • 缺少噪声鲁棒性测试
  • 对比不全面
    • 未与R包对比
    • 未测试GPU加速
    • 未评估内存占用
  • 案例研究局限
    • 仍是合成函数
    • 未展示真实科学应用

3. 理论分析不足

  • 无收敛性保证分析
  • 无样本复杂度分析
  • 未讨论贪婪策略的理论性质

4. 性能问题

  • 计算效率:比BoTorch慢10倍
  • 可扩展性未知
    • 大批量性能?
    • 高维性能?
    • 长时间运行的数值稳定性?

影响力

1. 对领域的贡献(中等)

  • 工程贡献显著:为跨学科用户降低门槛
  • 算法贡献有限:未提出新方法
  • 教育价值高:清晰的实现可作为学习材料

2. 实用价值(高)

适用场景

  • ✓ 物理实验优化(评估昂贵)
  • ✓ 工程仿真(中小规模参数)
  • ✓ 教学和原型开发
  • ✓ 需要理解算法细节的研究

不适用场景

  • ✗ 大规模超参数搜索(效率要求高)
  • ✗ 高维优化(>20维)
  • ✗ 需要最先进算法的竞争性研究

3. 可复现性(优秀)

  • 完整的开源代码
  • 详细的文档
  • pip安装简便
  • 活跃的维护

4. 潜在用户群

  • 主要用户:实验科学家、工程师
  • 次要用户:ML研究人员(原型开发)
  • 教育用户:学生和教师

适用场景

推荐使用NUBO的情况:

  1. 评估极其昂贵
    • 物理实验(小时/天级别)
    • 高精度仿真(分钟/小时级别)
    • 此时算法2秒开销可忽略
  2. 需要理解算法
    • 研究项目需要修改算法
    • 教学和学习目的
    • 需要调试和解释结果
  3. 中小规模问题
    • 参数维度 ≤ 10
    • 并行批量 ≤ 10
    • 离散参数 ≤ 3维
  4. 需要特定功能
    • 约束优化
    • 混合参数空间
    • 异步评估

建议使用其他工具的情况:

  1. 使用BoTorch
    • 需要最先进算法
    • 高维问题(>20维)
    • 大规模并行
    • GPU加速关键
  2. 使用SMAC3
    • 超参数优化
    • 需要成熟的工业级工具
  3. 使用bayes_opt
    • 简单的顺序优化
    • 需要最小依赖

参考文献(精选)

贝叶斯优化基础

  • 1 Frazier (2018): A tutorial on Bayesian optimization
  • 9 Jones et al. (1998): Efficient global optimization - EI的原始论文
  • 10 Snoek et al. (2012): Practical Bayesian optimization - 现代BO的奠基工作
  • 11 Shahriari et al. (2015): Taking the human out of the loop - 综述论文

高斯过程

  • 28 Gramacy (2020): Surrogates - 实用的GP教材
  • 30 Rasmussen & Williams (2006): Gaussian Processes for Machine Learning - 经典教材

采集函数

  • 27 Wilson et al. (2018): Maximizing acquisition functions - 批量优化策略
  • 32 Srinivas et al. (2010): GP optimization in the bandit setting - UCB的理论基础

相关软件

  • 22 BoTorch (Balandat et al., 2020): 主要竞争对手
  • 21 SMAC3 (Lindauer et al., 2022): 超参数优化
  • 35 GPyTorch (Gardner et al., 2018): NUBO的GP后端

总体评分

维度评分说明
创新性3/5工程创新强,算法创新弱
技术质量4/5实现可靠,但效率有待提升
实验充分性3.5/5对比全面,但基准有限
写作质量5/5清晰、详尽、可复现
实用价值4/5特定场景下非常有用
影响力潜力3.5/5填补细分市场,但非突破性

综合评价:这是一篇优秀的工具论文,成功实现了其核心目标——为跨学科研究人员提供透明、易用的贝叶斯优化工具。虽然算法创新有限,但在工程设计和用户体验上做出了显著贡献。特别适合需要理解算法细节、优化昂贵黑盒函数的科学和工程应用。代码质量和文档的高标准值得其他开源项目学习。