Closed Queimo closed 7 months ago
if I fit my hetGP to Y.mean() and Y.std(). I want it to behave more risk-averse though.
One problem with this approach is that qLogNEHVI will attempt to optimize the mean of your stochastic objectives, ignoring the stochasticity and your desire to be risk-averse.
I suspect the correct/better approach is not to just fit my GP to something like (Y_mean-beta*Y_var) directly.
Yeah, directly modeling Y_mean-beta*Y_std
(or Y_var
) is one option. qLogNEHVI would then seek to identify the Pareto frontier over the lower bound.
Another alternative would be to fit the heteroskedastic GP to Y.mean() and Y.std(). The in qLogNEHVI set observation_noise=True
(this would require changing the code here: https://github.com/pytorch/botorch/blob/6a66c79ea444b992aefdbc8d563c6e19d7657008/botorch/acquisition/multi_objective/logei.py#L456 to pass observation_noise=True), so that we sample from posterior predictive p(Y | D) rather than posterior p(f|D). Then apply a
GenericMCMultiOutputObjective(https://github.com/pytorch/botorch/blob/6a66c79ea444b992aefdbc8d563c6e19d7657008/botorch/acquisition/multi_objective/objective.py#L57) to those samples that
betasamples.std(dim=0)` from each sample. This method would be advantageous if
it is easier to model Y_mean and Y_std with the heteroskedastic GP, than modeling Y_mean-betaY_std.
Help wanted
I am trying to do risk-averse optimiziation of experiments in the Laboratory whose objectives are subject to some stochasticity. My setup allows for repeated experiments which I want to use to keep the algorithm from sampling very noisy regions. I have set-up a simple test function with noisy regions, with 2 inputs and 2 outputs. So roughly speaking: obj_vector = f(X) + eps(X) --> max. and avoid regions with high eps.
I want to do that using qLogNEHVI, as it already shows good performance if I fit my hetGP to Y.mean() and Y.std(). I want it to behave more risk-averse though. And I suspect the correct/better approach is not to just fit my GP to something like (Y_mean-beta*Y_var) directly, instead of defining an objective that transforms my outputs. My attempt was to combine the principles from tutorials/papers on Robust multi-objective Bayesian optimization under input noise and Risk averse Bayesian optimization with environmental variables.However, I am struggeling to adapt both methodolgies to my problem, as they target slightly different problems.
I looked into AppendFeatures, but it seems like it does not really fit, as my output is already expanded, once it comes out of my test function, and other types of input perturbations dont really make sense I think, because my inputs are modelled to be fixed.
Below is a minimal outline of the code. Any help in pointing me in the right direction is greatly appreciated!
Code example
System Info
Please provide information about your setup, including