ハイパーパラメータ調整の概要

このページでは、ハイパーパラメータ調整に関連する概念について説明します。ハイパーパラメータ調整は、Cloud Machine Learning Engine によって提供される自動化モデル拡張機能です。ハイパーパラメータ調整は、モデルをトレーニングする際に行うさまざまなハイパーパラメータ構成のテストに、Google Cloud Platform の処理インフラストラクチャを活用します。これによりハイパーパラメータの最適値が得られ、モデルの予測精度を最大限に引き出せるようになります。

ハイパーパラメータとは

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

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

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

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

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

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

Cloud ML Engine のハイパーパラメータ調整のような自動化されたテクノロジーがない場合は、ハイパーパラメータを手作業で調整しなければなりません。最適な値に到達するまで、トレーニングを何度も実行する必要があります。ハイパーパラメータ調整により、ハイパーパラメータの最適な設定を決定するプロセスが簡単になり、面倒でなくなります。

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

ハイパーパラメータ調整は、複数のトライアルを 1 つのトレーニング ジョブで実行します。1 回のトライアルでトレーニング アプリケーションが 1 回実行されますが、このときに、選択したハイパーパラメータの値は指定の限度内で設定されます。Cloud ML Engine トレーニング サービスは、各トライアルの結果を追跡して後続のトライアルのための調整を行います。ジョブが完了すると、全トライアルの要約と、指定した基準に基づく最も効果的な値の構成が返されます。

ハイパーパラメータ調整を行うには、Cloud ML Engine トレーニング サービスとトレーニング アプリケーションとの間に明示的な通信が必要です。トレーニング アプリケーションは、モデルに必要なすべての情報を定義します。調整するハイパーパラメータ(変数)と各ハイパーパラメータのターゲット値を定義する必要があります。

Cloud ML Engine でハイパーパラメータ調整にベイズ最適化を使用する方法については、ブログ記事のベイズ最適化を使用した Cloud Machine Learning Engine のハイパーパラメータ調整をご覧ください。

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

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

ハイパーパラメータ調整は、デベロッパーが指定する単一のターゲット変数(ハイパーパラメータ指標とも呼ばれます)を最適化します。評価パスから計算されるモデルの精度は、一般的な指標です。指標は数値である必要があり、モデルを調整して指標を最大化するのか最小化するのかを指定できます。

ハイパーパラメータ調整ありのジョブを開始するときに、ハイパーパラメータ指標の名前を設定します。これは、トレーニング アプリケーションに追加するスカラー サマリーに割り当てる名前です。

指標のデフォルト名は training/hptuning/metric です。カスタム名を割り当てることをおすすめします。カスタム名を使用する場合の唯一の機能的な違いは、選択した名前と一致させるために、ジョブ リクエストで使用する HyperparameterSpec オブジェクトに hyperparameterMetricTag 値を設定する必要があることです。

Cloud ML Engine が指標を取得する方法

このドキュメントでは、Cloud ML Engine トレーニング サービスにハイパーパラメータ指標を渡す手順は説明していません。このサービスは、トレーニング アプリケーションによって生成された TensorFlow サマリー イベントをモニタリングして指標を受け取るからです。

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

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

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

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

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

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

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

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

どのように選択するにしても、その選択が内包する意味を理解しておくことが重要です。調整対象にどのハイパーパラメータを選択しても、調整ジョブが成功するまでに必要なトライアル数が増加する可能性があります。Cloud ML Engine でトレーニングする場合は、ジョブの継続時間に対して課金されるため、調整するハイパーパラメータを慎重に選択することで、モデルのトレーニングの時間と費用を抑えることができます。

ハイパーパラメータの型

サポートされているハイパーパラメータの型は、ジョブデータ リファレンス ドキュメントに記載されています。次の表に示すように、ParameterSpec オブジェクトで、各ハイパーパラメータの型と関連する値の範囲を指定します。

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

ハイパーパラメータのスケーリング

ハイパーパラメータに対して実行するスケーリングのタイプを指定できます。スケーリングが推奨されるのは、型が DOUBLE や INTEGER の場合です。使用可能なスケーリングのタイプは次のとおりです。

  • UNIT_LINEAR_SCALE
  • UNIT_LOG_SCALE
  • UNIT_REVERSE_LOG_SCALE

検索アルゴリズム

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

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

  • ALGORITHM_UNSPECIFIED: 検索アルゴリズムを指定しない場合と同じ動作になります。Cloud ML Engine はデフォルトのアルゴリズムを使用します。このアルゴリズムは、ベイジアン最適化を適用して有効なハイパーパラメータ値の領域を検索するため、一連のハイパーパラメータに対して最も効果的な手法となります。

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

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

TensorFlow 用 Cloud ML Engine