Main Content

ベイズ最適化のワークフロー

ベイズ最適化とは

最も一般的な形式の最適化とは、"目的関数" と呼ばれる実数値関数を最小化する点を見つけるプロセスです。ベイズ最適化は、このようなプロセスの 1 つの名前です。ベイズ最適化では、目的関数のガウス過程モデルを内部に保持し、目的関数の評価を使用してモデルに学習をさせます。ベイズ最適化の新機軸の 1 つは "獲得関数" の使用で、これによりアルゴリズムは次の評価点を決定します。獲得関数により、モデル化が十分ではない目的関数がある点における抽出と、まだ十分にはモデル化されていない領域の探索のバランスをとることができます。詳細は、ベイズ最適化のアルゴリズムを参照してください。

ベイズ最適化は、分類および回帰アルゴリズムの "ハイパーパラメーター" の最適化に非常に適していることから、Statistics and Machine Learning Toolbox™ の一部となっています。ハイパーパラメーターは、サポート ベクター マシンのボックス制約やロバスト アンサンブル分類の学習率などと同じく、分類器または回帰関数の内部パラメーターです。これらのパラメーターは分類器または回帰変数の性能に大きく影響を与えますが、概して最適化には困難または多大な時間が伴います。ベイズ最適化の特徴を参照してください。

通常、ハイパーパラメーターの最適化とは、分類器または回帰の交差検証損失を最小化しようとすることを意味します。

ベイズ最適化を実行する方法

ベイズ最適化はいくつかの方法で実行可能です。

  • fitcauto および fitrauto — 予測子および応答データを関数 fitcauto または fitrauto に渡して、モデル タイプの選択とハイパーパラメーターの値を最適化します。他の方法とは異なり、fitcauto または fitrauto を使用する場合は最適化の前に単一のモデルを指定する必要はありません。モデルの選択は最適化プロセスの一部として行われます。最適化により、交差検証損失が最小限に抑えられます。他の方法では単一のガウス過程回帰モデルが使用されますが、fitcauto では複数の TreeBagger モデル、fitrauto では複数の RegressionGP モデルを使用してモデル化されます。fitcauto についてはベイズ最適化fitrauto についてはベイズ最適化を参照してください。

  • 分類学習器アプリおよび回帰学習器アプリ — 機械学習アプリ内で最適化可能モデルを選択し、ベイズ最適化を使用してハイパーパラメーターの値を自動的に調整します。最適化では、選択した検証オプションに基づいてモデルの損失が最小化されます。この方法は、近似関数を使用する場合よりも調整オプションが少ないですが、ベイズ最適化をアプリ内で直接実行できます。分類学習器アプリのハイパーパラメーターの最適化回帰学習器アプリのハイパーパラメーターの最適化を参照してください。

  • 近似関数 — 近似関数の多くでは、名前と値の引数 OptimizeHyperparameters を含めることによりベイズ最適化が自動的に適用されます。最適化では交差検証損失は最小になります。このアプローチでは、bayesopt を使用する場合より調整オプションは少なくなりますが、より簡単にベイズ最適化を実行できます。近似関数を使用したベイズ最適化を参照してください。

  • bayesoptbayesopt を直接呼び出すことにより最適化を最大限制御できます。このアプローチでは、目的関数を記述する必要があります。目的関数が必ずしも交差検証損失を表す必要はありません。bayesopt を使用したベイズ最適化を参照してください。

近似関数を使用したベイズ最適化

以下の手順に従い、ベイズ最適化による交差検証応答の誤差を最小化します。

  1. 名前と値の引数 OptimizeHyperparameters を受け入れる近似関数の中から分類ソルバーまたは回帰ソルバーを選択します。

  2. 最適化するハイパーパラメーターを決定し、名前と値の引数 OptimizeHyperparameters で渡します。各近似関数について、一連のハイパーパラメーターから選択できます。各種近似関数で適格とされるハイパーパラメーターを参照するか、関数 hyperparameters を使用するか、近似関数のリファレンス ページを参照してください。

    パラメーター名の cell 配列を渡すことができます。また、OptimizeHyperparameters の値として 'auto' を設定して一般的な最適化対象ハイパーパラメーターを一揃い選択することも、'all' を設定して使用可能なパラメーターをすべて最適化することもできます。

  3. アンサンブル近似関数 fitcecocfitcensemble および fitrensemble の場合は、弱学習器のパラメーターも cell 配列 OptimizeHyperparameters に含めます。

  4. オプションとして、名前と値の引数 HyperparameterOptimizationOptions のオプション構造体を作成します。近似関数のハイパーパラメーター最適化オプションを参照してください。

  5. 適切な名前と値の引数を使用して近似関数を呼び出します。

例については、ベイズ最適化の使用による分類器の当てはめの最適化ブースティング回帰アンサンブル回帰の最適化を参照してください。また、すべての近似関数のリファレンス ページにはベイズ最適化の例が含まれています。

bayesopt を使用したベイズ最適化

以下の手順に従い、bayesopt を用したベイズ最適化を実行します。

  1. 変数を準備します。ベイズ最適化用の変数を参照してください。

  2. 目的関数を作成します。ベイズ最適化の目的関数を参照してください。必要に応じて制約も作成します。ベイズ最適化の制約を参照してください。目的関数に追加のパラメーターを含めるには、関数のパラメーター化を参照してください。

  3. オプション、つまり bayseoptName,Value ペアを決定します。bayesopt にオプションを渡すことは必須ではありませんが、(解を改善しようとする場合は特に) 渡すことが一般的です。

  4. bayesopt を呼び出します。

  5. 解を調べます。resume を使用して最適化を再開するか、(通常はオプションを修正して) 最適化をやり直すことができます。

たとえば、bayesopt を使用した交差検証分類器の最適化を参照してください。

ベイズ最適化の特徴

ベイズ最適化アルゴリズムは、次のようなタイプの問題に最適です。

特徴詳細
低次元

ベイズ最適化は次元数が少ない場合 (通常は 10 以下) に最適に機能します。変数が数十個ある問題をベイズ最適化で解くことができる場合もありますが、約 50 以上の次元には推奨されません。

計算負荷が高い目的関数

ベイズ最適化は、評価に時間がかかる目的関数用に設計されています。相当な量のオーバーヘッド (通常は各反復について数秒) があります。

低精度

ベイズ最適化では、結果が必ずしも非常に正確であるとは限りません。目的関数が確定的である場合、標準的な最適化アルゴリズムを bayesopt ソリューションから開始することにより、精度が向上する可能性があります。

大域解

ベイズ最適化は大域的な手法です。他の多くのアルゴリズムとは異なり、さまざまな初期点からアルゴリズムを開始しなくても大域解を求めることができます。

ハイパーパラメーター

ベイズ最適化は、別の関数の "ハイパーパラメーター" の最適化に非常に適しています。ハイパーパラメーターは関数の動作を制御するパラメーターです。たとえば、関数 fitcsvm は SVM モデルをデータに当てはめます。これは、その 'rbf' KernelFunctionBoxConstraint および KernelScale というハイパーパラメーターをもちます。ハイパーパラメーターに適用されるベイズ最適化の例については、bayesopt を使用した交差検証分類器の最適化を参照してください。

近似関数で使用可能なパラメーター

各種近似関数で適格とされるハイパーパラメーター

