並列ベ@ @ズ最適化
並列的な最適化
ベesc escズ最適化を並列実行すると,時間を節約できます。並列実行には并行计算工具箱™が必要です。bayesopt
は並列ワ,カ,上で,目的関数の並列評価を同時実行します。
最適化を並列で行うには,
bayesopt
-名前と値の引数UseParallel
を真正的
に設定します。たとえば,以下のようにします。结果= bayesopt(fun,vars,“UseParallel”,真正的);
近似関数-構造体
HyperparameterOptimizationOptions
のUseParallel
フィ,ルドを真正的
に設定します。たとえば,以下のようにします。Mdl = fitcsvm(X,Y,“OptimizeHyperparameters”,“汽车”,...“HyperparameterOptimizationOptions”结构(“UseParallel”,真正的))
並列ベ@ @ズアルゴリズム
並列ベ电子邮箱ズ最適化アルゴリズムは,ベ@ @ズ最適化のアルゴリズムで説明されている逐次アルゴリズムに似ています。相違点は,
bayesopt
は評価対象の点(通常は一度に1ずの点)を並列ワカに割り当てます。bayesopt
はどの点を割り当てるかを決定するための計算をクラ@ @アントで行います。bayesopt
は,初期の無作為な点を評価した後で,ガウス過程(GP)モデルをあてはめることにより評価対象の点を選択します。bayesopt
は,まだ点を評価しているワーカーがある状態でGPモデルをあてはめるため,まだワーカー上にある各点に値を割り当て(補定し)ます。補定値は,評価対象の点におけるgpモデル値の平均,またはbayesopt
の名前と値の引数“ParallelMethod”
によって指定された他の値です。近似関数の並列最適化の場合,bayesopt
は補定値としてParallelMethod
の既定値を使用します。bayesopt
は,評価対象の点を割り当てた後で,新しい割り当て対象の点を計算する前に,アイドル状態のワーカーが過剰にあるかどうかをチェックします。アクティブワ,カ,のしきい値は名前と値の引数MinWorkerUtilization
によって決定されます。アドル状態のワカが過剰にある場合,bayesopt
はすべてのアドルワカに対し,範囲内で一様に選択した無作為な点を割り当てます。このステップによりワーカーがより短時間でアクティブになりますが,あてはめられた点ではなく無作為な点がワーカーに割り当てられます。アドルワカの個数がしきい値を超えていない場合,bayesopt
はgpモデルをあてはめて獲得関数を最大化することにより評価対象の点を通常どおり選択します。
メモ
並列でのタイミングに再現性がないため,並列ベイズ最適化で再現性のある結果が生成されるとは限りません。
最適な並列実行のための設定
近似関数には,並列実行のパフォ,マンスを向上させるための特別な設定はありません。対照的に,bayesopt
には最適化の高速化に役立かあります。
ソルバ,のオプション
GPActiveSetSize
オプションを既定(300
)より小さい値に設定すると,計算が高速になる可能性があります。代償として,大きい値の場合より目的関数のgpモデルの精度が低下する可能性があるため,bayesopt
が評価対象として選択する点の精度が低下する可能性があります。このオプションを大きい値に設定すると,GPモデルは正確になる可能性がありますが,モデルの作成に必要な時間が長くなります。
ParallelMethod
オプションを“max-observed”
に設定すると,bayesopt
は大域的な最適値をより幅広く探索するようになります。これにより,より適切な解がより短い時間で得られるようになる可能性があります。ただし,多くの場合で既定値の“clipped-model-prediction”
が最適です。
MinWorkerUtilization
オプションを大きい値に設定すると,並列の使用率が増加する可能性があります。ただし,この設定では評価対象として完全に無作為な点の個数が増えるので,解の精度が低下する可能性があります。この場合の大きい値は,使用するワ,カ,の個数によって異なります。既定の設定は地板(0.8 * N)
です。N
は並列ワ,カ,の個数です。このオプションを小さい値に設定すると,並列の使用率が低下する可能性がありますが,点の品質が向上するというメリットがあります。
ワ,カ,への目的関数の配置
3 .。一部の方法ではパフォ,マンスが向上しますが,より複雑な設定が必要になります。
1.自動:目的関数として関数ハンドルを与えた場合,bayesopt
は実行の最初にハンドルをすべての並列ワ,カ,に送ります。たとえば,以下のようにします。
负载电离层分割= optimizableVariable(“分裂”[1100],“类型”,“整数”);minleaf = optimizableVariable(“minleaf”[1100],“类型”,“整数”);fun = @(params)kfoldLoss(fitctree(X,Y,“Kfold”5,...“MaxNumSplits”params.splits,“MinLeaf”params.minleaf));结果= bayesopt(fun,[split,minleaf],“UseParallel”,真正的);
この方法は,ハンドルが小さい場合または最適化を1回だけ実行する場合に効果的です。しかし,最適化を複数回実行する場合は,他の2の方法のいずれかを使用すると時間を節約できます。
2.並列定数:最適化を複数回実行する場合は,目的関数を1回だけワ,カ,に転送することにより時間を節約します。関数ハンドルに大量のデ,タが含まれている場合,この方法は特に効果的です。次の例のように関数ハンドルを構造体parallel.pool.Constant
(并行计算工具箱)に設定して,目的関数を1回だけ転送します。
负载电离层分割= optimizableVariable(“分裂”[1100],“类型”,“整数”);minleaf = optimizableVariable(“minleaf”[1100],“类型”,“整数”);fun = @(params)kfoldLoss(fitctree(X,Y,“Kfold”5,...“MaxNumSplits”params.splits,“MinLeaf”params.minleaf));C = copyFunctionHandleToWorkers(fun);results1 = bayesopt(C,[split,minleaf],“UseParallel”,真正的);results2 = bayesopt(C,[split,minleaf],“UseParallel”,真的,...“MaxObjectiveEvaluations”, 50);results3 = bayesopt(C,[split,minleaf],“UseParallel”,真的,...“AcquisitionFunction”,“expected-improvement”);
この例では,copyFunctionHandleToWorkers
は関数ハンドルを1回だけワカに送ります。
3.ワカ上での目的関数の作成:ワ,カ,に送るデ,タが大量にある場合は,spmd
(并行计算工具箱)を使用してワーカーにデータを読み込むことにより,クライアントにおけるデータの読み込みを回避できます。分散された目的関数へのアクセスには,复合
(并行计算工具箱)とparallel.pool.Constant
を使用します。
% makeFun位于脚本的末尾spmdfun = makeFun();结束% ObjectiveFunction现在是一个Composite。获取一个parallel.pool.Constant%引用它,不复制到客户端:C = parallel.pool.Constant(fun);你也可以用电话线% C = parallel.pool.Constant(@MakeFun);在这种情况下,您不使用spmd调用bayesopt,传递常量分割= optimizableVariable(“分裂”, [1 100]);minleaf = optimizableVariable(“minleaf”, [1 100]);bo = bayesopt(C,[分割minleaf],“UseParallel”,真正的);函数f = makeFun() load(电离层的,“X”,“Y”);F = @乐趣;函数L = fun(参数)L = kfoldLoss(fitctree(X,Y,...“KFold”5,...“MaxNumSplits”Params.splits,...“MinLeaf”Params.minleaf));结束结束
この例では,関数ハンドルはワ,カ,のみに存在します。ハンドルがクラ@ @アントに現れることはありません。
並列ベ@ @ズ最適化の出力の違い
bayesopt
を並列実行する場合,ベ。
反復表示—アクティブワカの個数を示す列が反復表示に含まれます。これは,
bayesopt
がジョブを次のワ,カ,に割り当てた後の値です。プロット関数
目的関数モデルのプロット(
@plotObjectiveModel
)には,保留中の点(並列ワ,カ,上で実行中の点)が示されます。点の高さは名前と値の引数ParallelMethod
によって変化します。経過時間のプロット(
@plotElapsedTime
)には,合計経過時間が[リアルタ电子邮箱ム]というラベルで,すべてのワカにいて合計した目的関数の総評価時間が[目的関数の評価時間(すべてのワ,カ,)]というラベルで表示されます。目的関数の評価時間には,ジョブでワ,カ,を起動する時間が含まれます。
参考
parallel.pool.Constant
(并行计算工具箱)|spmd
(并行计算工具箱)