optuna.samplers.CmaEsSampler
- class optuna.samplers.CmaEsSampler(x0=None, sigma0=None, n_startup_trials=1, independent_sampler=None, warn_independent_sampling=True, seed=None, *, consider_pruned_trials=False, restart_strategy=None, popsize=None, inc_popsize=-1, use_separable_cma=False, with_margin=False, lr_adapt=False, source_trials=None)[source]
バックエンドとして cmaes を使用するサンプラーです。
使用例
CmaEsSampler
を使用して簡単な二次関数を最適化します。$ pip install cmaes
import optuna def objective(trial): x = trial.suggest_float("x", -1, 1) y = trial.suggest_int("y", -1, 1) return x**2 + y sampler = optuna.samplers.CmaEsSampler() study = optuna.create_study(sampler=sampler) study.optimize(objective, n_trials=20)
このサンプラーは CategoricalDistribution をサポートしていません。 ただし、
FloatDistribution
のstep
オプション、 (suggest_float()
) およびIntDistribution
(suggest_int()
) はサポートされています。探索空間にカテゴリカルパラメータが含まれる場合は、
TPESampler
の使用を推奨します。 また、並列最適化設定ではパフォーマンス改善の余地があります。 このサンプラーでは、多変量正規分布のパラメータ更新に 一部のトライアルを使用できません。CMA-ES アルゴリズムの詳細については、以下の論文を参照してください:
See also
cma ライブラリをバックエンドとして使用するサンプラー optuna_integration.PyCmaSampler も利用可能です。
- Parameters:
x0 (dict[str, Any] | None) – CMA-ES の初期パラメータ値の辞書。デフォルトでは、各分布の
low
とhigh
の平均値が使用されます。restart_strategy
引数を指定すると、x0
は各再起動時に探索空間のドメイン内で一様にサンプリングされます。sigma0 (float | None) – CMA-ES の初期標準偏差。デフォルトでは、
sigma0
はmin_range / 6
に設定されます。 ここで、min_range
は探索空間内の分布の最小範囲を表します。seed (int | None) – CMA-ES の乱数シード。
n_startup_trials (int) – 指定された数のトライアルが完了するまで、CMA-ES アルゴリズムの代わりに独立サンプリングが使用されます。
independent_sampler (BaseSampler | None) –
独立サンプリングに使用される
BaseSampler
インスタンス。 相対探索空間に含まれないパラメータはこのサンプラーによってサンプリングされます。CmaEsSampler
の探索空間はintersection_search_space()
によって決定されます。None
が指定された場合、RandomSampler
がデフォルトとして使用されます。See also
optuna.samplers
モジュールには、RandomSampler
やTPESampler
などの組み込み独立サンプラーが用意されています。warn_independent_sampling (bool) –
これが
True
の場合、独立サンプラーを使用してパラメータ値がサンプリングされたときに警告メッセージが出力されます。注意: スタディの最初のトライアルは常に独立サンプラーによってサンプリングされるため、この場合警告メッセージは出力されません。
restart_strategy (str | None) –
局所最小値に収束した際の CMA-ES 最適化の再起動戦略。
None
が指定された場合、CMA-ES は再起動しません (デフォルト)。 ‘ipop’ が指定された場合、CMA-ES は人口サイズを増加させて再起動します。 ‘bipop’ が指定された場合、CMA-ES は人口サイズを増加または減少させて再起動します。inc_popsize
パラメータも参照してください。Warning
v4.4.0 で非推奨。
restart_strategy
引数は将来削除される予定です。 この機能の削除は現在 v6.0.0 で予定されていますが、このスケジュールは変更される可能性があります。 v4.4.0 以降、restart_strategy
は自動的にNone
にフォールバックされ、restart_strategy
は OptunaHub でサポートされます。 詳細は https://github.com/optuna/optuna/releases/tag/v4.4.0 を参照してください。popsize (int | None) – CMA-ES の人口サイズ。
inc_popsize (int) –
各再起動前に人口サイズを増加させる倍率。
restart_strategy = 'ipop'
またはrestart_strategy = 'bipop'
が指定された場合に使用されます。Warning
v4.4.0 で非推奨。
inc_popsize
引数は将来削除される予定です。 この機能の削除は現在 v6.0.0 で予定されていますが、このスケジュールは変更される可能性があります。 v4.4.0 以降、inc_popsize
は Optuna 内で使用されなくなり、inc_popsize
は OptunaHub でサポートされます。 詳細は https://github.com/optuna/optuna/releases/tag/v4.4.0 を参照してください。consider_pruned_trials (bool) –
これが
True
の場合、PRUNED トライアルがサンプリングの対象となります。Note
v2.0.0 で実験的機能として追加されました。このインターフェースは予告なく変更される可能性があります。 詳細は https://github.com/optuna/optuna/releases/tag/v2.0.0 を参照してください。
Note
MedianPruner
を使用する場合はFalse
に設定することが推奨されます。 一方、HyperbandPruner
を使用する場合はTrue
に設定することが推奨されます。 詳細は ベンチマーク結果 を参照してください。use_separable_cma (bool) –
これが
True
の場合、共分散行列は対角行列に制約されます。 モデルの複雑さを軽減するため、共分散行列の学習率が増加します。その結果、 このアルゴリズムは分離可能な関数において CMA-ES よりも優れた性能を発揮します。Note
v2.6.0 で実験的機能として追加されました。このインターフェースは予告なく変更される可能性があります。 詳細は https://github.com/optuna/optuna/releases/tag/v2.6.0 を参照してください。
with_margin (bool) –
これが
True
の場合、マージン付き CMA-ES が使用されます。このアルゴリズムは、 各離散分布 (FloatDistribution
でstep
を指定し、IntDistribution
を使用する場合) において、サンプルが単一の点に固定されるのを防ぎます。 現在、このオプションはuse_separable_cma=True
と併用できません。Note
v3.1.0 で実験的機能として追加されました。このインターフェースは予告なく変更される可能性があります。 詳細は https://github.com/optuna/optuna/releases/tag/v3.1.0 を参照してください。
lr_adapt (bool) –
これが
True
の場合、学習率適応付き CMA-ES が使用されます。 このアルゴリズムは、デフォルト設定で多峰性問題やノイズの多い問題に対して良好な性能を発揮するように設計されています。 現在、このオプションはuse_separable_cma=True
またはwith_margin=True
と併用できません。Note
v3.3.0 以降で実験的機能として追加されました。 このインターフェースは予告なく変更される可能性があります。詳細は https://github.com/optuna/optuna/releases/tag/v3.3.0 を参照してください。
source_trials (list[FrozenTrial] | None) –
このオプションは、類似の HPO タスクにおける事前知識を CMA-ES の初期化を通じて転送する Warm Starting CMA-ES 用です。 この手法は
source_trials
から有望な分布を推定し、多変量ガウス分布のパラメータを生成します。x0
、sigma0
、またはuse_separable_cma
引数と併用することは禁止されています。Note
v2.6.0 で実験的機能として追加されました。このインターフェースは予告なく変更される可能性があります。 詳細は https://github.com/optuna/optuna/releases/tag/v2.6.0 を参照してください。
メソッド
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()
をinfer_relative_search_space()
の実装例として参照してください。
- reseed_rng()[source]
サンプラーの乱数生成器のシードを再設定します。
このメソッドは、
n_jobs>1
オプションでトライアルが並列実行される場合、Study
インスタンスによって呼び出されます。この場合、乱数生成器の状態を含むサンプラーインスタンスが複製され、同じ値が提案される可能性があります。この問題を防ぐため、 このメソッドは各乱数生成器に異なるシードを割り当てます。- 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:
- 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: