October 19, 2024

About

In BoTorch documentation, it is clearly mentioned that multiple-output and multiple task is different, and every GPs including SingleTaskGP is able to export multiple output. Meanwhile, you would find ModelListGP class implementation, and below code in tutorial(for example, https://botorch.org/tutorials/multi_objective_bo) or something.

    for i in range(train_obj.shape[-1]):
        train_y = train_obj[..., i : i + 1]
        train_yvar = torch.full_like(train_y, NOISE_SE[i] ** 2)
        models.append(
            SingleTaskGP(
                train_x, train_y, train_yvar, outcome_transform=Standardize(m=1)
            )
        )
    model = ModelListGP(*models)

Even though SingleTaskGP is able to export multiple output, why is this implementation using ModelListGP is taken?

The difference

 When SingleTaskGP exports multiple output, it assumes isotopic data. It means that input explanatory variables are common for all multiple outputs.

Isotopic

But when we use ModelListGP with SingleTaskGPs, it means that we have independent SingleTaskGPs as a list. So, we do not need to share common explanatory variables. This setting is so called “Heterotopic data” as we can see follows.

Heterotopic