ホームページ  >  記事  >  テクノロジー周辺機器  >  ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化

ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化

WBOY
WBOY転載
2023-04-04 12:05:082000ブラウズ

この記事では、機械学習の結果を改善するために使用される最も一般的なハイパーパラメーターの最適化方法を詳しく紹介します。

翻訳者| 解決策は、トレーニング データをさらに追加することです。追加データは (特定の状況を除いて) 役立つことがよくありますが、高品質のデータを生成するには非常にコストがかかる場合があります。ハイパーパラメーターの最適化では、既存のデータを使用して最高のモデルのパフォーマンスを得ることで、時間とリソースを節約します。

名前が示すように、ハイパーパラメータの最適化は、最適化関数を満たす (つまり、研究対象のデータセットが与えられたモデルのパフォーマンスを最大化する) ための機械学習モデルのハイパーパラメータの最適な組み合わせを決定するプロセスです。 。言い換えれば、各モデルには、モデルに最適なハイパーパラメータの組み合わせが得られるまで変更できるオプションの複数の調整「ボタン」が用意されています。ハイパーパラメータの最適化中に変更できるパラメータの例としては、学習率、ニューラル ネットワークのアーキテクチャ (隠れ層の数など)、正則化などが挙げられます。

この記事では、最も一般的な 3 つのハイパーパラメータ最適化手法、つまりグリッド検索、ランダム検索、ベイジアン最適化を概念的に紹介し、それらを 1 つずつ実装していきます。

読者の参考のために記事の冒頭に大まかな比較表を示し、その後、記事の残りの部分全体で比較表の各項目をさらに調査、説明、実装していきます。

表 1: ハイパーパラメータ最適化手法の比較

1. グリッド検索アルゴリズム

ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化グリッド検索は、スーパーパラメータである可能性があります。パラメータ最適化の最も単純かつ直感的な方法。これには、定義された検索空間内でハイパーパラメータの最適な組み合わせを徹底的に検索することが含まれます。この文脈における「検索スペース」とは、ハイパーパラメータ全体と、最適化中に考慮されるそのようなハイパーパラメータの値です。例を挙げてグリッド検索をより深く理解しましょう。

パラメータが 3 つだけある機械学習モデルがあるとします。各パラメータは、表に示されている値を取ることができます:

parameter_1 = [1 , 2, 3]

パラメータ_2 = [a, b, c]

パラメータ_3 = [x, y, z]

これらのパラメータのどの組み合わせが最適化関数を最適化するかわかりませんモデルの最適化 (つまり、機械学習モデルに最適な出力を提供する)。グリッド検索では、これらのパラメーターのあらゆる組み合わせを試し、各パラメーターのモデルのパフォーマンスを測定し、最高のパフォーマンスが得られる組み合わせを選択するだけです。この例では、パラメータ 1 は 3 つの値 (つまり、1、2、または 3) を取ることができ、パラメータ 2 は 3 つの値 (つまり、a、b、c) を取ることができ、パラメータ 3 は 3 つの値を取ることができます(つまり、x、y、z)。つまり、組み合わせは全部で3*3*3=27通りあります。この例のグリッド検索では、最高のパフォーマンスの組み合わせを見つけるために、機械学習モデルのパフォーマンスを 27 ラウンド評価します。

ご覧のとおり、この方法は非常に簡単です (試行錯誤のタスクに似ています) が、いくつかの制限もあります。この方法のメリットとデメリットをまとめてみましょう。

その利点は次のとおりです:

理解と実装が簡単

並列化が簡単

