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

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

概要

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

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

制限事項

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

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

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

以下の AI プラットフォーム スケール階層とマシンタイプがサポートされています。

  • BASIC
  • CUSTOM:
    • standard
    • large_model
    • complex_model_s
    • complex_model_m
    • complex_model_l
    • standard_gpu
    • standard_p100
    • standard_v100
    • large_model_v100

さらに、Compute Engine マシンタイプも使用できます(ベータ版)。マシンタイプの詳細については、こちらをご覧ください。

入力データをフォーマットする

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

CSV ファイルを準備する

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

入力 CSV ファイルを準備する際は、以下の要件に従う必要があります。

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

整数値を処理する

一意の値の数が十分でない場合、整数値の列はデフォルトでカテゴリ列として解釈されます。たとえば、データセットの列に {101, 102, 103} のような整数値が含まれる場合、AI プラットフォームはこれらの値を {'high', 'medium', 'low'} のようなカテゴリとして解釈します。

このような誤った解釈がされないようにするため、データを数値として与える場合は必ず整数を浮動小数点数に変換してください。つまり、前の例では {101.0, 102.0, 103.0} にします。整数がカテゴリとして解釈されるようにする場合は、各値の前後に文字列を付加します(例: {code_101, code_102, code_103})。

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

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

Google Cloud Platform Console 内で使用できる各ハイパーパラメータの簡単な説明と、さらに包括的な説明については、ワイド&ディープ組み込みアルゴリズムのリファレンスをご覧ください。

Console

  1. Google Cloud Platform Console で AI プラットフォームの [ジョブ] ページに移動します。

    AI プラットフォームの [ジョブ] ページ

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

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

  4. 利用可能なすべてのパラメータの詳細については、Google Cloud Platform Console にあるリンクを参照するか、ワイド&ディープ組み込みアルゴリズムのリファレンスをご覧ください。

gcloud

  1. このチュートリアルを始める前に gcloud をインストールしていた場合は、最新バージョンの gcloud beta に更新します。

       gcloud components install beta
    
  2. ジョブの環境変数を設定します。[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}"
    
  3. gcloud beta ai-platform jobs training submit を使用してトレーニング ジョブを送信します。

       gcloud beta 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
    
  4. 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 プラットフォームは各列のデータ型を自動的に検出し、各列をどのように扱うべきかを判断して、列のデータの統計情報を計算します。この情報は metadata.json ファイルに取り込まれます。

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

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

  • 扱い方: AI プラットフォームは、各列の扱い方を次のように識別します。

    • すべての行に単一の値が含まれる列は、定数として扱われます。
    • 列がカテゴリ型で、すべての行に一意の値が含まれている場合は、行識別子として扱われます。
    • 列が浮動小数点の数値型である場合、または整数の数値型で多数の一意の値が含まれる場合、その列は数値として扱われます。
    • 列が整数値の数値型で、一意の値の数が十分でない場合、その列は整数値が 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 プラットフォームに渡され、それに応じて特徴列が作成されます。

列の型 列の扱い方 作成される特徴列
数値 (すべての列の扱い方が適用される) 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 プラットフォームは処理済みのデータセットを、ジョブ リクエストで指定した Cloud Storage バケット内のディレクトリにアップロードします。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...