ディープ ニューラル ネットワーク(DNN)モデルの CREATE MODEL ステートメント

DNN モデルの CREATE MODEL ステートメント

BigQuery でディープ ニューラル ネットワーク モデルを作成するには、DNN_CLASSIFIER または DNN_REGRESSOR モデルタイプを指定して BigQuery ML CREATE MODELステートメントを使用します。これらのモデルは、TensorFlow Estimator で構築されています。

CREATE MODEL の構文

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
[OPTIONS(MODEL_TYPE = { 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' },
         ACTIVATION_FN = { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' },
         AUTO_CLASS_WEIGHTS = { TRUE | FALSE },
         BATCH_SIZE = int64_value,
         CLASS_WEIGHTS = struct_array,
         DROPOUT = float64_value,
         EARLY_STOP = { TRUE | FALSE },
         HIDDEN_UNITS = int_array,
         LEARN_RATE = float64_value,
         INPUT_LABEL_COLS = string_array,
         MAX_ITERATIONS = int64_value,
         MIN_REL_PROGRESS = float64_value,
         OPTIMIZER = { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' },
         WARM_START = { TRUE | FALSE },
         DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' },
         DATA_SPLIT_EVAL_FRACTION = float64_value,
         DATA_SPLIT_COL = string_value
)];

CREATE MODEL

指定したデータセットに新しい BigQuery ML モデルを作成します。モデル名が存在する場合、CREATE MODEL はエラーを返します。

CREATE MODEL IF NOT EXISTS

指定されたデータセットにモデルが存在しない場合にのみ、新しい BigQuery ML モデルを作成します。

CREATE OR REPLACE MODEL

新しい BigQuery ML モデルを作成し、指定されたデータセット内で同じ名前の既存のモデルをすべて置き換えます。

モデル オプション

BigQuery ML は現在、次のオプションをサポートしています。model_namemodel_type は必須です。その他は任意です。

model_name

model_name は、作成または置き換える BigQuery ML モデルの名前です。モデル名は、データセットごとに一意である必要があります。他のモデルやテーブルに同じ名前を付けることはできません。モデル名は、BigQuery テーブルと同じ命名規則に従う必要があります。モデル名に使用できるものは次のとおりです。

  • 1,024 文字まで
  • 大文字、数字、アンダースコアのいずれかの文字

model_name では、大文字と小文字は区別されません。

デフォルトのプロジェクトを構成していない場合は、バッククォートを含め、次の形式でプロジェクト ID をモデル名の前に追加します。

`[PROJECT_ID].[DATASET].[MODEL]`

次に例を示します。

`myproject.mydataset.mymodel`

MODEL_TYPE

構文

MODEL_TYPE = { 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }

説明

モデルタイプを指定します。このオプションは必須です。

ACTIVATION_FN

構文

ACTIVATION_FN =  { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' }

説明

DNN モデルタイプの場合、ニューラル ネットワークの活性化関数を指定します。

引数

次のオプションが用意されています。

デフォルト値は 'RELU' です。

AUTO_CLASS_WEIGHTS

構文

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

説明

各クラスの頻度に反比例した重みを使用して、クラスラベルのバランスをとるかどうか。

DNN_CLASSIFIER モデルでのみ使用します。

デフォルトでは、DNN 分類モデルの作成に使用されるトレーニング データは重み付けされません。トレーニング データ内のラベルが不均衡である場合、モデルは最も出現回数の多いラベルクラスをより重く予測するように学習することがありますが、これは必ずしも望ましいこととは限りません。

すべてのクラスのバランスをとるには、次の式を使用します。

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

引数

BOOL を受け入れます。デフォルト値は FALSE です。

BATCH_SIZE

構文

BATCH_SIZE = int64_value

説明

DNN モデルタイプの場合、ニューラル ネットワークにフィードされるサンプルのミニバッチ サイズを指定します。

引数

8,192 以下の正の数。

デフォルト値は、1,024 とサンプル数の小さい方になります。

CLASS_WEIGHTS

構文

CLASS_WEIGHTS = struct_array

説明

各クラスラベルに使用する重み。AUTO_CLASS_WEIGHTSTRUE の場合、このオプションは指定できません。

引数

struct_arraySTRUCTARRAY です。各 STRUCT には、クラスラベルを含む STRING と、そのクラスラベルの重みを含む FLOAT64 が含まれます。すべてのクラスラベルに重みが必要です。重みは合計で 1 になる必要はありません。例:

CLASS_WEIGHTS = [STRUCT('example_label', .2)]

DROPOUT

構文

DROPOUT = float64_value

説明

DNN モデルタイプの場合、ニューラル ネットワークのユニットのドロップアウト率を指定します。

引数

負以外で、1.0 以下の値を指定する必要があります。デフォルト値は 0.0 です。

EARLY_STOP

構文

EARLY_STOP = { TRUE | FALSE }

説明

最初のイテレーションで、相対損失改善値が MIN_REL_PROGRESS に指定された値より小さい場合、トレーニングを停止するかどうか。

引数

値は BOOL です。デフォルト値は TRUE です。

HIDDEN_UNITS

構文

HIDDEN_UNITS = int_array

説明

DNN モデルタイプの場合、ニューラル ネットワークの隠れ層を指定します。

引数

隠れ層のアーキテクチャを表す整数の配列。指定しない場合、BigQuery ML は 128 ユニット以下の単一の隠れ層を適用します。ユニット数は、特徴列やカテゴリ値などのさまざまな要素に基づいて計算されます。

HIDDEN_UNITS = [256, 128, 64]

この例は、256 ノード、128 ノード、64 ノードの 3 つ隠れ層から構成されるアーキテクチャを表しています。

INPUT_LABEL_COLS

構文

INPUT_LABEL_COLS = string_array

説明

トレーニング データのラベル列名。

引数

string_arraySTRINGARRAY です。DNN モデルタイプは、1 つの要素を含む string_array 値のみをサポートします。

LEARN_RATE

構文

LEARN_RATE = float64_value

説明

トレーニングの初期学習率。

引数

float64_valueFLOAT64 です。デフォルト値は 0.01 です。

MAX_ITERATIONS

構文

MAX_ITERATIONS = int64_value

説明

トレーニングの最大繰り返し回数またはステップ数。

引数

int64_valueINT64 です。デフォルト値は 20 です。

MIN_REL_PROGRESS

構文

MIN_REL_PROGRESS = float64_value

説明

EARLY_STOP が true に設定されている場合に、トレーニングの継続に最低限必要な相対損失改善値。たとえば、値を 0.01 に設定した場合、イテレーションごとに損失が 1% 減少すると、トレーニングが継続します。

引数

float64_valueFLOAT64 です。デフォルト値は 0.01 です。

OPTIMIZER

構文

OPTIMIZER =  { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' }

説明

DNN モデルタイプの場合、モデルのトレーニングに使用するオプティマイザを指定します。

引数

次のオプションが用意されています。

デフォルト値は 'ADAM' です。

WARM_START

構文

WARM_START = { TRUE | FALSE }

説明

新しいトレーニング データ、新しいモデル オプション、またはその両方でモデルを再トレーニングします。明示的にオーバーライドされない限り、モデル トレーニングの初期オプションはウォーム スタートの実行時に使用されます。

ウォーム スタートでは、繰り返し番号が 0 にリセットされます。TRAINING_RUN 番号や TIMESTAMP 列は、元の実行とウォーム スタートの区別に使用できます。

MODEL_TYPELABELSHIDDEN_UNITS の各オプションの値とトレーニング データスキーマは、ウォーム スタートで前のトレーニング ジョブで使用したものと同じである必要があります。warm_start オプションは、LINEAR_REGLOGISTIC_REGKMEANSDNN_REGRESSORDNN_CLASSIFIER の各モデルの再トレーニングでのみサポートされます。

引数

BOOL を受け入れます。デフォルト値は FALSE です。

DATA_SPLIT_METHOD

構文

DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' }

説明

入力データをトレーニング セットと評価セットに分割する方法。トレーニング データは、モデルのトレーニングに使用されます。評価データは、早期停止により過学習を避けるために使用されます。

引数

次の値を受け入れます。

'AUTO_SPLIT' - 自動分割戦略は次のとおりです。

  • 入力データが 500 行未満の場合、すべての行がトレーニング データとして使用されます。
  • 入力データが 500~50,000 行の場合、データの 20% が RANDOM 分割で処理され、評価データとして使用されます。
  • 入力データが 50,000 行を超える場合、10,000 行だけが RANDOM 分割で処理され、評価データとして使用されます。

'RANDOM' - データをランダムに分割します。ランダムな分割は確定的です。基となるトレーニング データが同じであれば、別のトレーニングを行っても同じ分割結果が生成されます。

'CUSTOM' - お客様提供の BOOL 型の列を使用してデータを分割します。値が TRUE の行は、評価データとして使用されます。値が FALSE の行は、トレーニング データとして使用されます。

'SEQ' - お客様提供の列を使用してデータを順番に分割します。列には、順序付け可能なデータ型の NUMERICBIGNUMERICプレビュー)、STRINGTIMESTAMP が使用できます。分割値がしきい値を下回る行は、トレーニング データとして使用されます。残りの行(NULL を含む)は、評価データとして使用されます。

'NO_SPLIT' - すべてのデータをトレーニング データとして使用します。

DATA_SPLIT_EVAL_FRACTION

構文

DATA_SPLIT_EVAL_FRACTION = float64_value

説明

このオプションは、'RANDOM''SEQ' 分割で使用します。評価に使用するデータの割合を、小数点以下 2 桁までの精度で指定します。

引数

float64_valueFLOAT64 です。デフォルト値は 0.2 です。

DATA_SPLIT_COL

構文

DATA_SPLIT_COL = string_value

説明

データの分割に使用する列を識別します。この列は特徴やラベルとして使用できません。特徴からは自動的に除外されます。

  • DATA_SPLIT_METHOD の値が 'CUSTOM' の場合、対応する列は BOOL 型になります。値が TRUENULL の行は、評価データとして使用されます。値が FALSE の行は、トレーニング データとして使用されます。

  • DATA_SPLIT_METHOD の値が 'SEQ' の場合、対応する列の最後の n 行(最小から最大)が評価データとして使用されます。ここで、nDATA_SPLIT_EVAL_FRACTION に指定された値です。最初の行はトレーニング データとして使用されます。

INTERNAL DEFAULT OPTIONS

BigQuery ML は、DNN モデルを内部で構築するときに次のデフォルト値も使用します。

loss_reduction = losses_utils.ReductionV2.SUM_OVER_BATCH_SIZE

batch_norm = False

次の例では、'mylabel' をラベル列として使用し、'mytable' に対して DNN 分類モデルをトレーニングします。

CREATE MODEL project_id:mydataset.mymodel
OPTIONS(MODEL_TYPE='DNN_CLASSIFIER',
        ACTIVATION_FN = 'RELU',
        BATCH_SIZE = 2048,
        DROPOUT = 0.1,
        EARLY_STOP = FALSE,
        HIDDEN_UNITS = [128, 128, 128],
        INPUT_LABEL_COLS = ['mylabel'],
        LEARN_RATE=0.001,
        MAX_ITERATIONS = 50,
        OPTIMIZER = 'ADAGRAD')
AS SELECT * FROM project_id:mydataset.mytable;

サポートされるリージョン

DNN モデルのトレーニングは、すべての BigQuery ML リージョンでサポートされているわけではありません。サポートされているリージョンとマルチリージョンの一覧については、ロケーションのページをご覧ください。