ワイド&ディープ組み込みアルゴリズムを使用したトレーニング

AI Platform Training での組み込みアルゴリズムを使用したトレーニングでは、データセットを送信し、トレーニング コードを一切作成せずに、モデルをトレーニングできます。このページでは、ワイド&ディープ組み込みアルゴリズムの仕組みとその使用方法について説明します。

概要

この組み込みアルゴリズムでは、次のように前処理とトレーニングが行われます。

  1. 前処理: トレーニングで使用できるよう、AI Platform Training がカテゴリデータと数値データの混在を処理し、数値データセットのみにします。
  2. トレーニング: AI Platform Training は、指定したデータセットとモデル パラメータを使用して、TensorFlow のワイド&ディープ Estimator でトレーニングを行います。

制限事項

次に示す機能は、ワイド&ディープ組み込みアルゴリズムではサポートされません

  • マルチ GPU トレーニング。組み込みアルゴリズムによって使用される GPU は一度に 1 つだけです。1 台のマシンで複数の GPU を使用したトレーニングを行うには、トレーニング アプリケーションを作成する必要があります。マシンタイプの詳細については、こちらをご覧ください。
  • TPU を使用するトレーニング。TPU を使用してトレーニングするには、トレーニング アプリケーションを作成する必要があります。詳しくは、TPU でトレーニング ジョブを実行する方法をご覧ください。
  • 分散トレーニングAI Platform Training で分散トレーニング ジョブを実行するには、トレーニング アプリケーションを作成する必要があります。

サポートされているマシンタイプ

次の AI Platform Training スケール階層とマシンタイプがサポートされています。

入力データのフォーマット

データセットでは、各行が 1 つのインスタンスを表し、各列が特徴値を表します。ターゲット列は予測対象の値を表します。

CSV ファイルを準備する

入力データは UTF-8 でエンコードされた CSV ファイルでなければなりません。トレーニング データがカテゴリ値と数値のみで構成されている場合は、Google の前処理モジュールを使用して欠損している数値を埋め、データセットを分割し、欠損値が 10% を超える行を削除できます。それ以外の場合は、自動前処理を有効にせずにトレーニングを行うことができます。

入力 CSV ファイルを準備する際、以下の要件を守ってください。

  • ヘッダー行を削除する。ヘッダー行には各列のラベルが含まれています。ヘッダー行がトレーニング データの一部として残りのデータ インスタンスと一緒に送信されないようにするため、ヘッダー行を削除します。
  • 1 列目をターゲット列にする。ターゲット列に予測対象の値が含まれています。分類アルゴリズムの場合、ターゲット列の値はすべてクラスまたはカテゴリにします。回帰アルゴリズムの場合、ターゲット列の値はすべて数値にします。

整数値を処理する

整数値の意味があいまいになると、自動前処理で整数値の列に問題が生じることがあります。AI Platform Training は、整数値の処理方法を自動的に決定します。デフォルトでの設定:

  • すべての整数値が一意である場合、列はインスタンス キーとして扱われます。
  • 一意の整数値が少ない場合、列はカテゴリとして扱われます。
  • それ以外の場合、列の値は浮動小数点数に変換され、数値として扱われます。

これらのデフォルトの決定をオーバーライドするには:

  • データを数値として扱う場合は、列内のすべての整数値を浮動小数点に変換します。例:{101.0, 102.0, 103.0}
  • データをカテゴリとして扱う場合は、列内のすべての整数値の前に数値以外の接頭辞を追加します。例: {code_101, code_102, code_103}

Cloud Storage バケットの権限を確認する

データを保存するには、AI Platform Training ジョブの実行に使用している Google Cloud プロジェクトの Cloud Storage バケットを使用します。それ以外の場合は、データが保存されている Cloud Storage バケットへのアクセス権を AI Platform Training に付与します。

ワイド&ディープ トレーニング ジョブを送信する

このセクションでは、ワイド&ディープ組み込みアルゴリズムを使用したトレーニング ジョブを送信する方法を説明します。

各ハイパーパラメータの簡単な説明については、Google Cloud コンソール内で確認できます。より包括的な説明については、組み込まれたワイド&ディープ アルゴリズムに対する参照をご覧ください。

Console

  1. Google Cloud コンソールで AI Platform Training の [ジョブ] ページに移動します。

    AI Platform Training の [ジョブ] ページ

  2. [新規トレーニング ジョブ] ボタンをクリックします。下に表示されたオプションから、[組み込みアルゴリズムによるトレーニング] をクリックします。

  3. [新しいトレーニング ジョブの作成] ページで、[Wide And Deep Learner] を選択して [次へ] をクリックします。

  4. 使用可能なすべてのパラメータの詳細については、Google Cloud コンソール内のリンクをたどって、ワイド&ディープ組み込みパラメータのリファレンスをご覧ください。

gcloud

  1. ジョブの環境変数を設定し、[VALUES-IN-BRACKETS] には実際に使用する値を入力します。

       # Specify the name of the Cloud Storage bucket where you want your
       # training outputs to be stored, and the Docker container for
       # your built-in algorithm selection.
       BUCKET_NAME='[YOUR-BUCKET-NAME]'
       IMAGE_URI='gcr.io/cloud-ml-algos/wide_deep_learner_cpu:latest'
    
       # Specify the Cloud Storage path to your training input data.
       TRAINING_DATA='gs://[YOUR_BUCKET_NAME]/[YOUR_FILE_NAME].csv'
    
       DATASET_NAME='census'
       ALGORITHM='wide_deep'
       MODEL_TYPE='classification'
    
       DATE='date '+%Y%m%d_%H%M%S''
       MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
       JOB_ID="${MODEL_NAME}_${DATE}"
    
       JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${MODEL_NAME}/${DATE}"
    
  2. gcloud ai-platform jobs training submit を使用してトレーニング ジョブを送信します。

       gcloud ai-platform jobs submit training $JOB_ID \
          --master-image-uri=$IMAGE_URI --scale-tier=BASIC --job-dir=$JOB_DIR \
          -- \
          --preprocess --model_type=$MODEL_TYPE --batch_size=250 --learning_rate=0.1 \
          --dnn_learning_rate=0.005 --dnn_dropout=0.1 --hidden_units=10,10,10 \
          --use_wide --embed_categories \
          --max_steps=1000 --training_data_path=$TRAINING_DATA
    
  3. gcloud でログを確認して、トレーニング ジョブのステータスをモニタリングします。gcloud ai-platform jobs describegcloud ai-platform jobs stream-logs を参照します。

       gcloud ai-platform jobs describe ${JOB_ID}
       gcloud ai-platform jobs stream-logs ${JOB_ID}
    

前処理の仕組み

自動前処理は、カテゴリデータと数値データに対して機能します。前処理ルーチンは、まずデータを分析してからデータを変換します。

分析

まず、AI Platform Training は各列のデータ型を自動的に検出し、各列をどのように扱うべきかを判断して、列のデータの統計情報を計算します。この情報は、metadata.json ファイルに取り込まれます。

次に、ターゲット列の型を分析して、指定されたデータセットが回帰用か分類用かを識別します。この分析が model_type の設定値と矛盾するとエラーになります。あいまいな場合はデータを明確にフォーマットすることで、ターゲット列をどのように扱うべきかを明示してください。

  • 型: 列は数値とカテゴリのどちらかになります。

  • 扱い方: AI Platform Training は、各列の扱い方を次のように識別します。

    • すべての行に単一の値が含まれる列は、定数として扱われます。
    • 列がカテゴリ型で、すべての行に一意の値が含まれている場合は、行識別子として扱われます。
    • 列が浮動小数点の数値型である場合、または整数の数値型で多数の一意の値が含まれる場合、その列は数値として扱われます。
    • 列が整数値の数値型で、一意の値の数が十分でない場合、その列は整数値が ID または語彙を表すカテゴリ列として扱われます。
      • 列にある「一意の値の数が十分でない」とみなされるのは、列に含まれる一意の値の数が入力データセットの行数の 20% 未満の場合です
    • 列がカーディナリティの高いカテゴリ型である場合、その列はハッシュとして扱われます。ハッシュ バケットの数は、列にある一意の値の数の平方根と等しくなります。
      • カテゴリ列の「カーディナリティが高い」とみなされるのは、列に含まれる一意の値の数がデータセットの行数の平方根より多い場合です
    • 列がカテゴリ型で、一意の値の数がデータセットの行数の平方根以下である場合、その列は、語彙を表す通常のカテゴリ列として扱われます。
  • 統計情報: 識別された列の型と扱い方に基づいて、後の段階で列を変換するために使用される以下の統計情報が計算されます。

    • 列が数値型の場合、平均値と分散値が計算されます。
    • 列がカテゴリ型で、ID または語彙として扱われる場合は、列から一意の値が抽出されます。
    • 列がカテゴリ型で、ハッシュとして扱われる場合は、列のカーディナリティに基づくハッシュ バケットの数が計算されます。