離散と連続の両方に適していますスペース 主な欠点は次のとおりです:
  • 多数のハイパーパラメータを持つ大規模モデルや複雑なモデルではコストがかかります (すべての組み合わせを試して評価する必要があるため)
  • メモリがない - 学習がありません過去から 観察して学ぶ
  • 探索空間が大きすぎると、最適な組み合わせを見つけることができない可能性があります。探索空間が小さい単純なモデルの場合は、グリッド探索を使用することをお勧めします。 ; それ以外の場合は、読み続けて、より大きな検索スペースに適したソリューションを見つけることをお勧めします。
  • それでは、実際の例を使用してグリッド検索を実装してみましょう。
  • 1.1. グリッド検索アルゴリズムの実装
  • グリッド検索を実装するには、scikit-learn の Iris データセットを使用してランダム フォレスト分類モデルを作成します。このデータ セットには 3 つの異なるアイリスの花びらとがく片の長さが含まれており、この分類演習に使用されます。このペーパーでは、さまざまなハイパーパラメータ最適化戦略のパフォーマンスを比較することが目的であるため、モデル開発は二次的です。モデルの評価結果と、選択したハイパーパラメーターのセットに到達するまでの各ハイパーパラメーター最適化メソッドに必要な時間に注目することをお勧めします。実行の結果について説明し、この記事で使用した 3 つの方法の概要比較表を提供します。
  • すべてのハイパーパラメータ値を含む検索スペースは次のように定義されます:

search_space = {'n_estimators': [10, 100, 500, 1000],

' max_ Depth' : [2, 10, 25, 50, 100],

'min_samples_split': [2, 5, 10],

'min_samples_leaf': [1, 5, 10]}

上記の検索空間は、合計 4*5*3*3=180 個のハイパーパラメーターの組み合わせで構成されます。次のようにグリッド検索を使用して、目的関数を最適化する組み合わせを見つけます。

# ライブラリのインポート
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection importcross_val_score
インポート時間
# Iris データ セットの読み込み
iris =load_iris() #XX, y = iris.data, iris.target
#ハイパーパラメータ検索スペースの定義
search_space = {'n_estimators': [10, 100, 500, 1000],
'max_ Depth': [2, 10, 25, 50, 100],
'min_samples_split': [2, 5, 10 ] ,
'min_samples_leaf': [1, 5, 10]}
#ランダム フォレスト分類器の定義
clf = RandomForestClassifier(random_state=1234)
# オプティマイザー オブジェクトの生成
optimizer = GridSearchCV(clf, search_space, cv=5, sinners='accuracy')
#合計時間を計算するための開始時間を保存します
start_time = time.time()
#フィッティング時のオプティマイザーdata
optimizer.fit(X, y)
# 合計消費時間を計算するために使用できるように終了時刻を保存します。
end_time = time.time ()
# Print最適なハイパーパラメータ セットと対応するスコア
print(f"selected hyperparameters:")
print(optimizer.best_params_)
print("")
print(f"best_score: { optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
上記のコードの出力は次のとおりです:

ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化

#ここでは、グリッド検索を使用して選択されたハイパーパラメータ値を確認できます。このうち、best_score は、選択したハイパーパラメーターのセットを使用した評価結果を表し、elapsed_time は、ローカル ラップトップでこのハイパーパラメーター最適化戦略を実行するのにかかった時間を表します。次の方法に進むときは、比較のために評価結果と経過時間を念頭に置いてください。さて、ランダム検索の説明に入りましょう。

2. ランダム検索アルゴリズム

名前が示すように、ランダム検索は、定義された検索空間からハイパーパラメーターをランダムにサンプリングするプロセスです。グリッド検索とは異なり、ランダム検索では、事前定義された反復回数 (時間、予算、目標などの利用可能なリソースに応じて) でハイパーパラメーター値のランダムなサブセットのみが選択され、各ハイパーパラメーターのパフォーマンスの機械学習モデルが計算されます。次に、最適なハイパーパラメータ値を選択します。

上記のアプローチに基づいて、ランダム検索は完全なグリッド検索よりもコストが低いことが想像できますが、それでも次のような独自の長所と短所があります:

利点:

    理解と実装が簡単
  • 並列化が簡単
  • 離散空間と連続空間の両方に適しています
  • グリッドと比較して安価な検索
  • 同じ試行回数のグリッド検索よりも最適な結果に収束する可能性が高くなります。 欠点:
  • 記憶がない – 過去の観察から学習しない
  • ランダムな選択を考慮する重要なハイパーパラメータ値が見逃される可能性があります。
次の方法では、ベイジアン最適化の「欠点」を通じて、グリッドとランダム検索の「メモリレス」問題を解決します。ただし、この方法について説明する前に、ランダム検索を実装してみましょう。

2.1. ランダム検索アルゴリズムの実装

次のコード スニペットを使用して、グリッド検索の実装で説明したのと同じ問題に対してランダム検索ハイパーパラメーターの最適化を実装します。

# ライブラリのインポート

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

# RandomizedSearchCV オブジェクトの作成
optimizer = RandomizedSearchCV( clf, param_distributinotallow=search_space,
n_iter=50, cv=5, sinners='accuracy',
random_state=1234)

# 合計実行時間を計算するために開始時間を保存します
start_time = time.time()

# オプティマイザをデータに適合させる ##optimizer.fit(X, y)

# 終了時刻を保存します合計実行時間を計算します
end_time = time.time()

# 最適なハイパーパラメータ セットと対応するスコアを出力します
print(f"selected hyperparameters:")
print (optimizer .best_params_)
print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1) }" )

