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

ML では、ハイパーパラメータ チューニングを行うことで、学習アルゴリズム用の一連の最適なハイパーパラメータを特定できます。ハイパーパラメータはモデルの引数で、その値は学習プロセスが始まる前に設定されます。一方で、線形モデルの係数などの他のパラメータ値は学習されます。

ハイパーパラメータ チューニングを使用すると、手動でハイパーパラメータを繰り返しテストする時間を減らし、データから分析情報を得るための作業により多くの時間を振り分けられるようになります。

次のモデルタイプにハイパーパラメータ チューニング オプションを指定できます。

これらのタイプのモデルでは、CREATE MODEL ステートメントNUM_TRIALS オプションに値を指定すると、ハイパーパラメータ チューニングが有効になります。

次のモデルもハイパーパラメータ チューニングをサポートしていますが、特定の値の指定はできません。

  • AutoML Tables モデルでは、デフォルトでモデル トレーニングにハイパーパラメータの自動調整が組み込まれています。
  • ARIMA_PLUS モデルでは、AUTO_ARIMA 引数を設定すると、auto.ARIMA アルゴリズムを使用してハイパーパラメータ チューニングを行うことができます。このアルゴリズムによって、トレンド モジュールのハイパーパラメータ チューニングが実行されます。ハイパーパラメータ チューニングは、モデリング パイプライン全体ではサポートされていません。

各モデルタイプでサポートされている SQL ステートメントと関数については、各モデルのエンドツーエンドのユーザー ジャーニーをご覧ください。

ロケーション

ハイパーパラメータ チューニングをサポートする場所については、BigQuery ML の場所をご覧ください。

ハイパーパラメータを設定する

