Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Variational Bayesian last layer models as surrogate models #2754

Open
wants to merge 19 commits into
base: main
Choose a base branch
from

Conversation

brunzema
Copy link
Contributor

Motivation

This PR adds variational Bayesian last layers (VBLLs) [1], which demonstrated very promising results in the context of BO in our last paper [2], to BoTorch. The goal is to provide a BoTorch-compatible implementation of VBLL surrogates for standard use cases (single-output models), making them accessible to the community as quickly as possible. This PR does not yet contain all the features discussed in [2] such as the continual learning. If there is the interest to also add the continual learning, I am happy to add them down the line!

The VBLLs can be used in standard acquisition functions such as (log)EI but are especially nice for Thompson sampling as the Thompson sample of a Bayesian last layer model is a differentiable standard feed forward neural network which is useful for (almost) global optimization of the sample for the next query location.

Implementation details

This PR adds the implementation to the community folders--also here, if there is a large interest in the model, I am happy to help merge them into the main part of the repo. The added files of this PR are the following

botorch_community
|-- acquisition
|   |-- bll_thompson_sampling.py # TS for Bayesian last layer models
|-- models
|   |-- vblls.py # BoTorch wrapper for VBLLs
|-- posteriors
|   |-- bll_posterior.py # Posterior class for Bayesian last layer models
notebooks_community
|-- vbll_thompson_sampling.ipynb # Tutorial on how use the VBLL model
test_community
|-- models
|   |-- test_vblls.py # test for the VBLL models functionality (backbone freezing for feature reuse, etc)

The current implementation build directly on the VBLL repo, which is actively maintained and depends only on PyTorch. Using this repo allows improvements—e.g., better variational posterior initialization—to be directly beneficial for BO.

Have you read the Contributing Guidelines on pull requests?

Yes.

Test Plan

The PR does not change any functionality of the current code base. The core functionality of the VBLLs should be covered by test_vblls.py. Let me know if further tests are required.

Related PRs

This PR does not change functionality and I did not see any PRs regarding last layer models in BoTorch. Maybe this implementation can useful also for other BLLs.

References

[1] P. Brunzema, M. Jordahn, J. Willes, S. Trimpe, J. Snoek, J. Harrison. Bayesian Optimization via Continual Variational Last Layer Training. International Conference on Learning Representations (ICLR), 2025.

[2] J. Harrison, J. Willes, J. Snoek. Variational Bayesian Last Layers. International Conference on Learning Representations (ICLR), 2024.

@facebook-github-bot facebook-github-bot added the CLA Signed Do not delete this pull request or issue due to inactivity. label Feb 21, 2025
@brunzema brunzema marked this pull request as ready for review February 25, 2025 08:27
@eytan
Copy link
Contributor

eytan commented Feb 25, 2025 via email

@Balandat
Copy link
Contributor

Thanks for putting this up, @brunzema. The notebook looks great, and I plan to review this PR in more detail over the next day or two.

