ハイパーパラメータとは何ですか?学習モデルには、一般的に 2 種類のパラメータがあります。1 つはデータから学習して推定できるもので、パラメータと呼ばれます。データから推定できず、人間の経験に基づいてのみ設計および指定できる別の種類のパラメータがあります。これをハイパーパラメータと呼びます。ハイパーパラメータは、学習プロセスを開始する前に値が設定されるパラメータです。対照的に、他のパラメータの値はトレーニングを通じて学習されます。 ハイパーパラメータ:複雑さや学習能力など、モデルに関する高レベルの概念を定義することは、標準的なモデルトレーニングプロセスのデータから直接学習することはできず、事前に定義する必要があります。パラメータ空間での検索は、異なる値を設定し、異なるモデルをトレーニングし、より良いテスト値を選択することで決定できます。一般的に、次の部分で構成されます。
Scikit-Learn におけるハイパーパラメータ最適化手法機械学習モデルでは、たとえば、ランダムフォレストの決定木の数、人工ニューラルネットワークモデルの隠れ層の数と各層のノードの数、正則化項の定数のサイズなど、すべてを事前に指定する必要があります。ハイパーパラメータが適切に選択されていない場合、アンダーフィッティングまたはオーバーフィッティングの問題が発生する可能性があります。 Scikit-Learn では、ハイパーパラメータは学習プロセスが開始される前に値が設定されるパラメータです。代表的な例としては、サポートベクターマシンの C、カーネル、ガンマなどが挙げられます。
使用中は、estimator.get_params() を使用して、学習器モデルのハイパーパラメータリストと現在の値を取得できます。 Sklearn は、グリッド検索とランダム検索という 2 つの一般的なハイパーパラメータ最適化手法を提供します。 クロスバリデーション - CV の紹介機械学習では、一般的に、すべてのデータを使用してモデルをトレーニングすることはできません。そうしないと、モデルを検証してモデルの予測効果を評価するためのデータセットがなくなるからです。この問題を解決するために、一般的に使用される方法は次のとおりです。 検証セットアプローチこれは最も簡単な方法であり、考えるのも簡単です。データ セット全体を 2 つの部分に分けることができます。1 つはトレーニング用、もう 1 つは検証用で、これらはトレーニング セットとテスト セットと呼ばれることがよくあります。 ただし、この単純なアプローチには 2 つの欠点があります。
このような背景から、交差検証法であるCross-Validation法が提案されました。 クロス検証LOOCV (1つを省く)LOOCV は、Leave-one-out 交差検証の略です。テスト セット アプローチと同様に、LOOCV メソッドでもデータセットをトレーニング セットとテスト セットに分割します。ただし、違いは、テスト セットとして 1 つのデータのみを使用し、残りのデータはトレーニング セットとして使用し、この手順を N 回繰り返すことです (N はデータ セット内のデータ数)。 現在、n 個のデータで構成されるデータ セットがあると仮定すると、LOOCV メソッドでは、テスト セットの唯一の要素として一度に 1 つのデータを取り出し、他の n-1 個のデータはモデルのトレーニングとパラメーターの調整のためのトレーニング セットとして使用されます。その結果、n 個のモデルをトレーニングすることになり、そのたびに MSE が取得されます。最終テスト MSE の計算は、これらの n 個の MSE を平均化することです。 テスト セット アプローチと比較して、LOOCV には多くの利点があります。まず、各データは個別にテストされているため、テスト セットとトレーニング セットの分割方法による影響を受けません。同時に、n-1 データを使用してモデルをトレーニングし、ほぼすべてのデータを使用することで、モデルのバイアスが小さくなることを保証します。しかし、LOOCV の欠点も明らかです。つまり、計算量が大きすぎて、テスト セット アプローチの n-1 倍の時間がかかります。 K 分割交差検証K 分割交差検証と LOOCV の違いは、各テスト セットに 1 つのデータだけでなく複数のデータが含まれるようになることです。具体的な数は K の選択によって決まります。たとえば、K = 5 の場合、5 分割交差検証に使用する手順は次のようになります。
LOOCV が実際には特別な K 分割交差検証 (K=N) であることは理解しにくいことではありません。最後に、K の選択はバイアスと分散の間のトレードオフです。 K が大きいほど、毎回トレーニング セットで使用されるデータが多くなり、モデルのバイアスが小さくなります。ただし、K が大きいほど、毎回選択されるトレーニング セット間の相関が大きくなります (最も極端な例として、k = N の場合、つまり LOOCV ではトレーニング データが毎回ほぼ同じである場合を考えてみましょう)。この大きな相関関係により、最終的なテスト エラーの変動が大きくなります。一般的に、K 値は 5 または 10 です。 グリッドサーチCVハイパーパラメータを選択する方法は 2 つあります。1) 経験に基づく方法、2) 異なるサイズのパラメータを選択し、モデルに取り入れて、パフォーマンスが最も優れたパラメータを選択する方法です。アプローチ 2 でハイパーパラメータを選択する場合、注意を手動で調整するコストが高すぎるため、価値がありません。 for ループまたは for ループに類似したメソッドは、階層が明確すぎる、シンプルさと柔軟性に欠ける、注意コストが高い、エラーが発生しやすいなどの制限があります。 GridSearchCV は、グリッド検索クロス検証パラメータ調整と呼ばれます。渡されたパラメータのすべての順列と組み合わせを走査し、クロス検証を通じてすべてのパラメータの組み合わせでの評価インデックススコアを返します。 GridSearchCV は非常に印象的ですが、実際にはブルート フォース検索です。この方法は小さなデータセットには役立ちますが、大きなデータセットにはそれほど役立たないことに注意してください。データ量が多い場合は、座標降下法という迅速なチューニング方法を使用できます。これは実際には貪欲なアルゴリズムです。モデルに現在最も大きな影響を与えているパラメータを最適化されるまで調整し、次に最も大きな影響を与えている次のパラメータを調整するというように、すべてのパラメータが調整されるまで繰り返します。この方法の欠点は、グローバル最適値ではなくローカル最適値に調整される可能性があることですが、時間と労力を節約できます。 GridSearchCV 使用方法
パラメータの詳細:
GridSearchCV オブジェクト
GridSearchCV メソッド
使用例:
ランダム検索 RandomizedSearchCVハイパーパラメータを検索するときに、ハイパーパラメータの数が少ない場合(3 個または 4 個以下)は、網羅的な検索方法であるグリッド検索を使用できます。ただし、ハイパーパラメータの数が多い場合は、グリッド検索を使用することになり、検索に必要な時間は指数関数的に増加します。そこで誰かが、ハイパーパラメータ空間内の数十または数百の点をランダムに検索し、その中に比較的小さな値が存在する可能性のあるランダム検索法を提案しました。この方法は上記のスパースグリッド法よりも高速であり、実験ではランダム検索法の結果がスパースグリッド法の結果よりもわずかに優れていることが示されています。 RandomizedSearchCV は GridSearchCV と非常に似ていますが、すべての可能な組み合わせを試すのではなく、各ハイパーパラメータのランダムな値の特定の数のランダムな組み合わせを選択します。この方法には 2 つの利点があります。 パラメータ空間全体と比較すると、選択できるパラメータの組み合わせの数は比較的少なくなります。ランダム検索を実行させると、ハイパーパラメータごとに異なる値を探索します。検索回数を設定することで、各ハイパーパラメータの探索に必要な計算量を簡単に制御できます。パラメータ ノードを追加しても、パフォーマンスに影響はなく、効率も低下しません。 RandomizedSearchCV の使用方法は実際には GridSearchCV と同じですが、パラメータの GridSearchCV のグリッド検索をパラメータ空間でのランダム サンプリングに置き換えます。連続変数を持つパラメータがある場合、RandomizedSearchCV はそれらを分布としてサンプリングしますが、これはグリッド検索では不可能です。その検索能力は、設定された n_iter パラメータに依存します。 RandomizedSearchCV 使用方法
GridSearchCV との主な違いは、次の 2 つのパラメータです。
自動ハイパーパラメータ最適化手法ベイズ最適化機械学習パラメータ調整のためのベイズ最適化は、J. Snoek (2012) によって提案されました。主なアイデアは、最適化する目的関数 (内部構造や数学的特性を知らなくても入力と出力を指定するだけでよい一般化関数) が与えられた場合、目的関数の事後分布は、事後分布が基本的に真の分布に適合するまで、サンプル ポイントを継続的に追加することによって更新されます (ガウス過程)。簡単に言えば、以前のパラメータの情報を考慮して、現在のパラメータをより適切に調整します。 ベイズ最適化と従来のグリッド検索やランダム検索の違いは次のとおりです。
入力 x を受け取る関数 c(x) またはモデルを構築してみましょう。次の図は c(x) の形状を示しています。もちろん、オプティマイザーは「目的関数」と呼ばれるこの関数を認識しません。 ベイズ最適化はプロキシ最適化を通じてタスクを完了します。プロキシ関数は、サンプリング ポイントをシミュレートすることによって構築されます (下の図を参照)。 代理関数に基づいて、どの点が最小値になる可能性があるかを大まかに判断できます。次に、これらのポイントの近くでさらにサンプリングが実行され、それに応じてプロキシ関数が更新されます。 各反復で、現在の代理関数を継続的に観察し、サンプリングを通じて興味深い領域についてさらに学習し、関数を更新します。代理関数は、評価コストを大幅に削減する方法で数学的に表現できることに注意することが重要です。関数の形状が非常に奇妙でない限り、一定回数の反復を繰り返すと、必ずグローバル最小値に到達します。 代理関数を詳しく見てみましょう。代理関数は通常、ガウス過程によって表されます。代理関数は、サイコロを振って、1 から 6 までの数字ではなく、指定されたデータ ポイント (sin、log など) に適合する関数を返すものと考えることができます。このプロセスは複数の関数を返しますが、それらすべてには確率が関連付けられています。代替関数をモデル化するために他の曲線フィッティング方法ではなくガウス過程が使用されるのには十分な理由があります。それは、それが本質的にベイズ的であるからです。確率分布、事前分布として表現される代理関数は、「獲得関数」として更新されます。この機能は、探索と活用のトレードオフにおいて新しいテスト ポイントを提案する役割を担います。
過剰な利用と過剰な探索を促す獲得関数では、モデルは最初に見つけた最小値(多くの場合、局所的 - 「光があるところだけに進む」)にのみ留まることになります。その逆を奨励するフェッチ関数は、最初にローカルまたはグローバルの最小値に落ち着くことはありません。微妙なバランスで良い結果を生み出します。獲得関数(a(x) と表記)では、活用と探索の両方を考慮する必要があります。一般的な獲得関数には、期待改善と最大改善確率が含まれます。これらはすべて、事前情報 (ガウス過程) を与えられた場合に特定の入力が将来的に成果を上げる確率を測定します。 これらをまとめてみましょう。ベイズ最適化は次のように実行できます。
ベイズ最適化とは、置換最適化の考え方の背後に確率論の考え方を組み込むことです。要約すれば:
ハイパーオプトHyperopt は、jamesbergstra によって開発された、ハイパーパラメータ最適化のための強力な Python ライブラリです。 Hyperopt は、パラメータの調整にベイズ最適化の形式を使用し、特定のモデルに最適なパラメータを取得できるようにします。広範囲の条件にわたって数百のパラメータを持つモデルを最適化できます。 Hyperoptには4つの重要な機能が含まれています1. 探索空間Hyperopt には、入力パラメータの範囲を指定するためのさまざまな関数があり、これらはランダムな検索空間です。最も一般的な検索オプションを選択します:
使用できるその他のオプションは次のとおりです。
2. 目的関数これは、探索空間からハイパーパラメータ値を入力として受け取り、損失を返す最小化関数です。つまり、最適化プロセス中に、選択されたハイパーパラメータ値を使用してモデルをトレーニングし、ターゲット機能を予測し、予測誤差を評価してオプティマイザーに返します。オプティマイザーはどの値をチェックするかを決定し、再度繰り返します。実際の例を使用して目的関数を作成する方法を学習します。 3. f分
4. 被験者Trials オブジェクトは、すべてのハイパーパラメータ、損失、およびその他の情報を保存するために使用されます。つまり、最適化を実行した後にそれらにアクセスできます。さらに、トライアルは重要な情報を保存して読み込み、最適化プロセスを続行するのに役立ちます。 Hyperoptの使用Hyperopt の重要な機能を理解した後、次に Hyperopt の使用方法を紹介します。
algo は検索アルゴリズムを指定します。現在、次のアルゴリズムがサポートされています。
Hyperopt に加えて、ベイズ最適化手法用の Python パッケージには次のものがあります。
遺伝的アルゴリズム遺伝的アルゴリズムは、自然選択のメカニズムを機械学習のコンテキストに適用しようとします。これはダーウィンの自然選択のプロセスに触発されたもので、進化アルゴリズムとも呼ばれます。いくつかの定義済みハイパーパラメータを使用して N 個の機械学習モデルを作成するとします。次に、各モデルの精度を計算し、モデルの半分だけ(パフォーマンスが最も優れたモデル)を保持することを決定できます。ここで、最良のモデルと同様のハイパーパラメータを持つ子孫を生成し、再び N 個のモデルの集団を取得できます。この時点で、各モデルの精度を再度計算し、定義されたエポックに対してサイクルを繰り返すことができます。この方法では、プロセスの最後には最良のモデルだけが残ります。 TPOT は、機械学習パイプラインを最適化するための遺伝的アルゴリズムに基づく Python 自動機械学習ツールです。簡単に言えば、TPOT は何千ものパイプラインをインテリジェントに探索してデータセットに最適なパイプラインを見つけ、機械学習の最も面倒な部分を実行します。 さらに重要なのは、TPOT が検索を完了すると、TPOT は Python コードも提供するということです。このコードを通じて、TPOT が最適なパフォーマンスを達成したときのパイプラインの具体的な内容を知ることができ、その後の変更に非常に便利です。 TPOT は、sklearn をベースにしたパッケージ ライブラリです。主に sklearn のモデル関連モジュール、処理モジュール、および feature_selection モジュールをカプセル化しているため、TPOT の主な機能は、パイプラインを使用してモデルのデータ前処理、機能選択、およびモデル選択を完了することに重点を置くことです。さらに、TPOT はすでに xgboost をサポートしていることもわかりました。 TPOT はハイパーパラメータの選択に従来のグリッド検索ではなく遺伝的アルゴリズムを使用しますが、デフォルトの初期値がランダムであるため、TPOT によって最終的に選択されるモデルは、少数の進化 (反復) の後で異なることがよくあります。 計算効率の問題。著者はコード内に次のように書いています: 進化 (反復) が増え、各世代に保持される個体が増えるほど、最終的なモデル スコアは高くなります。しかし、これには非常に時間がかかることもあります。かなり複雑なデータセットを使用する場合や、TPOT を短時間実行する場合、TPOT の実行ごとにパイプラインの推奨事項が異なる場合があります。 TPOT の最適化アルゴリズムは本質的に確率的であり、つまり、ランダム性 (部分的) を使用して、可能なパイプラインの空間を検索します。 2 回の TPOT 実行で異なるパイプラインが推奨された場合、これは、時間不足のために TPOT 実行が収束しなかったか、データセットに対して複数のパイプラインがほぼ同じ回数実行されたことを意味します。これは実際には固定グリッド検索手法よりも優れています。TPOT は、これまで考えたこともなかったパイプライン構成を探索することで特定の機械学習の問題を解決する方法についてのアイデアを提供し、その後の微調整をグリッド検索などのより制約のあるパラメータ調整手法に任せるアシスタントです。 TPOT (バージョン 0.9.5) を使用してモデルを開発する場合は、次の点に留意する必要があります。
サンプルコード:
TPOT の主なパラメータは次のとおりです。
この反復プロセスを使用して、最適な構成を選択します。遺伝的アルゴリズムを準備した結果は、通常、初期状態に依存します。したがって、ランダムに生成される初期集団が出力に影響し、同じ設定を再実行すると異なる結果が出力される可能性があります。 |
<<: 2021 年に備えるべきビジネス インテリジェンスのトレンド トップ 10
>>: 調査 | AIと機械自動化が社会に与える影響に関する世界の見解
7月22日のニュース:AR技術は継続的な発展により、徐々に成熟してきました。他の新しいテクノロジーと...
最近、マイクロソフトは、開発者が AI および機械学習システムのセキュリティをテストできるように設計...
デジタル時代の到来により、顔認識技術の開発は大きく進歩しました。顔認識技術は普及し、多くの分野で広く...
[[208842]]最近、カリフォルニア州クララで開催された Health 2.0 カンファレンス...
ドローンはハイテク製品として、遠隔操作が可能で、移動が地形に制限されないことから、技術愛好家や写真愛...
ディープラーニング、機械学習、人工知能 — これらの流行語は分析の未来を表しています。この記事では、...
7月3日、北京で開催されたBaidu Create 2019 Baidu AI Developer ...
ソフトウェア アーキテクトとして、私は人工知能 (AI) の発展とさまざまな業界でのその応用を目の当...
【51CTO.comオリジナル記事】 【はじめに】 2019年後半、RPAは一気に普及したように思わ...