上記のコードの出力結果は次のとおりです。

ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化ランダム検索結果

グリッド検索の結果、これらの結果は非常に興味深いものです。 best_score は変わりませんが、elapsed_time は 352.0 秒から 75.5 秒に減少しました。なんて印象的なのでしょう!言い換えれば、ランダム検索アルゴリズムは、グリッド検索に必要な時間の約 21% で、グリッド検索と同様に実行される一連のハイパーパラメータを見つけることができました。ただし、ここでの効率ははるかに高くなります。

次に、ベイズ最適化と呼ばれる次の方法に進みましょう。これは、最適化プロセス中のすべての試行から学習します。

3. ベイジアン最適化

ベイジアン最適化は、確率モデルを使用して以前の試行から「学習」し、探索空間内のハイパーパラメータに探索を指示するハイパーパラメータ最適化手法です。機械学習モデルの目的関数。

ベイズ最適化手法は 4 つのステップに分けることができ、以下で説明します。プロセスをよりよく理解するためにこれらの手順を読むことをお勧めしますが、この方法を使用するために必要な前提知識はありません。

  1. 「事前」を定義します。これは、特定の時点で目的関数を最適化するためのハイパーパラメータの最も可能性の高い組み合わせに関する信念の確率的モデル評価です。
  2. 評価ハイパーパラメータ サンプルのモデル
  3. ステップ 2 で得た知識を使用してステップ 1 の確率モデル (「事前」と呼ぶもの) を更新し、目的関数を最適化すると考えられる最適なハイパーパラメータを理解します。可能な組み合わせ。私たちの最新の信念は「事後信念」と呼ばれます。言い換えれば、ステップ 2 で得られた知識は、探索空間をより深く理解するのに役立ち、事前から事後へと進み、事後はステップ 2 で決定された探索空間と目的関数に関する「最新の」知識になります。情報を提供する
  4. モデルのパフォーマンスが収束するか、リソースが枯渇するか、その他の事前定義されたメトリックが満たされるまで、ステップ 2 と 3 を繰り返します。

Baye についてさらに詳しく知りたい場合は、Si の詳細情報をご覧ください。最適化については、次の投稿をご覧ください:

「機械学習におけるベイジアン最適化アルゴリズム」、アドレスは:
https://medium.com/@fmnobar/concept -overview-of-bayesian-機械学習におけるパラメータ調整の最適化-a3b1b4b9339f。

さて、ベイジアン最適化がどのように機能するかを理解したところで、その利点と欠点を見てみましょう。

利点:

  • 過去の観察から学習するため、より効率的です。言い換えれば、与えられた特定の仮定に基づいて最適な値に収束するメモリレスメソッドよりも、より少ない反復回数でより適切なハイパーパラメータのセットを見つけることが期待されます。反復ごとのグリッド検索やランダム検索よりも
  • ベイズ最適化で使用される事前関数と関数 (例: 取得関数の初期確率分布の選択など) は、パフォーマンスとその学習曲線に大きな影響を与える可能性があります
  • 詳細はこのくらいにして、ベイジアン最適化を実装して結果を見てみましょう。
  • 3.1. ベイジアン最適化アルゴリズムの実装
  • 前のセクションと同様に、次のコード スニペットを使用して、グリッド検索実装の最適化で説明したのと同じ問題に対してベイジアン ハイパーパラメーターを実装します。

# ライブラリをインポートします

from skopt import BayesSearchCV

# ベイズ最適化を実行します

optimizer = BayesSearchCV(estimator=RandomForestClassifier(),

search_spaces =search_space ,

n_iter=10,
cv=5,
得点='accuracy',
random_state=1234)

# 合計を計算するための開始時間を保存します実行時間
start_time = time.time()

optimizer.fit(X, y)

# 合計実行時間を計算するために終了時間を保存します
end_time = time.time()

# 最適なハイパーパラメータ セットと対応するスコアを出力します。
print(f"selected hyperparameters:")
print(optimizer.best_params_)
print ("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
#上記のコードの出力結果は次のとおりです。




ベイズ最適化の結果

もう 1 つの興味深い結果が見つかりました。 best_score はグリッド検索とランダム検索で得られた結果と一致していますが、結果にかかる時間はわずか 23.1 秒でした。これに対し、ランダム検索では 75.5 秒、グリッド検索では 352.0 秒かかりました。つまり、ベイジアン最適化を使用すると、グリッド検索よりも約 93% 時間が短縮されます。これは生産性の大幅な向上であり、より大規模で複雑なモデルや検索空間ではさらに意味が大きくなります。

ベイジアン最適化では、(ランダム検索やグリッド検索とは異なり) 以前の反復から学習できるため、これらの結果を得るために 10 回の反復のみを使用したことに注意してください。 ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化

結果の比較

下の表は、これまで説明した 3 つの方法の結果を比較しています。 「方法論」列では、使用されるハイパーパラメータの最適化方法について説明します。これに、各方法を使用して選択されたハイパーパラメータが続きます。 「ベスト スコア」は特定の方法を使用して取得されたスコアで、「経過時間」はローカル ラップトップで最適化戦略を実行するのにかかった時間を表します。最後の列「得られた効率」では、ベースラインとしてグリッド検索を想定し、グリッド検索と比較して他の 2 つの方法のそれぞれによって得られる効率を計算します (経過時間を使用)。たとえば、ランダム検索には 75.5 秒かかり、グリッド検索には 352.0 秒かかるため、グリッド検索ベースラインに対するランダム検索の効率は、1 – 75.5/352.0 = 78.5% と計算されます。

ハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化

表 2 - メソッドのパフォーマンス比較表

上記の比較表の 2 つの主な結論:

    #効率: ベイズ最適化などの学習方法を使用すると、どのようにして最適化されたハイパーパラメーターのセットを短時間で見つけることができるかがわかります。
  1. パラメータの選択: 正解は複数存在する可能性があります。たとえば、評価指標 (つまり、best_score) は同じままですが、ベイジアン最適化で選択されたパラメーターはグリッド検索やランダム検索のパラメーターとは異なります。これは、大規模で複雑な環境ではさらに重要になります。
結論

この記事では、ハイパーパラメータの最適化とは何かについて説明し、この最適化の演習に使用される 3 つの最も一般的な方法を紹介しました。次に、これら 3 つの方法をそれぞれ詳しく紹介し、分類演習で実装します。最後に、3 つの方法を実装した結果を比較します。以前の試みから学んだベイジアン最適化などの手法により、効率が大幅に向上することがわかりました。これは、効率が決定要因となり得るディープ ニューラル ネットワークなどの大規模で複雑なモデルにおいて重要な要因となる可能性があります。

翻訳者紹介

Zhu Xianzhong 氏、51CTO コミュニティ編集者、51CTO エキスパートブロガー、講師、濰坊市の大学のコンピューター教師、そしてフリーランスプログラミング業界のベテラン。

元のタイトル: ハイパーパラメータ最適化 — グリッド検索、ランダム検索、ベイジアン最適化の概要と実装 、著者: Farzad Mahmoodinobar



以上がハイパーパラメータ最適化の比較: グリッド検索、ランダム検索、ベイジアン最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。