GP
Gaussian Process
Gaussian Process (GP) は、TPE と同様にベイズ最適化の手法です。TPE のセクションで紹介したように、どちらもベイズ最適化を使用しますが、パラメータと目的関数値の関係をどのようにモデル化するかが異なります。
- GP はパラメータ値が与えられたときの目的関数値の分布、つまり
p(y|x)を直接モデル化します。 - TPE は
p(x|y)とp(y)を別々にモデル化します。
Gaussian Process とは
Gaussian Process は、関数に対する確率分布を定義します。観測された試行の集合が与えられると、GP はサロゲートモデルをフィッティングし、探索空間内の未観測の点における平均(期待値)と不確実性(分散)の両方を予測します。
これが TPE に対する重要な利点です。GP は未観測の点で期待される値だけでなく、その予測にどれだけ自信があるかも把握しています。
GP ベースのベイズ最適化の仕組み
GP による最適化は、STEP2 から STEP3 を繰り返し実行することで行われます。
STEP1
TPE と同様に、まず初期の観測データを収集するためにランダムサンプリングが行われます。初期試行の数は「Number of startup trials」設定によって制御されます。
STEP2
観測データが与えられると、GP
はサロゲートモデルをフィッティングします。探索空間内の各候補点 x
について、モデルは以下を提供します。
- 予測平均
μ(x):xにおける目的関数の期待値 - 予測分散
σ²(x):xにおける予測の不確実性
STEP3
獲得関数(acquisition function)が次に評価すべき点を選択します。Tunny は期待改善量(Expected Improvement, EI)を使用し、以下のバランスを取ります。
- 活用(Exploitation): 既知の良い点の近くを探索(
μ(x)が低い箇所) - 探索(Exploration): 不確実性の高い領域を探索(
σ(x)が高い箇所)
次の試行は、EI を最大化する点で実行されます。
GP Optuna vs GP BoTorch
Tunny には 2 種類の GP 実装があります。
| GP Optuna | GP BoTorch | |
|---|---|---|
| Backend | Optuna native | BoTorch library |
| Multi-objective | 未対応 | 対応 |
| Constraints | 対応 | 対応 |
| Speed | 高速 | 低速 |
多目的最適化を行わない場合は GP Optuna を推奨します。多目的ベイズ最適化には GP BoTorch が必要です。
計算量
GP
は各ステップでカーネル行列の逆行列を計算する必要があり、その時間計算量は観測数
n に対して O(n³) となります。そのため、試行回数が増えるにつれて GP は
TPE(O(dn log n))よりも低速になります。試行回数が多い場合は、TPE
の方が実用的なことが多いです。
GP を使うべき場面
- 1 回の試行にコストがかかり、最大限のサンプル効率が求められる場合
- 目的関数が滑らかで連続である場合
- 変数の数が比較的少ない場合(GP は次元数が増えるとスケーラビリティが低下します)