ハイパーパラメータ チューニングの概要

ハイパーパラメータ チューニングは、モデルをトレーニングする際に行うさまざまなハイパーパラメータ構成のテストに、Google Cloud の処理インフラストラクチャを活用します。これによりハイパーパラメータの最適値が得られ、モデルの予測精度を最大限に引き出せるようになります。

ハイパーパラメータとは

ハイパーパラメータには、トレーニング プロセス自体を管理するデータが含まれます。

トレーニング アプリケーションは、モデルをトレーニングする際に次の 3 つのデータカテゴリを扱います。

  • 入力データ(トレーニング データとも呼ばれる)は、機械学習の問題にとって重要な特徴を含む個別レコード(インスタンス)の集合です。このデータは、類似したデータの新しいインスタンスについて正確に予測できるモデルを構築するために、トレーニング中に使用されます。ただし、入力データの値が直接モデルの一部になることはありません。

  • モデルのパラメータは、選択された機械学習手法をデータに適応させるために使用される変数です。たとえば、ディープ ニューラル ネットワーク(DNN)は多数の処理ノード(ニューロン)から構成され、各ノードにオペレーションが定義されています。データがネットワークの中を移動していくと、各ノードのオペレーションがデータに対して実行されます。DNN をトレーニングするときは、各ノードに重みを定義することで、そのノードが最終的な予測にどの程度の影響を持つかをモデルに知らせます。この重みは、モデルのパラメータの一例です。多くの点で、モデルのパラメータこそがモデルであるといえます。あるモデルと、類似のデータに作用する同種の別のモデルとを区別するものはパラメータであるからです。

  • ハイパーパラメータは、トレーニング プロセス自体を管理する変数です。たとえば、DNN を設計する際に、入力レイヤと出力レイヤの間で使用するノードの隠しレイヤの数と、各隠しレイヤで使用するノードの数を決定します。これらの変数は、トレーニング データとは直接関係しません。これらは構成変数です。パラメータはトレーニング ジョブ中に変更されますが、ハイパーパラメータは一般的に、ジョブの実行中に変化することはありません。

モデル パラメータは、トレーニング プロセスによって最適化(「調整」と呼ぶこともできる)されます。データに対してモデルのオペレーションを実行して、得られた予測を各データ インスタンスの実際の値と比較します。精度を評価し、最適な値が見つかるまで調整します。ハイパーパラメータは、トレーニング ジョブ全体を実行し、全体的な精度を調べて調整します。どちらの場合も、モデルの構成に変更を加えながら、問題を処理するうえで最適な組み合わせを見つけます。

Vertex AI のハイパーパラメータ調整のような自動化されたテクノロジーがなければ、適切な値に到達するまで多くのトレーニングを実行する過程でハイパーパラメータを手作業で調整しなければなりません。ハイパーパラメータ調整により、ハイパーパラメータの最適な設定を決定するプロセスが簡単になり、面倒でなくなります。

ハイパーパラメータ調整の仕組み

ハイパーパラメータ調整では、選択したハイパーパラメータの値を使用して、指定された制限内でトレーニング アプリケーションのトライアルを複数回実行します。Vertex AI は、各トライアルの結果をトラックして後続のトライアルのための調整を行います。ジョブが完了すると、全トライアルの概要と、指定した基準に基づいて最も効果的とされる値の構成が提供されます。

ハイパーパラメータ調整を行うには、Vertex AI とトレーニング アプリケーションとの間に明示的な通信が必要です。トレーニング アプリケーションは、モデルに必要なすべての情報を定義します。調整するハイパーパラメータ(変数)と、各トライアルの評価に使用される変数を定義します。

詳しくは、ハイパーパラメータ調整のベイズ最適化をご覧ください。

ベイズ最適化に加え、Vertex AI ではハイパーパラメータ調整ジョブ全体の最適化を行います。類似モデルにハイパーパラメータ調整を行う場合、目的関数のみの変更や、新しい入力列の追加を行うことで、Vertex AI の処理性能を継続的に改善し、ハイパーパラメータ調整をより効率的に行うことができます。

ハイパーパラメータ調整による最適化のターゲット

ハイパーパラメータ調整は、ハイパーパラメータ指標と呼ばれるターゲット変数を最適化します。モデルの精度は、評価パスから計算される一般的な指標です。指標は数値でなければなりません。

ハイパーパラメータ調整ジョブを構成するときに、各指標の名前と目標を定義します。目標により、モデルを調整して指標の値を最大化または最小化するかどうかを指定します。

Vertex AI が指標を取得する方法

cloudml-hypertune Python パッケージを使用して、Vertex AI に指標を渡します。このライブラリは、指標を Vertex AI に報告するためのヘルパー関数を提供します。

詳しくは、ハイパーパラメータ指標の報告方法をご覧ください。

ハイパーパラメータ値のフロー

ハイパーパラメータ調整を使用しない状況では、トレーニング アプリケーションで任意の方法を使用してハイパーパラメータを設定できます。たとえば、メイン アプリケーション モジュールにコマンドライン引数を渡すことでハイパーパラメータを構成する方法や、構成ファイルでアプリケーションにハイパーパラメータを渡す方法があります。

ハイパーパラメータ調整を使用する場合は、次の手順を使用して、調整に使用するハイパーパラメータの値を設定する必要があります。

  • メイン トレーニング モジュールで、調整する各ハイパーパラメータに対応するコマンドライン引数を定義します。

  • これらの引数に渡された値を使用して、アプリケーションのコード内の対応するハイパーパラメータを設定します。

ハイパーパラメータ調整ジョブを構成するときに、調整する各ハイパーパラメータ、そのデータタイプ、試行する値の範囲を定義します。各ハイパーパラメータの識別には、メイン モジュールで定義した対応する引数と同じ名前を使用します。トレーニング サービスは、アプリケーションの実行時にこれらの名前を使用してコマンドライン引数を含めます。

詳しくは、コマンドライン引数の解析に関する要件をご覧ください。

調整するハイパーパラメータを選択する

調整するハイパーパラメータを選択する方法については、すべてのケースに当てはまるアドバイスというのはほとんどありません。使用している機械学習技術に経験があるデベロッパーならば、ハイパーパラメータの動作について把握している情報を選択に役立てることができます。機械学習コミュニティでアドバイスが見つかる可能性もあります。

どのように選択するにしても、その選択が内包する意味を理解しておくことが重要です。調整対象にどのハイパーパラメータを選択しても、調整ジョブが成功するまでに必要なトライアル数が増加する可能性があります。Vertex AI でハイパーパラメータ調整ジョブを実行する場合、課金額は、ハイパーパラメータ調整ジョブで開始したトライアルの継続期間に基づいて計算されます。調整するハイパーパラメータを慎重に選択することで、ハイパーパラメータ調整ジョブの時間と費用を抑えることができます。

ハイパーパラメータのデータ型

ParameterSpec オブジェクトで、ハイパーパラメータ データ型をパラメータ値の仕様のインスタンスとして指定します。次の表に、サポートされているパラメータ値の仕様を示します。

データ型 値の範囲 値データ
DoubleValueSpec DOUBLE minValuemaxValue 浮動小数点値
IntegerValueSpec INTEGER minValuemaxValue 整数値
CategoricalValueSpec CATEGORICAL categoricalValues カテゴリ文字列のリスト
DiscreteValueSpec DISCRETE discreteValues 昇順の値のリスト

ハイパーパラメータをスケーリングする

ParameterSpec オブジェクトでは、このハイパーパラメータでスケーリングを行うように指定できます。スケーリングは、DOUBLE データ型と INTEGER データ型に推奨されます。使用可能なスケーリング タイプは次のとおりです。

  • SCALE_TYPE_UNSPECIFIED: このハイパーパラメータにスケーリングは適用されません。
  • UNIT_LINEAR_SCALE: 実行可能領域を 0~1 で直線的にスケーリングします。
  • UNIT_LOG_SCALE: 実行可能領域を 0~1 で対数的にスケーリングします。実行可能領域全体は真に正である必要があります。
  • UNIT_REVERSE_LOG_SCALE: 実行可能領域を 0~1 で逆対数的にスケーリングします。結果は、実行可能領域の上部に近い値の方が、下部に近い点より多く分布します。実行可能領域全体は真に正である必要があります。

条件付きハイパーパラメータ

ConditionalParameterSpec オブジェクトを使用すると、親ハイパーパラメータの値が指定された条件と一致したときに、トライアルにハイパーパラメータを追加できます。

たとえば、線形回帰またはディープ ニューラル ネットワーク(DNN)を使用して最適なモデルを見つけるハイパーパラメータ調整ジョブを定義できます。調整ジョブでトレーニング メソッドを指定するには、LINEAR_REGRESSIONDNN を指定して training_method という名前のカテゴリ ハイパーパラメータを定義します。training_methodLINEAR_REGRESSION の場合、調整ジョブでは学習率のハイパーパラメータを指定する必要があります。training_methodDNN の場合、調整ジョブでは学習率と隠れレイヤの数を指定する必要があります。

隠しレイヤの数は、トライアルの training_methodDNN の場合にのみ適用されるため、training_methodDNN のときに num_hidden_layers という名前のハイパーパラメータを追加する条件パラメータを定義します。

学習率は両方の training_method オプションで使用されるため、この条件付きハイパーパラメータを共有するかどうかを決める必要があります。ハイパーパラメータが共有されている場合、調整ジョブは LINEAR_REGRESSION トライアルと DNN トライアルから学習した内容を使用して、学習率を調整します。この場合、LINEAR_REGRESSION を使用してモデルをトレーニングする場合の学習率は、DNN を使用したモデルのトレーニングの学習率に影響しないため、training_method ごとに学習率を分けておくと便利です。したがって、次のような条件付きハイパーパラメータを定義します。

  • training_methodLINEAR_REGRESSION のときに追加される learning_rate という名前のハイパーパラメータ。
  • training_methodDNN のときに追加される learning_rate という名前のハイパーパラメータ。

条件付きハイパーパラメータを使用すると、調整ジョブのハイパーパラメータをグラフとして定義できます。これにより、さまざまなトレーニング手法を使用してトレーニング プロセスを調整し、それぞれにハイパーパラメータの依存関係を持たせることができます。

検索アルゴリズム

StudySpec オブジェクトで検索アルゴリズムを指定できます。アルゴリズムを指定しない場合、デフォルトの Vertex AI アルゴリズムが使用されます。デフォルトのアルゴリズムでは、ベイズ最適化により、パラメータ空間の検索をより効率的に行い、最適なソリューションを導出します。

使用可能な値は次のとおりです。

  • ALGORITHM_UNSPECIFIED: アルゴリズムを指定していない場合と同じです。Vertex AI は、ガウス過程バンディット、線形結合検索、またはそのバリアントの中から最適な検索アルゴリズムを選択します。

  • GRID_SEARCH: 実行可能領域内の単純なグリッド検索。このオプションは、実行可能領域内のポイント数を超えるトライアル回数を指定する場合に便利です。そのような場合、グリッド検索を指定しないと、Vertex AI のデフォルト アルゴリズムによって重複した候補が生成されることがあります。グリッド検索を使用するには、すべてのパラメータのタイプが INTEGERCATEGORICAL、または DISCRETE でなければなりません。

  • RANDOM_SEARCH: 実行可能領域内の単純なランダム検索。

次のステップ