変換

データセットの初期分析が完了すると、データセットに適用された型、扱い方、統計情報に基づいてデータが変換されます。変換は以下の順に行われます。

  1. 分割の割合が指定されている場合は、トレーニング データセットを検証データセットとテスト データセットに分割します。
  2. 特徴の欠損が 10% を超える行を削除します。
  3. 列の平均値を使用して、欠損している数値を埋めます。

変換の例

欠損値が 10% を超える行は削除されます。次の例では、行に 10 個の値があると仮定します。各サンプル行は、わかりやすくするために一部の値を省略しています。

行の問題 元の値 変換後の値 説明
欠損値のないサンプル行 [3, 0.45, ...,
'fruits', 0, 1]
[3, 0.45, ...,
1, 0, 0, 0, 1]
文字列「fruits」はワンホット エンコーディングで値「1, 0, 0」に変換されます。これは後に TensorFlow グラフで行われます。
欠損値が多すぎる [3, 0.45, ...,
'fruits', __, __]
行が削除される 行の 10% を超える値が欠損しています。
数値が欠損している [3, 0.45, ...,
'fruits', 0, __]
[3, 0.45, ...,
1, 0, 0, 0, 0.54]
  • 欠損している数値は列の平均値に置き換えられます。この例では、平均は 0.54 です。
  • 文字列「fruits」はワンホット エンコーディングで値「1, 0, 0」に変換されます。これは後に TensorFlow グラフで行われます。
カテゴリ値が欠損している [3, 0.45, ...,
__, 0, 1]
[3, 0.45, ...,
0, 0, 0, 0, 1]
  • 欠損しているカテゴリ値はワンホット エンコードで値「0, 0, 0」に変換されます。これは後に TensorFlow グラフで行われます。

特徴列

変換中に列は加工されません。代わりに、分析中に生成されたメタデータは AI Platform Training に渡され、それに応じて特徴列が作成されます。

列の型 列の扱い方 作成される特徴列
数値 (すべての列の扱い方が適用される) tf.feature_column.numeric_column

平均値と分散値を使用して値が標準化されます。
new_value = (input_value - mean) / sqrt(variance)
特徴は、モデルのディープ ニューラル ネットワークの部分に渡されます。

カテゴリ ID tf.feature_column.categorical_column_with_identity
カテゴリ 語彙 tf.feature_column.categorical_column_with_vocabulary_list
カテゴリ ハッシュ tf.feature_column.categorical_column_with_hash_bucket
カテゴリ 定数または行識別子 無視されます。特徴列は作成されません。

追加の特徴列

DNN モデルのワイド部分でカテゴリ列を使用するか(use_wide)、ディープ部分にカテゴリ列を埋め込むか(embed_categories)を選択できます。選択に応じて、次の特徴列が追加されます。

use_wide 有効 embed_categories 有効 結果
True True または False 特徴はモデルのワイド部分に渡されます。
True または False True カテゴリ列に対して埋め込み特徴列が作成されます。この列の埋め込みディメンションは、列に含まれるカテゴリ数の平方根の上限に設定されます。この埋め込み特徴列は、モデルのディープ部分に渡されます。
False False カテゴリ列に対して指標列が作成されます。この指標特徴列はモデルのディープ部分に渡されます。

自動前処理が完了すると、AI Platform Training は処理済みのデータセットを、ジョブ リクエストで指定した Cloud Storage バケット内のディレクトリにアップロードします。

次のステップ