ハイパーパラメータを調整するには、モデルが一連のトライアルに使用できるハイパーパラメータの値の範囲を指定する必要があります。これを行うには、CREATE MODEL ステートメントでハイパーパラメータを設定する際に、単一の値を指定するのではなく、次のいずれかのキーワードを使用します。

  • HPARAM_RANGE: ハイパーパラメータに対して連続値の探索空間の最小値と最大値を定義する 2 要素の ARRAY(FLOAT64) 値。このオプションを使用して、ハイパーパラメータの値の範囲(LEARN_RATE = HPARAM_RANGE(0.0001, 1.0) など)を指定します。

  • HPARAM_CANDIDATES: ハイパーパラメータに対して離散値の集合を指定する ARRAY(STRUCT) 値。このオプションを使用して、ハイパーパラメータの値の集合(OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL']) など)を指定します。

ハイパーパラメータと目標

次の表に、ハイパーパラメータ チューニングをサポートする、各モデルタイプでサポートされるハイパーパラメータと目標を示します。

モデルタイプ ハイパーパラメータの目標 ハイパーパラメータ 有効な値の範囲 デフォルトの範囲 スケールのタイプ
LINEAR_REG MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE(デフォルト)

EXPLAINED_VARIANCE
L1_REG

L2_REG
(0, ∞]

(0, ∞]
(0, 10]

(0, 10]
LOG

LOG
LOGISTIC_REG PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC(デフォルト)
L1_REG

L2_REG
(0, ∞]

(0, ∞]
(0, 10]

(0, 10]
LOG

LOG
KMEANS DAVIES_BOULDIN_INDEX NUM_CLUSTERS [2, 100] [2, 10] LINEAR
MATRIX_
FACTORIZATION
(明示的)
MEAN_SQUARED_ERROR NUM_FACTORS

L2_REG
[2, 200]

(0, ∞)
[2, 20]

(0, 10]
LINEAR

LOG
MATRIX_
FACTORIZATION
(暗黙的)
MEAN_AVERAGE_PRECISION(デフォルト)

MEAN_SQUARED_ERROR

NORMALIZED_DISCOUNTED_CUMULATIVE_GAIN

AVERAGE_RANK
NUM_FACTORS

L2_REG

WALS_ALPHA
[2, 200]

(0, ∞)

[0, ∞)
[2, 20]

(0, 10]

[0, 100]
LINEAR

LOG

LINEAR
AUTOENCODER MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR(デフォルト)

MEAN_SQUARED_LOG_ERROR
LEARN_RATE

BATCH_SIZE

L1_REG

L2_REG

L1_REG_ACTIVATION

DROPOUT

HIDDEN_UNITS


OPTIMIZER



ACTIVATION_FN
[0, 1]

(0, ∞)

(0, ∞)

(0, ∞)

(0, ∞)


[0, 1)

[1, ∞) の配列

{ADAMADAGRADFTRLRMSPROPSGD}

{RELURELU6CRELUELUSELUSIGMOIDTANH}
[0, 1]

[16, 1024]

(0, 10]

(0, 10]

(0, 10]


[0, 0.8]

なし

{ADAMADAGRADFTRLRMSPROPSGD}

なし
LOG

LOG

LOG

LOG

LOG


LINEAR

なし

なし



なし
DNN_CLASSIFIER PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC(デフォルト)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

LEARN_RATE

OPTIMIZER



L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

[1, ∞) の配列

[0, 1]

{ADAMADAGRADFTRLRMSPROPSGD}

(0, ∞)

(0, ∞)

{RELURELU6CRELUELUSELUSIGMOIDTANH}
[16, 1024]

[0, 0.8]

なし

[0, 1]

{ADAMADAGRADFTRLRMSPROPSGD}

(0, 10]

(0, 10]

なし
LOG

LINEAR

なし

LINEAR

なし



LOG

LOG

なし
DNN_REGRESSOR MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE(デフォルト)

EXPLAINED_VARIANCE
DNN_LINEAR_
COMBINED_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC(デフォルト)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

Array of [1, ∞)

(0, ∞)

(0, ∞)

{RELU, RELU6, CRELU, ELU, SELU, SIGMOID, TANH}
[16, 1024]

[0, 0.8]

なし

(0, 10]

(0, 10]

なし
LOG

LINEAR

なし

LOG

LOG

なし
DNN_LINEAR_
COMBINED_
REGRESSOR
MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE(デフォルト)

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC(デフォルト)
LEARN_RATE

L1_REG

L2_REG

DROPOUT

MAX_TREE_DEPTHMAX_TREE_DEPTH

SUBSAMPLE

MIN_SPLIT_LOSS

NUM_PARALLEL_TREE

MIN_TREE_CHILD_WEIGHT

COLSAMPLE_BYTREE

COLSAMPLE_BYLEVEL

COLSAMPLE_BYNODE

BOOSTER_TYPE

DART_NORMALIZE_TYPE

TREE_METHOD
[0, ∞)

(0, ∞)

(0, ∞)

[0, 1]

[1, 20]



(0, 1]

[0, ∞)

[1, ∞)


[0, ∞)


[0, 1]


[0, 1]


[0, 1]


{GBTREEDART}

{TREEFOREST}

{AUTOEXACTAPPROXHIST}
[0, 1]

(0, 10]

(0, 10]

なし

[1, 10]



(0, 1]

なし

なし


なし


なし


なし


なし


なし

なし

なし
LINEAR

LOG

LOG

LINEAR

LINEAR



LINEAR

LINEAR

LINEAR


LINEAR


LINEAR


LINEAR


LINEAR


なし

なし

なし
BOOSTED_TREE_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE(デフォルト)

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC(デフォルト)
L1_REG

L2_REG

MAX_TREE_DEPTH

SUBSAMPLE

MIN_SPLIT_LOSS

NUM_PARALLEL_TREE

MIN_TREE_CHILD_WEIGHT

COLSAMPLE_BYTREE

COLSAMPLE_BYLEVEL

COLSAMPLE_BYNODE

TREE_METHOD
(0, ∞)

(0, ∞)

[1, 20]

(0, 1)

[0, ∞)

[2, ∞)


[0, ∞)


[0, 1]


[0, 1]


[0, 1]

{AUTOEXACTAPPROXHIST}
(0, 10]

(0, 10]

[1, 20]

(0, 1)

なし

[2, 200]


なし


なし


なし


なし


なし
LOG

LOG

LINEAR

LINEAR

LINEAR

LINEAR


LINEAR


LINEAR


LINEAR


LINEAR


なし
RANDOM_FOREST_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE(デフォルト)

EXPLAINED_VARIANCE

ほとんどの LOG スケールのハイパーパラメータは、0 というオープンな下限を使用します。さらに、HPARAM_RANGE キーワードを使用してハイパーパラメータ範囲を設定することで、0 を下限として設定できます。たとえば、ブーストツリー分類モデルでは、L1_REG ハイパーパラメータの範囲を L1_REG = HPARAM_RANGE(0, 5) と設定できます。値 01e-14 に変換されます。

条件付きハイパーパラメータがサポートされています。たとえば、ブーストツリー回帰モデルでは、BOOSTER_TYPE ハイパーパラメータの値が DART である場合にのみ DART_NORMALIZE_TYPE ハイパーパラメータを調整できます。この場合、次の例に示すように、両方の探索空間を指定し、条件は自動的に処理されます。

BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])

探索の開始点

HPARAM_RANGE または HPARAM_CANDIDATES を使用してハイパーパラメータの探索空間を指定しない場合、探索はそのモデルタイプの CREATE MODEL トピックに記述されているそのハイパーパラメータのデフォルト値から開始されます。たとえば、ブーストツリー モデルのハイパーパラメータ チューニングを実行していて、L1_REG ハイパーパラメータの値を指定していない場合、探索は 0(デフォルト値)から開始します。

HPARAM_RANGE または HPARAM_CANDIDATES を使用してハイパーパラメータの探索空間を指定する場合、探索の開始点は、そのモデルタイプの CREATE MODEL トピックで記述されているように、指定した探索空間にそのハイパーパラメータのデフォルト値が含まれているかどうかによって異なります。

  • 指定した範囲にデフォルト値が含まれている場合は、そこから探索が開始されます。たとえば、暗黙的行列分解モデルにハイパーパラメータ チューニングを実行していて、WALS_ALPHA ハイパーパラメータ[20, 30, 40, 50] という値を指定した場合、探索は 40(デフォルト値)から始まります。
  • 指定した範囲にデフォルト値が含まれていない場合、指定された範囲の中でデフォルト値に最も近いポイントから探索が開始されます。たとえば、WALS_ALPHA ハイパーパラメータに [10, 20, 30] という値を指定すると、探索はデフォルト値の 40 に最も近い値である 30 から開始されます。

データ分割

NUM_TRIALS オプションの値を指定すると、このサービスではハイパーパラメータ チューニングが行われていると判断され、入力データに対して自動的に 3 方向分割が実行されて、トレーニング セット、評価セット、テストセットに分割されます。デフォルトでは、入力データはランダム化され、80% がトレーニングに、10% が評価に、10% がテストに分割されます。

トレーニング セットと評価セットは、ハイパーパラメータ チューニングを使用しないモデルと同様に、各トライアル トレーニングで使用されます。トライアル用のハイパーパラメータの提案は、そのモデルタイプのモデル評価指標に基づいて計算されます。トライアルのトレーニング各回の終わりに、テストセットを使用してトライアルがテストされ、その指標がモデルに記録されます。これにより、モデルでまだ分析されていないデータを使用することで、最終的なレポート評価指標の客観性を保証できます。評価データは、ハイパーパラメータ提案の中間指標を計算するために使用され、テストデータは、最終的な客観的モデル指標を計算するために使用されます。

トレーニング セットのみを使用する場合は、CREATE MODEL ステートメントの DATA_SPLIT_METHOD オプションNO_SPLIT を指定します。