Regarding the dependency on vbll: Right now it looks like the code only uses ~120 lines of pure torch code from the vbll repo (namely this
https://github.com/VectorInstitute/vbll/blob/main/vbll/layers/regression.py#L34-L149 plus the minimal function https://github.com/VectorInstitute/vbll/blob/main/vbll/utils/distributions.py#L94-L98). It seems questionable to me to take that dependency, especially since the vllb repo doesn't include unit tests and/or CI. We spend a nontrivial amount of time fixing issues with downstream dependencies, so we're really careful about adding them only if really necessary.

My preference would be to move the relevant pieces of the vbll code mentioned above into a helper module (and clearly attribute the source there, of course) so we can avoid the dependency for now. If we do end up expanding the functionality and use additional features from vbll, then I'd be happy to reconsider (provided the vbll repo adds proper unit tests and a CI setup).

Copy link
Contributor

@Balandat Balandat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unit tests are failing b/c vbll is not installed in the CI. This will not be necessary if we move the minimal code required in a helper module that we include here.

Copy link
Contributor

@Balandat Balandat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oops, submitted prematurely. Here is the rest of the review.

"\n",
" ax.plot(x_test, mean, label=\"Posterior predictive\", color=\"tab:blue\")\n",
"\n",
" # Posterior samples\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The TS samples shown are not the samples that were optimized to obtain the next candidate point. This initially caused some confusion; can you make the plots in a way so that this is consistent (i.e. that we show the set of TSs that were optimized to obtain the next candidate)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mhm, yeah thats true.. I now removed the samples from the plot to avoid this. I could also include in BLLMaxPosteriorSampling to return the sampled functions but this use case seemed too specific. Do you think this is also relevant beyond visualization? Then, this might be nice imo

},
{
"data": {
"image/png": "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QCCInWgkAEJEKRAIBAKBIGZEACEQCAQCgSBmRAAhEAgEAoEgZnqcBkIgEAjai0AgQD6fr6t3QyBoV/R6fastmtEgAgiBQCBoohe+pKSEampqunpXBIJ2B8FD3759OZA4EEQAIRAIBA1Qgof09HQym83ClE7Q48wWi4uLKTc394A+2yKAEAgEggZlCyV4SElJ6erdEQjanbS0NA4i/H4/6XS67imi/PXXX+m0005jS0xEOV999VWrv7Nw4UI6/PDDyWAw0IABA+idd97pyF0UCASCeiiaB2QeBIKeiD5UukCwfCB0aADhcDho9OjR9NJLL0X1/N27d9Mpp5xCU6ZMobVr19Lf/vY3uuqqq+jHH3/syN0UCASCRoiyhaCnomqnz3aHljBmzJjBl2h59dVXWdjx1FNP8e2hQ4fSb7/9Rs888wxNnz69A/dUIBAIBALBQauBWLZsGZ1wwgn17kPggExEc3g8Hr5E+ngLBAeqwIfAaO/eveFLQUEBf7bsdjtn1nCNKN5oNHK5DdewTke5DpfevXvzIJrBgweTyWTq6rckENSjT58+/L3a0nfrwQRK38hcV1dXU2JiYlfvziGDtrspnzMyMurdh9v44na5XE1+ET/22GP04IMPduJeCnpasLBjxw76/fffac2aNXxB+ay92vfQLjVw4EAaOXIkX8aPH08TJkwgi8XSLtsXCBqCQYL3338/zZ07lyoqKigzM5POPPNMuu+++3qEKPS4446jMWPG0LPPPhu+D/+mEPQnJCR06b4danSrAKIt3HPPPXTrrbc2miQmEDRHaWkp/fzzzzR//ny+4Au3qYUfGQS0OeGCn5OSknjht1qtfI3gA9kvt9vN1zj7gbJZueTn51NlZSVt3bqVL59//jlvG6rnI488kr8Ip02bRscccwxpNJouOBKCjgYitcWLF/PihoX82GOP7dC/9a5duzhIHTRoEH388cdcEt64cSPdcccd9MMPP3CgnJycTF1xHJCxaw/zouZEgb169eqQbQtaQOok8FJffvlli8859thjpVtuuaXefW+99ZYUHx8f9evU1tbya+FaIFAoKSmRXnzxRWnSpEmSSqXiz4hy0ev10oQJE6Qbb7xRevPNN6XVq1dLHo/ngF8zGAxKRUVF0o8//ig9+eST0sUXXyzl5OTUe21c0tLSpKuvvlr64Ycf2uV1BQeGy+WS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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be really nice to run both TS and logEI and then show these in a two-panel figure to have the comparison. This would also ensure that both code paths work properly

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed it to loop over both logEI and TS and then show the models for all iterations. I think the model "evolution" is very similar. I wanted to keep the main BO loop as simple as possible rather than optimizing in parallel with both acquisition function for easier reuse of the loop. If you think two-panel figures would be more interesting, I'm happy to make that change!

@brunzema
Copy link
Contributor Author

@eytan Thank you for the nice comment and @Balandat thank you for the detailed review!

Just wanted to quickly give an update on the vblls: I talked to my collaborators and we are happy to move the relevant part (regression layer + some utils) to botorch. I will update this PR to incorporate all suggested changes within the next few days + include the vbll code 👍

@brunzema
Copy link
Contributor Author

@Balandat Thank you again for the detailed review--I really appreciate it! I’ve updated the PR to address all your points, but please let me know if any further changes are needed. I’m happy to make any additional updates!

Biggest change is of course the added code from the vbll package, let me know if the way I know included it is ok (additional file + credit at the top).

@Balandat
Copy link
Contributor

@brunzema thanks a lot for the updates - will review this within the next couple of days!

Copy link

codecov bot commented Mar 10, 2025

Codecov Report

Attention: Patch coverage is 68.71287% with 158 lines in your changes missing coverage. Please review.

Project coverage is 99.16%. Comparing base (da28b43) to head (d01e1fd).

Files with missing lines Patch % Lines
botorch_community/models/vbll_helper.py 66.28% 88 Missing ⚠️
...rch_community/acquisition/bll_thompson_sampling.py 0.00% 52 Missing ⚠️
botorch_community/models/vblls.py 93.54% 10 Missing ⚠️
botorch_community/posteriors/bll_posterior.py 78.37% 8 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2754      +/-   ##
==========================================
- Coverage   99.99%   99.16%   -0.84%     
==========================================
  Files         202      206       +4     
  Lines       18520    19025     +505     
==========================================
+ Hits        18519    18866     +347     
- Misses          1      159     +158     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@Balandat Balandat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates and in particular for avoiding another external dependency! I left a number of inline comments, here are some higher level ones:

  1. Please rebase this on a recent version of master (the base of commit of this PR is pretty old)
  2. Please address flake8 (incl. line length) and import sorting errors - you can install the pre-commit hooks to make sure that your code confirms to the standard (see https://github.com/pytorch/botorch/blob/main/CONTRIBUTING.md#pre-commit-hooks)
  3. I spotted some some rather problematic numerical code in the vbll helpers, let's update that (highlighted inline), shall we?

model: AbstractBLLModel,
num_restarts: int = 10,
bounds: torch.Tensor | None = None,
discrete: bool = False,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe rename this to discrete_inputs to make it clear what this refers to.

with initial condition generation and `scipy.optimize.minimize`.
"""
if not isinstance(model, AbstractBLLModel):
raise ValueError("Model must be an instance of AbstractBLLModel")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
raise ValueError("Model must be an instance of AbstractBLLModel")
raise ValueError("Model must be an instance of AbstractBLLModel, is {type(model)}")

Comment on lines 58 to 59
self.lb = torch.zeros(self.model.num_inputs, dtype=torch.float64).cpu()
self.ub = torch.ones(self.model.num_inputs, dtype=torch.float64).cpu()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
self.lb = torch.zeros(self.model.num_inputs, dtype=torch.float64).cpu()
self.ub = torch.ones(self.model.num_inputs, dtype=torch.float64).cpu()
self.lb = torch.zeros(self.model.num_inputs, dtype=torch.float64, device=torch.device("cpu))
self.ub = torch.ones(self.model.num_inputs, dtype=torch.float64, device=torch.device("cpu))

raise ValueError("X_cand must be provided if `discrete` is True.")

if X_cand is not None and not self.discrete:
logger.warning(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we warn here or error out? Seems like this is not really a use case we need to / should support?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah makes sense, changed it to raise an error

f = self.model.sample()

# NOTE: If self.discrete is False, we will always numerically optimize the sample
# path for X_next. X_cand is ignored in this case.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question as above - why ignore the X_cand arg in that case? Should we instead just define two different instances of AbstractBLLModel, one for discrete one for non-discrete use cases?

Also, what about the mixed setting in which only some of the dimensions of the input are discrete and others are continuous? Seems like that case could be supported reasonably straightforwardly but is not here (which I guess is fine for a first implementation).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to include this down the line! Seems very relevant for incorporating some one-hot encoding-like inputs + some parameters in R^d. I am mainly thinking about some autoML applications. Would it be ok to include this in a later PR?

warnings.warn(
"Direct matrix inverse for dense covariances is O(N^3), consider using eg inverse weighted inner product"
)
return tp(torch.linalg.inv(self.scale_tril)) @ torch.linalg.inv(self.scale_tril)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ugh, this is pretty bad. You're calling inv on the same tensor twice. Also, you already have the Cholesky decomposition here, why are you calling inv in the first place? You can do this with a simple triangular solve.

Suggested change
return tp(torch.linalg.inv(self.scale_tril)) @ torch.linalg.inv(self.scale_tril)
Eye = torch.eye(self.scale_tril.shape[-1], device=self.scale_tril.device, dtype=self.scale_tril.dtype)
W = torch.linalg.solve_triangular(self.scale_tril, Eye, upper=False)
return tp(W) @ W

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

uff, thank you! Will also push this to the vbll repo


def precision_weighted_inner_prod(self, b, reduce_dim=True):
assert b.shape[-1] == 1
prod = (torch.linalg.solve(self.scale_tril, b) ** 2).sum(-2)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should use solve_triangular here as well

Comment on lines +203 to +205
@property
def covariance(self):
return self.cov_factor @ tp(self.cov_factor) + torch.diag_embed(self.cov_diag)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems like the torch.distributions.LowRankMultivariateNormal does this just fine, why overwrite?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually not super sure if there was a deeper reason here, I will double check!

- 0.5 * self.wishart_scale * noise.trace_precision
)
total_elbo = torch.mean(pred_likelihood - trace_term)
total_elbo += self.regularization_weight * (wishart_term - kl_term)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in-pace updates can be problematic for backprop, suggest avoiding that

Suggested change
total_elbo += self.regularization_weight * (wishart_term - kl_term)
total_elbo = total_elbo + self.regularization_weight * (wishart_term - kl_term)

Comment on lines 15 to 16
if TYPE_CHECKING:
from botorch_community.models.vblls import AbstractBLLModel
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this still needed if you use from __future__ import annotations in all the modules to do postponed type evaluations? We should generally use that.

@Balandat
Copy link
Contributor

@brunzema checking in here, anything needed to get this over the finish line? Seems like we're very close.

@brunzema
Copy link
Contributor Author

@Balandat no, the delay is fully on me, sorry! Everything is pretty much done, flake8 is adressed and also with the import sorting + from __future__ import annotations I no longer require the not so nice type_checking condition 👍 I will make a fresh rebase tomorrow and a final pass and hopefully in the morning your time, I have submitted the updated PR :)

@Balandat
Copy link
Contributor

Excellent!

@brunzema brunzema requested a review from Balandat March 27, 2025 14:12
@brunzema
Copy link
Contributor Author

@Balandat I updated the PR. Not sure why I thought the importing was fixed yesterday—I still had the type checking in place. I noticed that some files in the main repo also use it, so it should be fine?

That said, I think a cleaner approach (which I’ve implemented in the updated PR) is to extract the abstract Bayesian last-layer (BLL) class and use it as a parent class/interface. This should also make it more extensible for future BLL models.

botorch_community
|-- acquisition
|   |-- bll_thompson_sampling.py # AbstractBLL to specify "interface"
|-- models
|   |-- blls.py # Define AbstractBLL model
|   |-- vblls.py # VBLL inherit from AbstractBLL
|-- posteriors
|   |-- bll_posterior.py # AbstractBLL to specify "interface"
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed Do not delete this pull request or issue due to inactivity.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants