experimental-design / bofire

Experimental design and (multi-objective) bayesian optimization.
https://experimental-design.github.io/bofire/
BSD 3-Clause "New" or "Revised" License
156 stars 20 forks source link

Acquisition function for Exploration only #331

Open jdridder opened 6 months ago

jdridder commented 6 months ago

For many real world applications exploration only strategies are very useful to obtain precisely trained GP models on the whole design space. Up till now, this can be done by utilizing the UCB acquisition function while choosing a high exploration parameter β which is limited to the single-output case. The situation for multi-output models is a trickier though.

In this case, the acquisition function only needs to focus on the posterior variance that should be minimized for a new candidate point as implemented in qNegIntegratedPosteriorVariance which allows multi-output models.

This would be truly useful for all kinds of accurate surrogate modeling of multi-output scenarios without optimization in the first place.

jduerholt commented 6 months ago

Hi JD,

thanks for pointing this out. We are planning to add active learning acqfs soon. I need to think a bit more about the MO case ;) I just saw there is large PR in botorch with new active learning acqfs https://github.com/pytorch/botorch/pull/2163. As soon as they are available there, we will also integrate them in bofire.

Best,

Johannes

jdridder commented 4 months ago

Hi Johannes,

thanks for your answer. I'm glad to hear, that you are about to implement the active learning acqfs. If you want to outsource some work, I will eagerly help you, as I am myself testing around with active_learning acqfs in vanilla botorch. Would love to see this work in bofire.

Best regards, JD

jduerholt commented 4 months ago

This are great news, I indeed started last week a branch to implement an ActiveLearningStrategy, which is not yet finished. I will clean this up and document it a bit so that you can fork it and finish it. Thank you very much!

PS: Cudos to using vanilla botorch, this is an achievement, but it would be really nice to have it in BoFire to reduce the overhead and boilerplate code.

jdridder commented 4 months ago

For the sake of documentation To analyze the performance of the new ActiveLearning acquisition function qNegIntegratedPosteriorVariance, I did a benchmark test against the RandomStrategy and the acquisition function qUCB with a high exploration parameter of 1000. This was done by comparing the mean squared error to the true solution of the benchmark function Himmelblau of the models trained by each strategy in five separate trial rounds.

The graph shows the mean mse and its standard deviation of the five rounds. It illustrates that qNegIntegratedPosteriorVariance is clearly superior to the RandomStrategy and even the qUCB producing the lowest MSE to the real solution. This makes the new ActiveLearningStrategy a good option for pure exploration of the objective function.

active_learning_performance