optuna.samplers.GPSampler
- class optuna.samplers.GPSampler(*, seed=None, independent_sampler=None, n_startup_trials=10, deterministic_objective=False, constraints_func=None)[source]
ガウス過程に基づくベイズ最適化を用いたサンプラー。
このサンプラーは目的関数にガウス過程(GP)を適合させ、獲得関数を最適化することで 次のパラメータを提案します。
現在の実装では、各パラメータのスケールに対して自動関連性決定(ARD)を備えた nu=2.5(2回微分可能)のMaternカーネルを使用しています。 カーネルのハイパーパラメータは、過去のトライアルに基づいてハイパーパラメータの 周辺対数尤度を最大化することで得られます。 過学習を防ぐため、カーネルのスケールとノイズ分散にはガンマ事前分布を、 逆二乗スケール長には手動で作成された事前分布を導入しています。
獲得関数としては以下を使用します:
単一目的最適化では対数期待改善度(logEI)、
多目的最適化では対数期待超体積改善度(logEHVI)、
制約付き最適化(ブラックボックス不等式制約)ではlogEIと制約の独立性を仮定した
実行可能確率の対数の和を使用します。
これらの獲得関数に関する詳細情報は以下の論文を参照してください:
Unexpected Improvements to Expected Improvement for Bayesian Optimization
Differentiable Expected Hypervolume Improvement for Parallel Multi-Objective Bayesian Optimization
獲得関数の最適化は以下の手順で行います:
過去のトライアルから最良のパラメータを収集
準モンテカルロ(QMC)サンプリングを用いて
n_preliminary_samples
点を収集収集した点から最良の点を選択
ルーレット選択法を用いて収集した点から
n_local_search - 2
点を選択各選択点を初期点として局所探索を実施
獲得関数値が最大となる点を次のパラメータとして返します
非単一目的最適化の設定では、上記の単一目的バージョンと若干異なる手順を 採用していますが、簡潔さのため他のケースの説明は省略します。
局所探索は以下のように獲得関数を反復的に最適化します:
連続パラメータに対してはl-BFGS-Bを用いた勾配上昇
離散パラメータに対しては各パラメータを独立に線形探索または全探索
局所探索は、最良のパラメータセットの更新が停止した場合、または 最大反復回数に達した場合に終了します。
連続最適化の結果を丸めるのではなく、線形探索を使用するのは、EIが通常 1つのグリッドとその隣接グリッドの間で高い値を示すためです。
Note
このサンプラーは
scipy
とtorch
を必要とします。 これらの依存関係はpip install scipy torch
でインストールできます。- Parameters:
seed (int | None) – 内部乱数生成器の初期化に使用する乱数シード。 デフォルトは
None
(乱数がランダムに選択されます)independent_sampler (BaseSampler | None) – 初期サンプリング(最初の
n_startup_trials
トライアル)および 条件付きパラメータに使用するサンプラー。デフォルトはNone
(seed
と同じ乱数サンプラーが使用されます)n_startup_trials (int) – 初期トライアル数。デフォルトは10
deterministic_objective (bool) – 目的関数が決定論的かどうか。
True
の場合、サンプラーは代理モデルのノイズ分散を 数値安定性を確保するため0よりわずかに大きい最小値に固定します。 デフォルトはFalse
です。現在True
の場合、すべての目的関数は 決定論的とみなされます。constraints_func (Callable[[FrozenTrial], Sequence[float]] | None) –
目的関数の制約を計算するオプションの関数。
FrozenTrial
を 受け取り、制約値のシーケンスを返します。返値はfloat
のシーケンスでなければなりません。 0より大きい値は制約違反を示し、0以下の値は実行可能とみなされます。 トライアルに対してconstraints_func
が複数の値を返す場合、トライアルは すべての値が0以下の場合にのみ実行可能とみなされます。constraints_func
は各成功トライアル後に評価されます。 トライアルが失敗した場合やプルーニングされた場合は呼び出されませんが、 この動作は将来のリリースで変更される可能性があります。 現在、constraints_func
オプションは多目的最適化ではサポートされていません。
Note
v3.6.0で実験的機能として追加されました。インターフェースは事前通知なしに 変更される可能性があります。詳細は https://github.com/optuna/optuna/releases/tag/v3.6.0 を参照してください。
Methods
after_trial
(study, trial, state, values)Trial post-processing.
before_trial
(study, trial)Trial pre-processing.
infer_relative_search_space
(study, trial)Infer the search space that will be used by relative sampling in the target trial.
Reseed sampler's random number generator.
sample_independent
(study, trial, param_name, ...)Sample a parameter for a given distribution.
sample_relative
(study, trial, search_space)Sample parameters in a given search space.
- after_trial(study, trial, state, values)[source]
トライアル後処理。
このメソッドは目的関数が戻り、トライアルが終了して状態が保存される直前に呼び出されます。
Note
v2.4.0で実験的機能として追加されました。インターフェースは事前通知なしに 変更される可能性があります。詳細は https://github.com/optuna/optuna/releases/tag/v2.4.0 を参照してください。
- Parameters:
study (Study) – 対象スタディオブジェクト。
trial (FrozenTrial) – 対象トライアルオブジェクト。 このオブジェクトを変更する前にコピーを作成してください。
state (TrialState) – トライアルの最終状態。
values (Sequence[float] | None) – トライアルの最終値。トライアルが成功した場合、
None
ではありません。
- Return type:
None
- before_trial(study, trial)[source]
トライアル前処理。
このメソッドは目的関数が呼び出される前に呼び出され、トライアルがインスタンス化される直後に 実行されます。より正確には、トライアル初期化時に
infer_relative_search_space()
が呼び出される直前に実行されます。つまり、探索空間を推論する前に行うべき前処理を担当します。Note
v3.3.0で実験的機能として追加されました。インターフェースは事前通知なしに 変更される可能性があります。詳細は https://github.com/optuna/optuna/releases/tag/v3.3.0 を参照してください。
- Parameters:
study (Study) – 対象スタディオブジェクト。
trial (FrozenTrial) – 対象トライアルオブジェクト。
- Return type:
None
- infer_relative_search_space(study, trial)[source]
対象トライアルで相対サンプリングに使用する探索空間を推論します。
このメソッドは
sample_relative()
メソッドの直前に呼び出され、 そのメソッドに探索空間が渡されます。探索空間に含まれないパラメータはsample_independent()
メソッドでサンプリングされます。- Parameters:
study (Study) – 対象スタディオブジェクト。
trial (FrozenTrial) – 対象トライアルオブジェクト。 このオブジェクトを変更する前にコピーを作成してください。
- Returns:
パラメータ名とパラメータの分布を含む辞書。
- Return type:
See also
intersection_search_space()
を参照してください。
- reseed_rng()[source]
サンプラーの乱数生成器のシードをリセットします。
このメソッドは
Study
インスタンスがn_jobs>1
オプションで並列実行される場合に呼び出されます。 その場合、乱数生成器の状態を含むサンプラーインスタンスが複製され、同じ値を提案する可能性があります。 この問題を防ぐために、各乱数生成器に異なるシードを割り当てます。- Return type:
None
- sample_independent(study, trial, param_name, param_distribution)[source]
指定された分布からパラメータをサンプリングします。
このメソッドは
sample_relative()
メソッドで返される探索空間に含まれないパラメータに対してのみ呼び出されます。 ランダムサンプリングやTPEなど、パラメータ間の関係を使用しないサンプリングアルゴリズムに適しています。Note
組み込みサンプラーは失敗したトライアルを無視して新しいパラメータをサンプリングします。 したがって、失敗したトライアルはサンプラーの観点では削除されたものとみなされます。
- Parameters:
study (Study) – 対象スタディオブジェクト。
trial (FrozenTrial) – 対象トライアルオブジェクト。 このオブジェクトを変更する前にコピーを作成してください。
param_name (str) – サンプリングするパラメータの名前。
param_distribution (BaseDistribution) – サンプリングアルゴリズムの事前分布とスケールを指定する分布オブジェクト。
- Returns:
パラメータ値。
- Return type:
Any
- sample_relative(study, trial, search_space)[source]
指定された探索空間からパラメータをサンプリングします。
このメソッドは各トライアルの開始時に1回呼び出されます(目的関数の評価直前に呼び出されます)。 ガウス過程やCMA-ESなど、パラメータ間の関係を使用するサンプリングアルゴリズムに適しています。
Note
組み込みサンプラーは失敗したトライアルを無視して新しいパラメータをサンプリングします。 したがって、失敗したトライアルはサンプラーの観点では削除されたものとみなされます。
- Parameters:
study (Study) – 対象スタディオブジェクト。
trial (FrozenTrial) – 対象トライアルオブジェクト。 このオブジェクトを変更する前にコピーを作成してください。
search_space (dict[str, BaseDistribution]) –
infer_relative_search_space()
で返される探索空間。
- Returns:
パラメータ名と値を含む辞書。
- Return type: