跳过主要内容
Project Logo

基于 PyTorch 的贝叶斯优化

简介快速开始教程

核心特性

Modular

模块化

可插入新的模型、采集函数和优化器。

Built on PyTorch

基于 PyTorch 构建

轻松集成神经网络模块。原生支持 GPU 和自动求导(autograd)。

Scalable

可扩展性

通过 GPyTorch 支持可扩展的高斯过程(GP)。支持在多个设备上运行代码。

参考文献

BoTorch:高效蒙特卡罗贝叶斯优化框架
@inproceedings{balandat2020botorch,
title = {{BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization}},
author = {Balandat, Maximilian and Karrer, Brian and Jiang, Daniel R. and Daulton, Samuel and Letham, Benjamin and Wilson, Andrew Gordon and Bakshy, Eytan},
booktitle = {Advances in Neural Information Processing Systems 33},
year = 2020,
url = {http://arxiv.org/abs/1910.06403}
}
查阅其他使用 BoTorch 的论文

快速入门

  1. 安装 BoTorch

    通过 pip(推荐)
    pip install botorch
    通过 Anaconda(来自非官方的 conda-forge 频道)
    conda install botorch -c gpytorch -c conda-forge
  2. 拟合模型

    import torch
    from botorch.models import SingleTaskGP
    from botorch.models.transforms import Normalize, Standardize
    from botorch.fit import fit_gpytorch_mll
    from gpytorch.mlls import ExactMarginalLogLikelihood

    train_X = torch.rand(10, 2, dtype=torch.double) * 2
    Y = 1 - torch.linalg.norm(train_X - 0.5, dim=-1, keepdim=True)
    Y = Y + 0.1 * torch.randn_like(Y) # add some noise

    gp = SingleTaskGP(
    train_X=train_X,
    train_Y=Y,
    input_transform=Normalize(d=2),
    outcome_transform=Standardize(m=1),
    )
    mll = ExactMarginalLogLikelihood(gp.likelihood, gp)
    fit_gpytorch_mll(mll)
  3. 构建采集函数

    from botorch.acquisition import LogExpectedImprovement

    logEI = LogExpectedImprovement(model=gp, best_f=Y.max())
  4. 优化采集函数

    from botorch.optim import optimize_acqf

    bounds = torch.stack([torch.zeros(2), torch.ones(2)]).to(torch.double)
    candidate, acq_value = optimize_acqf(
    logEI, bounds=bounds, q=1, num_restarts=5, raw_samples=20,
    )
    candidate # tensor([[0.2981, 0.2401]], dtype=torch.float64)