-
Notifications
You must be signed in to change notification settings - Fork 323
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
multi-objective optimization (e.g. qNEHVI) vs. scalarized objectives. Which to choose? #1210
Comments
Thanks for documenting this. It looks like you have a cool use case! I took a look at your notebook. Just to confirm my understanding: For multi-objective optimization (qNEHVI):
For optimizing a scalarized objective:
If this is the case, it is not surprising that optimizing a scalarized objective of frechet+luminosity works well since you are looking at the Pareto frontier for those metrics (separately) and those metrics are not targeted by qNEHVI (based on the configured experiment). Furthermore, optimizing (learning the pareto frontier across) 8 objectives simultaneously is difficult. Why not optimize frechet and luminosity with qNEHVI rather than (delta_*) if you care about frechet and luminosity? (Note: I don't know what these metrics are) A couple other notes:
|
@sdaulton thanks for your response!
I had two sets of simulations in the order that I was exploring things, which probably made it confusing. In the first set of simulations, I had 8 objectives (
AFAIK, qNEHVI was operating directly on
Basically it's something "low", where the max might be 50k or so.
The simulations aren't noisy. Thank you! I was wondering about that. I'll plan on running it again with |
@sdaulton I'm noticing that primary_objective=objectives[0].metric,
secondary_objective=objectives[1].metric,
absolute_metrics=[objectives[0].metric_names[0], objectives[1].metric_names[0]], Should I refactor my hacky scalarized objective (where I sum the two objectives in the Right now, the scalarized kwargs to primary_objective=experiment.tracking_metrics[0],
secondary_objective=experiment.tracking_metrics[1],
absolute_metrics=[
experiment.tracking_metrics[0].name,
experiment.tracking_metrics[1].name,
scalar_name,
], Or is there some other workaround you'd suggest for comparing the two Pareto frontiers? |
Ah thank for clarifying your setup. For the second MOO experiment on frechet and luminosity, what are the inferred objective thresholds? Also, it looks like those plots are gone from your notebook.
For plotting the observed metrics (including tracking metrics) for the evaluated designs (as in This style of plot is also nice because it shows the observations collected over time, which might provide more insight into the behavior of the method during data collecton |
@sgbaird, did you get a full answers to your questions or are there unresolved follow-ups? |
@sdaulton my bad, I thought I had responded to this already. I will need to go back and check what the inferred thresholds were. Thanks for the detailed response! I plan to follow the example you linked and post the updated results here. @lena-kashtelyan I think it's resolved to a good enough point. Will close for now! Thanks for checking in. |
I put together a tutorial illustrating the use of Ax's multi-objective optimization functionality and comparing this against scalarization approaches. When using a scalarized quantity to compare performance, it makes sense that the scalarized objectives do better than MOO. However, when looking at Pareto fronts and comparing them against a naive scalarization approach (sum the two objectives), I was surprised to see that, in general, the naive scalarization Pareto fronts seem better. This was on a straightforward, 3-parameter task with a single local maximum AFAIK. The task is meant as a teaching demo (see e.g. notebook tutorials). In particular, the notebook is
6.1-multi-objective.ipynb
, linked above.I noticed that I regularly got the following warning during MOO:
Out of the sklearn preprocessing scalers, winsorization seems most comparable to sklearn's RobustScaler (interesting that it was the 3rd hit when searching for winsorization sklearn). There's also a winsorization function in sklearn. This is my attempt to frame it in light of things I'm somewhat familiar with.
The text was updated successfully, but these errors were encountered: