심층신경망(DNN) 모델의 CREATE MODEL 문

DNN 모델의 CREATE MODEL

BigQuery에서 심층신경망 모델을 만들려면 DNN_CLASSIFIER 또는 DNN_REGRESSOR 모델 유형으로 BigQuery ML CREATE MODEL 문을 사용합니다. 이러한 모델은 TensorFlow 에스티메이터를 사용하여 빌드됩니다.

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 모델 유형은 요소 한 개를 포함하는 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_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' 분할에 사용되며, 평가에 사용되는 데이터의 비율을 지정하고 소수점 둘째 자리까지 정확합니다.

인수

float64_valueFLOAT64입니다. 기본값은 0.2입니다.

DATA_SPLIT_COL

구문

DATA_SPLIT_COL = string_value

설명

데이터를 분할하는 데 사용되는 열을 식별합니다. 이 열은 특성 또는 라벨로 사용될 수 없고 자동으로 특성에서 제외됩니다.

  • DATA_SPLIT_METHOD 값이 'CUSTOM'인 경우 해당 열의 유형은 BOOL이어야 합니다. 값이 TRUE 또는 NULL인 행은 평가 데이터로 사용됩니다. 값이 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 리전에서 지원되지는 않습니다. 지원되는 리전 및 멀티 리전의 전체 목록은 위치 페이지를 참조하세요.