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_name
と model_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'
- 正規化線形'RELU6'
- 正規化線形 6'CRELU'
- 結合 ReLU'ELU'
- 指数線形'SELU'
- スケーリングされた指数線形'SIGMOID'
- シグモイド活性化'TANH'
- Tanh 活性化
デフォルト値は '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_WEIGHTS
が TRUE
の場合、このオプションは指定できません。
引数
struct_array は STRUCT
の ARRAY
です。各 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_array は STRING
の ARRAY
です。DNN モデルタイプは、1 つの要素を含む string_array 値のみをサポートします。
LEARN_RATE
構文
LEARN_RATE = float64_value
説明
トレーニングの初期学習率。
引数
float64_value は FLOAT64
です。デフォルト値は 0.01 です。
MAX_ITERATIONS
構文
MAX_ITERATIONS = int64_value
説明
トレーニングの最大繰り返し回数またはステップ数。
引数
int64_value は INT64
です。デフォルト値は 20 です。
MIN_REL_PROGRESS
構文
MIN_REL_PROGRESS = float64_value
説明
EARLY_STOP
が true に設定されている場合に、トレーニングの継続に最低限必要な相対損失改善値。たとえば、値を 0.01 に設定した場合、イテレーションごとに損失が 1% 減少すると、トレーニングが継続します。
引数
float64_value は FLOAT64
です。デフォルト値は 0.01 です。
OPTIMIZER
構文
OPTIMIZER = { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' }
説明
DNN モデルタイプの場合、モデルのトレーニングに使用するオプティマイザを指定します。
引数
次のオプションが用意されています。
'ADAGRAD'
- Adagrad アルゴリズムを実装します。'ADAM'
- Aad アルゴリズムを実装します。'FTRL'
- FTRL アルゴリズムを実装します。'RMSPROP'
- RMSProp アルゴリズムを実装します。'SGD'
- 勾配降下アルゴリズムを実装します。
デフォルト値は 'ADAM'
です。
WARM_START
構文
WARM_START = { TRUE | FALSE }
説明
新しいトレーニング データ、新しいモデル オプション、またはその両方でモデルを再トレーニングします。明示的にオーバーライドされない限り、モデル トレーニングの初期オプションはウォーム スタートの実行時に使用されます。
ウォーム スタートでは、繰り返し番号が 0 にリセットされます。TRAINING_RUN
番号や TIMESTAMP
列は、元の実行とウォーム スタートの区別に使用できます。
MODEL_TYPE
、LABELS
、HIDDEN_UNITS
の各オプションの値とトレーニング データスキーマは、ウォーム スタートで前のトレーニング ジョブで使用したものと同じである必要があります。warm_start
オプションは、LINEAR_REG
、LOGISTIC_REG
、KMEANS
、DNN_REGRESSOR
、DNN_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'
- お客様提供の列を使用してデータを順番に分割します。列には、順序付け可能なデータ型の NUMERIC
、BIGNUMERIC
(プレビュー)、STRING
、TIMESTAMP
が使用できます。分割値がしきい値を下回る行は、トレーニング データとして使用されます。残りの行(NULL
を含む)は、評価データとして使用されます。
'NO_SPLIT'
- すべてのデータをトレーニング データとして使用します。
DATA_SPLIT_EVAL_FRACTION
構文
DATA_SPLIT_EVAL_FRACTION = float64_value
説明
このオプションは、'RANDOM'
と 'SEQ'
分割で使用します。評価に使用するデータの割合を、小数点以下 2 桁までの精度で指定します。
引数
float64_value
は FLOAT64
です。デフォルト値は 0.2
です。
DATA_SPLIT_COL
構文
DATA_SPLIT_COL = string_value
説明
データの分割に使用する列を識別します。この列は特徴やラベルとして使用できません。特徴からは自動的に除外されます。
DATA_SPLIT_METHOD
の値が'CUSTOM'
の場合、対応する列はBOOL
型になります。値がTRUE
やNULL
の行は、評価データとして使用されます。値がFALSE
の行は、トレーニング データとして使用されます。DATA_SPLIT_METHOD
の値が'SEQ'
の場合、対応する列の最後の n 行(最小から最大)が評価データとして使用されます。ここで、n はDATA_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 リージョンでサポートされているわけではありません。サポートされているリージョンとマルチリージョンの一覧については、ロケーションのページをご覧ください。