Skip to content

[Feature Request] Batch method for non-analytic aquisition functions w.r.t to fully-Bayesian GPs #1892

Open
@fusionby2030

Description

🚀 Feature Request: Batch method for non-analytic acquisition functions when using fully-Bayesian GPRs

A batch method for non-analytic acquisition functions when using fully-Bayesian treated GPRs.

Motivation

In the fully-Bayesian setting when fitting a GPR, one marginalizes out the hyperparameters instead of point-wise maximization of the (log) likelihood (MAP or MLE). The acquisition function is then averaged by the posterior probability of GP hyperparameters [See Section 2.2 of De Ath et al., 2021]. As far as I can tell, the analytic acquisition functions in Botorch are out-of-the box enabled for this (through the batch mode). I have tested this using the SaasFullyBayesianSingleTaskGP and UCB acquisition function.

Understandably, for many non-analytic acquisition functions this has not been implemented yet (i.e., batch mode).

For non-analytic aquisition functions, batch mode (w.r.t fully-bayesian models) is not so straightforward to me in terms of memory usage. For example, if I have a fully-bayesian model with 8000 draws of the posterior (2000 draws from 4 chains), and I try to use a MC Sampler on top, I believe I would very quickly run out of memory. Additionally, in the current implementation of the MaxValueEntropy, it seems that the posterior is calculated many times, inducing high memory overhead for large number of draws.

Describe the solution you'd like

A batch acquisition implementation for MaxValueEntropy (or other non-analytic acq funcs) for use with fully-bayesian models.

Describe alternatives you've considered

A very crude implementation I orchestrated is to loop through the posterior draws of the GP and calculate the MVE for each draw. However, this of course does not scale well at all (for more draws from posterior).

Are you willing to open a pull request?

I would like to help, but the MVE class is fairly arcane to me at the moment. As I step through the code I will try to update this issue, but am eager to hear if anyone has any ideas or faced similar problems.

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions