Skip to content

Latest commit

 

History

History
66 lines (39 loc) · 2.75 KB

README.md

File metadata and controls

66 lines (39 loc) · 2.75 KB

LFBO

Introduction

A General Recipe for Likelihood-free Bayesian Optimization [ICML2022]

Official Repo

Abstract

The acquisition function, a critical component in Bayesian optimization (BO), can often be written as the expectation of a utility function under a surrogate model. However, to ensure that acquisition functions are tractable to optimize, restrictions must be placed on the surrogate model and utility function. To extend BO to a broader class of models and utilities, we propose likelihood-free BO (LFBO), an approach based on likelihood-free inference. LFBO directly models the acquisition function without having to separately perform inference with a probabilistic surrogate model. We show that computing the acquisition function in LFBO can be reduced to optimizing a weighted classification problem, where the weights correspond to the utility being chosen. By choosing the utility function for expected improvement (EI), LFBO outperforms various state-of-the-art black-box optimization methods on several real-world optimization problems. LFBO can also effectively leverage composite structures of the objective function, which further improves its regret by several orders of magnitude.

Usage

E.g. PYTHONPATH='./' python examples/LFBO/rosenbrock_lfbo.py

benchmark

Modify the following section of comparison/xbbo_benchmark.py :

test_algs = ["lfbo"]

And run PYTHONPATH='./' python comparison/xbbo_benchmark.py in the command line.

Comparison with BORE

Run xbbo/run_benchmark.py, where some of the changes are made to the code as follows:

confs = {
        "./cfgs/bore.yaml": ["--mark", "bore"],
        "./cfgs/lfbo.yaml": ["--mark", "lfbo"]}
general_opts = ["OPTM.kwargs.classify", "xgb", "OPTM.kwargs.num_starts", "0", "TEST_PROBLEM.name", "FCNet"]

Analyse('./exp', benchmark='FCNet', marks=marks, legend_size=16)
confs = {
        "./cfgs/bore.yaml": ["--mark", "bore"],
        "./cfgs/lfbo.yaml": ["--mark", "lfbo"]}
general_opts = ["OPTM.kwargs.classify", "xgb", "OPTM.kwargs.num_starts", "0", "TEST_PROBLEM.name", "Rosenbrock"]

Analyse('./exp', benchmark='Rosenbrock', marks=marks, legend_size=16)

Results

Branin

Method Minimum Best minimum Mean f_calls to min Std f_calls to min Fastest f_calls to min
XBBO(lfbo) 0.417+/-0.021 0.398 85.9 60.69 27

FCNet benchmark:

FCNet benchmark

rosenbrock benchmark:

rosenbrock benchmark