ハイパーパラメータ調整では、モデルのトレーニングで行うさまざまなハイパーパラメータ構成のテストに、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 |
minValue と maxValue |
浮動小数点値 |
IntegerValueSpec |
INTEGER |
minValue |