関数名適格なハイパーパラメーター
fitcdiscrDelta
Gamma
DiscrimType
fitcecocCoding
'Learners','discriminant' で使用可能な fitcdiscr パラメーター
'Learners','kernel' で使用可能な fitckernel パラメーター
'Learners','knn' で使用可能な fitcknn パラメーター
'Learners','linear' で使用可能な fitclinear パラメーター
'Learners','svm' で使用可能な fitcsvm パラメーター
'Learners','tree'で使用可能な fitctree パラメーター
fitcensembleMethod
NumLearningCycles
LearnRate
'Learners','discriminant' で使用可能な fitcdiscr パラメーター
'Learners','knn' で使用可能な fitcknn パラメーター
'Learners','tree' で使用可能な fitctree パラメーター
fitcgamInitialLearnRateForInteractions
InitialLearnRateForPredictors
Interactions
MaxNumSplitsPerInteraction
MaxNumSplitsPerPredictor
NumTreesPerInteraction
NumTreesPerPredictor
fitckernelLearner
KernelScale
Lambda
NumExpansionDimensions
fitcknnNumNeighbors
Distance
DistanceWeight
Exponent
Standardize
fitclinearLambda
Learner
Regularization
fitcnbDistributionNames
Width
Kernel
fitcnetActivations
Lambda
LayerBiasesInitializer
LayerWeightsInitializer
LayerSizes
Standardize
fitcsvmBoxConstraint
KernelScale
KernelFunction
PolynomialOrder
Standardize
fitctreeMinLeafSize
MaxNumSplits
SplitCriterion
NumVariablesToSample
fitrensembleMethod
NumLearningCycles
LearnRate
'Learners','tree' に適格な fitrtree のパラメーター
MinLeafSize
MaxNumSplits
NumVariablesToSample
fitrgamInitialLearnRateForInteractions
InitialLearnRateForPredictors
Interactions
MaxNumSplitsPerInteraction
MaxNumSplitsPerPredictor
NumTreesPerInteraction
NumTreesPerPredictor
fitrgpSigma
BasisFunction
KernelFunction
KernelScale
Standardize
fitrkernelLearner
KernelScale
Lambda
NumExpansionDimensions
Epsilon
fitrlinearLambda
Learner
Regularization
fitrnetActivations
Lambda
LayerBiasesInitializer
LayerWeightsInitializer
LayerSizes
Standardize
fitrsvmBoxConstraint
KernelScale
Epsilon
KernelFunction
PolynomialOrder
Standardize
fitrtreeMinLeafSize
MaxNumSplits
NumVariablesToSample

近似関数のハイパーパラメーター最適化オプション

近似関数を使用して最適化を行う場合、以下のオプションを名前と値の引数 HyperparameterOptimizationOptions で使用できます。値は構造体として与えます。この構造体のフィールドは、すべてオプションです。

フィールド名既定の設定
Optimizer
  • 'bayesopt' — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • 'gridsearch' — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。

  • 'randomsearch'MaxObjectiveEvaluations 個の点で無作為に探索。

'gridsearch' では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順のテーブルを取得できます。

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

オブジェクト関数のランタイムによって最適化が異なるので、名前に per-second が含まれている獲得関数は、再現性がある結果を生成しません。名前に plus が含まれている獲得関数は、領域を過剰利用している場合に動作を変更します。詳細は、獲得関数のタイプを参照してください。

'expected-improvement-per-second-plus'
MaxObjectiveEvaluations目的関数評価の最大数。'bayesopt' および 'randomsearch' の場合は 30'gridsearch' の場合はグリッド全体
MaxTime

制限時間。正の実数スカラーを指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。

Inf
NumGridDivisions'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。10
ShowPlotsプロットを表示するかどうかを示す論理値。true の場合、最良の観測された目的関数の値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer'bayesopt')、最良の推定された目的関数値もプロットされます。最良の観測された目的関数値および最良の推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。true
SaveIntermediateResultsOptimizer'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。false
Verbose

コマンド ラインに次を表示します。

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 追加情報付きで反復表示あり

詳細については、bayesopt の名前と値の引数 Verbose およびベイズ最適化の使用による分類器の当てはめの最適化の例を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は true に設定すると最も確実な結果が得られます。ただし、true で良好な結果を得るには、2 倍以上の関数評価が必要になります。

false
以下の 3 つのオプションは 1 つだけ使用できます。
CVPartitioncvpartition によって作成される cvpartition オブジェクト交差検証フィールドが指定されていない場合 'Kfold',5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー
Kfold1 より大きい整数

参考

|

関連するトピック