2
1

More than 1 year has passed since last update.

# BoTorch 入門 3.

Last updated at Posted at 2023-04-10

BoTorch 入門 1.
BoTorch 入門 2.
BoTorch 入門 3.

BoTorchによる説明を見てみます。

Models play an essential role in Bayesian Optimization (BO). A model is used as a surrogate function for the actual underlying black box function to be optimized. In BoTorch, a Model maps a set of design points to a posterior probability distribution of its output(s) over the design points.

In BO, the model used is traditionally a Gaussian Process (GP), in which case the posterior distribution is a multivariate normal. While BoTorch supports many GP models, BoTorch makes no assumption on the model being a GP or the posterior being multivariate normal. With the exception of some of the analytic acquisition functions in the botorch.acquisition.analytic module, BoTorch’s Monte Carlo-based acquisition functions are compatible with any model that conforms to the Model interface, whether user-implemented or provided.

Under the hood, BoTorch models are PyTorch Modules that implement the light-weight Model interface. When working with GPs, GPyTorchModel provides a base class for conveniently wrapping GPyTorch models.

Users can extend Model and GPyTorchModel to generate their own models. For more on implementing your own models, see Implementing Custom Models below.

• BoTorchではsurrogate functionにGP(ガウス過程)を利用するが、事後分布は必ずしも正規分布である必要はない、
• そのGPは自分で実装したモデルも利用可能だが(Monte Carlo近似を必要とする獲得関数を用いる場合)Modelのinterfaceの仕様に従う必要がある

といったことが書かれています.

## Terminology

A Model (as in the BoTorch object) may have multiple outputs, multiple inputs, and may exploit correlation between different inputs. BoTorch uses the following terminology to distinguish these model types:

• Multi-Output Model: a Model with multiple outputs. Most BoTorch Models are multi-output.
• Multi-Task Model: a Model making use of a logical grouping of inputs/observations (as in the underlying process). For example, there could be multiple tasks where each task has a different fidelity. In a multi-task model, the relationship between different outputs is modeled, with a joint model across tasks.

Note the following:
A multi-task (MT) model may or may not be a multi-output model. For example, if a multi-task model uses different tasks for modeling but only outputs predictions for one of those tasks, it is single-output.
Conversely, a multi-output (MO) model may or may not be a multi-task model. For example, multi-output Models that model different outputs independently rather than building a joint model are not multi-task.
If a model is both, we refer to it as a multi-task-multi-output (MTMO) model.

ここでのMulti-Outputはベイズ最適化ではなくガウス過程の話です. マルチタスクベイズ最適化や多目的ベイズ最適化とは分けて考える必要があるように思います.

### Noise: Homoskedastic, fixed, and heteroskedastic

※ 観測ノイズについて、は別記事で紹介しているため今回は触れません。

HeteroskedasticSingleTaskGP `FixedNoiseFP`と同様にノイズが観測できていることが必要であるが、関数値に対するガウス過程と別にノイズを推定するためのガウス過程を用意することで未知の入力点に対してもノイズを加味した予測が可能となる

これらのモデルは`BatchedMultiOutputGPyTorchModel`も継承しているため同一の入力に対して一つまたは複数の出力がある場合でも利用できます。しかし各出力が相関を持っている必要はありません。各出力に相関がある場合、MultiTaskなGPを用いることが可能です。

FixedNoiseMultiTaskGP `MultiTaskGP`と同様であるが、観測ノイズを入力に受け取る.
KroneckerMultiTaskGP 複数の関数を同時にモデリング可能であることは`MultiTaskGP`と同様であるが、入力に対して、すべての関数(タスク)の出力が観測されている必要がある.そういった構造を`Kronecker Structure`と呼称し、事後分布の計算が高速に行うことができる.[1]

### other

ModeList 複数の入力と複数の出力が独立に存在してまとめてガウス過程を行うときに利用する. 内部ではタスク間の相関が0の`MultiTaskGP`として動作しているようである.
SingleTaskMultiFidelityGP MFBO(Multi-Fidelity Bayesian Optimization)で用いることができる. まだ完全に理解していないが、MFBO自体は`SingleTaskGP`(おそらく`MultiTaskGP`でも)可能. `SingleTaskMultiFidelityGP`は※trace observationを用いることができる場合に効率的な最適化が可能であると思われる.
FixedNoiseMultiFidelityGP 省略
HigherOrderGP 出力が高階になる場合、例えば画像を出力するようなガウス過程です。出力は高階のテンソルになり、各階のテンソル間の相互作用もカーネルトリックで実現している[1]
PairWiseGP TODO
AffineDeterministicModel TODO
AffineFidelityCostModel TODO
GenericDeterministicModel TODO
PosteriorMeanModel TODO

※ trace observation : `SingleTaskMultiFidelityGP`は基本的に[2]を実装しているため、[2]の論文を読む必要がある.
NNのハイパーパラメータのチューニングにおいて、例えば小さいepoch数と大きいepoch数はそれぞれlow-fidelity, high-fidelityとみなせる. ここで、大きいepoch数(fidelityが高い)で目的関数を評価(ここでいう目的関数は、例えば入力をハイパーパラメータとして出力をvalidation dataでの評価指標としたもの)することは、同時に低いepoch数(fidelityが低い)での目的関数の値を得ることができることを意味する. このように、高いfidelityでの評価が同時に低いfidelityでの評価もする場合、そのfidelityをtrace fidelity,そうでない場合 non-trace fidelityという.
`SingleTaskMultiFidelityGP`では、`trace fidelity`の変数に対し`DownSamplingKernel`を、non-trace fidelityの変数に対して`ExponentialDecayKernel`という特別なカーネルを指定することが可能である.

ちなみに、デフォルトでは`LinearTrucatedKernel`というカーネルが使用されるが、実装された経緯はよくわからないらしい(笑).
https://github.com/pytorch/botorch/discussions/947
https://github.com/pytorch/botorch/discussions/1392

2
1
0

Register as a new user and use Qiita more conveniently

1. You get articles that match your needs
2. You can efficiently read back useful information
3. You can use dark theme
What you can do with signing up
2
1