トレーニング セットと評価セットのみを使用する場合は、CREATE MODEL ステートメントの DATA_SPLIT_TEST_FRACTION オプション0 を指定します。テストセットが空の場合は、評価セットが最終的な評価指標レポート用のテストセットとして使用されます。

通常のトレーニング ジョブから生成されたモデルの指標と、ハイパーパラメータ チューニング トレーニング ジョブから生成されたモデルの指標は、データ分割の割合が等しい場合にのみ比較可能です。たとえば、次のモデルは比較可能です。

  • 非ハイパーパラメータ チューニング: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
  • ハイパーパラメータ チューニング: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0

パフォーマンス

ハイパーパラメータ チューニングを使用する場合のモデルのパフォーマンスは一般的に、デフォルトの探索空間を使用し、ハイパーパラメータ チューニングを使用しない場合のモデルのパフォーマンスよりも低くなることはありません。デフォルトの探索空間を使用し、ハイパーパラメータ チューニングを使用しないモデルでは、最初のトライアルで常にデフォルトのハイパーパラメータが使用されます。

ハイパーパラメータ チューニングによるモデルのパフォーマンスの向上を確認するには、ハイパーパラメータ チューニング モデルの最適なトライアルを非ハイパーパラメータ チューニング モデルの最初のトライアルと比較します。

転移学習

CREATE MODEL ステートメントで HPARAM_TUNING_ALGORITHM オプションVIZIER_DEFAULT に設定すると、転移学習がデフォルトで有効になります。モデルのハイパーパラメータ チューニングでは、事前に調整したモデルが以下の要件を満たしている場合に、そのモデルから学習することでメリットが得られます。

  • モデルタイプが事前に調整されたモデルと同じである。
  • 事前に調整されたモデルと同じプロジェクトに存在する。
  • 同じハイパーパラメータ探索空間、または事前に調整されたモデルのハイパーパラメータ探索空間のサブセットを使用する。サブセットは同じハイパーパラメータ名と型を使用しますが、範囲が同じである必要はありません。たとえば、(a:[0, 10])(a:[-1, 1], b:[0, 1]) のサブセットとみなされます。

転移学習では、入力データが同じである必要はありません。

転移学習を使用すると、最初のトライアルのバッチでシステムがランダムな探索を行うコールド スタートの問題を解決できます。転移学習では、ハイパーパラメータとその目標に関する初期知識をシステムに付与します。モデルの品質を継続的に改善するには、必ず同じハイパーパラメータまたはハイパーパラメータのサブセットを使用して、新しいハイパーパラメータ チューニング モデルをトレーニングします。

転移学習は、サブモデルの収束を助けるのではなく、ハイパーパラメータ チューニングをより速く収束させます。

エラー処理

ハイパーパラメータ チューニングは、次の方法でエラーを処理します。

  • キャンセル: 実行中にトレーニング ジョブがキャンセルされても、成功したすべてのトライアルは引き続き使用できます。

  • 無効な入力: ユーザー入力が無効な場合、サービスはユーザーエラーを返します。

  • 無効なハイパーパラメータ: ハイパーパラメータがトライアルに対して無効な場合、トライアルはスキップされ、ML.TRIAL_INFO 関数の出力で INFEASIBLE と表示されます。

  • トライアルの内部エラー: NUM_TRIALS 値の 10% 以上が INTERNAL_ERROR で失敗した場合、トレーニング ジョブは停止し、ユーザーエラーを返します。

  • NUM_TRIALS 値の 10% 未満が INTERNAL_ERROR で失敗した場合、トレーニングは継続され、失敗したトライアルは ML.TRIAL_INFO 関数の出力で FAILED と表示されます。

モデル提供関数

ハイパーパラメータ チューニングからの出力モデルを、既存のさまざまなモデル サービング関数で使用できます。これらの関数を使用するには、次のルールに従います。

  • 関数が入力データを受け取ると、1 つのトライアルの結果のみが返されます。デフォルトではこれは最適なトライアルですが、特定の関数の引数として TRIAL_ID を指定することで、特定のトライアルを選択することもできます。TRIAL_ID は、ML.TRIAL_INFO 関数の出力から取得できます。次の関数がサポートされています。

  • 関数が入力データを受け取らない場合、すべてのトライアル結果が返され、最初の出力列は TRIAL_ID です。次の関数がサポートされています。

すべてのトライアルが同じ入力データを共有するため、ML.FEATURE_INFO からの出力は変わりません。

ML.EVALUATEML.TRIAL_INFO の評価指標は、入力データの分割方法によって異なる場合があります。デフォルトでは、ML.EVALUATE はテストデータに対して実行され、ML.TRIAL_INFO は評価データに対して実行されます。詳細については、データ分割をご覧ください。

サポートされていない関数

ML.TRAINING_INFO 関数は、反復処理ごとに情報を返します。反復処理の結果はハイパーパラメータ チューニング モデルに保存されません。代わりにトライアルの結果が保存されます。ML.TRIAL_INFO 関数を使用して、トライアルの結果に関する情報を取得できます。

モデルのエクスポート

ハイパーパラメータ チューニングで作成されたモデルは、EXPORT MODEL ステートメントを使用して Cloud Storage の場所にエクスポートできます。デフォルトの最適なトライアルまたは任意の指定したトライアルをエクスポートできます。

料金

ハイパーパラメータ チューニング トレーニングの費用は、実行されたすべてのトライアルの費用の合計です。各トライアルの価格は、既存の BigQuery ML 価格モデルと同じです。

よくある質問

モデルの調整に必要なトライアルの回数

1 つのハイパーパラメータに対して少なくとも 10 回のトライアルを使用することをおすすめします。このため、トライアルの合計数は 10 * num_hyperparameters 以上にする必要があります。デフォルトの探索空間を使用している場合は、ハイパーパラメータと目標テーブルのハイパーパラメータ列を参照して、特定のモデルタイプに対してデフォルトで調整されたハイパーパラメータの数を確認してください。

ハイパーパラメータ チューニングを使用してもパフォーマンスが向上しない場合はどうすればよいですか?

公正な比較を行うために、必ずこのドキュメントのガイダンスに従ってください。それでもパフォーマンスの改善が見られない場合は、デフォルトのハイパーパラメータがすでにうまく機能している可能性があります。ハイパーパラメータ チューニングを再度行う前に、特徴量エンジニアリングに集中するか、他のモデルタイプを試すことをおすすめします。

モデルの調整を続ける場合はどうすればよいですか?

同じ探索空間を使用して新しいハイパーパラメータ チューニング モデルをトレーニングします。組み込みの転移学習を使用すると、事前に調整されたモデルに基づいて調整を続けることができます。

すべてのデータと最適なハイパーパラメータでモデルを再トレーニングする必要がありますか?

これは、次の要因によって異なります。

  • K 平均法モデルはすべてのデータをトレーニング データとしてすでに使用しているため、モデルを再トレーニングする必要はありません。

  • 行列分解モデルの場合、選択したハイパーパラメータとすべての入力データでモデルを再トレーニングして、ユーザーとアイテムの範囲を広げることができます。

  • 他のすべてのモデルタイプでは、通常、再トレーニングは不要です。このサービスはで、デフォルトのランダムデータ分割中に、トレーニング用の入力データの 80% をすでに保持しています。データセットが小さい場合は、より多くのトレーニング データと選択したハイパーパラメータでモデルを再トレーニングできますが、早期停止のために評価データがほとんど残らないと、過剰適合が悪化する可能性があります。

次のステップ

ハイパーパラメータ チューニングの実行を試すには、BigQuery ML ハイパーパラメータ チューニングを使用してモデルのパフォーマンスを改善するをご覧ください。