

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SageMaker の組み込みアルゴリズムと事前トレーニング済みモデル
<a name="algos"></a>

Amazon SageMaker は、データサイエンティストや機械学習の実践者が機械学習モデルのトレーニングとデプロイを迅速に開始できるようにする一連の組み込みアルゴリズム、トレーニング済みモデルおよび構築済みソリューションテンプレートを提供しています。SageMaker を初めて使う方にとって、特定のユースケースに適したアルゴリズムを選択するのは難しい作業です。次の表に、サンプル問題またはユースケースから開始し、その問題タイプに有効な SageMaker によって提供される適切な組み込みアルゴリズムを見つける方法を示すクイックチートシートを示します。学習パラダイム (教師ありと教師なし) と重要なデータドメイン (テキストとイメージ) によって構成される追加のガイダンスについては、表の次のセクションを参照してください。

表: 組み込みアルゴリズムへのユースケースのマッピング

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/algos.html)

SageMaker AI が提供するすべての組み込みアルゴリズムに共通する以下の項目の重要な情報については、「[組み込みアルゴリズムのパラメータ](common-info-all-im-models.md)」を参照してください。
+ Docker レジストリパス
+ データ形式
+ 推奨される Amazon EC2 インスタンスタイプ
+ CloudWatch ログ

次のセクションでは、属している教師あり学習パラダイムと教師なし学習パラダイム別にグループ化された Amazon SageMaker AI 組み込みアルゴリズムに関する追加のガイダンスを示します。これらの学習パラダイムとそれに関連する問題タイプの詳細については、「[アルゴリズムのタイプ](algorithms-choose.md)」を参照してください。また、テキスト解析と画像処理という 2 つの重要な機械学習ドメインに対処するために使用できる SageMaker AI 組み込みアルゴリズムに関するセクションも用意されています。
+ [事前トレーニング済みモデルとソリューションテンプレート](#algorithms-built-in-jumpstart)
+ [教師あり学習](#algorithms-built-in-supervised-learning)
+ [教師なし学習](#algorithms-built-in-unsupervised-learning)
+ [テキスト分析](#algorithms-built-in-text-analysis)
+ [画像処理](#algorithms-built-in-image-processing)

## 事前トレーニング済みモデルとソリューションテンプレート
<a name="algorithms-built-in-jumpstart"></a>

Amazon SageMaker JumpStart は、トレーニング済みのさまざまなモデル、構築済みのソリューションテンプレート、一般的な問題タイプの例を提供します。これらは SageMaker SDK と Studio Classic を使用します。Amazon SageMaker JumpStart が提供するモデル、ソリューション、サンプルノートブックの詳細については、「」を参照してください[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)。

## 教師あり学習
<a name="algorithms-built-in-supervised-learning"></a>

Amazon SageMaker AI には、分類問題または回帰問題に使用できる組み込みの汎用アルゴリズムがいくつか用意されています。
+ [AutoGluon-Tabular](autogluon-tabular.md) — モデルをアンサンブルして複数のレイヤーに積み重ねることで成功するオープンソースの AutoML フレームワーク。
+ [CatBoost](catboost.md) - 順序付けされたブースティングとカテゴリ別機能を処理するための革新的なアルゴリズムを導入する勾配ブーストツリーアルゴリズムの実装。
+ [因数分解機アルゴリズム](fact-machines.md) - 高次元スパースデータセット内の特徴間の相互作用を経済的にキャプチャするように設計された線形モデルの拡張。
+ [K 最近傍 (k-NN) アルゴリズム](k-nearest-neighbors.md) — K 個の最も近いラベル付きポイントを使用して値を割り当てるノンパラメトリック手法。分類の場合は、新しいデータポイントに対するラベルとなり、リグレッションの場合は、K 個の最も近いポイントの平均から予測されるターゲット値となります。
+ [LightGBM](lightgbm.md) — 効率とスケーラビリティを向上させるための 2 つの新しい技法を追加した勾配ブーストツリーアルゴリズムの実装。2 つの新しい技法は、Gradient-based One-Side Sampling (GOSS) と Exclusive Feature Bundling (EFB) です。
+ [線形学習アルゴリズム](linear-learner.md) - 回帰の線形関数または分類の線形しきい値関数を学習します。
+ [TabTransformer](tabtransformer.md) — セルフアテンションベースの Transformers で構築された、新しい深層表形式データモデル化アーキテクチャ。
+ [Amazon SageMaker AI の XGBoost アルゴリズム](xgboost.md) - より単純で弱いモデルのセットから推定のアンサンブルを組み合わせる勾配ブーストツリーアルゴリズムの実装。

Amazon SageMaker AI には、時系列データからの特徴量エンジニアリングおよび予測時のより特殊なタスクに使用される、教師あり学習アルゴリズムもいくつか組み込まれています。
+ [Object2Vec アルゴリズム](object2vec.md) — 特徴量エンジニアリングに使用される新しい高度にカスタマイズ可能な汎用アルゴリズム。高次元オブジェクトの低次元高密度埋め込みを学習して、下流モデルのトレーニング効率を向上する特徴を生成できます。教師ありアルゴリズムではあるものの、データ内の自然なクラスタリングから関係ラベルを単純に取得できるシナリオが多数あります。トレーニングのためにラベル付きデータが必要ですが、人間による明示的な注釈なしの学習が可能です。
+ [SageMaker AI DeepAR 予測アルゴリズムを使用する](deepar.md) - 予測アルゴリズムは、再帰型ニューラルネットワーク (RNN) を使用してスカラー (1 次元) 時系列を予測する教師あり学習アルゴリズム。

## 教師なし学習
<a name="algorithms-built-in-unsupervised-learning"></a>

Amazon SageMaker AI には、多様な教師なし学習タスクに使用できる組み込みアルゴリズムがいくつか用意されています。これらのタスクには、クラスタリング、次元削減、パターン認識、異常検出などが含まれます。
+ [主成分分析法 (PCA) アルゴリズム](pca.md) - データポイントを最初のいくつかの主成分に射影することにより、データセット内の次元 (特徴の数) を縮退させます。目的は、できるだけ多くの情報やバリエーションを保持することです。数学者の場合、主成分はデータの共分散行列の固有ベクトルです。
+ [K-Means アルゴリズム](k-means.md) — データ内にある離散グループを検出します。同一グループのメンバーができるだけ類似し、かつ他のグループのメンバーとできるだけ異なるものを特定します。
+ [IP Insights](ip-insights.md) - IPv4 アドレスの使用パターンを学習します。このアルゴリズムは、IPv4 アドレスと、ユーザー ID やアカウント番号などの各種エンティティとの間の関連付けをキャプチャするように設計されています。
+ [ランダムカットフォレスト (RCF) アルゴリズム](randomcutforest.md) - その他の高度に構造化またはパターン化されたデータとは異なるデータセット内の異常なデータポイントを検出します。

## テキスト分析
<a name="algorithms-built-in-text-analysis"></a>

SageMaker AI は、テキスト文書の分析用に調整されたアルゴリズムを提供しています。対象となるのは、自然言語処理、文書の分類または要約、トピックのモデリングまたは分類、言語の文字起こしまたは翻訳で使用されるテキストです。
+ [BlazingText アルゴリズム](blazingtext.md) - 大規模なデータセットに簡単に拡張できる Word2vec とテキスト分類アルゴリズムの高度に最適化された実装。これは、多くの下流の自然言語処理 (NLP) タスクに役立ちます。
+ [Sequence to Sequence アルゴリズム](seq-2-seq.md) - 一般的にニューラル機械翻訳に使用される教師ありアルゴリズム。
+ [潜在的ディリクレ配分 (LDA) アルゴリズム](lda.md) - 一連のドキュメントのトピックを決定するのに適しているアルゴリズム。これは *教師なしアルゴリズム*です。つまり、トレーニング時に回答を含むサンプルデータを使用しないということです。
+ [ニューラルトピックモデル (NTM) アルゴリズム](ntm.md) - ニューラルネットワークアプローチを使用して一連のドキュメントのトピックを決定する別の教師なし手法。
+ [テキスト分類 - TensorFlow](text-classification-tensorflow.md) — テキスト分類用のトレーニング済みモデルを使用して転移学習をサポートする教師ありアルゴリズム。

## 画像処理
<a name="algorithms-built-in-image-processing"></a>

SageMaker AI は、イメージ分類、オブジェクト検出、コンピュータビジョンに使用される画像処理アルゴリズムも提供しています。
+ [画像分類 - MXNet](image-classification.md) - 回答を含むサンプルデータを使用します (教師ありアルゴリズムと呼ばれる)。** このアルゴリズムを使用してイメージを分類します。
+ [画像分類 - TensorFlow](image-classification-tensorflow.md) — トレーニング済 TensorFlow Hub モデルを使用して、特定のタスクに合わせて微調整します (教師ありアルゴリズムと呼ばれる)。 このアルゴリズムを使用してイメージを分類します。
+ [セマンティックセグメンテーションアルゴリズム](semantic-segmentation.md) - コンピュータビジョンアプリケーション開発のためのピクセルレベルのきめ細かいアプローチを提供します。
+ [オブジェクト検出 - MXNet](object-detection.md) — 1 つの深層ニューラルネットワークを使用して、イメージ内のオブジェクトを検出および分類します。このアルゴリズムは、入力としてイメージを取得し、イメージシーン内のオブジェクトのすべてのインスタンスを識別する、教師あり学習アルゴリズムです。
+ [オブジェクト検出 - TensorFlow](object-detection-tensorflow.md) — 画像内の境界ボックスとオブジェクトラベルを検出します。これは教師あり学習アルゴリズムで、利用可能なトレーニング済み TensorFlow モデルによる転移学習をサポートします。

**Topics**
+ [事前トレーニング済みモデルとソリューションテンプレート](#algorithms-built-in-jumpstart)
+ [教師あり学習](#algorithms-built-in-supervised-learning)
+ [教師なし学習](#algorithms-built-in-unsupervised-learning)
+ [テキスト分析](#algorithms-built-in-text-analysis)
+ [画像処理](#algorithms-built-in-image-processing)
+ [組み込みアルゴリズムのパラメータ](common-info-all-im-models.md)
+ [表形式データ用の組み込みの SageMaker AI アルゴリズム](algorithms-tabular.md)
+ [テキストデータ用の組み込み SageMaker AI アルゴリズム](algorithms-text.md)
+ [時系列データ用の組み込み SageMaker AI アルゴリズム](algorithms-time-series.md)
+ [教師なし組み込み SageMaker AI アルゴリズム](algorithms-unsupervised.md)
+ [コンピュータビジョン用の組み込み SageMaker AI アルゴリズム](algorithms-vision.md)

# 組み込みアルゴリズムのパラメータ
<a name="common-info-all-im-models"></a>

次の表に、Amazon SageMaker AI によって提供される各アルゴリズムのパラメータを示します。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| AutoGluon - 表形式 | トレーニング、および (オプションで) 検証 | システム | CSV | CPU または GPU (単一インスタンスのみ) | いいえ | 
| BlazingText | トレーニング | ファイルまたはパイプ | テキストファイル (1 行に 1 文、スペース区切りのトークンを含む)  | CPU または GPU (単一インスタンスのみ)  | いいえ | 
| CatBoost | トレーニング、および (オプションで) 検証 | システム | CSV | CPU (単一インスタンスのみ) | いいえ | 
| DeepAR 予測 | トレーニングおよび (オプションで) テスト | システム | JSON Lines または Parquet | CPU または GPU | はい | 
| 因数分解機 | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf | CPU (高密度データ用の GPU) | はい | 
| 画像分類 - MXNet | トレーニングと検証、(オプションで) train\$1lst、validation\$1lst、およびモデル | ファイルまたはパイプ | recordIO またはイメージファイル (.jpg または .png)  | GPU | はい | 
| 画像分類 - TensorFlow | トレーニングおよび検証 | システム | 画像ファイル (.jpg、.jpeg、または .png)  | CPU または GPU | Yes (単一インスタンス上の複数の GPU 間でのみ) | 
| IP Insights | トレーニング、および (オプションで) 検証 | システム | CSV | CPU または GPU | はい | 
| K-Means | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPUCommon (1 つ以上のインスタンス上の単一の GPU デバイス) | いいえ | 
| K 近傍法 | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU (1 つ以上のインスタンス上の単一の GPU デバイス) | はい | 
| LDA | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU (単一インスタンスのみ) | いいえ | 
| LightGBM | トレーニングおよび (オプションで) 検証 | システム | CSV | CPU | はい | 
| 線形学習 | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU | はい | 
| ニューラルトピックモデル | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU | はい | 
| Object2Vec | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | システム | JSON Lines  | CPU または GPU (単一インスタンスのみ) | いいえ | 
| オブジェクト検出 - MXNet | トレーニングと検証、(オプションで) train\$1annotation、validation\$1annotation、およびモデル | ファイルまたはパイプ | recordIO またはイメージファイル (.jpg または .png)  | GPU | はい | 
| オブジェクト検出 - TensorFlow | トレーニングおよび検証 | システム | 画像ファイル (.jpg、.jpeg、または .png)  | GPU | Yes (単一インスタンス上の複数の GPU 間でのみ) | 
| PCA | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU | はい | 
| ランダムカットフォレスト | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU | はい | 
| セマンティックセグメンテーション | トレーニングと検証、train\$1annotation、validation\$1annotation、および (オプションで) label\$1map およびモデル | ファイルまたはパイプ | 画像ファイル | GPU (単一インスタンスのみ) | いいえ | 
| Seq2Seq モデリング | トレーニング、検証、および vocab | システム | recordIO-protobuf | GPU (単一インスタンスのみ) | いいえ | 
| TabTransformer | トレーニングおよび (オプションで) 検証 | システム | CSV | CPU または GPU (単一インスタンスのみ) | いいえ | 
| テキスト分類 - TensorFlow | トレーニングおよび検証 | システム | CSV | CPU または GPU | Yes (単一インスタンス上の複数の GPU 間でのみ) | 
| XGBoost (0.90-1、0.90-2、1.0-1、1.2-1、1.2-21) | トレーニング、および (オプションで) 検証 | ファイルまたはパイプ | CSV、libsVM、または Parquet | CPU (または 1.2-1 の場合 GPU) | はい | 

*並列処理可能な*アルゴリズムは、トレーニングを分散するために、複数のコンピューティングインスタンスにデプロイできます。

次のトピックでは、Amazon SageMaker AI が提供するすべての組み込みアルゴリズムに共通のデータ形式、推奨される Amazon EC2 インスタンスタイプ、CloudWatch Logs に関する情報を提供します。

**注記**  
SageMaker AI が管理する組み込みアルゴリズムの Docker イメージ URI を検索するには、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths)」を参照してください。

**Topics**
+ [トレーニングの共通データ形式](cdf-training.md)
+ [推論の共通データ形式](cdf-inference.md)
+ [組み込みアルゴリズムのインスタンスタイプ](cmn-info-instance-types.md)
+ [組み込みアルゴリズムのログ](common-info-all-sagemaker-models-logs.md)

# トレーニングの共通データ形式
<a name="cdf-training"></a>

トレーニングの準備として、 AWS Glue Amazon EMR、Amazon Redshift、Amazon Relational Database Service、Amazon Athena など、さまざまな AWS サービスを使用してデータを前処理できます。前処理の後、データを Amazon S3 バケットに発行します。トレーニングのために、データは次の一連の変換を経る必要があります。
+ トレーニングデータのシリアル化 (ユーザーによる処理) 
+ トレーニングデータの逆シリアル化 (アルゴリズムによる処理) 
+ トレーニングモデルのシリアル化 (アルゴリズムによる処理) 
+ トレーニング済みモデルの逆シリアル化 (オプション、ユーザーによる処理) 

アルゴリズムのトレーニングの部分で Amazon SageMaker AI を使用する場合は、必ずすべてのデータを一度にアップロードします。その場所により多くのデータが追加された場合は、新しいモデルを構築するために、新しいトレーニングの呼び出しが必要になります。

**Topics**
+ [組み込みアルゴリズムによってサポートされるコンテンツタイプ](#cdf-common-content-types)
+ [パイプモードを使用する](#cdf-pipe-mode)
+ [CSV 形式を使用する](#cdf-csv-format)
+ [RecordIO 形式を使用する](#cdf-recordio-format)
+ [トレーニング済みモデルの逆シリアル化](#td-deserialization)

## 組み込みアルゴリズムによってサポートされるコンテンツタイプ
<a name="cdf-common-content-types"></a>

次の表に、一般的にサポートされている [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) の値とその値を使用するアルゴリズムをいくつか示します。

組み込みアルゴリズムのコンテンツタイプ


| ContentType | アルゴリズム | 
| --- | --- | 
| application/x-image | オブジェクト検出アルゴリズム、セマンティックセグメンテーション | 
| application/x-recordio |  オブジェクト検出アルゴリズム  | 
| application/x-recordio-protobuf |  因数分解機、K-Means、k-NN、潜在的ディリクレ割り当て、線形学習、NTM、PCA、RCF、Sequence-to-Sequence  | 
| application/jsonlines |  BlazingText、DeepAR  | 
| image/jpeg |  オブジェクト検出アルゴリズム、セマンティックセグメンテーション  | 
| image/png |  オブジェクト検出アルゴリズム、セマンティックセグメンテーション  | 
| text/csv |  IP Insights、K-Means、k-NN、潜在的ディリクレ割り当て、線形学習、NTM、PCA、RCF、XGBoost  | 
| text/libsvm |  XGBoost  | 

各アルゴリズムで使用されているパラメータの要約については、個々のアルゴリズムのドキュメントまたはこの[表](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)を参照してください。

## パイプモードを使用する
<a name="cdf-pipe-mode"></a>

パイプモードでは、トレーニングジョブが Amazon Simple Storage Service (Amazon S3) から直接データをストリーミングします。**ストリーミングにより、トレーニングジョブの開始時間が短縮され、スループットが向上します。これは、ファイルモードとは対照的です。ファイルモードでは、Amazon S3 からのデータは、インスタンスボリュームに保存されます。**ファイルモードでは、最終的なモデルアーティファクトと完全なトレーニングデータセットの両方を保存するためのディスク容量を使用します。パイプモードで Amazon S3 から直接データをストリーミングすることにより、トレーニングインスタンスの Amazon Elastic Block Store ボリュームのサイズを縮小できます。パイプモードでは、最終的なモデルアーティファクトを保存するのに十分なディスク容量が必要です。トレーニング入力モードの詳細については、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html) を参照してください。

## CSV 形式を使用する
<a name="cdf-csv-format"></a>

多くの Amazon SageMaker AI アルゴリズムは、CSV 形式のデータによるトレーニングをサポートしています。CSV 形式のデータをトレーニングに使うには、入力データチャネルの仕様で [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) として **text/csv** を指定します。Amazon SageMaker AI では、CSV ファイルにヘッダーレコードを含めないことと、ターゲット変数を最初の列に含める必要があります。ターゲットが設定されていない教師なし学習アルゴリズムを実行するには、コンテンツタイプでラベル列の数を指定します。たとえば、この場合は **'content\$1type=text/csv;label\$1size=0'** と指定します。詳細については、「[Now use Pipe mode with CSV datasets for faster training on Amazon SageMaker AI built-in algorithms](https://aws.amazon.com/blogs/machine-learning/now-use-pipe-mode-with-csv-datasets-for-faster-training-on-amazon-sagemaker-built-in-algorithms/)」を参照してください。

## RecordIO 形式を使用する
<a name="cdf-recordio-format"></a>

protobuf recordIO 形式では、SageMaker AI はデータセット内の各観測値を 4 バイトの浮動小数点数のセットとしてのバイナリ表現に変換し、それを protobuf の値フィールドにロードします。データの準備に Python を使用している場合は、これらの既存の変換を使用することを強くお勧めします。ただし、他の言語を使用している場合、次の protobuf 定義ファイルに、データを SageMaker AI の protobuf 形式に変換するために使うスキーマが含まれています。

**注記**  
一般的に使用される numPy 配列を protobuf recordIO 形式に変換する方法を示す例については、「[An Introduction to Factorization Machines with MNIST」(MNIST による因数分解機の概要](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/factorization_machines_mnist/factorization_machines_mnist.html)) を参照してください。**

```
syntax = "proto2";

 package aialgs.data;

 option java_package = "com.amazonaws.aialgorithms.proto";
 option java_outer_classname = "RecordProtos";

 // A sparse or dense rank-R tensor that stores data as doubles (float64).
 message Float32Tensor   {
     // Each value in the vector. If keys is empty, this is treated as a
     // dense vector.
     repeated float values = 1 [packed = true];

     // If key is not empty, the vector is treated as sparse, with
     // each key specifying the location of the value in the sparse vector.
     repeated uint64 keys = 2 [packed = true];

     // An optional shape that allows the vector to represent a matrix.
     // For example, if shape = [ 10, 20 ], floor(keys[i] / 20) gives the row,
     // and keys[i] % 20 gives the column.
     // This also supports n-dimensonal tensors.
     // Note: If the tensor is sparse, you must specify this value.
     repeated uint64 shape = 3 [packed = true];
 }

 // A sparse or dense rank-R tensor that stores data as doubles (float64).
 message Float64Tensor {
     // Each value in the vector. If keys is empty, this is treated as a
     // dense vector.
     repeated double values = 1 [packed = true];

     // If this is not empty, the vector is treated as sparse, with
     // each key specifying the location of the value in the sparse vector.
     repeated uint64 keys = 2 [packed = true];

     // An optional shape that allows the vector to represent a matrix.
     // For example, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row,
     // and keys[i] % 20 gives the column.
     // This also supports n-dimensonal tensors.
     // Note: If the tensor is sparse, you must specify this value.
     repeated uint64 shape = 3 [packed = true];
 }

 // A sparse or dense rank-R tensor that stores data as 32-bit ints (int32).
 message Int32Tensor {
     // Each value in the vector. If keys is empty, this is treated as a
     // dense vector.
     repeated int32 values = 1 [packed = true];

     // If this is not empty, the vector is treated as sparse with
     // each key specifying the location of the value in the sparse vector.
     repeated uint64 keys = 2 [packed = true];

     // An optional shape that allows the vector to represent a matrix.
     // For Exmple, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row,
     // and keys[i] % 20 gives the column.
     // This also supports n-dimensonal tensors.
     // Note: If the tensor is sparse, you must specify this value.
     repeated uint64 shape = 3 [packed = true];
 }

 // Support for storing binary data for parsing in other ways (such as JPEG/etc).
 // This is an example of another type of value and may not immediately be supported.
 message Bytes {
     repeated bytes value = 1;

     // If the content type of the data is known, stores it.
     // This allows for the possibility of using decoders for common formats
     // in the future.
     optional string content_type = 2;
 }

 message Value {
     oneof value {
         // The numbering assumes the possible use of:
         // - float16, float128
         // - int8, int16, int32
         Float32Tensor float32_tensor = 2;
         Float64Tensor float64_tensor = 3;
         Int32Tensor int32_tensor = 7;
         Bytes bytes = 9;
     }
 }

 message Record {
     // Map from the name of the feature to the value.
     //
     // For vectors and libsvm-like datasets,
     // a single feature with the name `values`
     // should be specified.
     map<string, Value> features = 1;

     // An optional set of labels for this record.
     // Similar to the features field above, the key used for
     // generic scalar / vector labels should be 'values'.
     map<string, Value> label = 2;

     // A unique identifier for this record in the dataset.
     //
     // Whilst not necessary, this allows better
     // debugging where there are data issues.
     //
     // This is not used by the algorithm directly.
     optional string uid = 3;

     // Textual metadata describing the record.
     //
     // This may include JSON-serialized information
     // about the source of the record.
     //
     // This is not used by the algorithm directly.
     optional string metadata = 4;

     // An optional serialized JSON object that allows per-record
     // hyper-parameters/configuration/other information to be set.
     //
     // The meaning/interpretation of this field is defined by
     // the algorithm author and may not be supported.
     //
     // This is used to pass additional inference configuration
     // when batch inference is used (e.g. types of scores to return).
     optional string configuration = 5;
 }
```

プロトコルバッファを作成した後、Amazon SageMaker AI がアクセス可能な Amazon S3 の場所に保存して、`create_training_job` の `InputDataConfig` の一部として渡すことができます。

**注記**  
すべての Amazon SageMaker AI アルゴリズムについて、`InputDataConfig` の `ChannelName` は `train` に設定する必要があります。一部のアルゴリズムでも検証またはテスト `input channels` がサポートされています。これらは通常、ホールドアウトデータセットを使用してモデルのパフォーマンスを評価するために使用されます。ホールドアウトデータセットは、最初のトレーニングでは使用されませんが、モデルをさらに調整するために使用できます。

## トレーニング済みモデルの逆シリアル化
<a name="td-deserialization"></a>

Amazon SageMaker AI モデルは、`create_training_job` 呼び出しの `OutputDataConfig` `S3OutputPath` パラメータで指定された S3 バケットの model.tar.gz として保存されます。S3 バケットは、ノートブックインスタンスと同じ AWS リージョンにある必要があります。ホスティングモデルを作成しているときに、これらのほとんどのモデルアーティファクトを指定することができます。ノートブックインスタンスで開いて確認することもできます。`model.tar.gz` が解凍されると、`model_algo-1` が含まれています。これは、シリアル化された Apache MXNet オブジェクトです。たとえば、次を使用して k-means モデルをメモリにロードし、表示します。

```
import mxnet as mx
print(mx.ndarray.load('model_algo-1'))
```

# 推論の共通データ形式
<a name="cdf-inference"></a>

Amazon SageMaker AI アルゴリズムは、オンラインのミニバッチ予測取得に使用される、HTTP ペイロード用の異なる MIME タイプをいくつか受け入れて生成します。複数の AWS サービスを使用して、推論を実行する前にレコードを変換または前処理できます。少なくとも、以下のデータを変換する必要があります。
+ 推論リクエストのシリアル化 (ユーザーによる処理) 
+ 推論リクエストの逆シリアル化 (アルゴリズムによる処理) 
+ 推論レスポンスのシリアル化 (アルゴリズムによる処理) 
+ 推論レスポンスの逆シリアル化 (ユーザーによる処理) 

**Topics**
+ [推論リクエストのシリアル化のためにデータを変換する](#ir-serialization)
+ [推論レスポンスの逆シリアル化のためにデータを変換する](#ir-deserialization)
+ [すべてのアルゴリズムに共通のリクエスト形式](#common-in-formats)
+ [組み込みアルゴリズムでバッチ変換を使用する](#cm-batch)

## 推論リクエストのシリアル化のためにデータを変換する
<a name="ir-serialization"></a>

Amazon SageMaker AI アルゴリズムの推論リクエストのコンテンツタイプオプションには、`text/csv`、`application/json`、`application/x-recordio-protobuf` が含まれます。これらのすべてのタイプをサポートしていないアルゴリズムは、他のタイプをサポートできます。たとえば、XGBoost はこのリストの `text/csv` のみをサポートしていますが、`text/libsvm` もサポートしています。

`text/csv` の場合、`invoke_endpoint` の Body 引数の値は、各機能の値をカンマで区切った文字列である必要があります。例えば、4 つの機能があるモデルのレコードは `1.5,16.0,14,23.0` のようになります。トレーニングデータに対して実行された変換はすべて、推論を取得する前にデータに実行される必要があります。機能の順序は重要であるため、変更せずそのままにしておく必要があります。

`application/json` は柔軟性が向上しており、開発者がアプリケーションで使用するための複数の有効な形式を提供しています。高いレベルで、JavaScript のペイロードは次のようになる場合があります。

```
let request = {
  // Instances might contain multiple rows that predictions are sought for.
  "instances": [
    {
      // Request and algorithm specific inference parameters.
      "configuration": {},
      // Data in the specific format required by the algorithm.
      "data": {
         "<field name>": dataElement
       }
    }
  ]
}
```

`dataElement` を指定するために、次のオプションがあります。

**同等のプロトコルバッファ**

```
// Has the same format as the protocol buffers implementation described for training.
let dataElement = {
  "keys": [],
  "values": [],
  "shape": []
}
```

**単純な数値ベクトル**

```
// An array containing numeric values is treated as an instance containing a
// single dense vector.
let dataElement = [1.5, 16.0, 14.0, 23.0]

// It will be converted to the following representation by the SDK.
let converted = {
  "features": {
    "values": dataElement
  }
}
```

**複数数のレコード:**

```
let request = {
  "instances": [
    // First instance.
    {
      "features": [ 1.5, 16.0, 14.0, 23.0 ]
    },
    // Second instance.
    {
      "features": [ -2.0, 100.2, 15.2, 9.2 ]
    }
  ]
}
```

## 推論レスポンスの逆シリアル化のためにデータを変換する
<a name="ir-deserialization"></a>

Amazon SageMaker AI アルゴリズムは、いくつかのレイアウトで JSON を返します。高いレベルで、構造は次のようになります。

```
let response = {
  "predictions": [{
    // Fields in the response object are defined on a per algorithm-basis.
  }]
}
```

予測に含まれるフィールドはアルゴリズムで異なります。以下は、k-means アルゴリズムの出力例です。

**単一レコード推論** 

```
let response = {
  "predictions": [{
    "closest_cluster": 5,
    "distance_to_cluster": 36.5
  }]
}
```

**複数レコード推論**

```
let response = {
  "predictions": [
    // First instance prediction.
    {
      "closest_cluster": 5,
      "distance_to_cluster": 36.5
    },
    // Second instance prediction.
    {
      "closest_cluster": 2,
      "distance_to_cluster": 90.3
    }
  ]
}
```

**protobuf 入力を使用した複数レコード推論**

```
{
  "features": [],
  "label": {
    "closest_cluster": {
      "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0
    },
    "distance_to_cluster": {
      "values": [ 36.5 ]
    }
  },
  "uid": "abc123",
  "metadata": "{ "created_at": '2017-06-03' }"
}
```

SageMaker AI アルゴリズムは JSONLINES 形式もサポートします。この形式では、レコードごとのレスポンスコンテンツが JSON 形式と同じです。複数レコード構造は、レコードごとのレスポンスオブジェクトが改行文字で区切られて集まったものです。2 つの入力データポイントに対する組み込み kmeans アルゴリズムのレスポンスコンテンツは、次のとおりです。

```
{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0}
{"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}
```

バッチ変換の実行中は、`CreateTransformJobRequest` の `Accept` フィールドを `application/jsonlines` に設定して `jsonlines` レスポンスタイプを使用することをお勧めします。

## すべてのアルゴリズムに共通のリクエスト形式
<a name="common-in-formats"></a>

ほとんどのアルゴリズムでは、次の推論リクエスト形式の多くが使用されます。

### JSON リクエストの形式
<a name="cm-json"></a>

**コンテンツタイプ:** application/JSON

**高密度形式**

```
let request =   {
    "instances":    [
        {
            "features": [1.5, 16.0, 14.0, 23.0]
        }
    ]
}


let request =   {
    "instances":    [
        {
            "data": {
                "features": {
                    "values": [ 1.5, 16.0, 14.0, 23.0]
                }
            }
        }
    ]
}
```

**疎形式**

```
{
	"instances": [
		{"data": {"features": {
					"keys": [26, 182, 232, 243, 431],
					"shape": [2000],
					"values": [1, 1, 1, 4, 1]
				}
			}
		},
		{"data": {"features": {
					"keys": [0, 182, 232, 243, 431],
					"shape": [2000],
					"values": [13, 1, 1, 4, 1]
				}
			}
		},
	]
}
```

### JSONLINES リクエストの形式
<a name="cm-jsonlines"></a>

**コンテンツタイプ:** application/JSONLINES

**高密度形式**

高密度形式の単一レコードは、次のいずれかで表すことができます。

```
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

または

```
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
```

**疎形式**

疎形式の単一レコードは、次のように表されます。

```
{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }
```

複数のレコードは、単一レコード表現が改行文字で区切られて集まったものとして表されます。

```
{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } }
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

### CSV リクエストの形式
<a name="cm-csv"></a>

**コンテンツタイプ:** text/CSV; label\$1size=0

**注記**  
CSV のサポートは因数分解機では利用できません。

### RECORDIO リクエストの形式
<a name="cm-recordio"></a>

コンテンツタイプ: application/x-recordio-protobuf

## 組み込みアルゴリズムでバッチ変換を使用する
<a name="cm-batch"></a>

バッチ変換の実行中は、JSON の代わりに JSONLINES レスポンスタイプを使用することをお勧めします (ただし、アルゴリズムでサポートされている場合)。これを行うには、`CreateTransformJobRequest` の `Accept` フィールドを `application/jsonlines` に設定します。

変換ジョブを作成するときには、入力データの `ContentType` に基づいて `SplitType` を設定する必要があります。同様に、`CreateTransformJobRequest` の `Accept` フィールドに応じて `AssembleWith` を設定する必要があります。次の表を使用して、これらのフィールドを設定します。


| ContentType | 推奨される SplitType | 
| --- | --- | 
| application/x-recordio-protobuf | RecordIO | 
| text/csv | Line | 
| application/jsonlines | Line | 
| application/json | None | 
| application/x-image | None | 
| image/\$1 | None | 


| Accept | 推奨される AssembleWith | 
| --- | --- | 
| application/x-recordio-protobuf | None | 
| application/json | None | 
| application/jsonlines | Line | 

特定のアルゴリズムのレスポンス形式の詳細については、以下を参照してください。
+ [DeepAR 推論の形式](deepar-in-formats.md)
+ [因数分解機のレスポンス形式](fm-in-formats.md)
+ [IP Insights 推論データの形式](ip-insights-inference-data-formats.md)
+ [k-means のレスポンス形式](km-in-formats.md)
+ [k-NN リクエストとレスポンスの形式](kNN-inference-formats.md)
+ [線形学習のレスポンス形式](LL-in-formats.md)
+ [NTM のレスポンス形式](ntm-in-formats.md)
+ [Object2Vec 推論のデータ形式](object2vec-inference-formats.md)
+ [Object2Vec のエンコーダー埋め込み](object2vec-encoder-embeddings.md)
+ [PCA のレスポンス形式](PCA-in-formats.md)
+ [RCF のレスポンス形式](rcf-in-formats.md)

# 組み込みアルゴリズムのインスタンスタイプ
<a name="cmn-info-instance-types"></a>

ほとんどの Amazon SageMaker AI アルゴリズムは、トレーニングに GPU コンピューティングを活用するように設計されています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。このガイドには例外が記載されています。

サポートされている EC2 インスタンスの詳細については、「[Instance details](https://aws.amazon.com/sagemaker-ai/pricing/#Instance_details)」を参照してください。

データのサイズとタイプは、どのハードウェア構成が最も効果を発揮するかどうかに大きな影響を与えます。同じモデルが定期的にトレーニングされる場合、インスタンスタイプの初期テストで、長期的に見てよりコスト効率の良い構成を発見できます。さらに、GPU に対して最も効率的にトレーニングするアルゴリズムは、効率的な推論に GPU を必要としない場合があります。最も費用対効果の高いソリューションを試してみてください。自動インスタンスレコメンデーションを取得したり、カスタムロードテストを実施したりするには、[Amazon SageMaker Inference Recommender](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender.html) を使用してください。

SageMaker AI ハードウェア仕様の詳細については、[Amazon SageMakerの料金](https://aws.amazon.com/sagemaker/ai/pricing/)」を参照してください。

**UltraServers**

UltraServers は、低レイテンシー、高帯域幅のアクセラレーター相互接続を使用して複数の Amazon EC2 インスタンスを接続します。これらは、大量の処理能力を必要とする大規模な AI/ML ワークロードを処理するように構築されています。詳細については、「[Amazon EC2 UltraServers](https://aws.amazon.com/ec2/ultraservers/)」を参照してください。UltraServer の使用を開始するには、「[トレーニングジョブまたは HyperPod クラスターのトレーニングプランを予約する](https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html)」を参照してください。

Amazon SageMaker AI で UltraServer の使用を開始するには、[トレーニングプランを作成](https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html)します。UltraServer がトレーニングプランで使用できるようになったら、 AWS マネジメントコンソール、Amazon SageMaker AI API、または を使用してトレーニングジョブを作成します AWS CLI。トレーニングプランで購入した UltraServer インスタンスタイプを必ず指定してください。

UltraServer では一度に 1 つ以上のジョブを実行できます。UltraServer ではインスタンスがグループ化されるため、UltraServer キャパシティを組織で割り当てる方法について柔軟性があります。ジョブを設定するときは、組織のデータセキュリティガイドラインも忘れないようにしてください。1 つの UltraServer のインスタンスが同じ UltraServer の別のインスタンスの別のジョブのデータにアクセスできるためです。

UltraServer でハードウェア障害が発生した場合、SageMaker AI では自動的に問題を解決しようとします。SageMaker AI が問題を調査して解決すると、 AWS Health イベントまたは を通じて通知とアクションを受け取ることがあります AWS サポート。

トレーニングジョブが完了すると、SageMaker AI はインスタンスを停止しますが、プランがまだアクティブな場合はトレーニングプランで引き続き使用できます。ジョブの完了後に UltraServer のインスタンスを実行し続けるには、[マネージドウォームプール](https://docs.aws.amazon.com/sagemaker/latest/dg/train-warm-pools.html)を使用できます。

トレーニングプランに十分なキャパシティがある場合は、複数の UltraServer でトレーニングジョブを実行することもできます。デフォルトでは、各 UltraServer には 17 個のインスタンスと 1 個の予備のインスタンスで構成される 18 個のインスタンスが付属しています。さらにインスタンスが必要な場合は、UltraServer を追加購入する必要があります。トレーニングジョブを作成するときは、`InstancePlacementConfig` パラメータを使用して UltraServer 間でジョブを配置する方法を設定できます。

ジョブ配置を設定しない場合、SageMaker AI は UltraServer 内のインスタンスにジョブを自動的に割り当てます。このデフォルトの戦略は、別の UltraServer を使用する前に、1 つの UltraServer ですべてのインスタンスを満たすことを優先するベストエフォートに基づいています。例えば、14 個のインスタンスをリクエストし、トレーニングプランに 2 個の UltraServer がある場合、SageMaker AI では最初の UltraServer のすべてのインスタンスを使用します。20 個のインスタンスをリクエストし、トレーニングプランに 2 個の UltraServer がある場合、SageMaker AI は最初の UltraServer の 17 個のインスタンスすべてを使用してから、2 番目の UltraServer の 3 個のインスタンスを使用します。UltraServer 内のインスタンスでは NVLink を使用して通信しますが、個々の UltraServer では Elastic Fabric Adapter (EFA) を使用し、これがモデルトレーニングのパフォーマンスに影響する可能性があります。

# 組み込みアルゴリズムのログ
<a name="common-info-all-sagemaker-models-logs"></a>

Amazon SageMaker AI アルゴリズムは Amazon CloudWatch Logs を生成して、トレーニングプロセスに関する詳細情報を提供します。ログを表示するには、 AWS マネジメントコンソールで **CloudWatch** を選択し、**Logs** を選択し、/aws/sagemaker/TrainingJobs **ロググループ**を選択します。各トレーニングジョブには、トレーニングされたノードごとに 1 つのログストリームがあります。ログストリームの名前は、ジョブの作成時に `TrainingJobName` パラメータで指定された値で始まります。

**注記**  
ジョブが失敗してログが CloudWatch に表示されない場合、トレーニングの開始前にエラーが発生した可能性があります。理由は、間違ったトレーニングイメージや S3 の場所の指定が含まれます。

ログの内容は、アルゴリズムによって異なります。ただし、一般的には次の情報が表示されます。
+ ログの先頭で指定された引数の確認
+ トレーニング中に発生したエラー
+ アルゴリズム精度や数値パフォーマンスの測定
+ アルゴリズムのタイミングとアルゴリズム内の主要なステージ

## 共通エラー
<a name="example-errors"></a>

トレーニングジョブが失敗した場合、一部のエラーの詳細はトレーニングジョブ説明の `FailureReason` 戻り値によって以下のように提供されます。

```
sage = boto3.client('sagemaker')
sage.describe_training_job(TrainingJobName=job_name)['FailureReason']
```

それ以外は、CloudWatch Logs でのみ報告されます。一般的なエラーは以下のとおりです。

1. ハイパーパラメータを指定しない、またはアルゴリズムに対して無効なハイパーパラメータの指定。

   **CloudWatch Log から**

   ```
   [10/16/2017 23:45:17 ERROR 139623806805824 train.py:48]
   Additional properties are not allowed (u'mini_batch_siz' was
   unexpected)
   ```

1. ハイパーパラメータへの無効な値の指定。

   **FailureReason**

   ```
   AlgorithmError: u'abc' is not valid under any of the given
   schemas\n\nFailed validating u'oneOf' in
   schema[u'properties'][u'feature_dim']:\n    {u'oneOf':
   [{u'pattern': u'^([1-9][0-9]*)$', u'type': u'string'},\n
   {u'minimum': 1, u'type': u'integer'}]}\
   ```

   **FailureReason**

   ```
   [10/16/2017 23:57:17 ERROR 140373086025536 train.py:48] u'abc'
   is not valid under any of the given schemas
   ```

1. 不正確な protobuf ファイル形式。

   **CloudWatch Log から**

   ```
   [10/17/2017 18:01:04 ERROR 140234860816192 train.py:48] cannot
                      copy sequence with size 785 to array axis with dimension 784
   ```

# 表形式データ用の組み込みの SageMaker AI アルゴリズム
<a name="algorithms-tabular"></a>

Amazon SageMaker AI は、表形式データの分析に合わせて調整された組み込みアルゴリズムを提供します。表形式データとは、行 (観測値) と列 (特徴量) で構成される表にまとめられたデータセットを指します。表形式データ用の組み込み SageMaker AI アルゴリズムは、分類問題と回帰問題のどちらにも使用できます。
+ [AutoGluon-Tabular](autogluon-tabular.md) — モデルをアンサンブルして複数のレイヤーに積み重ねることで成功するオープンソースの AutoML フレームワーク。
+ [CatBoost](catboost.md) - 順序付けされたブースティングとカテゴリ別機能を処理するための革新的なアルゴリズムを導入する勾配ブーストツリーアルゴリズムの実装。
+ [因数分解機アルゴリズム](fact-machines.md) - 高次元スパースデータセット内の特徴間の相互作用を経済的にキャプチャするように設計された線形モデルの拡張。
+ [K 最近傍 (k-NN) アルゴリズム](k-nearest-neighbors.md) - K 個の最も近いラベル付きポイントを使用して分類用の新しいデータポイントにラベルを割り当てるか、回帰用の K 近接ポイントの平均から予測ターゲット値を割り当てるノンパラメトリック手法。
+ [LightGBM](lightgbm.md) — 効率とスケーラビリティを向上させるための 2 つの新しい技法を追加した勾配ブーストツリーアルゴリズムの実装: Gradient-based One-Side Sampling (GOSS) と Exclusive Feature Bundling (EFB)。
+ [線形学習アルゴリズム](linear-learner.md) - 回帰の線形関数または分類の線形しきい値関数を学習します。
+ [TabTransformer](tabtransformer.md) — セルフアテンションベースの Transformers で構築された、新しい深層表形式データモデル化アーキテクチャ。
+ [Amazon SageMaker AI の XGBoost アルゴリズム](xgboost.md) - より単純で弱いモデルのセットから推定のアンサンブルを組み合わせる勾配ブーストツリーアルゴリズムの実装。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| AutoGluon - 表形式 | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU または GPU (単一インスタンスのみ) | なし | 
| CatBoost | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU (単一インスタンスのみ) | なし | 
| 因数分解機 | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf | CPU (高密度データ用の GPU) | あり | 
| K 近傍 (k-NN) | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU (1 つ以上のインスタンス上の単一の GPU デバイス) | あり | 
| LightGBM | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU (単一インスタンスのみ) | なし | 
| 線形学習 | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU | あり | 
| TabTransformer | トレーニングおよび (オプションで) 検証 | ファイル | CSV | CPU または GPU (単一インスタンスのみ) | なし | 
| XGBoost (0.90-1、0.90-2、1.0-1、1.2-1、1.2-21) | トレーニング、および (オプションで) 検証 | ファイルまたはパイプ | CSV、libsVM、または Parquet | CPU (または 1.2-1 の場合 GPU) | あり | 

# AutoGluon-Tabular
<a name="autogluon-tabular"></a>

[AutoGluon-Tabular](https://auto.gluon.ai/stable/index.html) は、未処理の表形式データセットで高精度の機械学習モデルをトレーニングする、人気のあるオープンソースの AutoML フレームワークです。主にモデルとハイパーパラメータの選択に焦点を当てている既存の AutoML フレームワークとは異なり、AutoGluon-Tabular は複数のモデルをアンサンブルして複数のレイヤーに積み重ねることで成功しています。このページには、AutoGluon-Tabular の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI AutoGluon-Tabular の使用方法
<a name="autogluon-tabular-modes"></a>

AutoGluon-Tabular は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker Python SDK で AutoGluon-Tabular を使用する方法について説明します。Amazon SageMaker Studio Classic UI から AutoGluon-Tabular を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **AutoGluon-Tabular を組み込みアルゴリズムとして使用する**

  次のコード例に示すように、AutoGluon-Tabular 組み込みアルゴリズムを使用して、AutoGluon-Tabular トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、AutoGluon-Tabular 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  AutoGluon-Tabular イメージ URI を指定した後、AutoGluon-Tabular コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。AutoGluon-Tabular の組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトが提供されているので、置き換える必要はありません。スクリプトモードを使用して SageMaker トレーニングジョブを作成した経験が豊富な場合は、独自の AutoGluon-Tabular トレーニングスクリプトを組み込むことができます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "autogluon-classification-ensemble", "*", "training"
  training_instance_type = "ml.p3.2xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_binary/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "auto_stack"
  ] = "True"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  AutoGluon-Tabular を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。これらの例で使用される S3 バケットは、それらを実行するために使用されるノートブックインスタンスと同じ AWS リージョンに存在する必要があります。
  + [Tabular classification with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Classification_AutoGluon.ipynb)
  + [Tabular regression with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Regression_AutoGluon.ipynb)

# AutoGluon-Tabular アルゴリズムの入出力インターフェイス
<a name="InputOutput-AutoGluon-Tabular"></a>

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

SageMaker AI の AutoGluon-Tabular の実装では、トレーニングと推論に CSV 形式が対応しています:
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

**注記**  
CSV トレーニングの場合、アルゴリズムはターゲット変数が最初の列にあり、CSV にはヘッダーレコードがないと見なします。  
CSV 推論の場合、アルゴリズムは CSV 入力にラベル列がないと見なします。

**トレーニングデータ、検証データ、カテゴリ別特徴の入力形式**

AutoGluon-Tabular モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。トレーニングデータと検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`training` と `validation` チャネルの両方を使用して入力データを提供します。`training` チャネルだけを使用することもできます。

**`training` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `training` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、S3 プレフィックスまたは 1 つの特定の CSV ファイルを指すフル S3 パスです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列に存在する必要があります。検証データは、各ブースティング反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`training` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`training` チャネルのみを使用する**。

別の方法として、`training` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスが指すディレクトリには、1 つの CSV ファイルを保持する `training/` という名前のサブディレクトリが含まれている必要があります。オプションで、1 つの CSV ファイルを保持する `validation/` という名前の別のサブディレクトリを同じ場所に含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

SageMaker AI AutoGluon-Tabular は `autogluon.tabular.TabularPredictor` モジュールを使用してモデルをシリアル化/逆シリアル化し、それをモデルの保存/ロードに使用できます。

**SageMaker AI AutoGluon-Tabular でトレーニングしたモデルを AutoGluon フレームワークで使用するには**
+ 次の Python コードを使用します。

  ```
  import tarfile
  from autogluon.tabular import TabularPredictor
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = TabularPredictor.load(model_file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## AutoGluon-Tabular アルゴリズムの Amazon EC2 インスタンス推奨
<a name="Instance-AutoGluon-Tabular"></a>

SageMaker AI AutoGluon-Tabular は、単一インスタンスの CPU と単一インスタンスの GPU トレーニングをサポートしています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。GPU トレーニングを利用するには、インスタンスタイプを GPU インスタンスの 1 つ (P3 など) として指定します。現在、SageMaker AI AutoGluon-Tabular ではマルチ GPU トレーニングはサポートされていません。

## AutoGluon-Tabular のサンプルノートブック
<a name="autogluon-tabular-sample-notebooks"></a>

 次の表は、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムのさまざまなユースケースに対応する各種サンプルノートブックの概要を示しています。


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Classification_AutoGluon.ipynb)  |  このノートブックでは、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムを使用して表形式の分類モデルをトレーニングしホストする方法について説明します。  | 
|  [Tabular regression with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Regression_AutoGluon.ipynb)  |  このノートブックでは、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムを使用して表形式の回帰モデルをトレーニングしホストする方法について説明します。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# AutoGluon-Tabular の仕組み
<a name="autogluon-tabular-HowItWorks"></a>

AutoGluon-Tabular は、高度なデータ処理、深層学習、およびマルチレイヤーモデルアンサンブルメソッドを実行します。各列のデータ型を自動的に認識し、テキストフィールドの特別な処理を含む堅牢なデータ前処理を行います。

AutoGluon は、既製のブーストツリーからカスタマイズされたニューラルネットワークまで、さまざまなモデルに対応します。これらのモデルは斬新な方法でアンサンブルされています。モデルは複数のレイヤーに積み重ねられ、レイヤーごとにトレーニングされるため、raw データを一定の時間的制約内で高品質な予測に変換できます。このプロセスでは、分割されていない例を注意深く追跡しながらデータをさまざまな方法で分割することで、オーバーフィットが軽減されます。

AutoGluon-Tabular アルゴリズムは、さまざまなデータ型、関係、分布を堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。AutoGluon-Tabular は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

マルチレイヤースタッキング戦略の仕組みを示す次の図を参照してください。

![\[AutoGluon のマルチレイヤースタッキング戦略は、2 つのスタッキングレイヤーで示されています。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/autogluon_tabular_illustration.png)


詳細については、「*[AutoGluon-Tabular: Robust and Accurate AutoML for Structured Data](https://arxiv.org/pdf/2003.06505.pdf)*」を参照してください。

# AutoGluon-Tabular ハイパーパラメータ
<a name="autogluon-tabular-hyperparameters"></a>

次の表には、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI AutoGluon-Tabular アルゴリズムは、オープンソースの [AutoGluon-Tabular](https://github.com/awslabs/autogluon) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[AutoGluon-Tabular のサンプルノートブック](autogluon-tabular.md#autogluon-tabular-sample-notebooks) のサンプルデータセットに基づいています。

デフォルトでは、SageMaker AI AutoGluon-Tabular アルゴリズムは分類問題のタイプに基づいて評価メトリクスを自動的に選択します。このアルゴリズムは、データ内のラベル数に基づいて分類問題のタイプを検出します。回帰問題の場合、評価メトリクスは二乗平均平方根誤差です。二項分類問題の場合、評価メトリクスは受信者操作特性曲線 (AUC) の下面積です。多クラス分類問題の場合、評価メトリクスは精度です。`eval_metric` ハイパーパラメータを使用して、デフォルトの評価メトリクスを変更できます。説明、有効値、デフォルト値など、AutoGluon-Tabular ハイパーパラメータの詳細については、以下の表を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| eval\$1metric |  検証データの評価メトリクス。`eval_metric` がデフォルトの `"auto"` 値に設定されている場合、アルゴリズムは分類問題のタイプに基づいて自動的に評価メトリクスを選択します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/autogluon-tabular-hyperparameters.html) 有効な値: 文字列、有効な値については、「[AutoGluon documentation](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)」を参照してください。 デフォルト値: `"auto"`。  | 
| presets |  `fit()` 内のさまざまな引数のプリセット設定のリスト。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/autogluon-tabular-hyperparameters.html) 詳細については、「[AutoGluon Predictors](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)」を参照してください。 有効な値: 文字列、(`"best_quality"`、`"high_quality"`、`good_quality"`、`"medium_quality"`、`"optimize_for_deployment"`、` or "interpretable"`) のいずれか。 デフォルト値: `"medium_quality"`。  | 
| auto\$1stack |  AutoGluon が予測精度を上げるために、バギングとマルチレイヤースタックアンサンブルを自動的に利用すべきかどうか。予測精度を最大化するために、トレーニング時間が長くなっても構わない場合は、`auto_stack` を `"True"` に設定してください。これにより、データセットのプロパティに基づいて `num_bag_folds` と `num_stack_levels` 引数が自動的に設定されます。 有効な値: 文字列、`"True"` または `"False"` デフォルト値: `"False"`。  | 
| num\$1bag\$1folds |  モデルのバギングに使用されるフォールド数。`num_bag_folds` が `k` に等しい場合、トレーニング時間はおよそ `k` 倍増加します。`num_bag_folds` を 0 に設定するとバギングが無効になります。デフォルトでは無効になっていますが、予測パフォーマンスを最大化するために 5～10 の間の値を使用することをお勧めします。`num_bag_folds` を大きくすると、バイアスは低くなりますが、オーバーフィットが発生しやすいモデルになります。1 はこのパラメータでは無効な値で、`ValueError` が発生します。10 より大きい値ではリターンが減少する可能性があり、オーバーフィットによって全体的な結果に悪影響が及ぶことさえあります。予測をさらに改善するには、`num_bag_folds` を増やさず、代わりに `num_bag_sets` を増やします。 有効な値: 文字列、および `"0"` から `"10"` までの間の任意の整数。 デフォルト値: `"0"`。  | 
| num\$1bag\$1sets |  実行する kfold バギングの繰り返し回数 (値は 1 以上でなければなりません)。バギング中にトレーニングされるモデルの総数は `num_bag_folds` \$1 `num_bag_sets` と等しくなります。`time_limit` が指定されていない場合、このパラメータのデフォルトは 1 です。`num_bag_folds` が指定されていない場合、このパラメータは無効になります。値が 1 より大きいと、特に小さな問題やスタッキングが有効になっている場合に、予測パフォーマンスが向上します。 有効な値: 整数、範囲: [`1`, `20`]。 デフォルト値: `1`。  | 
| num\$1stack\$1levels |  スタックアンサンブルで使用するスタッキングレベルの数。モデルのトレーニング時間が約 `num_stack_levels` \$11 倍増加します。このパラメータを 0 に設定すると、スタックアンサンブルが無効になります。このパラメータはデフォルトでは無効になっていますが、予測パフォーマンスを最大化するために 1～3 の値を使用することをお勧めします。オーバーフィットや `ValueError` を防ぐために、`num_bag_folds` は 2 以上でなければなりません。 有効な値: 浮動小数点数、範囲: [`0`, `3`]。 デフォルト値: `0`。  | 
| refit\$1full |  通常のトレーニング手順の後、すべてのデータ (トレーニングと検証) ですべてのモデルに再トレーニングを行うかどうか。詳細については、「[AutoGluon Predictors](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)」を参照してください。 有効な値: 文字列、`"True"` または `"False"`。 デフォルト値: `"False"`。  | 
| set\$1best\$1to\$1refit\$1full |  予測子が予測に使用するデフォルトのモデルを変更するかどうか。`set_best_to_refit_full` を `"True"` に設定すると、デフォルトのモデルは、(`refit_full` によって有効化される) 再適合の結果として検証スコアが最も高いモデルに変更されます。`refit_full` が設定されている場合のみ有効です。 有効な値: 文字列、`"True"` または `"False"`。 デフォルト値: `"False"`。  | 
| save\$1space |  新しいデータの予測に必要のない補助モデルファイルを削除して、予測変数のメモリとディスクサイズを削減するかどうか。これは推論精度には影響しません。トレーニング済みモデルを予測に使用することが唯一の目的である場合は、`save_space` を `"True"` に設定することをお勧めします。`save_space` を `"True"` に設定すると、一部の高度な機能が使用できなくなる場合があります。詳細については、「`[predictor.save\$1space()](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.save_space.html)` ドキュメント」を参照してください。 有効な値: 文字列、`"True"` または `"False"`。 デフォルト値: `"False"`。  | 
| verbosity |  印刷メッセージの冗長性。`verbosity` レベルは `0`～`4` で、レベルが高いほど、印刷ステートメントはより詳細になります。`verbosity` を `0` にすると警告を抑制します。 有効な値: 整数、(`0`、`1`、`2`、`3`、または `4`) のいずれか。 デフォルト値: `2`。  | 

# AutoGluon-Tabular モデルの調整
<a name="autogluon-tabular-tuning"></a>

AutoGluon-Tabular はモデル調整にも使用できますが、その設計ではスタッキング手法とアンサンブル手法を使用して優れたパフォーマンスを発揮できるため、ハイパーパラメータの最適化は不要です。AutoGluon-Tabular は、モデルの調整に重点を置くのではなく、モデルを複数のレイヤーに積み重ねてレイヤーごとにトレーニングすることで成功しています。

AutoGluon-Tabular ハイパーパラメータの詳細については、「[AutoGluon-Tabular ハイパーパラメータ](autogluon-tabular-hyperparameters.md)」を参照してください。

# CatBoost
<a name="catboost"></a>

[CatBoost](https://catboost.ai/) は、勾配ブースティング決定ツリー (GBDT) アルゴリズムの簡単かつ費用効果の高いオープンソース実装です。GBDT はより単純でより弱いモデルの集合から得られた推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試みる、教師あり学習アルゴリズムです。

CatBoost は GBDT に次の 2 つの重要なアルゴリズムの進歩をもたらします。

1. 従来のアルゴリズムに代わる順列駆動型の、順序付けされたブースティングの実装

1. カテゴリ別特徴を処理するための革新的なアルゴリズム

どちらの手法も、現在存在する勾配ブーストアルゴリズムの実装すべてに存在する、特殊なターゲットリークによって引き起こされる予測シフトに対処するために作成されました。このページには、CatBoost の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI CatBoost の使用方法
<a name="catboost-modes"></a>

CatBoost は Amazon SageMaker AI に組み込まれているアルゴリズムとして使用できます。次のセクションでは、SageMaker Python SDK で CatBoost を使用する方法について説明します。Amazon SageMaker Studio Classic UI から CatBoost を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **CatBoost を組み込みアルゴリズムとして使用する**

  次のコード例に示すように、CatBoost 組み込みアルゴリズムを使用して、CatBoost トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、CatBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  CatBoost イメージ URI を指定した後、CatBoost コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。CatBoost の組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトが提供されているので、置き換える必要はありません。スクリプトモードを使用して SageMaker トレーニングジョブを作成した経験が豊富な場合は、独自の CatBoost トレーニングスクリプトを組み込むことができます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "catboost-classification-model", "*", "training"
  training_instance_type = "ml.m5.xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_multiclass/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "iterations"
  ] = "500"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  CatBoost を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
  + [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)
  + [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)

# CatBoost アルゴリズムの入出力インターフェイス
<a name="InputOutput-CatBoost"></a>

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

SageMaker AI の CatBoost の実装では、トレーニングと推論に CSV 形式が対応しています。
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

**注記**  
CSV トレーニングの場合、アルゴリズムはターゲット変数が最初の列にあり、CSV にはヘッダーレコードがないと見なします。  
CSV 推論の場合、アルゴリズムは CSV 入力にラベル列がないと見なします。

**トレーニングデータ、検証データ、カテゴリ別特徴の入力形式**

CatBoost モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。トレーニングデータと検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`training` と `validation` チャネルの両方を使用して入力データを提供します。`training` チャネルだけを使用することもできます。

**`training` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `training` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、1 つ以上の CSV ファイルを指す S3 プレフィックスか、1 つの特定の CSV ファイルを指すフル S3 パスのいずれかです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列にある必要があります。`training` または `validation` チャネルに複数の CSV ファイルが提供された場合、CatBoost アルゴリズムはファイルを連結します。検証データは、各ブースティングの反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルまたはファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`training` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`training` チャネルのみを使用する**。

別の方法として、`training` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスは、1 つ以上の CSV ファイルを含む `training/` という名前のサブディレクトリを持つディレクトリを指す必要があります。オプションで、同じ場所に 1 つ以上の CSV ファイルを含む `validation/` という別のサブディレクトリを含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

SageMaker AI CatBoost は `catboost.CatBoostClassifier` および `catboost.CatBoostRegressor` モジュールを使用してモデルをシリアル化/逆シリアル化し、それをモデルの保存/ロードに使用できます。

**SageMaker AI CatBoost でトレーニングしたモデルを `catboost` で使用する**
+ 次の Python コードを使用します。

  ```
  import tarfile
  from catboost import CatBoostClassifier
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  file_path = os.path.join(model_file_path, "model")
  model = CatBoostClassifier()
  model.load_model(file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## CatBoost アルゴリズムの Amazon EC2 インスタンス推奨
<a name="Instance-CatBoost"></a>

現在、SageMaker AI CatBoost では CPU を使用したトレーニングのみを行っています。CatBoost は (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C5 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。

## CatBoost サンプルノートブック
<a name="catboost-sample-notebooks"></a>

 次の表は、Amazon SageMaker AI CatBoost アルゴリズムのさまざまなユースケースに対応する各種サンプルノートブックの概要を示しています。


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)  |  このノートブックでは、Amazon SageMaker AI CatBoost アルゴリズムを使用して表形式の分類モデルをトレーニングしホストする方法について説明します。  | 
|  [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)  |  このノートブックでは、Amazon SageMaker AI CatBoost アルゴリズムを使用して表形式の回帰モデルをトレーニングしホストする方法について説明します。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# CatBoost の仕組み
<a name="catboost-HowItWorks"></a>

CatBoost は従来の勾配ブースティング決定ツリー (GBDT) アルゴリズムを実装しており、次の 2 つの重要なアルゴリズムの進歩が追加されています。

1. 従来のアルゴリズムに代わる順列駆動型の、順序付けされたブースティングの実装

1. カテゴリ別特徴を処理するための革新的なアルゴリズム

どちらの手法も、現在存在する勾配ブーストアルゴリズムの実装すべてに存在する、特殊なターゲットリークによって引き起こされる予測シフトに対処するために作成されました。

CatBoost アルゴリズムは、さまざまなデータ型、関係、分布、および微調整できるさまざまなハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。CatBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

勾配ブーストの詳細については、「[SageMaker AI XGBoost アルゴリズムの仕組み](xgboost-HowItWorks.md)」を参照してください。CatBoost メソッドで使用される追加の GOSS および EFB 手法の詳細については、[「CatBoost: unbiased boosting with categorical features](https://arxiv.org/pdf/1706.09516.pdf)」を参照してください。

# CatBoost のハイパーパラメータ
<a name="catboost-hyperparameters"></a>

次の表には、Amazon SageMaker AI CatBoost アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI CatBoost アルゴリズムは、オープンソースの [CatBoost](https://github.com/catboost/catboost) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[CatBoost サンプルノートブック](catboost.md#catboost-sample-notebooks) のサンプルデータセットに基づいています。

デフォルトでは、SageMaker AI CatBoost アルゴリズムは分類問題のタイプに基づいて評価指標と損失関数を自動的に選択します。CatBoost アルゴリズムは、データ内のラベル数に基づいて分類問題のタイプを検出します。回帰問題の場合、評価メトリクスと損失関数はどちらも二乗平均平方根誤差です。二項分類問題の場合、評価メトリクスは曲線下面積 (AUC) で、損失関数は対数損失です。多クラス分類問題の場合、評価メトリクスと損失関数はマルチクラスの交差エントロピーになります。`eval_metric` ハイパーパラメータを使用して、デフォルトの評価メトリクスを変更できます。説明、有効値、およびデフォルト値など、LightGBM ハイパーパラメータの詳細については、次の表を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| iterations |  構築できるツリーの最大数。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `500`。  | 
| early\$1stopping\$1rounds |  ある検証データポイントの 1 つのメトリクスが最後の `early_stopping_rounds` ラウンドで改善されない場合、トレーニングは停止します。`early_stopping_rounds` が 0 以下の場合、このハイパーパラメータは無視されます。 有効な値: 整数。 デフォルト値: `5`。  | 
| eval\$1metric |  検証データの評価メトリクス。`eval_metric` がデフォルトの `"auto"` 値に設定されている場合、アルゴリズムは分類問題のタイプに基づいて自動的に評価メトリクスを選択します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/catboost-hyperparameters.html) 有効な値: 文字列、有効な値については、「[CatBoost documentation](https://catboost.ai/en/docs/references/eval-metric__supported-metrics)」を参照してください。 デフォルト値: `"auto"`。  | 
| learning\$1rate |  トレーニング例の各バッチを完了した後に、モデルの重みが更新されるレート。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.009`。  | 
| depth |  ツリーの深さです。 有効な値: 整数、範囲: (`1`,`16`)。 デフォルト値: `6`。  | 
| l2\$1leaf\$1reg |  コスト関数の L2 正則化項の係数。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `3`。  | 
| random\$1strength |  ツリー構造を選択したときに、スコアリングの分割に使用するランダム性の量。このパラメータを使用すると、モデルがオーバーフィットするのを防ぐことができます。 有効な値: 浮動小数点、範囲: 正の浮動小数点数。 デフォルト値: `1.0`。  | 
| max\$1leaves |  生成されるツリーのリーフの最大数。`"Lossguide"` 成長ポリシーでのみ使用できます。 有効な値: 整数、範囲: (`2`,`64`)。 デフォルト値: `31`。  | 
| rsm |  ランダム部分空間法。特徴量をランダムに選択し直す場合に、分割選択ごとに使用する特徴量の割合。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `1.0`。  | 
| sampling\$1frequency |  ツリーを構築する際にウェイトやオブジェクトをサンプリングする頻度。 有効な値: 文字列、(`"PerTreeLevel"` または `"PerTree"`) のいずれか。 デフォルト値: `"PerTreeLevel"`。  | 
| min\$1data\$1in\$1leaf |  リーフ内のトレーニングサンプルの最小数。CatBoost は、サンプル数が指定値より少ないリーフでは新しい分割を検索しません。`"Lossguide"` および `"Depthwise"` 成長ポリシーでのみ使用できます。 有効な値: 整数、範囲: (`1` または `∞`)。 デフォルト値: `1`。  | 
| bagging\$1temperature |  ベイズブートストラップの設定を定義します。ベイズブートストラップを使用して、オブジェクトにランダムなウェイトを割り当てます。`bagging_temperature` が `1.0` に設定されている場合、重みは指数分布からサンプリングされます。`bagging_temperature` を `0.0` に設定すると、すべての重みは 1.0 になります。 有効な値: 浮動小数点、範囲: 負以外の浮動小数点数。 デフォルト値: `1.0`。  | 
| boosting\$1type |  ブースティングスキーム。「自動」とは、`boosting_type` が処理ユニットの種類、トレーニングデータセット内のオブジェクト数、選択した学習モードに基づいて選択されることを意味します。 有効な値: 文字列、(`"Auto"`, `"Ordered"`, `"Plain"`) のいずれかです。 デフォルト値: `"Auto"`。  | 
| scale\$1pos\$1weight |  二項分類における正のクラスのウェイト。この値は、正のクラスのオブジェクトのウェイトの乗数として使用されます。 有効な値: 浮動小数点、範囲: 正の浮動小数。 デフォルト値: `1.0`。  | 
| max\$1bin |  数値機能の分割数です。`"Auto"` は `max_bin` が処理ユニットのタイプやその他のパラメータに基づいて選択されることを意味します。詳細については、CatBoost のドキュメントを参照してください。 有効な値: 文字列、(`"Auto"` または `"1"` から `"65535"` までの整数の文字列) のいずれか。 デフォルト値: `"Auto"`。  | 
| grow\$1policy |  ツリー成長ポリシー。貪欲なツリー構造の実行方法を定義します。 有効な値: 文字列、(`"SymmetricTree"`、`"Depthwise"` または `"Lossguide"`) のいずれか。 デフォルト値: `"SymmetricTree"`。  | 
| random\$1seed |  トレーニングに使用するランダムシード。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `1.0`。 | 
| thread\$1count |  トレーニング中に使用するスレッド数。`thread_count` が `-1` の場合、スレッド数はプロセッサコアの数と等しくなります。`0` を `thread_count` にすることはできません。 有効な値: 整数、(`-1` または正の整数) のいずれか。 デフォルト値: `-1`。  | 
| verbose |  印刷メッセージの冗長性です。レベルが高いほど、印刷ステートメントはより詳細になります。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `1`。  | 

# CatBoost モデルの調整
<a name="catboost-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**モデル調整では、以下のハイパーパラメータに重点が置かれます。

**注記**  
学習損失関数は、ラベル列の一意の整数の数によって決まる分類タスクの種類に基づいて自動的に割り当てられます。詳細については、「[CatBoost のハイパーパラメータ](catboost-hyperparameters.md)」を参照してください。
+ モデルトレーニング中に最適化する学習損失関数
+ 検証中にモデルのパフォーマンスを評価するための評価指標
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
CatBoost の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## CatBoost アルゴリズムで計算される評価メトリクス
<a name="catboost-metrics"></a>

SageMaker AI CatBoost アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。評価メトリクスは、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| RMSE | 二乗平均平方根誤差 | 最小化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MAE | 平均絶対誤差 | 最小化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MedianAbsoluteError | 平均絶対誤差 | 最小化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| R2 | r2 スコア | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Logloss | 二項交差エントロピー | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Precision | precision | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Recall | リコール | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| F1 | f1 スコア | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| AUC | auc スコア | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MultiClass | マルチクラス交差エントロピー | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Accuracy | 正確性 | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| BalancedAccuracy | バランスのとれた精度 | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 

## 調整可能な CatBoost ハイパーパラメータ
<a name="catboost-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して CatBoost モデルを調整します。CatBoost のメトリクスに最も影響を与えるハイパーパラメータは、`learning_rate`、`depth`、`l2_leaf_reg` および `random_strength` です。すべての CatBoost ハイパーパラメータのリストについては、「[CatBoost のハイパーパラメータ](catboost-hyperparameters.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001、MaxValue: 0.01 | 
| depth | IntegerParameterRanges | MinValue: 4、MaxValue: 10 | 
| l2\$1leaf\$1reg | IntegerParameterRanges | MinValue: 2、MaxValue: 10 | 
| random\$1strength | ContinuousParameterRanges | MinValue: 0、MaxValue: 10 | 

# 因数分解機アルゴリズム
<a name="fact-machines"></a>

因数分解機アルゴリズムは、分類タスクと回帰タスクの両方に使用できる汎用的な教師あり学習アルゴリズムです。これは、高次元スパースデータセット内の特徴間の相互作用を経済的にキャプチャするように設計された線形モデルの拡張です。例えばクリック予測システムでは、因数分解機モデルは、特定の広告カテゴリの広告が特定のページカテゴリのページに配置されたときに確認されたクリック率パターンをキャプチャできます。因数分解機は、クリック予測や項目推奨など、高次元スパースデータセットを処理するタスクに適した選択肢です。

**注記**  
因数分解機の Amazon SageMaker AI 実装では、特徴間のペアワイズ (2 次) 相互作用のみを考慮します。

**Topics**
+ [因数分解機アルゴリズムの入出力インターフェイス](#fm-inputoutput)
+ [因数分解機アルゴリズムの EC2 インスタンスの推奨事項](#fm-instances)
+ [因数分解機サンプルノートブック](#fm-sample-notebooks)
+ [因数分解機の仕組み](fact-machines-howitworks.md)
+ [因数分解機のハイパーパラメータ](fact-machines-hyperparameters.md)
+ [因数分解機モデルを調整する](fm-tuning.md)
+ [因数分解機のレスポンス形式](fm-in-formats.md)

## 因数分解機アルゴリズムの入出力インターフェイス
<a name="fm-inputoutput"></a>

因数分解機アルゴリズムは、二項分類モードまたは回帰モードで実行できます。各モードで、データセットをトレーニングチャネルデータセットと共に**テスト**チャネルに提供できます。スコアリングは、使用するモードによって異なります。回帰モードでは、テストデータセットは二乗平均平方根誤差 (RMSE) を使用してスコアリングされます。二項分類モードでは、テストデータセットは二項交差エントロピー (対数損失)、精度 (しきい値 = 0.5) および F1 スコア (しきい値 = 0.5) を使用してスコアリングされます。

**トレーニング**については、因数分解機アルゴリズムは、現在 `Float32` テンソルの `recordIO-protobuf` 形式でのみサポートしています。ユースケースは主にスパースデータに対するものであるため、`CSV` は適切な候補ではありません。recordIO でラップされた protobuf では、ファイルモードとパイプモードの両方のトレーニングがサポートされます。

**推論**については、因数分解機アルゴリズムは `application/json` 形式と `x-recordio-protobuf` 形式をサポートします。
+ **バイナリ分類**の問題については、アルゴリズムは、スコアとラベルを予測します。ラベルは、数値で、`0` または `1` になります。スコアは、ラベルが `1` があるべきであるとアルゴリズムがみなす度合いを示す数値です。アルゴリズムは最初にスコアを計算し、次にスコア値からラベルを導出します。スコアが 0.5 以上である場合、ラベルは `1` です。
+ **回帰**の問題については、スコアのみが返り、それが予測値になります。たとえば、因数分解器が映画の評価の予測に使用されている場合、スコアは予測された評価値を示します。

トレーニングファイルと推論ファイルの形式の詳細については、[因数分解機サンプルノートブック](#fm-sample-notebooks)を参照してください。

## 因数分解機アルゴリズムの EC2 インスタンスの推奨事項
<a name="fm-instances"></a>

Amazon SageMaker AI の因数分解機アルゴリズムは高スケーラブルであり、分散型インスタンスでトレーニングできます。スパースデータセットと高密度データセットの両方に CPU インスタンスでのトレーニングと推論をお勧めします。状況によっては、高密度データに対する 1 つ以上の GPU でのトレーニングに利点がある場合があります。GPU でのトレーニングは高密度データでのみ使用できます。スパースデータには CPU インスタンスを使用してください。因数分解機アルゴリズムは、トレーニングと推論用に P2、P3、G4dn、G5 インスタンスをサポートします。

## 因数分解機サンプルノートブック
<a name="fm-sample-notebooks"></a>

SageMaker AI 因数分解機学習アルゴリズムを使用して MNIST データセット内の 0～9 の手書き数字のイメージを分析するサンプルノートブックについては、「[An Introduction to Factorization Machines with MNIST](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/factorization_machines_mnist/factorization_machines_mnist.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使うトピックモデリングのサンプルノートブックは、**[Introduction to Amazon Algorithms]** (Amazon アルゴリズムの概要) セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# 因数分解機の仕組み
<a name="fact-machines-howitworks"></a>

因数分解機モデルの予測タスクは、特徴セット xi からターゲットドメインに対する関数 ŷ を推定することです。このドメインは、回帰の場合は実数値であり、分類の場合は二項です。因数分解機モデルは教師ありモデルであるため、使用可能なトレーニングデータセット (xii,yj) があります。このモデルが示す利点は、ペアワイズ特徴相互作用をキャプチャするために因数分解パラメータ化を使用する方法にあります。これは数学的には次のように表すことができます。

![\[因数分解機モデルの方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM1.jpg)


 この方程式の 3 つの項は、それぞれモデルの 3 つの要素に対応します。
+ w0 項は、グローバルバイアスを表します。
+ wi 線形項は、i 番目の変数の強度をモデル化したものです。
+ 因数分解項 <vi,vj> は、i 番目と j 番目の変数間のペアワイズ相互作用をモデル化したものです。

グローバルバイアス項と線形項は線形モデルの場合と同じです。ペアワイズ特徴相互作用は、各特徴について学習された対応する係数の内積として第 3 項でモデル化されます。学習された係数は、各特徴の埋め込みベクトルと考えることもできます。たとえば、分類タスクでは、特徴のペアが正のラベルの付いたサンプルで同時に発生する傾向がある場合、それらの係数の内積は大きくなります。つまり、それらの埋め込みベクトルはコサイン類似度で相互に近くなります。因数分解機モデルの詳細については、「[Factorization Machines」(因数分解機](https://www.ismll.uni-hildesheim.de/pub/pdfs/Rendle2010FM.pdf)) を参照してください。

回帰タスクの場合、モデル予測 ŷn とターゲット値 yn の間の二乗誤差を最小化することによってモデルをトレーニングします。これは二乗損失と呼ばれます。

![\[二乗損失の方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM2.jpg)


分類タスクの場合、対数損失とも呼ばれる交差エントロピー損失を最小化することによってモデルをトレーニングします。

![\[対数損失の方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM3.jpg)


各パラメータの意味は次のとおりです。

![\[予測値のロジスティック関数のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM4.jpg)


分類のための損失関数の詳細については、[Loss functions for classification (分類のための損失関数)](https://en.wikipedia.org/wiki/Loss_functions_for_classification) を参照してください。

# 因数分解機のハイパーパラメータ
<a name="fact-machines-hyperparameters"></a>

次のテーブルに、因数分解機アルゴリズムのハイパーパラメータを示します。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。


| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim | 入力特徴空間の次元。これはスパース入力では非常に高くなることがあります。 **必須** 有効な値: 正の整数。推奨値の範囲: [10000,10000000]  | 
| num\$1factors | 因数分解の次元。 **必須** 有効な値: 正の整数。推奨値の範囲: [2,1000]。通常、64 が良好な結果を生成し、開始点として推奨されます。  | 
| predictor\$1type | 予測子のタイプ。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **必須** 有効な値: 文字列: `binary_classifier` または `regressor`  | 
| bias\$1init\$1method | バイアス項の初期化方法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **オプション** 有効な値: `uniform`、`normal`、または `constant` デフォルト値: `normal`  | 
| bias\$1init\$1scale | バイアス項の初期化の範囲。`bias_init_method` が `uniform` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| bias\$1init\$1sigma | バイアス項の初期化の標準偏差。`bias_init_method` が `normal` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.01  | 
| bias\$1init\$1value | バイアス項の初期値。`bias_init_method` が `constant` に設定されている場合に有効です。 **オプション** 有効な値: 浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| bias\$1lr | バイアス項の学習レート。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.1  | 
| bias\$1wd | バイアス項の重み減衰。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.01  | 
| clip\$1gradient | 勾配クリッピングオプティマイザパラメータ。区間 [-`clip_gradient`, \$1`clip_gradient`] に投影することで勾配をクリップします。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし  | 
| epochs | 実行するトレーニングエポックの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1  | 
| eps | 0 による除算を回避するための Epsilon パラメータ。 **オプション** 有効な値: 浮動小数点数。推奨値: small。 デフォルト値: なし  | 
| factors\$1init\$1method | 因数分解項の初期化方法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **オプション** 有効な値: `uniform`、`normal`、または `constant` デフォルト値: `normal`  | 
| factors\$1init\$1scale  | 因数分解項の初期化の範囲。`factors_init_method` が `uniform` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| factors\$1init\$1sigma | 因数分解項の初期化の標準偏差。`factors_init_method` が `normal` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.001  | 
| factors\$1init\$1value | 因数分解項の初期値。`factors_init_method` が `constant` に設定されている場合に有効です。 **オプション** 有効な値: 浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| factors\$1lr | 因数分解項の学習レート。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.0001  | 
| factors\$1wd | 因数分解項の重み減衰。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.00001  | 
| linear\$1lr | 線形項の学習レート。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.001  | 
| linear\$1init\$1method | 線形項の初期化方法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **オプション** 有効な値: `uniform`、`normal`、または `constant` デフォルト値: `normal`  | 
| linear\$1init\$1scale | 線形項の初期化の範囲。`linear_init_method` が `uniform` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| linear\$1init\$1sigma | 線形項の初期化の標準偏差。`linear_init_method` が `normal` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.01  | 
| linear\$1init\$1value | 線形項の初期値。`linear_init_method` が *constant* に設定されている場合に有効です。 **オプション** 有効な値: 浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| linear\$1wd | 線形項の重み減衰。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.001  | 
| mini\$1batch\$1size | トレーニングに使用されるミニバッチのサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 1000  | 
| rescale\$1grad |  勾配再スケーリングオプティマイザパラメータ。設定されている場合、更新前に勾配を `rescale_grad` で乗算します。多くの場合、1.0/`batch_size` として選択されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし  | 

# 因数分解機モデルを調整する
<a name="fm-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## 因数分解機アルゴリズムによって計算されたメトリクス
<a name="fm-metrics"></a>

因数分解機アルゴリズムには、二項分類と回帰予測子の両方のタイプがあります。自動モデル調整に使用できるメトリクスは、予測子タイプによって決まります。アルゴリズムは、トレーニング中に計算される `test:rmse` 回帰メトリクスを報告します。回帰タスク用にモデルを調整するときには、このメトリクスを目標として選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:rmse | 二乗平均平方根誤差 | 最小化 | 

因数分解機アルゴリズムは、トレーニング中に計算される 3 つの二項分類メトリクスをレポートします。二項分類タスクのモデルを調整するときには、目標としてこれらのいずれかを選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:binary\$1classification\$1accuracy | 正解率 | 最大化 | 
| test:binary\$1classification\$1cross\$1entropy | 交差エントロピー | 最小化 | 
| test:binary\$1f\$1beta | Beta | 最大化 | 

## 調整可能な因数分解機ハイパーパラメータ
<a name="fm-tunable-hyperparameters"></a>

因数分解機アルゴリズムの次のハイパーパラメータを調整できます。バイアス、線形、および因数分解の項を含む初期化パラメータは、それらの初期化方法に応じて異なります。初期化方法は、`uniform`、`normal`、`constant` の 3 つです。これらの初期化方法は、それ自体が調整可能なのではありません。調整可能なパラメータは、どの初期化方法を選択したかによって異なります。たとえば、初期化方法が `uniform` である場合は、`scale` パラメータのみが調整可能です。具体的には、`bias_init_method==uniform` の場合は、`bias_init_scale`、`linear_init_scale`、および `factors_init_scale` が調整可能です。同様に、初期化方法が `normal` である場合は、`sigma` パラメータのみが調整可能です。初期化方法が `constant` である場合は、`value` パラメータのみが調整可能です。これらの依存関係を、次の表にリストしてあります。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 依存関係 | 
| --- | --- | --- | --- | 
| bias\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==uniform | 
| bias\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==normal | 
| bias\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==constant | 
| bias\$1lr | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| bias\$1wd | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| epoch | IntegerParameterRange | MinValue: 1、MaxValue: 1000 | なし | 
| factors\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==uniform | 
| factors\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==normal | 
| factors\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==constant | 
| factors\$1lr | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| factors\$1wd | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512] | なし | 
| linear\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==uniform | 
| linear\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==normal | 
| linear\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==constant | 
| linear\$1lr | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| linear\$1wd | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 100、MaxValue: 10000 | なし | 

# 因数分解機のレスポンス形式
<a name="fm-in-formats"></a>

Amazon SageMaker AI には、JSON、JSONLINES、RECORDIO などの因数分解機モデルから推論を取得するためのいくつかのレスポンス形式があります。構造は二項分類タスクとリグレッションタスクでそれぞれ固有となります。

## JSON レスポンスの形式
<a name="fm-json"></a>

二項分類

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

リグレッション

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## JSONLINES レスポンスの形式
<a name="fm-jsonlines"></a>

二項分類

```
{"score": 0.4, "predicted_label": 0}
```

リグレッション

```
{"score": 0.4}
```

## RECORDIO レスポンスの形式
<a name="fm-recordio"></a>

二項分類

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

リグレッション

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```

# K 最近傍 (k-NN) アルゴリズム
<a name="k-nearest-neighbors"></a>

Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムは、インデックスベースのアルゴリズムです。このアルゴリズムは、分類または回帰にノンパラメトリック手法を使用します。分類問題の場合、アルゴリズムはサンプルポイントに最も近い *k* ポイントに対してクエリを実行し、そのクラスで最も頻繁に使用されるラベルを予測ラベルとして返します。回帰問題の場合、アルゴリズムはサンプルポイントに最も近い *k* ポイントに対してクエリを実行し、それらの特徴値の平均を予測値として返します。

k-NN アルゴリズムを使用したトレーニングには、サンプリング、次元削減、およびインデックス構築の 3 つのステップがあります。サンプリングによって、初期データセットがメモリに収まるように、そのサイズが縮小されます。次元削減の場合、アルゴリズムはデータの特徴次元を削減して、メモリ内の k-NN モデルのフットプリントと推論レイテンシーを減らします。ランダムプロジェクションと高速 Johnson-Lindenstrauss 変換の 2 つの次元削減手法が用意されています。通常、高次元 (d > 1000) のデータセットには次元削減を使用して、「次元の呪い」を回避します。次元の呪いとは、次元数が増加するにつれてスパースが進み、データの統計分析が困難になるという現象です。k-NN のトレーニングの主な目標は、インデックスを構築することです。このインデックスを使用すると、値またはクラスラベルがまだ判別されていないポイントと、推論に使用する k 近傍ポイントとの間の距離を効率的に検索できます。

**Topics**
+ [k-NN アルゴリズムの入出力インターフェイス](#kNN-input_output)
+ [k-NN サンプルノートブック](#kNN-sample-notebooks)
+ [k-NN アルゴリズムの仕組み](kNN_how-it-works.md)
+ [k-NN アルゴリズムの EC2 インスタンスに関する推奨事項](#kNN-instances)
+ [k-NN ハイパーパラメータ](kNN_hyperparameters.md)
+ [k-NN モデルの調整](kNN-tuning.md)
+ [k-NN トレーニング入力のデータ形式](kNN-in-formats.md)
+ [k-NN リクエストとレスポンスの形式](kNN-inference-formats.md)

## k-NN アルゴリズムの入出力インターフェイス
<a name="kNN-input_output"></a>

SageMaker AI k-NN は、トレーニングとテストのデータチャネルをサポートします。
+ サンプリングして k-NN インデックスに構築するデータには、*トレーニングチャネル*を使用します。
+ ログファイルにスコアを出力するには、*テストチャネル*を使用します。スコアはミニバッチごとに 1 行で表示され、`classifier` については精度、`regressor` については平均二乗誤差 (mse) のスコアが表示されます。

トレーニング入力の場合、k-NN は `text/csv` および `application/x-recordio-protobuf` データ形式をサポートします。入力タイプが `text/csv` の場合は、最初の `label_size` 列が、その行のラベルベクトルとして解釈されます。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについてモデルをトレーニングできます。

推論入力の場合、k-NN は `application/json`、`application/x-recordio-protobuf`、および `text/csv` データ形式をサポートします。`text/csv` 形式は、`label_size` およびエンコーディングパラメータを受け入れます。`label_size` は 0 であり、UTF-8 エンコーディングであることが想定されます。

推論出力の場合、k-NN は `application/json` および `application/x-recordio-protobuf` データ形式をサポートします。これら 2 つのデータ形式は冗長出力モードもサポートします。冗長出力モードでは API は、最小から最大までソートされた距離ベクトルと、ラベルベクトル内の対応する要素を使用して、検索結果を提供します。

バッチ変換の場合、k-NN は入力と出力の両方で `application/jsonlines` データ形式をサポートします。入力例は次のとおりです。

```
content-type: application/jsonlines

{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

出力例は次のとおりです。

```
accept: application/jsonlines

{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

入力および出力ファイル形式の詳細については、[k-NN トレーニング入力のデータ形式](kNN-in-formats.md) (トレーニングの場合)、[k-NN リクエストとレスポンスの形式](kNN-inference-formats.md) (推論の場合は)、および[k-NN サンプルノートブック](#kNN-sample-notebooks)を参照してください。

## k-NN サンプルノートブック
<a name="kNN-sample-notebooks"></a>

SageMaker AI K 最近傍アルゴリズムを使用して地質データおよび林野データから原野の植生タイプを予測するサンプルノートブックについては、「[K-Nearest Neighbor Covertype](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html)」を参照してください。

Jupyter ノートブックインスタンスを使用して、SageMaker AI の例を実行します。SageMaker AI で Jupyter ノートブックインスタンスを作成して開く方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。「**Introduction to Amazon algorithms (Amazon アルゴリズムの概要)**」セクションで、K-Nearest Neighbor ノートブックを検索します。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# k-NN アルゴリズムの仕組み
<a name="kNN_how-it-works"></a>

Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムは、入力データのサンプリング、次元削減の実行、インデックスの構築を含む、マルチステップのトレーニングプロセスに従います。その後、インデックス化されたデータを推論時に使用して、特定のデータポイントの K 個の最近傍を効率的に検出し、隣接するラベルまたは値に基づいて予測を行います。

## ステップ 1: サンプリングする
<a name="step1-k-NN-sampling"></a>

トレーニングデータセットからサンプリングするデータポイントの総数を指定するには、`sample_size` パラメータを使用します。たとえば、初期データセットに 1,000 個のデータポイントがあり、`sample_size` が 100 に設定されている場合 (インスタンスの総数は 2)、各ワーカーは 50 ポイントをサンプリングします。合計 100 個のデータポイントが収集されます。サンプリングはデータポイントの数を基準に線形時間で実行されます。

## ステップ 2: 次元削減を実行する
<a name="step2-kNN-dim-reduction"></a>

k-NN アルゴリズムの現在の実装には、2 つの次元削減手法が用意されています。手法を指定するには、`dimension_reduction_type` ハイパーパラメータを使用します。`sign` 法は、ランダム符号の行列を用いる線形射影を使用するランダム射影を指定します。一方、`fjlt` 法は、フーリエ変換に基づく手法である高速 Johnson-Lindenstrauss 変換を指定します。どちらの方法でも L2 と内積距離は保持されます。`fjlt`法は、標的次元が大きく、CPU 推論でパフォーマンスが優れている場合に使用する必要があります。これらの手法は、計算の複雑性が異なります。`sign` 法は、次元 d の n 個のポイントのバッチの次元を標的次元 k に縮小するために O(ndk) 時間を必要とします。`fjlt` 法は O(nd log(d)) 時間を必要としますが、関係する定数はより大きくなります。次元削減を使用すると、データにノイズが入り、このノイズが予測精度を低下させる可能性があります。

## ステップ 3: インデックスを構築する
<a name="step3-kNN-build-index"></a>

推論中に、アルゴリズムはサンプルポイントの K 近傍についてインデックスに対してクエリを実行します。ポイントへの参照に基づいて、アルゴリズムは分類または回帰予測を行います。提供されたクラスラベルまたは値に基づいて予測を行います。k-NN は、フラットインデックス、逆インデックス、および直積量子化を使用する逆インデックスの 3 タイプのインデックスを提供します。このタイプは `index_type` パラメータで指定します。

## モデルをシリアル化する
<a name="kNN-model-serialization"></a>

k-NN アルゴリズムはトレーニングを終了すると、推論に備えて 3 つのファイルをシリアル化します。
+ model\$1algo-1: 最近傍を計算するためのシリアル化されたインデックスを含みます。
+ model\$1algo-1.labels: インデックスからのクエリ結果に基づいて予測ラベルを計算するためのシリアル化ラベル (np.float32 バイナリ形式) を含みます。
+ model\$1algo-1.json: 推論のためにトレーニングから取得した `k` および `predictor_type` ハイパーパラメータを他の関連する状態とともに保存する、JSON 形式のモデルメタデータを含みます。

k-NN の現在の実装では、メタデータファイルを修正して予測の計算方法を変更できます。たとえば、`k` を 10 に変更したり、`predictor_type` を *regressor* に変更したりできます。

```
{
  "k": 5,
  "predictor_type": "classifier",
  "dimension_reduction": {"type": "sign", "seed": 3, "target_dim": 10, "input_dim": 20},
  "normalize": False,
  "version": "1.0"
}
```

## k-NN アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="kNN-instances"></a>

CPU インスタンス (ml.m5.2xlarge など) または GPU インスタンスでトレーニングすることをお勧めします。k-NN アルゴリズムは、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

GPU ハードウェアを使用すると、CPU から GPU への通信に負担がかかるため、通常、CPU からの推論リクエストは GPU からのリクエストよりも平均レイテンシーが短くなります。ただし、GPU は一般的にバッチサイズが大きいほどスループットが高くなります。

# k-NN ハイパーパラメータ
<a name="kNN_hyperparameters"></a>

次の表に、Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムで設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim |  入力データ内の特徴の数。 **必須** 有効な値: 正の整数。  | 
| k |  最近傍の数。 **必須** 有効な値: 正の整数  | 
| predictor\$1type |  データラベルに使用する推論のタイプ。 **必須** 有効な値: 分類の場合は *classifier*、回帰の場合は *regressor*。  | 
| sample\$1size |  トレーニングデータセットからサンプリングされるデータポイントの数。 **必須** 有効な値: 正の整数  | 
| dimension\$1reduction\$1target |  縮小後の標的次元。 `dimension_reduction_type` パラメータを指定する場合に**必須**です。 有効な値: 0 より大きく、`feature_dim` より小さい正の整数。  | 
| dimension\$1reduction\$1type |  次元削減手法のタイプ。 **オプション** 有効な値: ランダム射影の場合は *sign* 、高速 Johnson-Lindenstrauss 変換の場合は *fjlt*。 デフォルト値: 次元削減なし  | 
| faiss\$1index\$1ivf\$1nlists |  `index_type` が *faiss.IVFFlat* または *faiss.IVFPQ* である場合に、インデックス内で作成する重心の数。 **オプション** 有効な値: 正の整数 デフォルト値: *auto* (`sqrt(sample_size)` に解決される)。  | 
| faiss\$1index\$1pq\$1m |  `index_type` が *faiss.IVFPQ* に設定されている場合に、インデックス内で作成するベクトルサブコンポーネントの数。 FaceBook AI 類似検索 (FAISS) ライブラリでは、`faiss_index_pq_m` の値がデータ次元の約数であることが必要です。`faiss_index_pq_m` がデータ次元の約数でない場合は、データ次元を `faiss_index_pq_m` で割り切れる最小の整数に増やします。次元削減が適用されない場合、アルゴリズムはゼロのパディングを追加します。次元削減が適用される場合、アルゴリズムは `dimension_reduction_target` ハイパーパラメータの値を大きくします。 **オプション** 有効な値: 次の正の整数の 1 つ：1、2、3、4、8、12、16、20、24、28、32、40、48、56、64、96  | 
| index\$1metric |  最近傍を見つけるときにポイント間の距離を測定するためのメトリクス。`index_type` を `faiss.IVFPQ` に設定してトレーニングする場合、`INNER_PRODUCT` 距離と `COSINE` 類似度はサポートされません。 **オプション** 有効な値: ユークリッド距離の場合は *L2*、内積距離の場合は *INNER\$1PRODUCT*、余弦類似度の場合は *COSINE*。 デフォルト値: *L2*  | 
| index\$1type |  インデックスのタイプ。 **オプション** 有効な値: *faiss.Flat*、*faiss.IVFFlat*、*faiss.IVFPQ*。 デフォルト値: *faiss.Flat*  | 
| mini\$1batch\$1size |  データイテレーターのミニバッチごとの観測数。 **オプション** 有効な値: 正の整数 デフォルト値: 5000  | 

# k-NN モデルの調整
<a name="kNN-tuning"></a>

Amazon SageMaker AI K 最近傍アルゴリズムは、教師ありアルゴリズムです。このアルゴリズムはテストデータセットを消費し、分類タスクの精度または回帰タスクの平均二乗誤差に関するメトリクスを出力します。これらの精度メトリクスは、それぞれのタスクについてのモデル予測を経験的テストデータによって提供されるグランドトゥルースと比較します。テストデータセットで最高の精度または最低の誤差を報告する最善のモデルを見つけるには、k-NN のハイパーパラメータ調整ジョブを実行します。

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムの予測タスクに適した目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。ハイパーパラメータは、モデルパラメータの推定を支援する目的でのみ使用され、予測を行うためにトレーニングされたモデルでは使用されません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## k-NN アルゴリズムによって計算されたメトリクス
<a name="km-metrics"></a>

k 最近傍アルゴリズムは、`predictor_type` ハイパーパラメータで指定されたタスクのタイプに応じて、トレーニング中に次の表の 2 つのメトリクスのいずれかを計算します。
+ *classifier* は分類タスクを指定し、`test:accuracy` を計算します。
+ *regressor* は回帰タスクを指定し、`test:mse` を計算します。

モデルを調整するときに、関連する目標メトリクスを計算するために実行されるタスクのタイプに適した `predictor_type` 値を選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:accuracy |  `predictor_type` が *classifier* に設定されている場合、k-NN は、K 最近傍のラベルの平均に基づいて予測されたラベルを、テストチャネルデータで提供されたグランドトゥルースラベルと比較します。報告される精度は、0.0 (0%) ～ 1.0 (100%) の範囲です。  |  最大化  | 
| test:mse |  `predictor_type` が *regressor* に設定されている場合、k-NN は、K 最近傍のラベルの平均に基づいて予測されたラベルを、テストチャネルデータで提供されたグランドトゥルースラベルと比較します。平均二乗誤差は、2 つのラベルを比較することによって計算されます。  |  最小化  | 



## 調整可能な k-NN ハイパーパラメータ
<a name="km-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して Amazon SageMaker AI K 最近傍モデルを調整します。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| k |  IntegerParameterRanges  |  MinValue: 1、MaxValue: 1024  | 
| sample\$1size |  IntegerParameterRanges  |  MinValue: 256、MaxValue: 20000000  | 

# k-NN トレーニング入力のデータ形式
<a name="kNN-in-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Training](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html)」で説明されている一般的な入力トレーニング形式に従います。このトピックでは、SageMaker AI K 最近傍アルゴリズムで利用可能な入力形式をリストします。

## CSV データ形式
<a name="kNN-training-data-csv"></a>

content-type: text/csv; label\$1size=1

```
4,1.2,1.3,9.6,20.3
```

最初の `label_size` 列が、その行のラベルベクトルとして解釈されます。

## recordIO データ形式
<a name="kNN-training-data-recordio"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {
            'values': {
                values: [1.2, 1.3, 9.6, 20.3]  # float32
            }
        },
        label = {
            'values': {
                values: [4]  # float32
            }
        }
    }
] 

                
}
```

# k-NN リクエストとレスポンスの形式
<a name="kNN-inference-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。このトピックでは、SageMaker AI K 最近傍アルゴリズムで利用可能な出力形式をリストします。

## 入力: CSV リクエスト形式
<a name="kNN-input-csv"></a>

content-type: text/csv

```
1.2,1.3,9.6,20.3
```

これは `label_size` またはエンコーディングパラメータを受け入れます。`label_size` は 0 であり、UTF-8 エンコーディングであることが想定されます。

## 入力: JSON リクエスト形式
<a name="kNN-input-json"></a>

content-type: application/json

```
{
  "instances": [
    {"data": {"features": {"values": [-3, -1, -4, 2]}}},
    {"features": [3.0, 0.1, 0.04, 0.002]}]
}
```

## 入力: JSON Lines リクエスト形式
<a name="kNN-input-jsonlines"></a>

content-type: application/jsonlines

```
{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

## 入力: recordIO リクエスト形式
<a name="kNN-input-recordio"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {
            'values': {
                values: [-3, -1, -4, 2]  # float32
            }
        },
        label = {}
    },
    Record = {
        features = {
            'values': {
                values: [3.0, 0.1, 0.04, 0.002]  # float32
            }
        },
        label = {}
    },
]
```

## 出力: JSON レスポンス形式
<a name="kNN-output-json"></a>

accept: application/json

```
{
  "predictions": [
    {"predicted_label": 0.0},
    {"predicted_label": 2.0}
  ]
}
```

## 出力: JSON Lines レスポンス形式
<a name="kNN-output-jsonlines"></a>

accept: application/jsonlines

```
{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

## 出力: Verbose JSON レスポンス形式
<a name="KNN-output-verbose-json"></a>

冗長モードでは API は、最小から最大までソートされた距離ベクトルと、ラベルベクトル内の対応する要素を使用して、検索結果を提供します。この例では、k が 3 に設定されます。

accept: application/json; verbose=true

```
{
  "predictions": [
    {
        "predicted_label": 0.0,
        "distances": [3.11792408, 3.89746071, 6.32548437],
        "labels": [0.0, 1.0, 0.0]
    },
    {
        "predicted_label": 2.0,
        "distances": [1.08470316, 3.04917915, 5.25393973],
        "labels": [2.0, 2.0, 0.0]
    }
  ]
}
```

## 出力: recordIO-protobuf レスポンスの形式
<a name="kNN-output-recordio-protobuf"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [2.0]  # float32
            }
        }
    }
]
```

## 出力: Verbose recordIO-protobuf レスポンスの形式
<a name="kNN-output-verbose-recordio"></a>

冗長モードでは API は、最小から最大までソートされた距離ベクトルと、ラベルベクトル内の対応する要素を使用して、検索結果を提供します。この例では、k が 3 に設定されます。

accept: application/x-recordio-protobuf; verbose=true

```
[
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            },
            'distances': {
                values: [3.11792408, 3.89746071, 6.32548437]  # float32
            },
            'labels': {
                values: [0.0, 1.0, 0.0]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            },
            'distances': {
                values: [1.08470316, 3.04917915, 5.25393973]  # float32
            },
            'labels': {
                values: [2.0, 2.0, 0.0]  # float32
            }
        }
    }
]
```

## k-NN アルゴリズムのサンプル出力
<a name="kNN-sample-output"></a>

regressor タスクの場合:

```
[06/08/2018 20:15:33 INFO 140026520049408] #test_score (algo-1) : ('mse', 0.013333333333333334)
```

classifier タスクの場合:

```
[06/08/2018 20:15:46 INFO 140285487171328] #test_score (algo-1) : ('accuracy', 0.98666666666666669)
```

# LightGBM
<a name="lightgbm"></a>

[LightGBM](https://lightgbm.readthedocs.io/en/latest/) は、よく知られた効率的な勾配ブースト決定木アルゴリズムのオープンソースを実装したものです。GBDT は、一連のより単純でより弱いモデルから得られた推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試みる、教師あり学習アルゴリズムです。LightGBM は、追加の手法を使用し、従来の GBDT の効率とスケーラビリティを大幅に向上させています。このページには、LightGBM の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI LightGBM の使用方法
<a name="lightgbm-modes"></a>

LightGBM は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker Python SDK で LightGBM を使用する方法について説明します。Amazon SageMaker Studio Classic UI から LightGBM を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **LightGBM を組み込みアルゴリズムとして使用する**

  次のコード例に示すように、LightGBM 組み込みアルゴリズムを使用して、LightGBM トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、LightGBM 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  LightGBM イメージ URI を指定した後、LightGBM コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。LightGBM 組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトは提供されているので、置き換える必要はありません。スクリプトモードを使用した SageMaker トレーニングジョブの作成に豊富な経験を持っている場合、独自の LightGBM トレーニングスクリプトを追加できます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "lightgbm-classification-model", "*", "training"
  training_instance_type = "ml.m5.xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_multiclass/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train" 
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation" 
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "num_boost_round"
  ] = "500"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1, # for distributed training, specify an instance_count greater than 1
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "train": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  LightGBM を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
  + [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)
  + [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)

# LightGBM アルゴリズムの入出力インターフェイス
<a name="InputOutput-LightGBM"></a>

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

SageMaker AI の LightGBM の実装では、トレーニングと推論に CSV 形式が対応しています:
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

**注記**  
CSV トレーニングの場合、アルゴリズムはターゲット変数が最初の列にあり、CSV にはヘッダーレコードがないと見なします。  
CSV 推論の場合、アルゴリズムは CSV 入力にラベル列がないと見なします。

**トレーニングデータ、検証データ、およびカテゴリ別特徴量の入力形式**

LightGBM モデルに入力するトレーニングデータをフォーマットする方法に注意してください。トレーニングおよび検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`train` と `validation` チャネルの両方を使用して入力データを提供します。または、`train` チャネルだけを使用することもできます。

**注記**  
`train` と `training` のどちらも、LightGBM トレーニングに有効なチャネル名です。

**`train` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `train` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、1 つ以上の CSV ファイルを指す S3 プレフィックスか、1 つの特定の CSV ファイルを指すフル S3 パスのいずれかです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列に存在する必要があります。`train` または `validation` チャネルに複数の CSV ファイルが提供されている場合、LightGBM アルゴリズムはファイルを連結します。検証データは、各ブースティング反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルまたはファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`train` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`train` チャネルのみを使用する**。

別の方法として、`train` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスは、1 つ以上の CSV ファイルを含む `train/` という名前のサブディレクトリを持つディレクトリを指す必要があります。オプションで、同じ場所に 1 つ以上の CSV ファイルを含む `validation/` という別のサブディレクトリを含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

SageMaker AI LightGBM は Python の Joblib モジュールを使用してモデルをシリアル化または逆シリアル化し、それをモデルの保存またはロードに使用します。

**SageMaker AI LightGBM でトレーニングしたモデルを JobLib モジュールで使用するには**
+ 次の Python コードを使用します。

  ```
  import joblib 
  import tarfile
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = joblib.load(model_file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## LightGBM アルゴリズムの Amazon EC2 インスタンスに関する推奨事項
<a name="Instance-LightGBM"></a>

現在、SageMaker AI LightGBM は、単一インスタンスとマルチインスタンスの CPU トレーニングをサポートしています。マルチインスタンスの CPU トレーニング (分散トレーニング) の場合、推定器を定義するときに 1 より大きい `instance_count` を指定します。LightGBM を使用した分散トレーニングの詳細については、「[Amazon SageMaker AI LightGBM Distributed training using Dask](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/sagemaker_lightgbm_distributed_training_dask/sagemaker-lightgbm-distributed-training-dask.html)」を参照してください。

LightGBM は (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C5 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。

## LightGBM サンプルノートブック
<a name="lightgbm-sample-notebooks"></a>

次の表は、Amazon SageMaker AI LightGBM アルゴリズムのさまざまなユースケースに対応する各種サンプルノートブックの概要を示しています。


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.html)  |  このノートブックでは、Amazon SageMaker AI LightGBM アルゴリズムを使用して表形式の分類モデルをトレーニングおよびホストする方法について説明しています。  | 
|  [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.html)  |  このノートブックでは、Amazon SageMaker AI LightGBM アルゴリズムを使用して表形式のリグレッションモデルをトレーニングおよびホストする方法について説明しています。  | 
|  [Amazon SageMaker AI LightGBM Distributed training using Dask](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/sagemaker_lightgbm_distributed_training_dask/sagemaker-lightgbm-distributed-training-dask.html)  |  このノートブックは、Dask フレームワークを使用した Amazon SageMaker AI LightGBM アルゴリズムによる分散トレーニングについて説明しています。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# LightGBM の仕組み
<a name="lightgbm-HowItWorks"></a>

LightGBM は、従来の勾配ブースティング決定木 (GBDT) アルゴリズムに、勾配ベースの片側サンプリング (GOSS) および排他的特徴量バンドル (EFB) という 2 つの新しい手法を追加して実装しています。これらの手法は GBDT の効率とスケーラビリティが大幅に向上するように設計されています。

LightGBM アルゴリズムは、微調整可能なさまざまなデータ型、関係、分布、および多様性のあるハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。LightGBM は、リグレッション、分類 (バイナリとマルチクラス)、およびランキングの問題に使用できます。

勾配ブースティングの詳細については、「[SageMaker AI XGBoost アルゴリズムの仕組み](xgboost-HowItWorks.md)」を参照してください。LightGBM メソッドで使用されるその他の GOSS および EFB 手法の詳細については、「*[LightGBM: A Highly Efficient Gradient Boosting Decision Tree](https://proceedings.neurips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf)*」を参照してください。

# LightGBM ハイパーパラメータ
<a name="lightgbm-hyperparameters"></a>

次の表には、Amazon SageMaker AI LightGBM アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI LightGBM アルゴリズムは、オープンソースの [LightGBM](https://github.com/microsoft/LightGBM) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[LightGBM サンプルノートブック](lightgbm.md#lightgbm-sample-notebooks) のサンプルデータセットに基づいています。

デフォルトでは、SageMaker AI LightGBM アルゴリズムは分類問題のタイプに基づいて自動的に評価指標と目的関数を選択します。LightGBM アルゴリズムは、データ内のラベルの数に基づいて分類問題のタイプを検出します。リグレッションの問題の場合、評価指標は二乗平均平方根誤差で、目的関数は L2 損失です。二項分類の問題の場合は、評価指標と目的関数はどちらも二項交差エントロピーです。多クラス分類の問題の場合、評価指標は多クラス交差エントロピーで、目的関数はソフトマックスです。`metric` ハイパーパラメータを使用して、デフォルトの評価メトリクスを変更できます。説明、有効値、およびデフォルト値など、LightGBM ハイパーパラメータの詳細については、次の表を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1boost\$1round |  ブースティングの反復の最大数。**注意:** LightGBM は複数クラス分類問題に対して内部的に `num_class * num_boost_round` ツリーを構築します。 有効な値: 整数、範囲:正の整数。 デフォルト値: `100`。  | 
| early\$1stopping\$1rounds |  ある検証データポイントの 1 つのメトリクスが最後の `early_stopping_rounds` ラウンドで改善されない場合、トレーニングは停止します。`early_stopping_rounds` が 0 以下の場合、このハイパーパラメータは無視されます。 有効な値: 整数。 デフォルト値: `10`。  | 
| metric |  検証データの評価メトリクス。`metric` がデフォルトの `"auto"` 値に設定されている場合、アルゴリズムは分類問題のタイプに基づいて自動的に評価メトリクスを選択します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/lightgbm-hyperparameters.html) 有効な値: 文字列、次のいずれか: (`"auto"`、`"rmse"`、`"l1"`、`"l2"`、`"huber"`、`"fair"`、`"binary_logloss"`、`"binary_error"`、`"auc"`、`"average_precision"`、`"multi_logloss"`、`"multi_error"`、`"auc_mu"`、または `"cross_entropy"`)。 デフォルト値: `"auto"`。  | 
| learning\$1rate |  トレーニング例の各バッチを完了した後に、モデルの重みが更新されるレート。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.1`。  | 
| num\$1leaves |  あるツリーの葉の最大数。 有効な値: 整数、範囲: (`1`, `131072`)。 デフォルト値: `64`。  | 
| feature\$1fraction |  各反復 (ツリー) で選択される特徴量のサブセット。1.0 未満にする必要があります。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.9`。  | 
| bagging\$1fraction |  `feature_fraction` に類似した特徴量のサブセットですが、`bagging_fraction` はリサンプリングなしでランダムにデータの一部を選択します。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.9`。  | 
| bagging\$1freq |  バギングを実行する頻度。LightGBM は `bagging_freq` 反復のたびに、次の `bagging_freq` 反復に使用するデータのパーセンテージをランダムに選択します。このパーセンテージは `bagging_fraction` ハイパーパラメータによって決定されます。`bagging_freq` が 0 の場合、バギングは無効になります。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `1`。  | 
| max\$1depth |  ツリーモデルの最大深度。これはデータの量が少ない場合のオーバーフィットを処理するのに使われます。`max_depth` が 0 以下の場合は、最大深度に制限がないことを意味します。 有効な値: 整数。 デフォルト値: `6`。  | 
| min\$1data\$1in\$1leaf |  1 つの葉に含まれるデータの最小量。オーバーフィットの処理にも使われます。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `3`。  | 
| max\$1delta\$1step |  ツリーの葉の最大出力を制限するのに使用されます。`max_delta_step` が 0 以下の場合、制約はありません。葉の最終的な最大出力は `learning_rate * max_delta_step` です。 有効な値: 浮動小数点数。 デフォルト値: `0.0`。  | 
| lambda\$1l1 |  L1 正規化。 有効な値: 浮動小数点数、範囲: 負以外の浮動小数点数。 デフォルト値: `0.0`。  | 
| lambda\$1l2 |  L2 正規化。 有効な値: 浮動小数点数、範囲: 負以外の浮動小数点数。 デフォルト値: `0.0`。  | 
| boosting |  ブースティングの種類 有効な値: 文字列、次のいずれか: (`"gbdt"`、`"rf"`、`"dart"`、または `"goss"`) デフォルト値: `"gbdt"`。  | 
| min\$1gain\$1to\$1split |  分割を実行するための最小ゲイン。トレーニングの高速化に使われます。 有効な値: 整数、浮動小数点数: 負以外の浮動小数点数。 デフォルト値: `0.0`。  | 
| scale\$1pos\$1weight |  正のクラスを持つラベルの重み。二項分類タスクにのみ使用されます。`is_unbalance` が `"True"` に設定されている場合、`scale_pos_weight` は使用できません。 有効な値: 浮動小数点数、範囲: 正の浮動小数点数 デフォルト値: `1.0`。  | 
| tree\$1learner |  ツリーの線形の種類。 有効な値: 文字列、次のいずれか: (`"serial"`、`"feature"`、`"data"`、または `"voting"`)。 デフォルト値: `"serial"`。  | 
| feature\$1fraction\$1bynode |  各ツリーノードのランダムな特徴量のサブセットを選択します。例えば、`feature_fraction_bynode` が `0.8` の場合、特徴量の 80% が選択されます。オーバーフィットの処理にも使われます。 有効な値: 整数、範囲: (`0.0`,`1.0`]。 デフォルト値: `1.0`。  | 
| is\$1unbalance |  トレーニングデータが不均衡な場合は、`"True"` に設定します。二項分類タスクにのみ使用されます。`is_unbalance` は `scale_pos_weight` では使用できません。 有効な値: 文字列、次のいずれか: (`"True"` または `"False"`) デフォルト値: `"False"`。  | 
| max\$1bin |  特徴量の値をバケット化するために使用するビンの最大数。ビンの数が少ないとトレーニングの精度は低下することがありますが、一般的なパフォーマンスは向上する可能性があります。オーバーフィットの処理にも使われます。 有効な値: 整数、範囲: (1, ∞)。 デフォルト値: `255`。  | 
| tweedie\$1variance\$1power |  Tweedie 分布の分散を制御します。これを `2.0` に近づけると、ガンマ分布にシフトします。これを `1.0` に近づけると、ポアソン分布にシフトします。リグレッションタスクにのみ使用されます。 有効な値: 浮動小数点数、範囲: [`1.0`, `2.0`)。 デフォルト値: `1.5`。  | 
| num\$1threads |  LightGBM の実行に使用される並列スレッドの数。値 0 は、OpenMP のデフォルトスレッド数を意味します。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `0`。  | 
| verbosity |  出力メッセージの詳細。`verbosity` が `0` よりも小さい場合、出力メッセージには致命的なエラーのみ表示されます。`verbosity` が `0` に設定されている場合、出力メッセージにはエラーと警告が含まれます。`verbosity` が `1` の場合、出力メッセージには詳細情報が表示されます。`verbosity` が `1` より大きい場合、出力メッセージには詳細情報が表示され、デバッグに使用できます。 有効な値: 整数。 デフォルト値: `1`。  | 

# LightGBM モデルを調整する
<a name="lightgbm-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**モデル調整は、次のハイパーパラメータに重点を置いています。

**注記**  
学習目的関数は、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。詳細については、「[LightGBM ハイパーパラメータ](lightgbm-hyperparameters.md)」を参照してください。
+ モデルトレーニング中に最適化する学習の目標関数
+ 検証中にモデルのパフォーマンスを評価するための評価指標
+ モデルの自動調整時に使用する一連のハイパーパラメータと各値の範囲

自動モデル調整は、指定されたハイパーパラメータを検索して、選択された評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
LightGBM の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## LightGBM アルゴリズムで計算される評価メトリクス
<a name="lightgbm-metrics"></a>

SageMaker AI LightGBM アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。評価メトリクスは、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| rmse | 二乗平均平方根誤差 | 最小化 | "rmse: ([0-9\$1\$1.]\$1)" | 
| l1 | 平均絶対誤差 | 最小化 | "l1: ([0-9\$1\$1.]\$1)" | 
| l2 | 平均二乗誤差 | 最小化 | "l2: ([0-9\$1\$1.]\$1)" | 
| huber | Huber 損失 | 最小化 | "huber: ([0-9\$1\$1.]\$1)" | 
| fair | 公平性損失 | 最小化 | "fair: ([0-9\$1\$1.]\$1)" | 
| binary\$1logloss | 二項交差エントロピー | 最大化 | "binary\$1logloss: ([0-9\$1\$1.]\$1)" | 
| binary\$1error | バイナリエラー | 最小化 | "binary\$1error: ([0-9\$1\$1.]\$1)" | 
| auc | AUC | 最大化 | "auc: ([0-9\$1\$1.]\$1)" | 
| average\$1precision | 平均適合率スコア | 最大化 | "average\$1precision: ([0-9\$1\$1.]\$1)" | 
| multi\$1logloss | マルチクラス交差エントロピー | 最大化 | "multi\$1logloss: ([0-9\$1\$1.]\$1)" | 
| multi\$1error | 多クラスエラースコア | 最小化 | "multi\$1error: ([0-9\$1\$1.]\$1)" | 
| auc\$1mu | AUC-mu | 最大化 | "auc\$1mu: ([0-9\$1\$1.]\$1)" | 
| cross\$1entropy | 交差エントロピー | 最小化 | "cross\$1entropy: ([0-9\$1\$1.]\$1)" | 

## 調整可能な LightGBM ハイパーパラメータ
<a name="lightgbm-tunable-hyperparameters"></a>

次のハイパーパラメータを使用して LightGBM モデルを調整します。LightGBM 検証メトリクスの最適化に最も影響を与えるハイパーパラメータは、`learning_rate`、`num_leaves`、`feature_fraction`、`bagging_fraction`、`bagging_freq`、`max_depth`、および `min_data_in_leaf` です。すべての LightGBM ハイパーパラメータのリストについては、「[LightGBM ハイパーパラメータ](lightgbm-hyperparameters.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001、MaxValue: 0.01 | 
| num\$1leaves | IntegerParameterRanges | MinValue: 10、MaxValue: 100 | 
| feature\$1fraction | ContinuousParameterRanges | MinValue: 0.1、MaxValue: 1.0 | 
| bagging\$1fraction | ContinuousParameterRanges | MinValue: 0.1、MaxValue: 1.0 | 
| bagging\$1freq | IntegerParameterRanges | MinValue: 0、MaxValue: 10 | 
| max\$1depth | IntegerParameterRanges | MinValue: 15、MaxValue: 100 | 
| min\$1data\$1in\$1leaf | IntegerParameterRanges | MinValue: 10、MaxValue: 200 | 

# 線形学習アルゴリズム
<a name="linear-learner"></a>

*線形モデル*は、分類や回帰の問題を解決するために使用される、教師あり学習アルゴリズムです。入力として、examples (*x*、*y*) というラベルのモデルを提供します。*x* は高次元ベクトル、*y* は数値ラベルです。二項分類の問題の場合、ラベルは 0 または 1 である必要があります。複数クラス分類の問題の場合、ラベルは 0 ～ `num_classes` - 1 である必要があります。回帰の問題の場合、*y* は実数です。アルゴリズムは線形関数、または分類問題の場合は線形しきい値関数を学習し、ベクトル *x* をラベル *y* の近似値にマッピングします。

Amazon SageMaker AI の線形学習アルゴリズムは、分類と回帰の両方の問題についてソリューションを提供します。SageMaker AI アルゴリズムを使用すると、さまざまなトレーニング目標を同時に探索し、検証セットから最適なソリューションを選択できます。また、多数のモデルを探索して最適なものを選択することもできます。最善のモデルは、以下を最適化します。
+ 平均二乗誤差、交差エントロピー損失、絶対誤差などの連続的な目標
+ F1 尺度、適合率と再現率、または精度など、分類に適した個別の目標。

連続的な目標のみのソリューションを提供する方法と比較して、SageMaker AI 線形学習アルゴリズムは、単純なハイパーパラメータ最適化手法より大幅に高速化します。また、より便利でもあります。

線形学習者アルゴリズムは、観測値を表す行と特徴の次元を表す列を持つデータ行列を必要とします。また、データポイントと一致するラベルが含まれる追加の列を要求します。少なくとも、Amazon SageMaker AI の線形学習者では、データを入出力する場所と目標タイプ (分類または回帰) を引数として指定する必要があります。特徴の次元も指定する必要があります。詳細については、「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)」を参照してください。リクエストボディの `HyperParameters` 文字列マップに追加のパラメータを指定できます。これらのパラメータは最適化の手順、またはトレーニングを行う目標関数の詳細を制御します。たとえば、エポックの数、正規化、損失タイプなどです。

[マネージドスポットトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html)を使用している場合、線形学習アルゴリズムは[モデルの状態のスナップショットを撮影するチェックポイント](https://docs.aws.amazon.com/sagemaker/latest/dg/model-checkpoints.html)の使用をサポートしています。

**Topics**
+ [線形学習アルゴリズムの入出力インターフェイス](#ll-input_output)
+ [線形学習アルゴリズムの EC2 インスタンスに関する推奨事項](#ll-instances)
+ [線形学習サンプルノートブック](#ll-sample-notebooks)
+ [線形学習の仕組み](ll_how-it-works.md)
+ [線形学習のハイパーパラメータ](ll_hyperparameters.md)
+ [線形学習モデルを調整する](linear-learner-tuning.md)
+ [線形学習のレスポンス形式](LL-in-formats.md)

## 線形学習アルゴリズムの入出力インターフェイス
<a name="ll-input_output"></a>

Amazon SageMaker AI 線形学習アルゴリズムは、トレーニング、検証 (オプション)、テスト (オプション) の 3 つのデータチャネルに対応しています。検証データを指定する場合、`S3DataDistributionType` を `FullyReplicated` にする必要があります。アルゴリズムは、エポックごとに検証損失を記録し、検証データのサンプルを使用して最適なモデルを調整および選択します。検証データを指定しないと、アルゴリズムはトレーニングデータのサンプルを使用してモデルを調整および選択します。テストデータを指定すると、アルゴリズムログに最終モデルのテストスコアが含まれます。

**トレーニング**については、線形学習者アルゴリズムは、`recordIO-wrapped protobuf` と `CSV` の両方の形式をサポートします。`application/x-recordio-protobuf` 入力タイプの場合は、Float32 テンソルのみがサポートされます。`text/csv` 入力タイプの場合、最初の列はラベルと見なされ、これが予測のターゲット変数です。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについて線形学習者モデルをトレーニングできます。

**推論**については、線形学習者アルゴリズムは、`application/json`、`application/x-recordio-protobuf`、および `text/csv` の各形式をサポートします。新しいデータを予測する場合、レスポンスの形式はモデルの種類によって異なります。**回帰** (`predictor_type='regressor'`) の場合、`score` はモデルによって生成される予測です。**分類** (`predictor_type='binary_classifier'` または `predictor_type='multiclass_classifier'`) の場合、モデルは `score` に加えて `predicted_label` も返します。`predicted_label` はモデルによって予測されるクラスで、`score` はその予測の強度を測定します。
+ **バイナリ分類の場合**、`predicted_label` は `0` または `1` であり、`score` は、アルゴリズムがラベルを 1 にする必要があると確信している程度を示す単一の浮動小数点数です。
+ **複数クラスの分類の場合**、`predicted_class` は `0` から `num_classes-1` の整数になり、`score` はクラスごとに 1 つの浮動小数点数のリストになります。

分類問題の `score` を解釈するには、使用する損失関数を考慮する必要があります。`loss` ハイパーパラメータ値が `logistic` (バイナリ分類用) または `softmax_loss` (マルチクラス分類用) の場合、`score` は対応するクラスの確率として解釈することができます。これらは、`loss` の値がデフォルト値 `auto` の場合に線形学習者によって使用される損失値です。ただし、損失が `hinge_loss` に設定されている場合は、スコアを確率として解釈することはできません。これは、ヒンジ損失で Support Vector Classifier に対応するためです。この場合、確率の推定値は生成されません。

入出力ファイル形式の詳細については、[線形学習のレスポンス形式](LL-in-formats.md) を参照してください。推論形式の詳細については、[線形学習サンプルノートブック](#ll-sample-notebooks) を参照してください。

## 線形学習アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="ll-instances"></a>

線形学習アルゴリズムは、トレーニングと推論の CPU インスタンスと GPU インスタンスの両方をサポートしてを行います。GPU の場合、線形学習アルゴリズムは P2、P3、G4dn、G5 GPU ファミリーをサポートします。

テスト中に、マルチ GPU インスタンスがシングル GPU インスタンスより高速である実質的な証拠は見つかりませんでした。結果はユースケースに応じて異なります。

## 線形学習サンプルノートブック
<a name="ll-sample-notebooks"></a>

 次の表は、Amazon SageMaker AI 線形学習アルゴリズムのさまざまなユースケースに対応する各種サンプルノートブックの概要を示しています。


| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [MNIST データセットの概要](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/linear_learner_mnist/linear_learner_mnist.html)  |   MNIST データセットを使用して 1 桁の数字を予測するように二項分類子をトレーニングします。  | 
|  [複数クラス分類子を構築する方法](https://sagemaker-examples.readthedocs.io/en/latest/scientific_details_of_algorithms/linear_learner_multiclass_classification/linear_learner_multiclass_classification.html)  |   UCI の Covertype データセットを使用して、複数クラス分類子をトレーニングする方法を説明します。  | 
|  [推論向け機械学習 (ML) パイプラインを構築する方法](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.html)  |   Scikit-Learn コンテナを使用して、エンドツーエンドの ML パイプラインを構築する方法を説明します。  | 

 SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。線形学習者アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# 線形学習の仕組み
<a name="ll_how-it-works"></a>

線形学習者アルゴリズムの実装には、事前処理、学習、検証という 3 つのステップがあります。

## ステップ 1: 事前処理する
<a name="step1-preprocessing"></a>

正規化 (特徴スケーリング) は、特定の損失関数の重要な前処理ステップであり、データセットでトレーニングされるモデルが単一特徴のウェイトで占有されないようにします。Amazon SageMaker AI 線形学習アルゴリズムには、この前処理ステップを支援する正規化オプションがあります。正規化がオンになっている場合、アルゴリズムはまず小さなサンプルデータを調べて、各特徴および各ラベルの平均値と標準偏差を学習します。次に、完全なデータセット内の各特徴は、平均が 0 になるようにシフトされ、単位標準偏差を持つようにスケーリングされます。

**注記**  
最良の結果を得るには、トレーニングの前にデータをシャッフルします。シャッフルされていないデータを使用したトレーニングでは、トレーニングが失敗する場合があります。

線形学習者アルゴリズムで、 `normalize_data` および `normalize_label` ハイパーパラメータをそれぞれ使用して、特徴データとラベルを正規化するかどうかを設定できます。正規化は、回帰の特徴とラベルの両方でデフォルトで有効になっています。バイナリ分類では正規化できるのは特徴のみであり、これがデフォルトの動作です。

## ステップ 2: トレーニングする
<a name="step2-training"></a>

線形学習者アルゴリズムでは、確率的勾配降下法 (SGD) の分散実装を使用してトレーニングを行います。最適化プロセスを制御するには、最適化アルゴリズムを選択します。たとえば、Adam、AdaGrad、確率的勾配降下法、またはその他の最適化アルゴリズムを使用するように選択できます。また、モーメンタム、学習レート、学習レートスケジュールなどのハイパーパラメータも指定します。どのアルゴリズムまたはハイパーパラメータの値を使用すればよいかわからない場合は、大部分のデータセットで機能するデフォルトを選択してください。

トレーニング中は、目標がそれぞれ異なる複数のモデルを同時に最適化します。たとえば、L1 または L2 の正規化を変化させて、さまざまなオプティマイザ設定を試します。

## ステップ 3: しきい値を検証および設定する
<a name="step3-validation"></a>

複数のモデルを並行してトレーニングする場合、モデルは検証セットに対して評価され、トレーニングが完了すると最適なモデルが選択されます。回帰では、検証セットで最善の損失を達成するモデルが最適なモデルです。分類では、検証セットのサンプルを使用して分類しきい値を調整します。選択されている最適なモデルは、検証セットで最良のバイナリ分類選択基準を達成するモデルです。そのような基準には、F1 の測定、精度、クロスエントロピー損失などがあります。

**注記**  
アルゴリズムで検証セットが指定されていない場合は、最適なモデルを評価して選択することはできません。並列トレーニングとモデル選択を利用するには、アルゴリズムに検証セットを指定する必要があります。

# 線形学習のハイパーパラメータ
<a name="ll_hyperparameters"></a>

線形学習者アルゴリズムのハイパーパラメータを以下の表に示します。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。ハイパーパラメータが `auto` に設定されている場合、Amazon SageMaker AI はそのハイパーパラメータの値を自動的に計算して設定します。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1classes |  レスポンス変数のクラス数。このアルゴリズムでは、クラスに `0`, ..., `num_classes - 1` のラベルが付けられていると想定します。 `predictor_type` が `multiclass_classifier` の場合、**必須**です。それ以外の場合、アルゴリズムはこれを無視します。 有効な値: 3 ～ 1,000,000 の整数  | 
| predictor\$1type |  ターゲット変数のタイプを、二項分類、複数クラス分類、または回帰として指定します。 **必須** 有効な値: `binary_classifier`、`multiclass_classifier`、または `regressor`  | 
| accuracy\$1top\$1k |  複数クラス分類のトップ k 精度メトリクスを計算するときには、*k* の値。モデルがトップ k のスコアの 1 つを実際のラベルに割り当てる場合、サンプルは正しいものとしてスコア付けされます。 **オプション** 有効な値: 正の整数 デフォルト値： 3   | 
| balance\$1multiclass\$1weights |  クラスの重みを使用するかどうかを指定します。これにより、損失関数で各クラスの重要度が等しくなります。`predictor_type` が `multiclass_classifier` である場合にのみ使用されます。 **オプション** 有効な値: `true`、`false` デフォルト値: `false`  | 
| beta\$11 |  最初のモーメントの見積もりの指数関数的減衰率。`optimizer` の値が `adam` のである場合にのみ適用されます。 **オプション** 有効な値 : `auto` または 0 ～ 1.0 の浮動小数点値 デフォルト値: `auto`  | 
| beta\$12 |  2 番目のモーメントの見積もりの指数関数的減衰率。`optimizer` の値が `adam` のである場合にのみ適用されます。 **オプション** 有効な値 : `auto` または 0 ～ 1.0 の浮動小数点整数  デフォルト値: `auto`  | 
| bias\$1lr\$1mult |  バイアス項に別の学習レートを許可します。バイアスの実際の学習レートは `learning_rate` \$1 `bias_lr_mult` です。 **オプション** 有効な値: `auto` または正の浮動小数点整数 デフォルト値: `auto`  | 
| bias\$1wd\$1mult |  バイアス項に別の正規化を許可します。バイアスの L2 正規化の実際の重みは、`wd` \$1 `bias_wd_mult` です。デフォルトでは、バイアス項に正規化はありません。 **オプション** 有効な値: `auto` または負でない浮動小数点整数 デフォルト値: `auto`  | 
| binary\$1classifier\$1model\$1selection\$1criteria |  `predictor_type` が `binary_classifier` に設定されている場合は、検証データセット (または検証データセットを指定していない場合はトレーニングデータセット) のモデル評価基準。基準は次のとおりです。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) **オプション** 有効な値: `accuracy`、`f_beta`、`precision_at_target_recall`、`recall_at_target_precision`、または `loss_function` デフォルト値: `accuracy`  | 
| early\$1stopping\$1patience | 関連するメトリクスが改善されない場合にトレーニングを終了するまでに待機するエポックの数。binary\$1classifier\$1model\$1selection\$1criteria に値を指定した場合、メトリクスはその値になります。それ以外の場合、メトリクスは loss ハイパーパラメータに指定された値と同じになります。メトリクスは検証データ上で評価されます。検証データを提供していない場合、メトリクスは常に `loss` ハイパーパラメータに指定された値と同じになり、トレーニングデータで評価されます。早期停止を無効にするには、`early_stopping_patience` を `epochs` に指定された値より大きい値に設定します。**オプション**有効な値: 正の整数デフォルト値： 3 | 
| early\$1stopping\$1tolerance |  損失の改善を計測する相対的な許容値。損失改善率から前の最善の損失を除算した値がこの値よりも小さい場合、早期停止は改善がゼロであると見なします。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.001  | 
| epochs |  トレーニングデータへのパスの最大数。 **オプション** 有効な値: 正の整数 デフォルト値: 15  | 
| f\$1beta |  二項分類または複数クラス分類の F スコアメトリクスを計算するときに使用するベータの値。`binary_classifier_model_selection_criteria` に指定された値が `f_beta` である場合にも使用されます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 1.0   | 
| feature\$1dim |  入力データ内の特徴の数。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| huber\$1delta |  Huber 損失のパラメータ。トレーニングとメトリクスの評価中、デルタより小さいエラーについては L2 損失、デルタより大きいエラーについては L1 損失を計算します。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 1.0   | 
| init\$1bias |  バイアス項の初期重み。 **オプション** 有効な値: 浮動小数点整数 デフォルト値: 0  | 
| init\$1method |  モデルの重み付けに使用される初期分布関数を設定します。関数は以下のとおりです。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) **オプション** 有効な値: `uniform` または `normal` デフォルト値: `uniform`  | 
| init\$1scale |  モデルの重みに対して初期の uniform 分布をスケーリングします。`init_method` ハイパーパラメータが `uniform` に設定されている場合にのみ適用されます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.07  | 
| init\$1sigma |  正規分布の初期標準偏差。`init_method` ハイパーパラメータが `normal` に設定されている場合にのみ適用されます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.01  | 
| l1 |  L1 正則化パラメータ。L1 正則化を使用しないようにするには、値を 0 に設定します。 **オプション** 有効な値: `auto` または負以外の浮動小数点数 デフォルト値: `auto`  | 
| learning\$1rate |  パラメータ更新のためにオプティマイザによって使用されるステップサイズ。 **オプション** 有効な値: `auto` または正の浮動小数点整数 デフォルト値: `auto` (選択されているオプティマイザによって値が異なる)。  | 
| loss |  損失関数を指定します。 使用可能な損失関数とそのデフォルト値は、`predictor_type` の値によって異なります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) 有効な値: `auto`、`logistic`、`squared_loss`、`absolute_loss`、`hinge_loss`、`eps_insensitive_squared_loss`、`eps_insensitive_absolute_loss`、`quantile_loss`、または `huber_loss`  **オプション** デフォルト値: `auto`  | 
| loss\$1insensitivity |  イプシロンを区別しない損失タイプのパラメータ。トレーニングとメトリクスの評価中、この値より小さいエラーはゼロであると見なされます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.01   | 
| lr\$1scheduler\$1factor |  `lr_scheduler_step` ハイパーパラメータごとに、学習レートはこの数量減少します。`use_lr_scheduler` ハイパーパラメータが `true` に設定されている場合にのみ適用されます。 **オプション** 有効な値 : `auto` または 0 ～ 1 の正の浮動小数点整数 デフォルト値: `auto`  | 
| lr\$1scheduler\$1minimum\$1lr |  学習レートは `lr_scheduler_minimum_lr` に設定された値より低い値まで減少することはありません。`use_lr_scheduler` ハイパーパラメータが `true` に設定されている場合にのみ適用されます。 **オプション** 有効な値: `auto` または正の浮動小数点整数 デフォルト値: `auto`  | 
| lr\$1scheduler\$1step |  学習レートの減少の間のステップの数。`use_lr_scheduler` ハイパーパラメータが `true` に設定されている場合にのみ適用されます。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| margin |  `hinge_loss` 関数のマージン。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 1.0  | 
| mini\$1batch\$1size |  データイテレーターのミニバッチごとの観測数。 **オプション** 有効な値: 正の整数 デフォルト値: 1000  | 
| momentum |  `sgd` オプティマイザのモーメンタム。 **オプション** 有効な値 : `auto` または 0 ～ 1.0 の浮動小数点整数 デフォルト値: `auto`  | 
| normalize\$1data |  トレーニング前に特徴を正規化します。データ正規化では、0 の平均を持つように各特徴のデータをシフトし、単位標準偏差を持つようにスケーリングします。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `true`  | 
| normalize\$1label |  ラベルを正規化します。ラベル正規化はゼロの平均を持つようにラベルをシフトし、単位標準偏差を持つようにスケーリングします。 デフォルト値 `auto` では、ラベルは回帰問題に対して正規化されますが、分類問題に対しては正規化されません。分類問題において `normalize_label` ハイパーパラメータを `true` に設定した場合、アルゴリズムはそれを無視します。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `auto`  | 
| num\$1calibration\$1samples |  モデルのキャリブレーション (最適なしきい値を見つけるとき) のために使用する、検証データセットから取得した観測値の数。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| num\$1models |  並列でトレーニングするモデルの数。デフォルトの `auto` では、アルゴリズムが並列でトレーニングするモデルの数を決定します。1 つのモデルのトレーニングは指定されたトレーニングパラメータ (regularization、optimizer、loss) に従って行われ、その他はクローズパラメータによって行われます。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| num\$1point\$1for\$1scaler |  正規化の計算または項のバイアス解除に使用するデータポイントの数。 **オプション** 有効な値: 正の整数 デフォルト値: 10,000  | 
| optimizer |  使用する最適化アルゴリズム。 **オプション** 有効な値: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) デフォルト値: `auto`。`auto` のデフォルトの設定は `adam` です。  | 
| positive\$1example\$1weight\$1mult |  二項分類子をトレーニングするときに正のサンプルに割り当てられる重み。負の例の重みは 1 で固定されます。負の例*と*正の例を分類する際のエラーがトレーニング損失に等しい影響を与えるようにアルゴリズムに重みを選択させるには、`balanced` を指定します。アルゴリズムにパフォーマンスを最適化する重みを選択させるには、`auto` を指定します。 **オプション** 有効な値:`balanced`、`auto`、または正の浮動小数点整数 デフォルト値: 1.0  | 
| quantile |  分位損失の分位数。分位数 q については、モデルは `true_label` の値が確率 q の予測より大きくなるように予測を作成しようとします。 **オプション** 有効な値 : 0 ～ 1 の浮動小数点整数 デフォルト値: 0.5  | 
| target\$1precision |  目標適合率。`binary_classifier_model_selection_criteria` が `recall_at_target_precision` である場合、再現率は最大化される一方で、適合率はこの値で保持されます。 **オプション** 有効な値 : 0 ～ 1.0 の浮動小数点整数 デフォルト値: 0.8  | 
| target\$1recall |  目標再現率。`binary_classifier_model_selection_criteria` が `precision_at_target_recall` である場合、適合率は最大化される一方で、再現率はこの値で保持されます。 **オプション** 有効な値 : 0 ～ 1.0 の浮動小数点整数 デフォルト値: 0.8  | 
| unbias\$1data |  平均が 0 になるように、トレーニング前に特徴のバイアスを解除します。デフォルトでは、`use_bias` ハイパーパラメータが `true` に設定されると、データのバイアスは解除されます。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `auto`  | 
| unbias\$1label |  平均が 0 になるように、トレーニング前にラベルのバイアスを解除します。`use_bias` ハイパーパラメータが `true` に設定されている場合にのみ、回帰に適用されます。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `auto`  | 
| use\$1bias |  モデルにバイアス項 (線形方程式の切片項) を含めるかどうかを指定します。 **オプション** 有効な値: `true` または `false` デフォルト値: `true`  | 
| use\$1lr\$1scheduler |  学習レートにスケジューラを使用するかどうか。スケジューラを使用するには、`true` を指定します。 **オプション** 有効な値: `true` または `false` デフォルト値: `true`  | 
| wd |  重み付け減衰パラメータ。L2 正則化パラメータとも呼ばれます。L2 正則化を使用しないようにするには、値を 0 に設定します。 **オプション** 有効な値: `auto` または負でない浮動小数点整数 デフォルト値: `auto`  | 

# 線形学習モデルを調整する
<a name="linear-learner-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

線形学習者アルゴリズムには、ここで説明する自動モデル調整機能とは別に、ハイパーパラメータを調整するための内部メカニズムもあります。デフォルトでは、線形学習者アルゴリズムは複数のモデルを並行してトレーニングすることによってハイパーパラメータを調整します。自動モデル調整を使用すると、線形学習者の内部調整メカニズムは自動的にオフになります。これにより、並列モデルの数 `num_models` が 1 に設定されます。`num_models` に設定した値は、アルゴリズムによって無視されます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## 線形学習アルゴリズムによって計算されたメトリクス
<a name="linear-learner-metrics"></a>

線形学習者アルゴリズムは、次のテーブルのメトリクスをレポートします。このメトリクスは、トレーニング中に計算されます。それらの 1 つを目標メトリクスとして選択してください。過剰適合を回避するために、トレーニングメトリクスではなく検証メトリクスに対してモデルを調整することをお勧めします。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:absolute\$1loss |  テストデータセットの最終モデルの絶対損失。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| test:binary\$1classification\$1accuracy |  テストデータセットの最終モデルの精度。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:binary\$1f\$1beta |  テストデータセットの最終モデルの F-ベータスコア。デフォルトでは、これは F1 スコアであり、適合率と再現率の調和平均です。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:dcg |  テストデータセットの最終モデルの減損累積利得。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:macro\$1f\$1beta |  テストデータセットの最終モデルの F-ベータスコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:macro\$1precision |  テストデータセットの最終モデルの適合スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:macro\$1recall |  テストデータセットの最終モデルの再現率スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:mse |  テストデータセットの最終モデルの平均二乗誤差。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| test:multiclass\$1accuracy |  テストデータセットの最終モデルの精度。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:multiclass\$1top\$1k\$1accuracy |  テストデータセットで予測された上位 k のラベルの精度。このメトリクスを目標として選択する場合は、`accuracy_top_k` ハイパーパラメータを使用して k の値を設定することをおすすめします。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:objective\$1loss |  モデルがトレーニングされた後のテストデータセットの目標損失関数の平均値。既定の設定では、損失は、二項分類ではロジスティック損失、回帰では二乗損失です。他のタイプの損失を設定するには、 `loss` ハイパーパラメータを使用します。  |  最小化  | 
| test:precision |  テストデータセットの最終モデルの適合率。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `precision_at_target_recall` に設定し、`target_recall` ハイパーパラメータの値を設定して、目標再現率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:recall |  テストデータセットの最終モデルの再現率。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `recall_at_target_precision` に設定し、`target_precision` ハイパーパラメータの値を設定して、目標適合率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:roc\$1auc\$1score |  テストデータセットにおける最終モデルの受信操作特性曲線 (ROC 曲線) の下面積。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:absolute\$1loss |  検証データセットの最終モデルの絶対損失。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| validation:binary\$1classification\$1accuracy |  検証データセットの最終モデルの精度。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:binary\$1f\$1beta |  検証データセットの最終モデルの F-ベータスコア。デフォルトでは、F-ベータスコアは F1 スコアであり、`validation:precision` および `validation:recall` メトリクスの調和平均です。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:dcg |  検証データセットにおける最終モデルの減損累積利得。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:macro\$1f\$1beta |  検証データセットの最終モデルの F-ベータスコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:macro\$1precision |  検証データセットの最終モデルの適合スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:macro\$1recall |  検証データセットの最終モデルの再現率スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:mse |  検証データセットの最終モデルの平均二乗誤差。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| validation:multiclass\$1accuracy |  検証データセットの最終モデルの精度。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:multiclass\$1top\$1k\$1accuracy |  検証データセットで予測された上位 k 個のラベルの精度。このメトリクスを目的として選択する場合は、`accuracy_top_k` ハイパーパラメータを使用して k の値を設定することをおすすめします。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:objective\$1loss |  各エポックにおける検証データセットに対する目標損失関数の平均値。既定の設定では、損失は、二項分類ではロジスティック損失、回帰では二乗損失です。他のタイプの損失を設定するには、`loss` ハイパーパラメータを使用します。  |  最小化  | 
| validation:precision |  検証データセットの最終モデルの精度。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `precision_at_target_recall` に設定し、`target_recall` ハイパーパラメータの値を設定して、目標再現率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:recall |  検証データセットの最終モデルのリコール。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `recall_at_target_precision` に設定し、`target_precision` ハイパーパラメータの値を設定して、目標適合率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:rmse |  検証データセットの最終モデルの二乗平均平方根誤差。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| validation:roc\$1auc\$1score |  検証データセットにおける最終モデルの受信操作特性曲線 (ROC 曲線) の下面積。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 

## 線形学習ハイパーパラメータの調整
<a name="linear-learner-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して線形学習者モデルを調整できます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| wd |  `ContinuousParameterRanges`  |  `MinValue: ``1e-7`, `MaxValue`: `1`  | 
| l1 |  `ContinuousParameterRanges`  |  `MinValue`: `1e-7`, `MaxValue`: `1`  | 
| learning\$1rate |  `ContinuousParameterRanges`  |  `MinValue`: `1e-5`, `MaxValue`: `1`  | 
| mini\$1batch\$1size |  `IntegerParameterRanges`  |  `MinValue`: `100`, `MaxValue`: `5000`  | 
| use\$1bias |  `CategoricalParameterRanges`  |  `[True, False]`  | 
| positive\$1example\$1weight\$1mult |  `ContinuousParameterRanges`  |  `MinValue`: 1e-5、`MaxValue`: `1e5`  | 

# 線形学習のレスポンス形式
<a name="LL-in-formats"></a>

## JSON レスポンス形式
<a name="LL-json"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。以下は、SageMaker AI 線形学習アルゴリズムで使用可能な出力形式です。

**バイナリの分類**

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

**複数クラスの分類**

```
let response =   {
    "predictions":    [
        {
            "score": [0.1, 0.2, 0.4, 0.3],
            "predicted_label": 2
        } 
    ]
}
```

**回帰**

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## JSONLINES レスポンス形式
<a name="LL-jsonlines"></a>

**バイナリの分類**

```
{"score": 0.4, "predicted_label": 0}
```

**複数クラスの分類**

```
{"score": [0.1, 0.2, 0.4, 0.3], "predicted_label": 2}
```

**回帰**

```
{"score": 0.4}
```

## RECORDIO レスポンス形式
<a name="LL-recordio"></a>

**バイナリの分類**

```
[
    Record = {
        features = {},
        label = {
            'score': {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

**複数クラスの分類**

```
[
    Record = {
    "features": [],
    "label":    {
            "score":  {
                    "values":   [0.1, 0.2, 0.3, 0.4]   
            },
            "predicted_label":  {
                    "values":   [3]
            }
       },
    "uid":  "abc123",
    "metadata": "{created_at: '2017-06-03'}"
   }
]
```

**回帰**

```
[
    Record = {
        features = {},
        label = {
            'score': {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```

# TabTransformer
<a name="tabtransformer"></a>

[TabTransformer](https://arxiv.org/abs/2012.06678) は、教師あり学習の新しいディープな表形式データモデリングアーキテクチャです。TabTransformer アーキテクチャは、自己アテンションベースの Transformers で構築されています。トランスフォーマーレイヤーは、カテゴリ別特徴の埋め込みを堅牢なコンテキスト埋め込みに変換して、予測精度を高めます。さらに、TabTransformer から学習したコンテキスト埋め込みは、欠落しているデータ特徴とノイズの多いデータ特徴の両方に対して非常に堅牢で、解釈可能性もより優れています。このページには、TabTransformer の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI TabTransformer の使用方法
<a name="tabtransformer-modes"></a>

TabTransformer は Amazon SageMaker AI に組み込まれているアルゴリズムとして使用できます。次のセクションでは、SageMaker Python st SDK で TabTransformer を使用する方法について説明します。Amazon SageMaker Studio Classic UI から TabTransformer を使用する方法の詳細については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **TabTransformer を、組み込みアルゴリズムとして使用する**

  次のコード例に示すように、TabTransformer 組み込みアルゴリズムを使用して、TabTransformer トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、TabTransformer 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  TabTransformer イメージ URI を指定した後、TabTransformer コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。TabTransformer の組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトが提供されているので、置き換える必要はありません。スクリプトモードを使用して SageMaker トレーニングジョブを作成した経験が豊富な場合は、独自の TabTransformer トレーニングスクリプトを組み込むことができます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "pytorch-tabtransformerclassification-model", "*", "training"
  training_instance_type = "ml.p3.2xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_binary/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "n_epochs"
  ] = "50"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  TabTransformer を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
  + [Tabular classification with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Classification_TabTransformer.ipynb)
  + [Tabular regression with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Regression_TabTransformer.ipynb)

# TabTransformer アルゴリズムの入出力インターフェイス
<a name="InputOutput-TabTransformer"></a>

TabTransformer は表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

SageMaker AI の TabTransformer の実装では、トレーニングと推論に CSV 形式が対応しています。
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

**注記**  
CSV トレーニングの場合、アルゴリズムはターゲット変数が最初の列にあり、CSV にはヘッダーレコードがないと見なします。  
CSV 推論の場合、アルゴリズムは CSV 入力にラベル列がないと見なします。

**トレーニングデータ、検証データ、カテゴリ別特徴の入力形式**

TabTransformer モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。トレーニングデータと検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`training` と `validation` チャネルの両方を使用して入力データを提供します。`training` チャネルだけを使用することもできます。

**`training` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `training` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、1 つ以上の CSV ファイルを指す S3 プレフィックスか、1 つの特定の CSV ファイルを指すフル S3 パスのいずれかです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列にある必要があります。`training` または `validation` チャネルに複数の CSV ファイルが提供された場合、TabTransformer アルゴリズムはファイルを連結します。検証データは、各ブースティングの反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルまたはファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`training` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`training` チャネルのみを使用する**。

別の方法として、`training` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスは、1 つ以上の CSV ファイルを含む `training/` という名前のサブディレクトリを持つディレクトリを指す必要があります。オプションで、同じ場所に 1 つ以上の CSV ファイルを含む `validation/` という別のサブディレクトリを含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

## TabTransformer アルゴリズムの Amazon EC2 インスタンス推奨
<a name="Instance-TabTransformer"></a>

SageMaker AI TabTransformer は、単一インスタンスの CPU と単一インスタンスの GPU トレーニングをサポートしています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。GPU トレーニングを利用するには、インスタンスタイプを GPU インスタンスの 1 つ (P3 など) として指定します。現在、SageMaker AI TabTransformer ではマルチ GPU トレーニングはサポートされていません。

## TabTransformer サンプルノートブック
<a name="tabtransformer-sample-notebooks"></a>

次の表は、Amazon SageMaker AI TabTransformer アルゴリズムのさまざまなユースケースに対応する各種サンプルノートブックの概要を示しています。


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Classification_TabTransformer.ipynb)  |  このノートブックでは、Amazon SageMaker AI TabTransformer アルゴリズムを使用して表形式の分類モデルをトレーニングしホストする方法について説明します。  | 
|  [Tabular regression with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Regression_TabTransformer.ipynb)  |  このノートブックでは、Amazon SageMaker AI TabTransformer アルゴリズムを使用して表形式の回帰モデルをトレーニングしホストする方法について説明します。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# TabTransformer の仕組み
<a name="tabtransformer-HowItWorks"></a>

TabTransformer は、教師あり学習の新しいディープな表形式データモデリングアーキテクチャです。TabTransformer は、自己アテンションベースの Transformers で構築されています。トランスフォーマーレイヤーは、カテゴリ別特徴の埋め込みを堅牢なコンテキスト埋め込みに変換して、予測精度を高めます。さらに、TabTransformer から学習したコンテキスト埋め込みは、欠落しているデータ特徴とノイズの多いデータ特徴の両方に対して非常に堅牢で、解釈可能性もより優れています。

TabTransformer アルゴリズムは、さまざまなデータ型、関係、分布、および微調整できるさまざまなハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。TabTransformer は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

TabTransformer アーキテクチャを以下に図で示します。

![\[TabTransformer のアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/tabtransformer_illustration.png)


詳細については、「*[TabTransformer: Tabular Data Modeling Using Contextual Embeddings](https://arxiv.org/abs/2012.06678)*」を参照してください。

# TabTransformer のハイパーパラメータ
<a name="tabtransformer-hyperparameters"></a>

次の表には、Amazon SageMaker AI TabTransformer アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI TabTransformer アルゴリズムは、オープンソースの [TabTransformer](https://github.com/jrzaurin/pytorch-widedeep) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[TabTransformer サンプルノートブック](tabtransformer.md#tabtransformer-sample-notebooks) のサンプルデータセットに基づいています。

SageMaker AI TabTransformer アルゴリズムは分類問題のタイプに基づいて評価指標と目標関数を自動的に選択します。TabTransformer アルゴリズムは、データ内のラベル数に基づいて分類問題のタイプを検出します。回帰問題の場合、評価指標は R の二乗、目標関数は平均二乗誤差です。二項分類問題の場合、評価指標と目標関数はどちらも二項交差エントロピーです。多クラス分類問題の場合、評価指標と目標関数はどちらもマルチクラスの交差エントロピーになります。

**注記**  
TabTransformer の評価指標と目標関数は、現在ハイパーパラメータとして使用できません。代わりに、SageMaker AI TabTransformer の組み込みアルゴリズムは、ラベル列の一意の整数の数に基づいて分類タスクのタイプ (回帰、バイナリ、またはマルチクラス) を自動的に検出し、評価指標と目標関数を割り当てます。


| Parameter Name | 説明 | 
| --- | --- | 
| n\$1epochs |  深層ニューラルネットワークをトレーニングするエポック数。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `5`。  | 
| patience |  最後の `patience` ラウンドで 1 つの検証データポイントの 1 つのメトリックが改善されない場合、トレーニングは停止します。 有効な値: 整数、範囲: (`2`, `60`)。 デフォルト値: `10`。  | 
| learning\$1rate |  トレーニング例をバッチごとに処理した後に、モデルのウェイトを更新する頻度。 有効な値: 浮動小数点、範囲: 正の浮動小数点数。 デフォルト値: `0.001`。  | 
| batch\$1size |  ネットワークを通して伝播されたサンプルの数。 有効な値: 整数、範囲: (`1`, `2048`)。 デフォルト値: `256`。  | 
| input\$1dim |  カテゴリ列や連続列をエンコードする埋め込みのディメンション。 有効な値: 文字列、`"16"`、`"32"`、`"64"`、`"128"`、`"256"`、または `"512"` のいずれか。 デフォルト値: `"32"`。  | 
| n\$1blocks |  Transformer エンコーダーのブロック数。 有効な値: 整数、範囲: (`1`, `12`)。 デフォルト値: `4`。  | 
| attn\$1dropout |  マルチヘッドアテンションレイヤーに適用されるドロップアウト率。 有効な値: 浮動小数点、範囲: (`0`, `1`)。 デフォルト値: `0.2`。  | 
| mlp\$1dropout |  エンコーダーレイヤーと Transformer エンコーダー上部の最終 MLP レイヤー内の FeedForward ネットワークに適用されるドロップアウト率。 有効な値: 浮動小数点、範囲: (`0`, `1`)。 デフォルト値: `0.1`。  | 
| frac\$1shared\$1embed |  特定の列について、異なるカテゴリすべてで共有される埋め込みの割合。 有効な値: 浮動小数点、範囲: (`0`, `1`)。 デフォルト値: `0.25`。  | 

# TabTransformer モデルを調整する
<a name="tabtransformer-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**モデル調整は、次のハイパーパラメータに重点を置いています。

**注記**  
学習の目標関数と評価指標は、ラベル列の一意の整数の数によって決まる分類タスクの種類に基づいて自動的に割り当てられます。詳細については、「[TabTransformer のハイパーパラメータ](tabtransformer-hyperparameters.md)」を参照してください。
+ モデルトレーニング中に最適化する学習の目標関数
+ 検証中にモデルのパフォーマンスを評価するための評価指標
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
TabTransformer の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## TabTransformer アルゴリズムで計算される評価メトリクス
<a name="tabtransformer-metrics"></a>

SageMaker AI TabTransformer アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。評価メトリクスは、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| r2 | R の二乗 | 最大化 | "metrics=\$1'r2': (\$1\$1S\$1)\$1" | 
| f1\$1score | 二項交差エントロピー | 最大化 | "metrics=\$1'f1': (\$1\$1S\$1)\$1" | 
| accuracy\$1score | マルチクラス交差エントロピー | 最大化 | "metrics=\$1'accuracy': (\$1\$1S\$1)\$1" | 

## 調整可能な TabTransformer のハイパーパラメータ
<a name="tabtransformer-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して TabTransformer モデルを調整します。TabTransformer の評価指標の最適化に最も影響を与えるハイパーパラメータは、`learning_rate`、`input_dim`、`n_blocks`、`attn_dropout`、`mlp_dropout`、および `frac_shared_embed` です。すべての TabTransformer ハイパーパラメータのリストについては、「[TabTransformer のハイパーパラメータ](tabtransformer-hyperparameters.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001、MaxValue: 0.01 | 
| input\$1dim | CategoricalParameterRanges | [16, 32, 64, 128, 256, 512] | 
| n\$1blocks | IntegerParameterRanges | MinValue: 1、MaxValue: 12 | 
| attn\$1dropout | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.8 | 
| mlp\$1dropout | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.8 | 
| frac\$1shared\$1embed | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.5 | 

# Amazon SageMaker AI の XGBoost アルゴリズム
<a name="xgboost"></a>

[XGBoost](https://github.com/dmlc/xgboost) (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムの 1 つで、より単純なモデルのセットからの推定を複数組み合わせることで、ターゲット変数の正確な予測を試みます。XGBoost アルゴリズムは、次の理由で機械学習のコンペティションにおいて優れたパフォーマンスを発揮しています。
+ さまざまなデータ型、関係、分布の堅牢な処理。
+ ファインチューニングできるさまざまなハイパーパラメータ。

XGBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

XGBoost アルゴリズムの新しいリリースは、次のいずれかの方法で使用できます。
+ Amazon SageMaker AI 組み込みアルゴリズムとして使用する。
+ ローカル環境でトレーニングスクリプトを実行するフレームワークとして使用する。

この実装では、元のバージョンよりも、メモリのフットプリントが縮小し、ログ記録が強化され、ハイパーパラメータ検証が向上し、メトリクスセットが拡大しています。マネージド型の XGBoost 環境でトレーニングスクリプトを実行する XGBoost `estimator` も提供されています。SageMaker AI XGBoost の現在のリリースは、元の XGBoost バージョン 1.0、1.2、1.3、1.5、1.7、3.0 に基づいています。

Amazon SageMaker AI XGBoost アルゴリズムの詳細については、次のブログ記事を参照してください。
+ [Introducing the open-source Amazon SageMaker AI XGBoost algorithm container](https://aws.amazon.com/blogs/machine-learning/introducing-the-open-source-amazon-sagemaker-xgboost-algorithm-container/)
+ [Amazon SageMaker AI XGBoost now offers fully distributed GPU training](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-xgboost-now-offers-fully-distributed-gpu-training/)

## サポートバージョン
<a name="xgboost-supported-versions"></a>

詳細については、[「 サポートポリシー](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-containers-support-policy.html#pre-built-containers-support-policy-ml-framework)」を参照してください。
+ フレームワーク (オープンソース) モード: 1.2-1、1.2-2、1.3-1、1.5-1、1.7-1、3.0-5
+ アルゴリズムモード: 1.2-1、1.2-2、1.3-1、1.5-1、1.7-1、3.0-5

**警告**  
必要なコンピューティング容量のため、SageMaker AI XGBoost のバージョン 3.0-5 は、トレーニングまたは推論のために P3 インスタンスファミリーの GPU インスタンスと互換性がありません。

**警告**  
パッケージ互換のため、SageMaker AI XGBoost のバージョン 3.0-5 は SageMaker デバッガーをサポートしていません。

**警告**  
必要なコンピューティングキャパシティのため、SageMaker AI XGBoost のバージョン 1.7-1 は、トレーニングまたは推論用の P2 インスタンスファミリーの GPU インスタンスと互換性がありません。

**警告**  
ネットワーク分離モード: pip をバージョン 25.2 以降にアップグレードしないでください。新しいバージョンでは、モジュールのインストール中に PyPI から setuptools を取得しようとする場合があります。

**重要**  
SageMaker AI XGBoost イメージ URI を取得する場合は、イメージ URI タグに `:latest` または `:1` を使用しないでください。使用するネイティブ XGBoost パッケージバージョンの SageMaker AI が管理する XGBoost コンテナを選択するには、[サポートバージョン](#xgboost-supported-versions) のいずれかを指定する必要があります。SageMaker AI XGBoost コンテナに移行されたパッケージバージョンを確認するには、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html)」を参照してください。次に、 を選択し AWS リージョン、**XGBoost (アルゴリズム) **セクションに移動します。

**警告**  
XGBoost 0.90 バージョンは廃止されました。XGBoost 0.90 のセキュリティアップデートまたはバグ修正のサポートは終了しました。XGBoost のバージョンを新しいバージョンにアップグレードすることを強くお勧めします。

**注記**  
XGBoost v1.1 は SageMaker AI ではサポートされていません。XGBoost 1.1 では、テスト入力の特徴量が LIBSVM 入力のトレーニングデータよりも少ないと、予測の実行が機能しません。この機能は XGBoost v1.2 で復元されています。SageMaker AI XGBoost 1.2-2 以降の使用を検討してください。

**注記**  
XGBoost v1.0-1 は使用できますが、正式にはサポートされていません。

## XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="Instance-XGBoost"></a>

SageMaker AI XGBoost は CPU と GPU のトレーニングと推論をサポートしています。インスタンスの推奨事項は、XGBoost アルゴリズムのバージョンだけでなく、トレーニングや推論のニーズによっても異なります。詳細については、次のいずれかのタブを選択してください。
+ [CPU トレーニング](#Instance-XGBoost-training-cpu)
+ [GPU トレーニング](#Instance-XGBoost-training-gpu)
+ [分散 CPU トレーニング](#Instance-XGBoost-distributed-training-cpu)
+ [分散 GPU トレーニング](#Instance-XGBoost-distributed-training-gpu)
+ [推論](#Instance-XGBoost-inference)

### トレーニング
<a name="Instance-XGBoost-training"></a>

SageMaker AI XGBoost アルゴリズムは CPU と GPU のトレーニングをサポートします。

#### CPU トレーニング
<a name="Instance-XGBoost-training-cpu"></a>

SageMaker AI XGBoost 1.0-1 以前では、CPU を使用した場合にのみトレーニングできます。これは (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C4 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。メインメモリに収まらないデータを扱う場合はディスク領域を使用できます。これは、libsvm 入力モードで利用できる out-of-core 機能の 1 つです。ただし、ディスクにキャッシュファイルを書き込むとアルゴリズムの処理速度が低下します。

#### GPU トレーニング
<a name="Instance-XGBoost-training-gpu"></a>

SageMaker AI XGBoost バージョン 1.2-2 以降では、GPU トレーニングがサポートされています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。

SageMaker AI XGBoost バージョン 1.2-2 以降は、P2、P3、G4dn、および G5 GPU インスタンスファミリーをサポートしています。

SageMaker AI XGBoost バージョン 1.7-1 以降は、P3、G4dn、および G5 GPU インスタンスファミリーをサポートしています。コンピューティングキャパシティの要件により、バージョン 1.7-1 以降は P2 インスタンスファミリーをサポートしていないことに注意してください。

SageMaker AI XGBoost バージョン 3.0-5 以降では、G4dn および G5 GPU インスタンスファミリーがサポートされています。コンピューティング容量の要件により、バージョン 3.0-5 以降は P3 インスタンスファミリーをサポートしていないことに注意してください。

GPU トレーニングを活用するには、以下を実行します。
+ インスタンスタイプを GPU インスタンスの 1 つとして指定する (G4dn など) 
+ 既存の XGBoost スクリプトで `tree_method` ハイパーパラメータを `gpu_hist` に設定します。

### 分散トレーニング
<a name="Instance-XGBoost-distributed-training"></a>

SageMaker AI XGBoost は、分散トレーニング用の CPU インスタンスと GPU インスタンスをサポートしています。

#### 分散 CPU トレーニング
<a name="Instance-XGBoost-distributed-training-cpu"></a>

CPU トレーニングを複数のインスタンスで実行するには、推定器の `instance_count` パラメータを 1 より大きい値に設定します。入力データをインスタンスの総数で割る必要があります。

##### 入力データを複数のインスタンスに分割
<a name="Instance-XGBoost-distributed-training-divide-data"></a>

次の手順を使用して入力データを分割します。

1. 入力データを小さなファイルに分割します。ファイルの数は分散トレーニングに使用されるインスタンスの数と等しいか、それ以上である必要があります。1 つの大きなファイルではなく、小さいファイルを複数使用すると、トレーニングジョブのデータダウンロード時間も短縮されます。

1. [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html) を作成するときは、分散パラメータを `ShardedByS3Key` に設定します。これにより、トレーニングジョブで *n* 個のインスタンスが指定されている場合、各インスタンスが取得するのは S3 のファイル数の約 *1/n* になります。

#### 分散 GPU トレーニング
<a name="Instance-XGBoost-distributed-training-gpu"></a>

分散トレーニングは、単一の GPU インスタンスでもマルチ GPU インスタンスでも使用できます。

**単一 GPU インスタンスによる分散トレーニング**

SageMaker AI XGBoost バージョン 1.2-2 から 1.3-1 では、単一 GPU インスタンスのトレーニングのみがサポートされています。つまり、マルチ GPU インスタンスを選択しても、インスタンスごとに 1 つの GPU しか使用されません。

次の場合は、入力データをインスタンスの総数で割る必要があります。
+ XGBoost バージョン 1.2-2 ～ 1.3-1 を使用している場合。
+ マルチ GPU インスタンスを使用する必要がない場合。

 詳細については、「[入力データを複数のインスタンスに分割](#Instance-XGBoost-distributed-training-divide-data)」を参照してください。

**注記**  
SageMaker AI XGBoost のバージョン 1.2-2 から 1.3-1 までは、マルチ GPU インスタンスを選択しても、インスタンスごとに 1 つの GPU しか使用しません。

**マルチ GPU インスタンスによる分散トレーニング**

[バージョン 1.5-1 以降、SageMaker AI XGBoost は Dask による分散 GPU トレーニングを提供します。](https://www.dask.org/)Dask では、1 つ以上のマルチ GPU インスタンスを使用するときに、すべての GPU を利用できます。Dask は単一 GPU インスタンスを使用する場合にも機能します。

Dask でトレーニングを行うには、次の手順を使用します。

1. [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html) の `distribution` パラメータを省略するか、`FullyReplicated` に設定します。

1. ハイパーパラメータを定義するときは、`use_dask_gpu_training` を `"true"`に設定します。

**重要**  
Dask による分散トレーニングは CSV と Parquet の入力形式のみをサポートします。LIBSVM や PROTOBUF などの他のデータ形式を使用すると、トレーニングジョブは失敗します。  
Parquet データの場合は、列名が文字列として保存されていることを確認してください。他のデータ型の名前を持つ列は読み込めません。

**重要**  
Dask による分散トレーニングではパイプモードはサポートされません。パイプモードが指定されている場合、トレーニングジョブは失敗します。

SageMaker AI XGBoost を Dask でトレーニングする際に注意すべき点がいくつかあります。データは必ず小さいファイルに分割してください。Dask は各 Parquet ファイルをパーティションとして読み取ります。Dask ワーカーは GPU ごとに存在します。そのため、ファイル数は GPU の総数 (インスタンス数 x インスタンスあたりの GPU 数) よりも大きい数である必要があります。ファイル数が非常に多いと、パフォーマンスが低下する可能性もあります。詳細については、「[Dask Best Practices](https://docs.dask.org/en/stable/best-practices.html)」を参照してください。

#### 出力のバリエーション
<a name="Instance-XGBoost-distributed-training-output"></a>

指定された `tree_method` ハイパーパラメータによって、XGBoost トレーニングに使用されるアルゴリズムが決まります。`approx`、`hist`、および `gpu_hist` の 3 つの方法はすべて近似法であり、分位数の計算にはスケッチを使用します。詳細については、XGBoost ドキュメントの「[Tree Methods](https://xgboost.readthedocs.io/en/stable/treemethod.html)」を参照してください。スケッチは近似アルゴリズムです。そのため、分散トレーニングの対象となるワーカーの数などの要因によって、モデルにばらつきが生じることが予想されます。変動の有意性はデータによって異なります。

### 推論
<a name="Instance-XGBoost-inference"></a>

SageMaker AI XGBoost は推論用に CPU インスタンスと GPU インスタンスをサポートしています。推論用のインスタンスタイプについては、「[Amazon SageMaker AI ML Instance Types](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

# SageMaker AI XGBoost の使用方法
<a name="xgboost-how-to-use"></a>

SageMaker AI では、組み込みのアルゴリズムまたはフレームワークとして XGBoost を使用できます。XGBoost をフレームワークとして使用すると、独自のトレーニングスクリプトをカスタマイズできるため、柔軟性が高まり、より高度なシナリオを利用できるようになります。以下のセクションでは、SageMaker Python SDK で XGBoost を使用する方法と、XGBoost アルゴリズムの入出力インターフェイスについて説明します。Amazon SageMaker Studio Classic UI から XGBoost を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。

**Topics**
+ [XGBoost をフレームワークとして使用する](#xgboost-how-to-framework)
+ [XGBoost を組み込みアルゴリズムとして使用する](#xgboost-how-to-built-in)
+ [XGBoost アルゴリズムの入出力インターフェイス](#InputOutput-XGBoost)

## XGBoost をフレームワークとして使用する
<a name="xgboost-how-to-framework"></a>

XGBoost をフレームワークとして使用して、追加のデータ処理をトレーニングジョブに組み込むことができるカスタマイズされたトレーニングスクリプトを実行します。次のコード例では、SageMaker Python SDK は XGBoost API をフレームワークとして提供しています。これは、SageMaker AI が TensorFlow、MXNet、PyTorch などの他のフレームワーク API を提供する場合と同様に機能します。

```
import boto3
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput

# initialize hyperparameters
hyperparameters = {
        "max_depth":"5",
        "eta":"0.2",
        "gamma":"4",
        "min_child_weight":"6",
        "subsample":"0.7",
        "verbosity":"1",
        "objective":"reg:squarederror",
        "num_round":"50"}

# set an output path where the trained model will be saved
bucket = sagemaker.Session().default_bucket()
prefix = 'DEMO-xgboost-as-a-framework'
output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework')

# construct a SageMaker AI XGBoost estimator
# specify the entry_point to your xgboost training script
estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", 
                    framework_version='1.7-1',
                    hyperparameters=hyperparameters,
                    role=sagemaker.get_execution_role(),
                    instance_count=1,
                    instance_type='ml.m5.2xlarge',
                    output_path=output_path)

# define the data type and paths to the training and validation datasets
content_type = "libsvm"
train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type)
validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type)

# execute the XGBoost training job
estimator.fit({'train': train_input, 'validation': validation_input})
```

フレームワークとして SageMaker AI XGBoost を使用するエンドツーエンドの例については、「[Regression with Amazon SageMaker AI XGBoost](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone_dist_script_mode.html)」を参照してください。

## XGBoost を組み込みアルゴリズムとして使用する
<a name="xgboost-how-to-built-in"></a>

次のコード例に示すように、XGBoost 組み込みアルゴリズムを使用して、XGBoost トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API を使用して、XGBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 1 を使用している場合は、`get_image_uri` API を使用します。`image_uris.retrieve` API で正しい URI を確実に検出できるようにするには、[組み込みアルゴリズムの共通パラメータ](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)について参照してください。次に、組み込みアルゴリズムイメージ URI と使用可能なリージョンの完全なリストから `xgboost` を検索します。

XGBoost イメージ URI を指定した後、XGBoost コンテナを使用することで、SageMaker AI Estimator API を使って推定器を作成し、トレーニングジョブを開始します。この XGBoost 組み込みアルゴリズムモードでは、独自の XGBoost トレーニングスクリプトは組み込まれず、入力データセット上で直接実行されます。

**重要**  
SageMaker AI XGBoost イメージ URI を取得する場合は、イメージ URI タグに `:latest` または `:1` を使用しないでください。使用するネイティブ XGBoost パッケージバージョンの SageMaker AI が管理する XGBoost コンテナを選択するには、[サポートバージョン](xgboost.md#xgboost-supported-versions) のいずれかを指定する必要があります。SageMaker AI XGBoost コンテナに移行されたパッケージバージョンを確認するには、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html)」を参照してください。次に、 AWS リージョンを選択し、「**XGBoost (algorithm)**」セクションに移動します。

```
import sagemaker
import boto3
from sagemaker import image_uris
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput

# initialize hyperparameters
hyperparameters = {
        "max_depth":"5",
        "eta":"0.2",
        "gamma":"4",
        "min_child_weight":"6",
        "subsample":"0.7",
        "objective":"reg:squarederror",
        "num_round":"50"}

# set an output path where the trained model will be saved
bucket = sagemaker.Session().default_bucket()
prefix = 'DEMO-xgboost-as-a-built-in-algo'
output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo')

# this line automatically looks for the XGBoost image URI and builds an XGBoost container.
# specify the repo_version depending on your preference.
xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.7-1")

# construct a SageMaker AI estimator that calls the xgboost-container
estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          role=sagemaker.get_execution_role(),
                                          instance_count=1, 
                                          instance_type='ml.m5.2xlarge', 
                                          volume_size=5, # 5 GB 
                                          output_path=output_path)

# define the data type and paths to the training and validation datasets
content_type = "libsvm"
train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type)
validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type)

# execute the XGBoost training job
estimator.fit({'train': train_input, 'validation': validation_input})
```

XGBoost を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
+ [Managed Spot Training for XGBoost](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_managed_spot_training.html)
+ [Regression with Amazon SageMaker AI XGBoost (Parquet input)](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_parquet_input_training.html)

## XGBoost アルゴリズムの入出力インターフェイス
<a name="InputOutput-XGBoost"></a>

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

SageMaker AI の XGBoost の実装では、トレーニングと推論に次のデータ形式が対応しています。
+  text/libsvm (default) 
+  text/csv
+  application/x-parquet
+  application/x-recordio-protobuf

**注記**  
トレーニングと推論の入力に関して注意すべき点がいくつかあります。  
パフォーマンスを高めるには、*ファイルモード*で XGBoost を使用することをお勧めします。このモードでは、Amazon S3 からのデータがトレーニングインスタンスボリュームに保存されます。
列指向入力によるトレーニングでは、アルゴリズムはターゲット変数 (ラベル) が最初の列であることを前提としています。推論の場合、アルゴリズムは入力にラベル列がないと見なします。
CSV データの場合、入力にヘッダーレコードを含めることはできません。
LIBSVM のトレーニングでは、アルゴリズムは、ラベル列の後の列に特徴のゼロベースのインデックス値のペアが含まれていると仮定します。そのため、各行は <label> <index0>:<value0> <index1>:<value1> の形式になります。
インスタンスタイプと分散トレーニングについては、「[XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項](xgboost.md#Instance-XGBoost)」を参照してください。

CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計でトレーニングデータセットを保持できる必要があります。使用可能な合計メモリは `Instance Count * the memory available in the InstanceType` で計算されます。libsvm トレーニング入力モードの場合、これは必須ではありませんが推奨されます。

v1.3-1 以降、SageMaker AI XGBoost は `Booster.save_model` を使用して XGBoost 内部バイナリ形式でモデルを保存します。以前のバージョンでは、モデルのシリアル化/逆シリアル化に Python の pickle モジュールを使用していました。

**注記**  
オープンソースの XGBoost で SageMaker AI XGBoost モデルを使用する場合は、バージョンに注意してください。バージョン 1.3-1 以降は XGBoost 内部バイナリ形式を使用していますが、以前のバージョンでは Python の pickle モジュールを使用しています。

**SageMaker AI XGBoost v1.3-1 以降でトレーニングされたモデルをオープンソースの XGBoost で使用する方法**
+ 次の Python コードを使用します。

  ```
  import xgboost as xgb
  
  xgb_model = xgb.Booster()
  xgb_model.load_model(model_file_path)
  xgb_model.predict(dtest)
  ```

**以前のバージョンの SageMaker AI XGBoost でトレーニングされたモデルをオープンソースの XGBoost で使用する方法**
+ 次の Python コードを使用します。

  ```
  import pickle as pkl 
  import tarfile
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = pkl.load(open(model_file_path, 'rb'))
  
  # prediction with test data
  pred = model.predict(dtest)
  ```

**ラベル付きデータポイントの重要性を区別するには、インスタンス重みサポートを使用します。**
+ SageMaker AI XGBoost では、各インスタンスに重み値を割り当てることで、ラベル付きデータポイントの重要性を区別できます。*text/libsvm* 入力の場合、顧客がデータインスタンスに重み値を割り当てるには、ラベルの後に重み値を付加します。例えば、`label:weight idx_0:val_0 idx_1:val_1...`。*text/csv* 入力の場合、顧客はパラメータで `csv_weights` フラグをオンにし、その列でラベルの後に重み値を付加する必要があります。例: `label,weight,val_0,val_1,...`)。

# XGBoost サンプルノートブック
<a name="xgboost-sample-notebooks"></a>

次の一覧は、Amazon SageMaker AI XGBoost アルゴリズムのさまざまなユースケースに対応する各種サンプル Jupyter Notebook を示しています。
+ [カスタム XGBoost コンテナを作成する方法](https://sagemaker-examples.readthedocs.io/en/latest/aws_sagemaker_studio/sagemaker_studio_image_build/xgboost_bring_your_own/Batch_Transform_BYO_XGB.html) – このノートブックでは、Amazon SageMaker AI Batch 変換を使用してカスタム XGBoost コンテナを構築する方法について説明しています。
+ [Parquet を使用した XGBoost でのリグレッション](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_parquet_input_training.html) – このノートブックでは、Parquet の Abalone データセットを使用して XGBoost モデルをトレーニングする方法について説明しています。
+ [多クラス分類モデルをトレーニングおよびホストする方法](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_mnist/xgboost_mnist.html) – このノートブックでは、MNIST データセットを使用して、多クラス分類モデルをトレーニングおよびホストする方法について説明しています。
+ [カスタマーチャーン予測のモデルをトレーニングする方法](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/xgboost_customer_churn/xgboost_customer_churn.html) – このノートブックでは、不満を感じている顧客を特定するために、モバイルの顧客の離反を予測するモデルをトレーニングする方法について説明しています。
+ [XGBoost トレーニング用 Amazon SageMaker AI マネージドスポットインフラストラクチャの概要](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_managed_spot_training.html) – このノートブックでは、XGBoost コンテナでトレーニングにスポットインスタンスを使用する方法について説明しています。
+ [Amazon SageMaker Debugger を使用して XGBoost トレーニングジョブをデバッグする方法](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/xgboost_census_explanations/xgboost-census-debugger-rules.html) – このノートブックでは、Amazon SageMaker Debugger を使用して、トレーニングジョブをモニタリングし、組み込みのデバッグルールを使用して不整合を検出する方法について説明しています。

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。線形学習者アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# SageMaker AI XGBoost アルゴリズムの仕組み
<a name="xgboost-HowItWorks"></a>

[XGBoost](https://github.com/dmlc/xgboost) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムで、より単純で弱いモデルのセットの推定を組み合わせることで、ターゲット変数の正確な予測を試行します。

リグレッションに[勾配ブースティング](https://en.wikipedia.org/wiki/Gradient_boosting)を使用すると、弱学習器がリグレッションツリーになり、各リグレッションツリーが、連続スコアが含まれる入力データポイントをいずれか 1 つのリーフにマッピングします。XGBoost は、モデル複雑さ (つまり回帰ツリーの関数) のために凸損失関数 (予測出力とターゲット出力の違いに基づく) とペナルティ項を組み合わせる、正規化された (L1 と L2) 目的関数を最小化します。トレーニングは反復的に進行し、前のツリーの残差やエラーを予測する新しいツリーを追加して、それを前のツリーと組み合わせることで最終的な予測を出します。これは、新しいモデルを追加するときに勾配降下アルゴリズムを使用して損失を最小限に抑えるため、勾配ブースティングと呼ばれます。

 以下の図に、勾配ツリーブースティングの仕組みを簡単に示します。

![\[勾配ツリーブースティングを示す図。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/xgboost_illustration.png)


**XGBoost の詳細については、次の記事を参照してください。**
+ [XGBoost: A Scalable Tree Boosting System (XGBoost: スケーラブルツリーブーストシステム)](https://arxiv.org/pdf/1603.02754.pdf)
+ [勾配ツリーブースト](https://www.sas.upenn.edu/~fdiebold/NoHesitations/BookAdvanced.pdf#page=380)
+ [Introduction to Boosted Trees (ブーストツリーの概要)](https://xgboost.readthedocs.io/en/latest/tutorials/model.html)

# XGBoost のハイパーパラメータ
<a name="xgboost_hyperparameters"></a>

次の表には、Amazon SageMaker AI XGBoost アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。SageMaker AI XGBoost アルゴリズムは、オープンソースの DMLC XGBoost パッケージの実装です。このバージョンの XGBoost に設定できるハイパーパラメータの完全なセットの詳細については、「[XGBoost パラメータ](https://xgboost.readthedocs.io/en/release_1.2.0/)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1class |  クラスの数。 `objective` が *multi:softmax* または *multi:softprob* に設定されている場合は**必須**。 有効な値: 整数。  | 
| num\$1round |  トレーニングを実行するラウンド数。 **必須** 有効な値: 整数。  | 
| alpha |  重みに対する L1 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数。 デフォルト値: 0  | 
| base\$1score |  すべてのインスタンスの初期予測スコア、全体的な偏り。 **オプション** 有効な値: 浮動小数点数。 デフォルト値: 0.5  | 
| booster |  使用するブースター。`gbtree` 値と `dart` 値はツリー型のモデルを使用し、`gblinear` は一次関数を使用します。 **オプション** 有効な値： 文字列。`"gbtree"`、`"gblinear"`、`"dart"` のいずれか 1 つ。 デフォルト値: `"gbtree"`  | 
| colsample\$1bylevel |  各レベルにおける、各分割の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| colsample\$1bynode |  各ノードの列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: (0,1]。 デフォルト値： 1  | 
| colsample\$1bytree |  各ツリーを構築する際の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| csv\$1weights |  このフラグを有効にすると、XGBoost は、トレーニングデータの 2 列目 (ラベルの後の列) をインスタンスの重みとして使用して、csv 入力のインスタンスの重要性を区別します。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| deterministic\$1histogram |  このフラグが有効になっている場合、XgBoost はヒストグラムを GPU 上で決定的に構築します。`tree_method` が `gpu_hist` に設定されている場合にのみ使用されます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値： 文字列。範囲: `"true"` または `"false"`。 デフォルト値: `"true"`  | 
| early\$1stopping\$1rounds |  検証スコアに改善が見られなくなるまでモデルのトレーニングが行われます。トレーニングを続行するには、少なくとも `early_stopping_rounds` ごとに検証エラーが減少する必要があります。SageMaker AI ホスティングは推論に最適なモデルを使用します。 **オプション** 有効な値: 整数。 デフォルト値: -  | 
| eta |  過剰適合を防ぐために更新で使用されるステップサイズの縮小。各ブースティングステップ後、新しい特徴の重みを直接取得できます。`eta` パラメータは実際に特徴の重みを縮小して、ブースティング処理をより控えめにします。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値: 0.3  | 
| eval\$1metric |  検証データの検証メトリクス。目標に応じてデフォルトのメトリクスが割り当てられます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/xgboost_hyperparameters.html) 有効な入力のリストについては、「[XGBoost Learning Task Parameters」(XGBoost ラーニングタスクのパラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。 **オプション** 有効な値： 文字列。 デフォルト値: 目標に基づくデフォルト  | 
| gamma |  ツリーのリーフノードに追加のパーティションを作成するために必要な損失低減の最小値。数値が大きいほど、アルゴリズムはより控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値: 0  | 
| grow\$1policy |  ツリーに新しいノードを追加する方法を制御します。現在、`tree_method` が `hist` に設定されている場合にのみサポートされます。 **オプション** 有効な値： 文字列。`"depthwise"` または `"lossguide"` です。 デフォルト値: `"depthwise"`  | 
| interaction\$1constraints |  やり取りが許可される変数のグループを指定します。 **オプション** 有効な値: ネストされた整数のリスト。各整数は特徴を表し、ネストされた各リストには、[[1,2], [3,4,5]] など、やり取りが許可される特徴が含まれています。 デフォルト値: なし  | 
| lambda |  重みに対する L2 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数。 デフォルト値： 1  | 
| lambda\$1bias |  偏りに対する L2 正規化項。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0  | 
| max\$1bin |  連続する特徴をバケットに入れる別個のビンの最大数。`tree_method` が `hist` に設定されている場合にのみ使用されます。 **オプション** 有効な値: 整数。 デフォルト値: 256  | 
| max\$1delta\$1step |  各ツリーの重みの推定に許可されるデルタステップの最大値。正の整数が使用されている場合、更新はより保守的になります。推奨されるオプションは、ロジスティック回帰での使用です。更新を制御しやすくするには、1 ～ 10 に設定します。 **オプション** 有効な値: 整数。範囲: [0,∞)。 デフォルト値: 0  | 
| max\$1depth |  ツリーの最大深度。この値を増やすとモデルがより複雑になり、過剰適合が発生しやすくなります。0 は無制限を示します。上限は `grow_policy` = `depth-wise` の場合に必須です。 **オプション** 有効な値: 整数。範囲: [0,∞) デフォルト値: 6  | 
| max\$1leaves |  追加されるノードの最大数。`grow_policy` が `lossguide` に設定されている場合にのみ関連します。 **オプション** 有効な値: 整数。 デフォルト値: 0  | 
| min\$1child\$1weight |  子に必要とされるインスタンスの重み (ヘッセ) の合計の最小値。ツリーのパーティション分割ステップにより、リーフノードのインスタンスの重みの合計が `min_child_weight` を下回る場合、構築処理は追加のパーティション分割を行わなくなります。線形回帰モデルでは、これは単に各ノードに必要とされるインスタンスの最小数に対応します。アルゴリズムが大きいほど、より控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値： 1  | 
| monotone\$1constraints |  任意の特徴に単調性の制約を指定します。 **オプション** 有効な値: 整数のタプル。有効な整数: -1 (制約の緩和)、0 (制約なし)、1 (制約の強化)。 (0, 1) など: 最初の予測子は制約なし、2 番目の予測子は制約の強化です。(-1、1): 最初の予測子は制約の緩和、2 番目の予測子は制約の強化です。 デフォルト値: (0, 0)  | 
| normalize\$1type |  正規化アルゴリズムの種類。 **オプション** 有効な値: *tree* または *forest* のいずれか。 デフォルト値: *tree*  | 
| nthread |  *xgboost* の実行に使用される並列スレッドの数。 **オプション** 有効な値: 整数。 デフォルト値: スレッドの最大数。  | 
| objective |  学習タスクと対応する学習目標を指定します。例: `reg:logistic`、`multi:softmax`、`reg:squarederror`。有効な入力の完全なリストについては、「[XGBoost Learning Task Parameters」(XGBoost パラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。 **オプション** 有効な値: 文字列 デフォルト値: `"reg:squarederror"`  | 
| one\$1drop |  このフラグを有効にすると、ドロップアウト中に常に 1 つ以上のツリーがドロップされます。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| process\$1type |  実行するブースティング処理の種類。 **オプション** 有効な値： 文字列。`"default"` または `"update"` です。 デフォルト値: `"default"`  | 
| rate\$1drop |  ドロップアウト中にドロップする、前のツリーの割合を指定するドロップアウト率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| refresh\$1leaf |  これは、'更新' アップデータープラグインのパラメータです。`true` (1) に設定すると、ツリーのリーフとツリーノードの統計情報が更新されます。`false` (0) に設定すると、ツリーノードの統計情報のみが更新されます。 **オプション** 有効な値: 0/1 デフォルト値： 1  | 
| sample\$1type |  サンプリングアルゴリズムの種類。 **オプション** 有効な値: `uniform` または `weighted`。 デフォルト値: `uniform`  | 
| scale\$1pos\$1weight |  正の重みと負の重みの均衡を制御します。不均衡なクラスに役立ちます。検討する一般的な値 :`sum(negative cases)` / `sum(positive cases)`。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1  | 
| seed |  乱数シード。 **オプション** 有効な値: 整数 デフォルト値: 0  | 
| single\$1precision\$1histogram |  このフラグが有効になっている場合、XGBoost は倍精度ではなく単精度を使用してヒストグラムを作成します。`tree_method` が `hist` または `gpu_hist` に設定されている場合にのみ使用されます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値： 文字列。範囲: `"true"` または `"false"` デフォルト値: `"false"`  | 
| sketch\$1eps |  近似貪欲アルゴリズムでのみ使用されます。これは、O(1 / `sketch_eps`) 個のビンに換算します。ビンの数を直接選択することと比較して、これはスケッチの精度により理論的に保証されます。 **オプション** 有効な値: 浮動小数点: [0, 1]。 デフォルト値: 0.03  | 
| skip\$1drop |  ブースティングの反復中にドロップアウト手順をスキップする確率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| subsample |  トレーニングインスタンスのサブサンプル率。0.5 に設定すると、XGBoost はツリーの成長にデータインスタンスの半分をランダムに収集します。これにより、過剰適合を防ぎます。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| tree\$1method |  XGBoost で使用されるツリー構造アルゴリズム。 **オプション** 有効な値: `auto`、`exact`、`approx`、`hist`、`gpu_hist` のいずれか。 デフォルト値: `auto`  | 
| tweedie\$1variance\$1power |  Tweedie 分布の分散を制御するパラメータ。 **オプション** 有効な値: 浮動小数点数。範囲: (1, 2)。 デフォルト値: 1.5  | 
| updater |  ツリーアップデーターが実行される順序を定義するカンマ区切りの文字列。これにより、モジュール式にツリーを構築および修正できます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値: カンマ区切りの文字列。 デフォルト値: `grow_colmaker`、prune  | 
| use\$1dask\$1gpu\$1training |  Dask で分散 GPU トレーニングを実行する場合は `use_dask_gpu_training` を `"true"` に設定します。Dask GPU トレーニングはバージョン 1.5-1 以降でのみサポートされています。1.5-1 より前のバージョンでは、この値を `"true"` に設定しないでください。詳細については、「[分散 GPU トレーニング](xgboost.md#Instance-XGBoost-distributed-training-gpu)」を参照してください。 **オプション** 有効な値： 文字列。範囲: `"true"` または `"false"` デフォルト値: `"false"`  | 
| verbosity | メッセージ出力の詳細レベル。 有効な値: 0 (サイレント)、1 (警告)、2 (情報)、3 (デバッグ)。 **オプション** デフォルト値： 1  | 

# XGBoost モデルを調整する
<a name="xgboost-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**次の 3 つのタイプのハイパーパラメータを選択します。
+ モデルトレーニング中に最適化する学習 `objective` 関数
+ 検証中にモデルのパフォーマンスを評価するために使用する `eval_metric`
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

アルゴリズムが計算する一連の評価メトリクスから評価メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
XGBoost 0.90 の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## XGBoost アルゴリズムで計算される評価メトリクス
<a name="xgboost-metrics"></a>

XGBoost アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。モデルを調整するときに、これらのいずれかのメトリクスを選択してモデルを評価します。有効な `eval_metric` 値の完全なリストについては、「[XGBoost Learning Task Parameters」(XGBoost ラーニングタスクのパラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:accuracy |  分類率。\$1(right)/\$1(all cases) として計算されます。  |  最大化  | 
| validation:auc |  曲線下面積。  |  最大化  | 
| validation:error |  \$1(誤ったケース)/\$1(すべてのケース) で計算される二項分類誤り率。  |  最小化  | 
| validation:f1 |  分類精度の指標。精度とリコールの調和平均として計算されます。  |  最大化  | 
| validation:logloss |  負の対数尤度。  |  最小化  | 
| validation:mae |  平均絶対誤差。  |  最小化  | 
| validation:map |  平均精度の平均。  |  最大化  | 
| validation:merror |  \$1(誤ったケース)/\$1(すべてのケース) で計算される複数クラス分類誤り率。  |  最小化  | 
| validation:mlogloss |  複数クラス分類の負の対数尤度。  |  最小化  | 
| validation:mse |  平均二乗誤差。  |  最小化  | 
| validation:ndcg |  正規化減損累積利得。  |  最大化  | 
| validation:rmse |  二乗平均平方根誤差。  |  最小化  | 

## 調整可能な XGBoost ハイパーパラメータ
<a name="xgboost-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して XGBoost モデルを調整します。XGBoost のメトリクスに最も影響を与えるハイパーパラメータは、`alpha`、`min_child_weight`、`subsample`、`eta`、`num_round` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| alpha |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| colsample\$1bylevel |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 1  | 
| colsample\$1bynode |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 1  | 
| colsample\$1bytree |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 
| eta |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 0.5  | 
| gamma |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 5  | 
| lambda |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| max\$1delta\$1step |  IntegerParameterRanges  |  [0, 10]  | 
| max\$1depth |  IntegerParameterRanges  |  [0, 10]  | 
| min\$1child\$1weight |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 120  | 
| num\$1round |  IntegerParameterRanges  |  [1, 4000]  | 
| subsample |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 

# XGBoost の非推奨バージョンとそのアップグレード
<a name="xgboost-previous-versions"></a>

このトピックには、Amazon SageMaker AI XGBoost の以前のバージョンに関するドキュメントが含まれています。このドキュメントは引き続き利用可能ですが、推奨されていません。また、可能な場合に XGBoost の非推奨バージョンを最新バージョンにアップグレードする方法についても説明します。

**Topics**
+ [XGBoost バージョン 0.90 をバージョン 1.5 にアップグレードする](xgboost-version-0.90.md)
+ [XGBoost バージョン 0.72](xgboost-72.md)

# XGBoost バージョン 0.90 をバージョン 1.5 にアップグレードする
<a name="xgboost-version-0.90"></a>

SageMaker Python SDK を使用している場合、既存の XGBoost 0.90 ジョブをバージョン 1.5 にアップグレードするには、バージョン 2.x の SDK をインストールし、XGBoost `version` と `framework_version` パラメータを 1.5-1 に変更する必要があります。Boto3 を使用している場合、Docker イメージと、いくつかのハイパーパラメータと学習目標を更新する必要があります。

**Topics**
+ [SageMaker AI Python SDK バージョン 1.x をバージョン 2.x にアップグレードする](#upgrade-xgboost-version-0.90-sagemaker-python-sdk)
+ [イメージタグを 1.5-1 に変更する](#upgrade-xgboost-version-0.90-change-image-tag)
+ [boto3 の Docker イメージを変更する](#upgrade-xgboost-version-0.90-boto3)
+ [ハイパーパラメータと学習目標を更新する](#upgrade-xgboost-version-0.90-hyperparameters)

## SageMaker AI Python SDK バージョン 1.x をバージョン 2.x にアップグレードする
<a name="upgrade-xgboost-version-0.90-sagemaker-python-sdk"></a>

SageMaker Python SDK のバージョン 1.x をまだ使用している場合、SageMaker Python SDK のバージョン 2.x をアップグレードする必要があります。SageMaker Python SDK の最新バージョンの詳細については、「[Use Version 2.x of the SageMaker Python SDK」(SageMaker Python SDK のバージョン 2.x を使用する](https://sagemaker.readthedocs.io/en/stable/v2.html)) を参照してください。最新バージョンをインストールするには、次を実行します。

```
python -m pip install --upgrade sagemaker
```

## イメージタグを 1.5-1 に変更する
<a name="upgrade-xgboost-version-0.90-change-image-tag"></a>

SageMaker Python SDK を使用して XGBoost ビルドインアルゴリズムを使用している場合、`image_uris.retrive` でバージョンパラメータを変更します。

```
from sagemaker import image_uris
image_uris.retrieve(framework="xgboost", region="us-west-2", version="1.5-1")

estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          role=sagemaker.get_execution_role(),
                                          instance_count=1, 
                                          instance_type='ml.m5.2xlarge', 
                                          volume_size=5, # 5 GB 
                                          output_path=output_path)
```

SageMaker Python SDK を使用して XGBoost をフレームワークとして使用し、カスタマイズされたトレーニングスクリプトを実行する場合、XGBoost API で `framework_version` パラメータを変更します。

```
estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", 
                    framework_version='1.5-1',
                    hyperparameters=hyperparameters,
                    role=sagemaker.get_execution_role(),
                    instance_count=1,
                    instance_type='ml.m5.2xlarge',
                    output_path=output_path)
```

SageMaker Python SDK バージョン 1.x の `sagemaker.session.s3_input` は `sagemaker.inputs.TrainingInput` に名前が変更されています。次の例のように、`sagemaker.inputs.TrainingInput` を使用する必要があります。

```
content_type = "libsvm"
train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type)
validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type)
```

 SageMaker Python SDK バージョン 2.x の変更点の詳細なリストについては、「[Use Version 2.x of the SageMaker Python SDK」(SageMaker Python SDK のバージョン 2.x を使用する](https://sagemaker.readthedocs.io/en/stable/v2.html)) を参照してください。

## boto3 の Docker イメージを変更する
<a name="upgrade-xgboost-version-0.90-boto3"></a>

Boto3 を使用してモデルをトレーニングまたはデプロイする場合、docker イメージタグ (1、0.72、0.90-1 または 0.90-2) を 1.5-1 に変更します。

```
{
    "AlgorithmSpecification":: {
        "TrainingImage": "746614075791.dkr.ecr.us-west-1.amazonaws.com/sagemaker-xgboost:1.5-1"
    }
    ...
}
```

SageMaker Python SDK を使用してレジストリパスを取得する場合、`image_uris.retrieve` で `version` パラメータを変更します。

```
from sagemaker import image_uris
image_uris.retrieve(framework="xgboost", region="us-west-2", version="1.5-1")
```

## ハイパーパラメータと学習目標を更新する
<a name="upgrade-xgboost-version-0.90-hyperparameters"></a>

サイレントパラメータは廃止され、XGBoost 1.5 以降のバージョンでは使用できなくなりました。代わりに `verbosity` を使用します。`reg:linear` 学習目標を使用していた場合、これも同様に廃止され、` reg:squarederror` に置き換えられます。代わりに `reg:squarederror` を使用します。

```
hyperparameters = {
    "verbosity": "2",
    "objective": "reg:squarederror",
    "num_round": "50",
    ...
}

estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          ...)
```

# XGBoost バージョン 0.72
<a name="xgboost-72"></a>

**重要**  
XGBoost 0.72 は Amazon SageMaker AI で廃止されます。この古いバージョンの XGBoost は、次のコードサンプルに示すように、そのイメージ URI をプルすることで引き続き組み込みアルゴリズムとして使用できます。XGBoost の場合、`:1` で終わるイメージ URI は古いバージョン用です。  

```
import boto3
from sagemaker.amazon.amazon_estimator import get_image_uri

xgb_image_uri = get_image_uri(boto3.Session().region_name, "xgboost", repo_version="1")
```

```
import boto3
from sagemaker import image_uris

xgb_image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "1")
```
新しいバージョンを使用する場合、イメージ URI タグを明示的に指定する必要があります (「[サポートバージョン](xgboost.md#xgboost-supported-versions)」を参照)。

この以前の Amazon SageMaker AI XGBoost アルゴリズムのリリースは、0.72 リリースに基づいています。[XGBoost](https://github.com/dmlc/xgboost) (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムで、より単純で弱いモデルのセットの推定を組み合わせることで、ターゲット変数の正確な予測を試行します。XGBoost は、各種データタイプ、信頼関係、ディストリビューション、およびニーズに合わせて切り替え、調整できる大量のハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて非常に優れた結果を出しています。この柔軟性により、XGBoost が回帰、分類 (バイナリとマルチクラス)、ランキングの問題に対して推奨される選択肢になります。

お客様は、[Amazon SageMaker AI の XGBoost アルゴリズム](xgboost.md) の新しいリリースの使用を検討する必要があります。例えば、Tensorflow 深層学習フレームワークで通常行うように、SageMaker AI 組み込みのアルゴリズムとして、またはローカル環境でスクリプトを実行するフレームワークとして使用できます。この新しい実装では、メモリのフットプリントは縮小し、ロギングは強化され、ハイパーパラメータ検証は向上し、メトリクスセットは拡張されています。新しいバージョンへの移行を先延ばしにする必要がある場合は、XGBoost の以前の実装を引き続き利用することができます。ただし、この以前の実装は、XGBoost の 0.72 リリースに関連付けられたままになります。

## XGBoost リリース 0.72 の入出力インターフェイス
<a name="xgboost-72-InputOutput"></a>

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

SageMaker AI の XGBoost の実装では、トレーニングと推論に CSV 形式と libsvm 形式が対応しています。
+ トレーニング ContentType の場合、有効な入力は *text/libsvm* (デフォルト) または *text/csv* です。
+ 推論 ContentType の場合、有効な入力は *text/libsvm* または *text/csv* (デフォルト) です。

**注記**  
CSV トレーニングの場合、アルゴリズムはターゲット変数が最初の列にあり、CSV にはヘッダーレコードがないと見なします。CSV 推論の場合、アルゴリズムは CSV 入力にラベル列がないと見なします。  
libsvm トレーニングの場合、アルゴリズムはラベルが最初の列にあると見なします。後続の列には、特徴のゼロベースのインデックス値のペアが含まれています。そのため、各行は <label><index0>:<value0><index1>:<value1> ... の形式になります。libsvm の推論リクエストには、libsvm 形式のラベルが含まれている場合とそうでない場合があります。

これは、標準の XGBoost データ形式とより一貫性を保つためにトレーニングの入力にプロトコルバッファ形式を使用する、SageMaker AI の他のアルゴリズムとは異なります。

CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。libsvm トレーニング入力モードの場合、これは必須ではありませんが推奨されます。

SageMaker AI XGBoost は Python の pickle モジュールを使用してモデルをシリアル化/逆シリアル化し、それをモデルの保存/ロードに使用できます。

**SageMaker AI XGBoost でトレーニングされたモデルをオープンソースの XGBoost で使用するには**
+ 次の Python コードを使用します。

  ```
  import pickle as pkl 
  import tarfile
  import xgboost
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = pkl.load(open(model_file_path, 'rb'))
  
  # prediction with test data
  pred = model.predict(dtest)
  ```

**ラベル付きデータポイントの重要性を区別するには、インスタンス重みサポートを使用します。**
+ SageMaker AI XGBoost では、各インスタンスに重み値を割り当てることで、ラベル付きデータポイントの重要性を区別できます。*text/libsvm* 入力の場合、顧客がデータインスタンスに重み値を割り当てるには、ラベルの後に重み値を付加します。例えば、`label:weight idx_0:val_0 idx_1:val_1...`。*text/csv* 入力の場合、顧客はパラメータで `csv_weights` フラグをオンにし、その列でラベルの後に重み値を付加する必要があります。例: `label,weight,val_0,val_1,...`)。

## XGBoost リリース 0.72 の EC2 インスタンスに関する推奨事項
<a name="xgboost-72-Instance"></a>

現在、SageMaker AI XGBoost では CPU を使用したトレーニングのみを行っています。これは (CPU バウンドではなく) メモリバウンドアルゴリズムです。したがって、コンピューティング最適化インスタンス (C4 など) よりも汎用コンピューティングインスタンス (M4 など) を選択することを推奨します。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。メインメモリに収まらないデータについてはディスク容量を使用できますが (libsvm 入力モードで利用できる out-of-core 機能)、ディスクにキャッシュファイルを書き込むとアルゴリズムの処理速度が低下します。

## XGBoost リリース 0.72 のサンプルノートブック
<a name="xgboost-72-sample-notebooks"></a>

回帰モデルをトレーニングおよびホストする組み込みアルゴリズムとして、最新バージョンの SageMaker AI XGBoost を使用する方法を示すサンプルノートブックについては、「[Regression with Amazon SageMaker AI XGBoost algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone.html)」を参照してください。XGBoost の 0.72 バージョンを使用するには、サンプルコードのバージョンを 0.72 に変更する必要があります。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。XGBoost アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

## XGBoost リリース 0.72 のハイパーパラメータ
<a name="xgboost-72-hyperparameters"></a>

XGBoost アルゴリズムのハイパーパラメータを以下の表に示します。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。SageMaker AI XGBoost アルゴリズムは、オープンソースの XGBoost パッケージの実装です。現在、SageMaker AI はバージョン 0.72 をサポートしています。このバージョンの XGBoost のハイパーパラメータ設定の詳細については、「[XGBoost パラメータ](https://xgboost.readthedocs.io/en/release_0.72/parameter.html)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1class | クラスの数。 `objective` が *multi:softmax* または *multi:softprob* に設定されている場合は**必須**。 有効な値: 整数  | 
| num\$1round | トレーニングを実行するラウンド数。 **必須** 有効な値: 整数  | 
| alpha | 重みに対する L1 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0  | 
| base\$1score | すべてのインスタンスの初期予測スコア、全体的な偏り。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.5  | 
| booster | 使用するブースター。`gbtree` 値と `dart` 値はツリー型のモデルを使用し、`gblinear` は一次関数を使用します。 **オプション** 有効な値： 文字列。`gbtree`、`gblinear`、`dart` のいずれか 1 つ。 デフォルト値: `gbtree`  | 
| colsample\$1bylevel | 各レベルにおける、各分割の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| colsample\$1bytree | 各ツリーを構築する際の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1 | 
| csv\$1weights | このフラグを有効にすると、XGBoost は、トレーニングデータの 2 列目 (ラベルの後の列) をインスタンスの重みとして使用して、csv 入力のインスタンスの重要性を区別します。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| early\$1stopping\$1rounds | 検証スコアに改善が見られなくなるまでモデルのトレーニングが行われます。トレーニングを続行するには、少なくとも `early_stopping_rounds` ごとに検証エラーが減少する必要があります。SageMaker AI ホスティングは推論に最適なモデルを使用します。 **オプション** 有効な値: 整数 デフォルト値: -  | 
| eta | 過剰適合を防ぐために更新で使用されるステップサイズの縮小。各ブースティングステップ後、新しい特徴の重みを直接取得できます。`eta` パラメータは実際に特徴の重みを縮小して、ブースティング処理をより控えめにします。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値: 0.3  | 
| eval\$1metric | 検証データの検証メトリクス。目標に応じてデフォルトのメトリクスが割り当てられます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/xgboost-72.html) 有効な入力のリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters) を参照してください。 **オプション** 有効な値: 文字列 デフォルト値: 目標に基づくデフォルト  | 
| gamma | ツリーのリーフノードに追加のパーティションを作成するために必要な損失低減の最小値。数値が大きいほど、アルゴリズムはより控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値: 0  | 
| grow\$1policy | ツリーに新しいノードを追加する方法を制御します。現在、`tree_method` が `hist` に設定されている場合にのみサポートされます。 **オプション** 有効な値： 文字列。`depthwise` または `lossguide` です。 デフォルト値: `depthwise`  | 
| lambda | 重みに対する L2 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1  | 
| lambda\$1bias | 偏りに対する L2 正規化項。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0  | 
| max\$1bin | 連続する特徴をバケットに入れる別個のビンの最大数。`tree_method` が `hist` に設定されている場合にのみ使用されます。 **オプション** 有効な値: 整数 デフォルト値: 256  | 
| max\$1delta\$1step | 各ツリーの重みの推定に許可されるデルタステップの最大値。正の整数が使用されている場合、更新はより保守的になります。推奨されるオプションは、ロジスティック回帰での使用です。更新を制御しやすくするには、1 ～ 10 に設定します。 **オプション** 有効な値: 整数。範囲: [0,∞)。 デフォルト値: 0  | 
| max\$1depth | ツリーの最大深度。この値を増やすとモデルがより複雑になり、過剰適合が発生しやすくなります。0 は無制限を示します。上限は `grow_policy` = `depth-wise` の場合に必須です。 **オプション** 有効な値: 整数。範囲: [0,∞) デフォルト値: 6  | 
| max\$1leaves | 追加されるノードの最大数。`grow_policy` が `lossguide` に設定されている場合にのみ関連します。 **オプション** 有効な値: 整数 デフォルト値: 0  | 
| min\$1child\$1weight | 子に必要とされるインスタンスの重み (ヘッセ) の合計の最小値。ツリーのパーティション分割ステップにより、リーフノードのインスタンスの重みの合計が `min_child_weight` を下回る場合、構築処理は追加のパーティション分割を行わなくなります。線形回帰モデルでは、これは単に各ノードに必要とされるインスタンスの最小数に対応します。アルゴリズムが大きいほど、より控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値： 1  | 
| normalize\$1type | 正規化アルゴリズムの種類。 **オプション** 有効な値: *tree* または *forest* のいずれか。 デフォルト値: *tree*  | 
| nthread | *xgboost* の実行に使用される並列スレッドの数。 **オプション** 有効な値: 整数 デフォルト値: スレッドの最大数。  | 
| objective | 学習タスクと対応する学習目標を指定します。例: `reg:logistic`、`reg:softmax`、`multi:squarederror`。有効な入力の完全なリストについては、「[XGBoost パラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)」を参照してください。 **オプション** 有効な値: 文字列 デフォルト値: `reg:squarederror`  | 
| one\$1drop | このフラグを有効にすると、ドロップアウト中に常に 1 つ以上のツリーがドロップされます。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| process\$1type | 実行するブースティング処理の種類。 **オプション** 有効な値： 文字列。`default` または `update` です。 デフォルト値: `default`  | 
| rate\$1drop | ドロップアウト中にドロップする、前のツリーの割合を指定するドロップアウト率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| refresh\$1leaf | これは、'更新' アップデータープラグインのパラメータです。`true` (1) に設定すると、ツリーのリーフとツリーノードの統計情報が更新されます。`false` (0) に設定すると、ツリーノードの統計情報のみが更新されます。 **オプション** 有効な値: 0/1 デフォルト値： 1  | 
| sample\$1type | サンプリングアルゴリズムの種類。 **オプション** 有効な値: `uniform` または `weighted`。 デフォルト値: `uniform`  | 
| scale\$1pos\$1weight | 正の重みと負の重みの均衡を制御します。不均衡なクラスに役立ちます。検討する一般的な値 :`sum(negative cases)` / `sum(positive cases)`。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1  | 
| seed | 乱数シード。 **オプション** 有効な値: 整数 デフォルト値: 0  | 
| silent | 0 は実行中のメッセージを出力する、1 はサイレントモードを意味します。 有効な値: 0 または 1 **オプション** デフォルト値: 0  | 
| sketch\$1eps | 近似貪欲アルゴリズムでのみ使用されます。これは、O(1 / `sketch_eps`) 個のビンに換算します。ビンの数を直接選択することと比較して、これはスケッチの精度により理論的に保証されます。 **オプション** 有効な値: 浮動小数点: [0, 1]。 デフォルト値: 0.03  | 
| skip\$1drop | ブースティングの反復中にドロップアウト手順をスキップする確率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| subsample | トレーニングインスタンスのサブサンプル率。0.5 に設定すると、XGBoost はツリーの成長にデータインスタンスの半分をランダムに収集します。これにより、過剰適合を防ぎます。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| tree\$1method | XGBoost で使用されるツリー構造アルゴリズム。 **オプション** 有効な値: `auto`、`exact`、`approx`、`hist` のいずれか。 デフォルト値: `auto`  | 
| tweedie\$1variance\$1power | Tweedie 分布の分散を制御するパラメータ。 **オプション** 有効な値: 浮動小数点数。範囲: (1, 2)。 デフォルト値: 1.5  | 
| updater | ツリーアップデーターが実行される順序を定義するカンマ区切りの文字列。これにより、モジュール式にツリーを構築および修正できます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値: カンマ区切りの文字列。 デフォルト値: `grow_colmaker`、prune  | 

## XGBoost リリース 0.72 モデルの調整
<a name="xgboost-72-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**次の 3 つのタイプのハイパーパラメータを選択します。
+ モデルトレーニング中に最適化する学習 `objective` 関数
+ 検証中にモデルのパフォーマンスを評価するために使用する `eval_metric`
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

アルゴリズムが計算する一連の評価メトリクスから評価メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

### XGBoost リリース 0.72 アルゴリズムで計算されるメトリクス
<a name="xgboost-72-metrics"></a>

バージョン 0.72 の XGBoost アルゴリズムは、モデルの検証に次の 9 つのメトリクスを計算します。モデルを調整するときに、これらのいずれかのメトリクスを選択してモデルを評価します。有効な `eval_metric` 値の完全なリストについては、「[XGBoost Learning Task Parameters」(XGBoost ラーニングタスクのパラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:auc |  曲線下面積。  |  最大化  | 
| validation:error |  \$1(誤ったケース)/\$1(すべてのケース) で計算される二項分類誤り率。  |  最小化  | 
| validation:logloss |  負の対数尤度。  |  最小化  | 
| validation:mae |  平均絶対誤差。  |  最小化  | 
| validation:map |  平均精度の平均。  |  最大化  | 
| validation:merror |  \$1(誤ったケース)/\$1(すべてのケース) で計算される複数クラス分類誤り率。  |  最小化  | 
| validation:mlogloss |  複数クラス分類の負の対数尤度。  |  最小化  | 
| validation:ndcg |  正規化減損累積利得。  |  最大化  | 
| validation:rmse |  二乗平均平方根誤差。  |  最小化  | 

### 調整可能な XGBoost リリース 0.72 のハイパーパラメータ
<a name="xgboost-72-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して XGBoost モデルを調整します。XGBoost のメトリクスに最も影響を与えるハイパーパラメータは、`alpha`、`min_child_weight`、`subsample`、`eta`、`num_round` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| alpha |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| colsample\$1bylevel |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 1  | 
| colsample\$1bytree |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 
| eta |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 0.5  | 
| gamma |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 5  | 
| lambda |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| max\$1delta\$1step |  IntegerParameterRanges  |  [0, 10]  | 
| max\$1depth |  IntegerParameterRanges  |  [0, 10]  | 
| min\$1child\$1weight |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 120  | 
| num\$1round |  IntegerParameterRanges  |  [1, 4000]  | 
| subsample |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 

# テキストデータ用の組み込み SageMaker AI アルゴリズム
<a name="algorithms-text"></a>

SageMaker AI は、自然言語処理、文書の分類または要約、トピックのモデリングまたは分類、言語の文字起こしまたは翻訳で使用されるテキスト文書の分析用に調整されたアルゴリズムを提供します。
+ [BlazingText アルゴリズム](blazingtext.md) - 大規模なデータセットに簡単に拡張できる Word2vec とテキスト分類アルゴリズムの高度に最適化された実装。これは、多くの下流の自然言語処理 (NLP) タスクに役立ちます。
+ [潜在的ディリクレ配分 (LDA) アルゴリズム](lda.md) - 一連のドキュメントのトピックを決定するのに適しているアルゴリズム。これは *教師なしアルゴリズム*です。つまり、トレーニング時に回答を含むサンプルデータを使用しないということです。
+ [ニューラルトピックモデル (NTM) アルゴリズム](ntm.md) - ニューラルネットワークアプローチを使用して一連のドキュメントのトピックを決定する別の教師なし手法。
+ [Object2Vec アルゴリズム](object2vec.md) - レコメンデーションシステム、ドキュメント分類、文章埋め込みに使用できる汎用のニューラル埋め込みアルゴリズム。
+ [Sequence to Sequence アルゴリズム](seq-2-seq.md) - 一般的にニューラル機械翻訳に使用される教師ありアルゴリズム。
+ [テキスト分類 - TensorFlow](text-classification-tensorflow.md) - テキスト分類に利用可能な事前トレーニング済みモデルを使用して転移学習をサポートする教師ありアルゴリズム。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| BlazingText | トレーニング | ファイルまたはパイプ | テキストファイル (1 行に 1 文、スペース区切りのトークンを含む)  | GPU (単一インスタンスのみ) または CPU | 不可 | 
| LDA | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU (単一インスタンスのみ) | 不可 | 
| ニューラルトピックモデル | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | ファイルまたはパイプ | recordIO-protobuf または CSV | GPU または CPU | はい | 
| Object2Vec | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | システム | JSON Lines  | GPU または CPU (単一インスタンスのみ) | 不可 | 
| Seq2Seq モデリング | トレーニング、検証、および vocab | システム | recordIO-protobuf | GPU (単一インスタンスのみ) | 不可 | 
| テキスト分類 - TensorFlow | トレーニングおよび検証 | システム | CSV | CPU または GPU | はい (単一インスタンス上の複数の GPU 間でのみ) | 

# BlazingText アルゴリズム
<a name="blazingtext"></a>

Amazon SageMaker AI BlazingText アルゴリズムは、Word2vec とテキスト分類アルゴリズムの高度に最適化された実装を提供します。Word2vec アルゴリズムは、感情分析、名前付きエンティティ認識、機械翻訳など、多くの下流の自然言語処理 (NLP) タスクに役立ちます。テキスト分類は、ウェブ検索、情報検索、ランク付け、およびドキュメント分類を実行するアプリケーションにとって重要なタスクです。

Word2vec アルゴリズムは、単語を高品質の分散ベクトルにマッピングします。結果として得られる単語のベクトル表現は、*単語埋め込み*と呼ばれます。意味的に類似している単語は、互いに接近しているベクトルに対応します。単語の埋め込みでは、そのような方法で単語間の意味関係をキャプチャします。

多くの自然言語処理 (NLP) アプリケーションは、ドキュメントの大規模なコレクションでトレーニングすることによって単語の埋め込みを学習します。これらのトレーニング済みベクトル表現は、セマンティクスおよび単語の分散に関する情報を提供します。通常、その後限られた量のデータでトレーニングされる他のモデルの一般化可能性が向上します。Word2vec アルゴリズムのほとんどの実装は、マルチコア CPU アーキテクチャ向けに最適化されていません。これにより、大規模なデータセットに対するスケーリングが困難になります。

BlazingText アルゴリズムを使用すると、大規模なデータセットに簡単に拡張できます。Word2vec と同様に、Skip-Gram および Continuous Bag-of-Words (CBOW) トレーニングアーキテクチャーが提供されます。教師ありの複数クラス、複数ラベルのテキスト分類アルゴリズムの BlazingText の実装は、カスタム [CUDA](https://docs.nvidia.com/cuda/index.html) カーネルで GPU アクセラレーションを使用するように fastText テキスト分類子を拡張します。マルチコア CPU または GPU を使用すると、数分で 10 億個以上の単語でモデルをトレーニングできます。また、最先端の深層学習テキスト分類アルゴリズムと同等のパフォーマンスを達成します。

BlazingText アルゴリズムは並列化できません。トレーニングに関連するパラメータの詳細については、「[Docker Registry Paths for SageMaker Built-in Algorithms」(SageMaker 組み込みアルゴリズムの Docker レジストリパス](https://docs.aws.amazon.com/en_us/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)) を参照してください。

 SageMaker AI BlazingText アルゴリズムは、次の機能を提供します。
+ 高度に最適化された CUDA カーネルを使用する、マルチコア CPU または GPU 上の fastText テキスト分類子あるいは GPU 上の Word2Vec の加速されたトレーニング。詳細については、[BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs (BlazingText: 複数の GPU を使用した Word2Vec のスケーリングと加速)](https://dl.acm.org/citation.cfm?doid=3146347.3146354) を参照してください。
+ 文字 n グラムのベクトル表現を学習することによって、[サブワード情報で強化された単語ベクトル](https://arxiv.org/abs/1607.04606)。このアプローチにより BlazingText は、文字 n グラム (サブワード) ベクトルの和としてベクトルを表すことで、未定義 (OOV) 語の意味のあるベクトルを生成することができます。
+ 複数の CPU ノード間でのより高速なトレーニングと分散計算を可能にする Word2Vec アルゴリズムの `batch_skipgram` `mode`。`batch_skipgram` `mode` は、Negative Sample Sharing (負のサンプル共有) 戦略を使用してミニバッチングを行い、レベル 1 の BLAS オペレーションをレベル 3 の BLAS オペレーションに変換します。これにより、最新のアーキテクチャーの multiply-add 手順が効率的に活用されます。詳細については、[Parallelizing Word2Vec in Shared and Distributed Memory (共有および分散メモリでの Word2Vec の並列処理)](https://arxiv.org/pdf/1604.04661.pdf) を参照してください。

要約すると、BlazingText ではさまざまなタイプのインスタンスで以下のモードがサポートされています。


| モード |  Word2Vec (教師なし学習)  |  テキスト分類 (教師あり学習)  | 
| --- | --- | --- | 
|  単一の CPU インスタンス  |  `cbow` `Skip-gram` `Batch Skip-gram`  |  `supervised`  | 
|  単一の GPU インスタンス (1 つ以上の GPU を含む)  |  `cbow` `Skip-gram`  |  1 つの GPU による `supervised`  | 
|  複数の CPU インスタンス  | Batch Skip-gram  | なし | 

BlazingText で行われる計算の詳細については、[BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs (BlazingText: 複数の GPU を使用した Word2Vec のスケーリングと加速)](https://dl.acm.org/citation.cfm?doid=3146347.3146354) を参照してください。

**Topics**
+ [BlazingText アルゴリズムの入出力インターフェイス](#bt-inputoutput)
+ [BlazingText アルゴリズムの EC2 インスタンスの推奨事項](#blazingtext-instances)
+ [BlazingText サンプルノートブック](#blazingtext-sample-notebooks)
+ [BlazingText ハイパーパラメータ](blazingtext_hyperparameters.md)
+ [BlazingText モデルを調整する](blazingtext-tuning.md)

## BlazingText アルゴリズムの入出力インターフェイス
<a name="bt-inputoutput"></a>

BlazingText アルゴリズムは、スペースで区切られたトークンを含む単一の事前処理済みテキストファイルを想定しています。ファイルの各行には単一の文が含まれている必要があります。複数のテキストファイルに対するトレーニングを行う必要がある場合は、それらを 1 つのファイルに連結して、それぞれのチャネルにファイルをアップロードします。

### トレーニングと検証のデータ形式
<a name="blazingtext-data-formats"></a>

#### Word2Vec アルゴリズムのトレーニングと検証のデータ形式
<a name="blazingtext-data-formats-word2vec"></a>

Word2Vec トレーニングの場合は、*トレーニング*チャネルでファイルをアップロードしてください。他のチャネルはサポートされていません。ファイルには 1 行に 1 つのトレーニング文が含まれている必要があります。

#### テキスト分類アルゴリズムのトレーニングと検証のデータ形式
<a name="blazingtext-data-formats-text-class"></a>

教師ありモードの場合は、ファイルモードまたは拡張マニフェストテキスト形式でトレーニングできます。

##### ファイルモードでトレーニングする
<a name="blazingtext-data-formats-text-class-file-mode"></a>

`supervised` モードの場合は、トレーニング/検証ファイルに、1 行に 1 つのトレーニング文だけでなく、ラベルも含まれている必要があります。ラベルは、文字列 *\$1\$1label\$1\$1* を前に付けた単語です。以下はトレーニング/検証ファイルの例です。

```
__label__4  linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp .

__label__2  bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
```

**注記**  
文中のラベルの順序は関係ありません。

トレーニングチャネルでトレーニングファイルをアップロードし、必要に応じて検証チャネルで検証ファイルをアップロードします。

##### 拡張マニフェストテキスト形式でトレーニングする
<a name="blazingtext-data-formats-text-class-augmented-manifest"></a>

CPU インスタンスの教師ありモードは拡張マニフェスト形式もサポートしているため、RecordIO ファイルを作成しなくてもパイプモードでトレーニングを実行できます。この形式を使用する一方で、文のリストとそれに対応するラベルを含む S3 マニフェストファイルを生成する必要があります。マニフェストファイル形式は、各行が 1 つのサンプルを表す [JSON Lines](http://jsonlines.org/) 形式になっている必要があります。文は `source` タグを使用して指定し、ラベルは `label` タグを使用して指定できます。`source` タグと `label` タグの両方を、リクエストで指定されている `AttributeNames` パラメータ値の下で指定する必要があります。

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}
```

ラベルの JSON 配列を指定することで、マルチラベルのトレーニングもサポートされます。

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}
```

拡張マニフェストファイルの詳細については、[トレーニングジョブの拡張マニフェストファイル](augmented-manifest.md)を参照してください。

### モデルアーティファクトと推論
<a name="blazingtext-artifacts-inference"></a>

#### Word2Vec アルゴリズムのモデルアーティファクト
<a name="blazingtext--artifacts-inference-word2vec"></a>

Word2Vec トレーニングの場合、モデルアーティファクトは、単語からベクトルへのマッピングを含む *vectors.txt* と、ホスティング、推論、またはその両方のために BlazingText によって使用されるバイナリである *vectors.bin* から構成されます。*vectors.txt* は、Gensim や Spacy などの他のツールと互換性のある形式でベクトルを保存します。たとえば、Gensim ユーザーは次のコマンドを実行して vectors.txt ファイルをロードできます。

```
from gensim.models import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False)
word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])
word_vectors.doesnt_match("breakfast cereal dinner lunch".split())
```

評価パラメータが `True` に設定されている場合は、追加のファイル *eval.json* が作成されます。このファイルには、WS-353 データセットに対する類似度の評価結果 (スピアマンの順位相関係数を使用) が含まれています。WS-353 データセットから、トレーニングコーパスに存在しない単語数が報告されます。

推論リクエストのために、モデルは文字列のリストを含む JSON ファイルを受け取り、ベクトルのリストを返します。単語が語彙内で見つからない場合、推論はゼロのベクトルを返します。トレーニング中にサブワードが `True` に設定された場合、モデルは未定義 (OOV) 語のベクトルを生成できます。

##### JSON リクエスト例
<a name="word2vec-json-request"></a>

Mime タイプ:` application/json`

```
{
"instances": ["word1", "word2", "word3"]
}
```

#### テキスト分類アルゴリズムのモデルアーティファクト
<a name="blazingtext-artifacts-inference-text-class"></a>

教師ありトレーニングの出力では、BlazingText ホスティングで使用できる *model.bin* ファイルが作成されます。推論のために、BlazingText モデルは文のリストを含む JSON ファイルを受け入れ、対応する予測ラベルと確率スコアのリストを返します。各シーケンスはスペースで区切られたトークン、単語、またはその両方の文字列であることが想定されます。

##### JSON リクエスト例
<a name="text-class-json-request"></a>

Mime タイプ:` application/json`

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."]
}
```

デフォルトでは、サーバーは 1 つの予測、つまり最も高い確率の予測のみを返します。上位 *k* 個の予測を取得するには、次のように設定で *k* を設定します。

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."],
 "configuration": {"k": 2}
}
```

BlazingText の場合、` content-type` パラメータと `accept` パラメータは等しくなければなりません。バッチ変換の場合は、どちらも `application/jsonlines` である必要があります。これらが異なる場合、`Accept` フィールドは無視されます。入力の形式は次のとおりです。

```
content-type: application/jsonlines

{"source": "source_0"}
{"source": "source_1"}

if you need to pass the value of k for top-k, then you can do it in the following way:

{"source": "source_0", "k": 2}
{"source": "source_1", "k": 3}
```

出力の形式は次のとおりです。

```
accept: application/jsonlines


{"prob": [prob_1], "label": ["__label__1"]}
{"prob": [prob_1], "label": ["__label__1"]}

If you have passed the value of k to be more than 1, then response will be in this format:

{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
```

教師あり (テキスト分類) モードと教師なし (Word2Vec) モードの両方で、BlazingText によって生成されたバイナリ (*\$1.bin*) は fastText によって相互消費される可能性があり、その逆も同様です。BlazingText によって生成されたバイナリを fastText で使用できます。同様に、fastText で作成されたモデルバイナリを、BlazingText を使用してホストすることができます。

次に、fastText を使用して BlazingText で生成されたモデルを使用する方法の例を示します。

```
#Download the model artifact from S3
aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz

#Unzip the model archive
tar -xzf model.tar.gz

#Use the model archive with fastText
fasttext predict ./model.bin test.txt
```

ただし、バイナリは CPU とシングル GPU のトレーニングでのみサポートされ、マルチ GPU のトレーニングではバイナリは生成されません。

## BlazingText アルゴリズムの EC2 インスタンスの推奨事項
<a name="blazingtext-instances"></a>

`cbow` モードおよび `skipgram` モードの場合、BlazingText は 1 つの CPU と 1 つの GPU インスタンスをサポートします。これらのモードは両方とも、`subwords` 埋め込みの学習をサポートします。精度を犠牲にすることなく最高速度を達成するには、ml.p3.2xlarge インスタンスを使用することをお勧めします。

`batch_skipgram` モードの場合、BlazingText は 1 つまたは複数の CPU インスタンスをサポートします。複数のインスタンスでトレーニングする場合、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) に渡す [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) オブジェクトの `S3DataDistributionType` フィールドの値を `FullyReplicated` に設定します。BlazingText は、マシン間でのデータの分散を処理します。

教師ありテキスト分類モードの場合は、トレーニングデータセットが 2 GB 未満のときには、C5 インスタンスが推奨されます。より大きなデータセットの場合、単一の GPU を備えたインスタンスを使用します。BlazingText は、トレーニングと推論の P2、P3、G4dn、G5 インスタンスをサポートしています。

## BlazingText サンプルノートブック
<a name="blazingtext-sample-notebooks"></a>

SageMaker AI BlazingText アルゴリズムをトレーニングしてデプロイし、単語ベクトルを生成するサンプルノートブックについては、「[Learning Word2Vec Word Representations using BlazingText](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/blazingtext_word2vec_text8/blazingtext_word2vec_text8.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする手順については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。Blazing Text を使用するトピックモデリングのサンプルノートブックは、**[Introduction to Amazon Algorithms (Amazon アルゴリズムの概要)]** セクションにあります。ノートブックを開くには、その [**使用**] タブを選び、次に [**コピーを作成**] を選択します。

# BlazingText ハイパーパラメータ
<a name="blazingtext_hyperparameters"></a>

`CreateTrainingJob` リクエストでトレーニングジョブを開始する場合、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。BlazingText アルゴリズムのハイパーパラメータは、Word2Vec (教師なし) とテキスト分類 (教師あり) のどちらのモードを使用しているかによって異なります。

## Word2Vec ハイパーパラメータ
<a name="blazingtext_hyperparameters_word2vec"></a>

次の表に、Amazon SageMaker AI によって提供される BlazingText Word2Vec トレーニングアルゴリズムのハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| mode |  Word2vec アーキテクチャは、トレーニングに使用されます。 **必須** 有効な値: `batch_skipgram`、`skipgram`、または `cbow`  | 
| batch\$1size |  `mode` が `batch_skipgram` に設定されている場合の各バッチのサイズ。10～20 間の数字に設定します。 **オプション** 有効な値: 正の整数 デフォルト値: 11  | 
| buckets |  サブワードに使用するハッシュバケットの数。 **オプション** 有効な値: 正の整数 デフォルト値: 2000000  | 
| epochs |  トレーニングデータの完全なパスの数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| evaluation |  [WordSimilarity-353 テスト](http://www.gabrilovich.com/resources/data/wordsim353/wordsim353.html)を使用してトレーニング済みのモデルが評価されるかどうか。 **オプション** 有効な値: (ブール値) `True` または `False` デフォルト値: `True`  | 
| learning\$1rate |  パラメータ更新に使用されるステップサイズ。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 0.05  | 
| min\$1char |  サブワード/文字 n グラムに使用する最小文字数。 **オプション** 有効な値: 正の整数 デフォルト値： 3  | 
| min\$1count |  出現回数が `min_count` 未満の単語は破棄されます。 **オプション** 有効な値: 負以外の整数 デフォルト値: 5  | 
| max\$1char |  サブワード/文字 n グラムに使用する最大文字数。 **オプション** 有効な値: 正の整数 デフォルト値: 6  | 
| negative\$1samples |  Negative Sample Sharing (負のサンプル共有) 戦略の負のサンプル数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| sampling\$1threshold |  単語の出現回数のしきい値。トレーニングデータ内でより高い頻度で出現する単語は、ランダムにダウンサンプリングされます。 **オプション** 有効な値: 正の小数。推奨される範囲は (0, 1e-3] です。 デフォルト値: 0.0001  | 
| subwords |  サブワード埋め込みを学習するかどうか。 **オプション** 有効な値: (ブール値) `True` または `False` デフォルト値: `False`  | 
| vector\$1dim |  アルゴリズムが学習する単語ベクトルのディメンション。 **オプション** 有効な値: 正の整数 デフォルト値: 100  | 
| window\$1size |  コンテキストウィンドウのサイズ。コンテキストウィンドウは、トレーニングに使用されたターゲット単語を囲む単語の数です。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 

## テキスト分類ハイパーパラメータ
<a name="blazingtext_hyperparameters_text_class"></a>

次の表に、Amazon SageMaker AI によって提供されるテキスト分類トレーニングアルゴリズムのハイパーパラメータを示します。

**注記**  
テキスト分類モードと Word2Vec モードのパラメータの一部は共通していますが、コンテキストによっては意味が異なる場合があります。


| Parameter Name | 説明 | 
| --- | --- | 
| mode |  トレーニングモード。 **必須** 有効な値: `supervised`  | 
| buckets |  単語 n-gram に使用するハッシュバケットの数。 **オプション** 有効な値: 正の整数 デフォルト値: 2000000  | 
| early\$1stopping |  エポックの `patience` 数を過ぎても検証の正確性が向上しない場合にトレーニングを中止するかどうか。早期停止を使用する場合は、検証チャネルが必要であることに注意してください。 **オプション** 有効な値: (ブール値) `True` または `False` デフォルト値: `False`  | 
| epochs |  トレーニングデータの完全なパスの最大数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| learning\$1rate |  パラメータ更新に使用されるステップサイズ。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 0.05  | 
| min\$1count |  出現回数が `min_count` 未満の単語は破棄されます。 **オプション** 有効な値: 負以外の整数 デフォルト値: 5  | 
| min\$1epochs |  早期停止ロジックが呼び出される前にトレーニングするエポックの最小数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| patience |  検証セットで何も進捗がない場合に、早期停止を適用するまでに待機するエポック数。`early_stopping` が `True` である場合にのみ使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 4  | 
| vector\$1dim |  埋め込みレイヤーのディメンション。 **オプション** 有効な値: 正の整数 デフォルト値: 100  | 
| word\$1ngrams |  使用する単語 n-gram 機能の数。 **オプション** 有効な値: 正の整数 デフォルト値: 2  | 

# BlazingText モデルを調整する
<a name="blazingtext-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## BlazingText アルゴリズムによって計算されるメトリクス
<a name="blazingtext-metrics"></a>

BlazingText Word2Vec アルゴリズム (`skipgram`、`cbow`、および `batch_skipgram` モード) は、トレーニング中に単一のメトリクス (`train:mean_rho`) についてレポートします。このメトリクスは、[WS-353 単語類似度データセット](https://aclweb.org/aclwiki/WordSimilarity-353_Test_Collection_(State_of_the_art))について計算されます。Word2Vec アルゴリズムのハイパーパラメータ値を調整するときには、このメトリクスを目標として使用してください。

BlazingText テキスト分類アルゴリズム (`supervised` モード) は、トレーニング中に単一のメトリクス (`validation:accuracy`) についてもレポートします。テキスト分類アルゴリズムのハイパーパラメータ値を調整するときには、これらのメトリクスを目標として使用してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| train:mean\$1rho |  [WS‐353 単語類似度データセット](http://alfonseca.org/pubs/ws353simrel.tar.gz)の平均 rho (スピアマンの順位相関係数)  |  最大化  | 
| validation:accuracy |  ユーザー指定の検証データセットの分類精度  |  最大化  | 

## 調整可能な BlazingText ハイパーパラメータ
<a name="blazingtext-tunable-hyperparameters"></a>

### Word2Vec アルゴリズムの調整可能なハイパーパラメータ
<a name="blazingtext-tunable-hyperparameters-word2vec"></a>

次のハイパーパラメータを使用して Amazon SageMaker AI BlazingText Word2Vec モデルを調整します。Word2Vec の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`mode`、` learning_rate`、`window_size`、`vector_dim`、`negative_samples` です。


| パラメータ名 | パラメータタイプ | 推奨範囲または値 | 
| --- | --- | --- | 
| batch\$1size |  `IntegerParameterRange`  |  [8-32]  | 
| epochs |  `IntegerParameterRange`  |  [5-15]  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.005、MaxValue: 0.01  | 
| min\$1count |  `IntegerParameterRange`  |  [0～100]  | 
| mode |  `CategoricalParameterRange`  |  [`'batch_skipgram'`, `'skipgram'`, `'cbow'`]  | 
| negative\$1samples |  `IntegerParameterRange`  |  [5-25]  | 
| sampling\$1threshold |  `ContinuousParameterRange`  |  MinValue: 0.0001、MaxValue: 0.001  | 
| vector\$1dim |  `IntegerParameterRange`  |  [32-300]  | 
| window\$1size |  `IntegerParameterRange`  |  [1-10]  | 

### テキスト分類アルゴリズムの調整可能なハイパーパラメータ
<a name="blazingtext-tunable-hyperparameters-text_class"></a>

次のハイパーパラメータを使用して Amazon SageMaker AI BlazingText テキスト分類モデルを調整します。


| パラメータ名 | パラメータタイプ | 推奨範囲または値 | 
| --- | --- | --- | 
| buckets |  `IntegerParameterRange`  |  [1000000-10000000]  | 
| epochs |  `IntegerParameterRange`  |  [5-15]  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.005、MaxValue: 0.01  | 
| min\$1count |  `IntegerParameterRange`  |  [0～100]  | 
| vector\$1dim |  `IntegerParameterRange`  |  [32-300]  | 
| word\$1ngrams |  `IntegerParameterRange`  |  [1-3]  | 

# 潜在的ディリクレ配分 (LDA) アルゴリズム
<a name="lda"></a>

Amazon SageMaker AI 潜在的ディリクレ配分 (LDA) アルゴリズムは、一連の観測値を異なるカテゴリの混合として記述しようとする教師なし学習アルゴリズムです。LDA は、テキストコーパス内のドキュメントによって共有されるトピックの、ユーザー指定数を検出するために最もよく使用されます。ここで、各観測はドキュメントであり、特徴は各単語の存在 (または出現回数) であり、カテゴリはトピックです。このメソッドは管理されていないので、トピックは前もって指定されておらず、人間が自然にドキュメントを分類する方法とは必ずしも合致しません。トピックは、各ドキュメント内に出現する単語に対する確率分布として学習されます。各ドキュメントは、順次、トピックの混在として示されます。

類似したトピックが混在する 2 つの異なるドキュメントの正確な内容は同じではありません。しかし全体的にみると、これらのドキュメントでは、異なるトピックが混在するドキュメントと比較した場合よりも頻繁に単語の共有サブセットを使用されることが予期されます。これにより、LDA はこれらの単語グループを検出し、トピックを形成することができます。非常に単純な例として、食べる、寝る、遊ぶ、ニャー、吠えるという単語のみが出現するドキュメントのセットの場合、LDA によって生成される可能性のあるトピックは、次のようになります。**********


| **トピック** | *食べる* | *寝る*  | *play* | *ニャー* | *吠える* | 
| --- | --- | --- | --- | --- | --- | 
| トピック 1  | 0.1  | 0.3  | 0.2  | 0.4  | 0.0  | 
| トピック 2  | 0.2  | 0.1 | 0.4  | 0.0  | 0.3  | 

トピック 1 に分類される可能性が高いドキュメントは猫 (*ニャー*と*寝る*) に関するもの、トピック 2 に分類されるドキュメントは犬 (*遊ぶ*と*吠える*) に関するものであると推測できます。これらのトピックは、犬と猫という言葉がいずれのテキストに全く出現しない場合でも見つかることがあります。

**Topics**
+ [潜在的ディリクレ配分 (LDA) とニューラルトピックモデル (NTM) のいずれかを選択する](#lda-or-ntm)
+ [LDA アルゴリズムの入出力インターフェイス](#lda-inputoutput)
+ [LDA アルゴリズムの EC2 インスタンスに関する推奨事項](#lda-instances)
+ [LDA サンプルノートブック](#LDA-sample-notebooks)
+ [LDA の仕組み](lda-how-it-works.md)
+ [LDA ハイパーパラメータ](lda_hyperparameters.md)
+ [LDA モデルを調整する](lda-tuning.md)

## 潜在的ディリクレ配分 (LDA) とニューラルトピックモデル (NTM) のいずれかを選択する
<a name="lda-or-ntm"></a>

トピックモデルは、一般的に (1) 意味論的意味を一貫してカプセル化し、(2) ドキュメントを効果的に説明するコーパスからトピックを生成するために使用されます。そのため、トピックモデルは Perplexity を最小限に抑え、トピックコヒーレンスを最大化することを目的としています。

Perplexity は、テストデータ内で単語ごとの幾何平均の尤度の逆数を測定する固有言語モデリング評価メトリクスです。Perplexity スコアが低いほど、一般化パフォーマンスが向上します。研究により、単語ごとに計算される尤度は人間による判断と一致しないことが多く、完全に相関しない可能性があるため、トピックコヒーレンスが導入されています。モデルから推測される各トピックは単語で構成され、トピックコヒーレンスはモデルからその特定のトピックの上位 N 語に対して計算されます。これは多くの場合、そのトピック内の単語のペアワイズ単語の類似性スコア (点相互情報 (PMI) など) の平均値または中央値として定義されます。有望なモデルは、解釈しやすいトピック (トピックコヒーレンススコアが高いトピック) を生成します。

目的は、Perplexity を最小化してトピックコヒーレンスを最大化するトピックモデルをトレーニングすることですが、多くの場合、LDA と NTM 両方にトレードオフがあります。最近の研究 (Amazon, Dinget et al., 2018) により、NTM は高いトピックコヒーレンスの達成に対して有望ですが、崩れたギブスサンプリングでトレーニングされた LDA の Perplexity はより良好であることが示されています。Perplexity とトピックコヒーレンスの間にはトレードオフがあります。ハードウェアと計算能力に関する実用性の観点から、NTM は CPU と GPU 上で動作し、複数の GPU インスタンス間で並列化できるのに対して、LDA は単一インスタンスの CPU トレーニングのみをサポートしているため、SageMaker NTM ハードウェアは LDA よりも柔軟性があり、拡張性に優れています。

**Topics**
+ [潜在的ディリクレ配分 (LDA) とニューラルトピックモデル (NTM) のいずれかを選択する](#lda-or-ntm)
+ [LDA アルゴリズムの入出力インターフェイス](#lda-inputoutput)
+ [LDA アルゴリズムの EC2 インスタンスに関する推奨事項](#lda-instances)
+ [LDA サンプルノートブック](#LDA-sample-notebooks)
+ [LDA の仕組み](lda-how-it-works.md)
+ [LDA ハイパーパラメータ](lda_hyperparameters.md)
+ [LDA モデルを調整する](lda-tuning.md)

## LDA アルゴリズムの入出力インターフェイス
<a name="lda-inputoutput"></a>

LDA はトレーニングチャネルにデータが提供されることを期待しており、最終的なモデルで採点されたテストチャネルをオプションでサポートしています。LDA は、`recordIO-wrapped-protobuf` (密および疎) および `CSV` ファイル形式の両方をサポートしています。`CSV` の場合、データは密で、その次元は*レコードの次元数 \$1 語彙のサイズ*と等しくなければなりません。recordIO でラップされた protobuf を使用する場合、LDA はファイルモードまたはパイプモードでトレーニングできますが、`CSV` 形式のファイルモードでのみトレーニングできます。

`text/csv`、`application/json`、および `application/x-recordio-protobuf` コンテンツタイプが、推論のためにサポートされています。`application/json` および `application/x-recordio-protobuf` に疎データを渡すこともできます。LDA の推論は、`application/json` または `application/x-recordio-protobuf` *予測*を返し、これには、各観測の `topic_mixture` ベクトルが含まれます。

トレーニングと推論形式の詳細については、[LDA サンプルノートブック](#LDA-sample-notebooks)を参照してください。

## LDA アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="lda-instances"></a>

LDA は現在、単一インスタンスの CPU トレーニングのみをサポートしています。ホスティング/推論には CPU インスタンスをお勧めします。

## LDA サンプルノートブック
<a name="LDA-sample-notebooks"></a>

SageMaker AI 潜在的ディリクレ配分アルゴリズムをデータセットでトレーニングし、トレーニングされたモデルをデプロイして入力ドキュメント内のトピックの混在についての推論を実行する方法を示すサンプルノートブックについては、「[An Introduction to SageMaker AI LDA](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lda_topic_modeling/LDA-Introduction.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# LDA の仕組み
<a name="lda-how-it-works"></a>

Amazon SageMaker AI LDA は、一連の観測を異なるのカテゴリの混在として記述しようとする、教師なし学習アルゴリズムです。これらのカテゴリは、それ自体が特徴に対する確率分布です。LDA はジェネレーティブ確率モデルです。つまり、潜在変数に基づく出力と入力の分布のモデルを提供しようとします。これは、入力が出力にマップされる方法を学習しようとする判別モデルとは対照的です。

LDA を使用すると、製品購入に基づく顧客のクラスタリングから音楽の自動調和解析まで、さまざまなタスクを実行できます。ただし、最も関連しているのは、テキストコーパスのトピックモデリングです。観測はドキュメントと呼ばれます。この特徴セットは語彙と呼ばれます。特徴は単語と呼ばれます。また、結果のカテゴリはトピックと呼ばれます。

**注記**  
レンマ化によりアルゴリズムの性能と精度が大幅に向上します。入力テキストデータの前処理を検討してください。詳細については、「[Stemming and lemmatization](https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html)」を参照してください。

LDA モデルは、2 つのパラメータで定義されます。
+ α — トピックの確率についての事前の推定 (つまり、特定のドキュメント内の各トピックが発生する平均頻度)。
+ β — 各トピックに、「トピック語分布」とも呼ばれるドキュメントコーパスで使用される語彙に対する確率分布が与えられる k 個のトピックの集合。

LDA は「bag-of-words (単語の袋)」モデルであり、単語の順序は重要ではありません。LDA は生成混合モデルであるため、トピックの混在 θ 〜 ディリクレ (α) を選択して、各ドキュメントが単語ごとに生成されます。

 ドキュメント内の各単語の場合。
+  トピック z ∼ 多項式 (θ) を選択します。
+  対応するトピック語分布 β\$1z を選択します。
+  単語 w 〜 多項式 (β\$1z) を描きます。

モデルを訓練するときの目標は、モデルによってテキストコーパスが生成される確率を最大化するパラメータ α および β を見つけることです。

LDA モデルを推定する最も一般的な方法では、ギブスサンプリング法または期待値最大化法 (EM) を使用します。Amazon SageMaker AI LDA はテンソルスペクトル分解を使用します。これにはいくつかの利点があります。
+  **結果に対する理論上の保証**。標準的な EM 法は、しばしば品質が悪い局所最適解にのみ収束することが保証されています。
+  **大量の並列化が可能**。作業は、トレーニングと推論の両方で、入力ドキュメントに普通に分割することができます。EM メソッドとギブスサンプリングメソッドを並列化することはできますが、容易ではありません。
+  **高速**。EM メソッドは反復コストは低いものの、収束率が低下する傾向があります。ギブスサンプリングもまた、収束率が低く、多数のサンプルを必要とします。

テンソル分解方法は、高レベルでこのプロセスに従います。

1.  目標は、コーパス内のドキュメントのモーメントを要約する **V** x **V** x **V** テンソルのスペクトル分解を計算することです。**V** は語彙サイズ (つまり、すべてのドキュメントの個別の単語数) です。このテンソルのスペクトルコンポーネントは、ドキュメントコーパスの全体的な可能性を最大にする LDA パラメータ α および β です。ただし、語彙サイズが大きくなる傾向があるので、この **V** x **V** x **V** テンソルは、メモリに格納するのが非常に困難です。

1.  代わりに、ステップ 1 のテンソルの 2 次元アナログである **V** x **V** モーメントマトリックスを使用して、**V** x **k** 次元の白色化マトリックスを見つけることができます。このマトリックスは、**V** x **V** モーメントマトリックスを **k** x **k** 単位行列に変換するために使用できます。**k** はモデル内のトピック数です。

1.  この同じ白色化マトリックスを使用して、より小さい **k** x **k** x **k** テンソルを見つけることができます。スペクトル分解されるとき、このテンソルには、**V** x **V** x **V** テンソルのコンポーネントと単純な関係のあるコンポーネントがあります。

1.  *交互最小二乗法*は、より小さい **k** x *k* x **k** テンソルを分解するために使用されます。これにより、メモリ消費量と速度を大幅に改善されます。パラメータ α および β は、スペクトル分解のこれらの出力を「非白色化」することによって見つかります。

LDA モデルのパラメータが見つかったら、各ドキュメントのトピックの混在を見つけることができます。確率的勾配降下を使用して、これらのデータに対応する指定されたトピックの混在を観測する尤度関数を最大化します。

トピックの品質を向上させるには、トレーニングで探すトピックの数を増やし、品質の低いものを除外します。これは実際に SageMaker AI LDA で自動的に行われます。25% 多くのトピックが計算され、関連するディリクレの最大の関連トピックが返されます。トピックのフィルタリングと分析をさらに実行するには、トピック数を増やして、結果の LDA モデルを次のように変更します。

```
> import mxnet as mx
> alpha, beta = mx.ndarray.load(‘model.tar.gz’)
> # modify alpha and beta
> mx.nd.save(‘new_model.tar.gz’, [new_alpha, new_beta])
> # upload to S3 and create new SageMaker model using the console
```

LDA のアルゴリズムと SageMaker AI 実装の詳細については、以下を参照してください。
+ Animashree Anandkumar、Rong Ge、Daniel Hsu、Sham M Kakade、および Matus Telgarsky。*Tensor Decompositions for Learning Latent Variable Models*、Journal of Machine Learning Research、15:2773–2832、2014 年。
+  David M Blei、Andrew Y Ng、および Michael I Jordan。*潜在的ディリクレ配分*。Journal of Machine Learning Research、3(Jan):993–1022、2003 年。
+  Thomas L Griffiths および Mark Steyvers。*Finding Scientific Topics*。Proceedings of the National Academy of Sciences、101(suppl 1):5228–5235、2004 年。
+  Tamara G Kolda および Brett W Bader。*Tensor Decompositions and Applications*。SIAM Review、51(3):455–500、2009 年。

# LDA ハイパーパラメータ
<a name="lda_hyperparameters"></a>

`CreateTrainingJob` リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Amazon SageMaker AI によって提供される LDA トレーニングアルゴリズムのハイパーパラメータを示します。詳細については、「[LDA の仕組み](lda-how-it-works.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1topics |  データ内で見つける LDA のトピックの数。 **必須** 有効な値: 正の整数  | 
| feature\$1dim |  入力ドキュメントコーパスの語彙のサイズ。 **必須** 有効な値: 正の整数  | 
| mini\$1batch\$1size |  入力ドキュメントコーパス内のドキュメントの合計数。 **必須** 有効な値: 正の整数  | 
| alpha0 |  集中パラメータの最初の推測: 前のディリクレの要素の合計。小さな値ではスパーストピック混在を生成する可能性が高く、大きな値 (1.0 以上) はより均一な混合物を生成します。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 1.0  | 
| max\$1restarts |  アルゴリズムの交互最小二乗法 (ALS) スペクトル分解フェーズで実行する再起動の回数。追加の計算を犠牲にして、より良い品質のローカル最小値を見つけるために使用できますが、通常は調整しないでください。 **オプション** 有効な値: 正の整数 デフォルト値: 10  | 
| max\$1iterations |  アルゴリズムの ALS フェーズで実行する反復の最大回数。追加の計算を犠牲にして、より良い品質の最小値を見つけるために使用できますが、通常は調整しないでください。 **オプション** 有効な値: 正の整数 デフォルト値: 1000  | 
| tol |  アルゴリズムの ALS フェーズの目標のエラー許容値。追加の計算を犠牲にして、より良い品質の最小値を見つけるために使用できますが、通常は調整しないでください。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 1e-8  | 

# LDA モデルを調整する
<a name="lda-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

LDA は、一連の観測 (ドキュメント) を異なるのカテゴリ (トピック) の混在として記述しようとする、親なしトピックモデリングアルゴリズムです。「単語ごとの対数尤度」 (PWLL) メトリクスは、学習したトピックのセット (LDA モデル) がテストドキュメントデータセットを正確に記述している可能性を測定します。PWLL の値が大きいほど、テストデータが LDA モデルによって記述される可能性が高いことを示します。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## LDA アルゴリズムによって計算されたメトリクス
<a name="lda-metrics"></a>

LDA アルゴリズムは、トレーニング中に単一のメトリクス `test:pwll` について報告します。モデルを調整するときに、このメトリクスを目標メトリクスとして選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:pwll | テストデータセットの単語ごとの対数尤度。テストデータセットが学習済み LDA モデルによって正確に記述されている可能性。 | 最大化 | 

## 調整可能な LDA ハイパーパラメータ
<a name="lda-tunable-hyperparameters"></a>

LDA アルゴリズムの以下のハイパーパラメータを調整できます。ハイパーパラメータ `alpha0` と `num_topics` はどちらも、LDA 目標メトリクス (`test:pwll`) に影響を与える可能性があります。単語ごとの対数尤度を最大化し、正確な LDA モデルを生成する、これらのハイパーパラメータの最適値がまだわからない場合は、自動モデル調整で見つけることができます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| alpha0 | ContinuousParameterRanges | MinValue: 0.1、MaxValue: 10 | 
| num\$1topics | IntegerParameterRanges | MinValue: 1、MaxValue: 150 | 

# ニューラルトピックモデル (NTM) アルゴリズム
<a name="ntm"></a>

Amazon SageMaker AI NTM は、ドキュメントのコーパスを、それらの統計的分布に基づいた単語のグループ化を含むトピックに編成するために使用される教師なし学習アルゴリズムです。**たとえば、「自転車」、「車」、「電車」、「走行距離」、「スピード」などの単語が頻繁に含まれるドキュメントは、「交通」に関するトピックを共有する可能性があります。トピックモデリングを使用すると、検出されたトピックに基づいてドキュメントを分類または要約したり、トピックの類似性に基づいて情報を検索したりコンテンツを推奨したりすることができます。NTM が学習したドキュメントのトピックは、コーパス内で観察された単語分布から推測されるため、*潜在的な表現*として特徴付けられます。トピックの意味は通常、トピックに含まれる上位の単語を調べることによって推測されます。メソッドは教師なしであるため、トピック自体ではなく、トピックの数のみが事前に指定されます。さらに、トピックが人によるドキュメントの自然な分類方法と一致することは保証されません。

トピックモデリングは、大量のドキュメントコーパスのコンテンツを、学習したトピックの形で視覚化する方法を提供します。各トピックに関連するドキュメントは、ソフトトピックラベルに基づいてインデックス付けまたは検索される場合があります。また、そのトピックスペース内で類似のドキュメントを見つけるために、ドキュメントの潜在表現が使用される場合もあります。トピックモデルが学習するドキュメントの潜在表現を、別の教師ありアルゴリズム (文書分類器など) の入力として使用することもできます。ドキュメントの潜在表現には基盤となるドキュメントの意味をキャプチャすることが期待されているため、これらの表現の一部をベースとするアルゴリズムは、語彙特徴単独をベースとするアルゴリズムよりも優れたパフォーマンスを発揮することが期待されます。

トピックモデリングには Amazon SageMaker AI NTM アルゴリズムと LDA アルゴリズムの両方を使用できますが、それらは別個のアルゴリズムであり、同じ入力データに対して別の結果が生成されることが期待されます。

NTM 背後で行われる計算の詳細については、[Neural Variational Inference for Text Processing (テキスト処理のためのニューラル変分推論)](https://arxiv.org/pdf/1511.06038.pdf) を参照してください。

**Topics**
+ [NTM アルゴリズムの入出力インターフェイス](#NTM-inputoutput)
+ [NTM アルゴリズムの EC2 インスタンスに関する推奨事項](#NTM-instances)
+ [NTM サンプルノートブック](#NTM-sample-notebooks)
+ [NTM のハイパーパラメータ](ntm_hyperparameters.md)
+ [NTM モデルを調整する](ntm-tuning.md)
+ [NTM のレスポンス形式](ntm-in-formats.md)

## NTM アルゴリズムの入出力インターフェイス
<a name="NTM-inputoutput"></a>

Amazon SageMaker AI ニューラルトピックモデルは、トレーニング、検証、テスト、補助の 4 つのデータチャネルに対応しています。検証、テスト、および補助のデータチャネルは省略可能です。これらのオプションチャネルを指定する場合は、その `S3DataDistributionType` パラメータの値を `FullyReplicated` に設定します。検証データを提供した場合、このデータの損失は全エポックでログに記録され、検証の損失が改善していないと検出されるとすぐにモデルのトレーニングが停止します。検証データを提供しない場合、トレーニングデータに基づいてアルゴリズムが早期に停止しますが、より効率が下がる場合があります。テストデータを提供した場合、アルゴリズムは最終的なモデルからテストの損失を報告します。

NTM のトレーニング、検証、およびテストデータチャネルは、`recordIO-wrapped-protobuf` (高密度形式と疎形式) および `CSV` ファイル形式の両方をサポートします。`CSV` 形式の場合、各行は対応するドキュメントに存在しない単語に対してゼロカウントで高密度形式で表現する必要があり、その次元は (レコード数) \$1 (語彙のサイズ) と等しくなければなりません。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについてモデルをトレーニングできます。補助チャネルは、語彙を含むテキストファイルを提供するために使用されます。語彙ファイルを提供することによって、ユーザーは自分の整数 ID の代わりに、ログに出力された各トピックの上位の単語を確認できます。語彙ファイルが提供されると、NTM は単語埋め込みトピックコヒーレンス (WETC) スコアを計算することができます。これはログに表示される新しいメトリクスであり、各トピックの上位の単語間の類似性を効果的にキャプチャします。補助チャネルの `ContentType` は `text/plain` であり、各行には、データに指定されている整数 ID に対応する順序で単一の単語が含まれます。語彙ファイルは `vocab.txt` という名前でなければならず、現在は UTF-8 エンコーディングのみがサポートされています。

推論については、`text/csv`、`application/json`、`application/jsonlines`、および `application/x-recordio-protobuf` コンテンツタイプがサポートされています。`application/json` および `application/x-recordio-protobuf` に疎データを渡すこともできます。NTM の推論は、`application/json` または `application/x-recordio-protobuf` *予測*を返し、これには、各観測の `topic_weights` ベクトルが含まれます。

補助チャネルと WETC スコアの使用の詳細については、[ブログ記事](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-neural-topic-model-now-supports-auxiliary-vocabulary-channel-new-topic-evaluation-metrics-and-training-subsampling/)を参照してください。WETC スコアの計算方法の詳細については、[Coherence-Aware Neural Topic Modeling (コヒーレンス認識ニューラルトピックモデリング)](https://arxiv.org/pdf/1809.02687.pdf) を参照してください。Amazon SageMaker AI ニューラルトピックモデルには、このペーパーで説明しているペアワイズ WETC を使用しました。

入出力ファイル形式の詳細については、[NTM のレスポンス形式](ntm-in-formats.md) (推論の場合) および[NTM サンプルノートブック](#NTM-sample-notebooks)を参照してください。

## NTM アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="NTM-instances"></a>

NTM のトレーニングは、GPU と CPU のインスタンスタイプの両方に対応しています。GPU インスタンスをお勧めしますが、特定のワークロードについては CPU インスタンスのほうがトレーニングコストの削減につながる場合があります。推論については、CPU インスタンスで十分であるはずです。NTM のトレーニングは、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

## NTM サンプルノートブック
<a name="NTM-sample-notebooks"></a>

SageMaker AI NTM アルゴリズムを使用して、トピック分布が既知である合成データソースからドキュメント内のトピックを発見するサンプルノートブックについては、「[Introduction to Basic Functionality of NTM](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ntm_synthetic/ntm_synthetic.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# NTM のハイパーパラメータ
<a name="ntm_hyperparameters"></a>

次の表に、Amazon SageMaker AI ニューラルトピックモデル (NTM) アルゴリズムで設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
|  `feature_dim`  |  データセットの語彙サイズ。 **必須** 有効な値 : 正の整数 (最小: 1、最大: 1,000,000)  | 
| num\$1topics |  必要なトピックの数。 **必須** 有効な値 : 正の整数 (最小: 2、最大: 1000)  | 
| batch\$1norm |  トレーニング中にバッチの正規化を使用するかどうか。 **オプション** 有効な値: *true* または *false* デフォルト値: *false*  | 
| clip\$1gradient |  各勾配コンポーネントの大きさの最大値。 **オプション** 有効な値: 浮動小数点 (最小: 1e-3) デフォルト値は: 無限大  | 
| encoder\$1layers |  エンコーダー内のレイヤーの数と、各レイヤーの出力サイズ。*auto* に設定すると、アルゴリズムは 3 x `num_topics` のサイズと 2 x `num_topics` のサイズのレイヤーをそれぞれ使用します。 **オプション** 有効な値 : 正の整数のカンマ区切りリストまたは *auto* デフォルト値: *auto*  | 
| encoder\$1layers\$1activation |  エンコーダーレイヤーで使用するアクティベーション関数。 **オプション** 有効な値:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ntm_hyperparameters.html) デフォルト値: `sigmoid`  | 
| epochs |  トレーニングデータへのパスの最大数。 **オプション** 有効な値: 正の整数 (最小: 1) デフォルト値: 50  | 
| learning\$1rate |  オプティマイザの学習レート。 **オプション** 有効な値: 浮動小数点 (最小: 1e-6、最大: 1.0) デフォルト値: 0.001  | 
| mini\$1batch\$1size |  各ミニバッチ内の例の数。 **オプション** 有効な値 : 正の整数 (最小: 1、最大: 10000) デフォルト値: 256  | 
| num\$1patience\$1epochs |  早期停止条件が評価される後続のエポック数。損失関数の変化が最後のエポック数 `num_patience_epochs` 以内に指定された `tolerance` を下回ると、早期停止がトリガーされます。早期停止を無効にするには、`num_patience_epochs` を `epochs` より大きい値にします。 **オプション** 有効な値: 正の整数 (最小: 1) デフォルト値： 3  | 
| optimizer |  トレーニングに使用するオプティマイザ。 **オプション** 有効な値: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ntm_hyperparameters.html) デフォルト値: `adadelta`  | 
| rescale\$1gradient |  勾配の再スケール係数。 **オプション** 有効な値: 浮動小数点 (最小: 1e-3、最大: 1.0) デフォルト値: 1.0  | 
| sub\$1sample |  トレーニングのためにエポックごとにサンプリングするトレーニングデータの割合。 **オプション** 有効な値: 浮動小数点 (最小: 0.0、最大: 1.0) デフォルト値: 1.0  | 
| tolerance |  損失関数の最大相対変化。損失関数の変化が最後のエポック数 `num_patience_epochs` 以内にこの値を下回ると、早期停止がトリガーされます。 **オプション** 有効な値: 浮動小数点 (最小: 1e-6、最大: 0.1) デフォルト値: 0.001  | 
| weight\$1decay |   重み減衰係数。L2 正規化を追加します。 **オプション** 有効な値: 浮動小数点 (最小: 0.0、最大: 1.0) デフォルト値: 0.0  | 

# NTM モデルを調整する
<a name="ntm-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

Amazon SageMaker AI NTM は教師なし学習アルゴリズムで、ドキュメントのコーパスなど、大量の離散データのコレクションの潜在表現を学習します。潜在表現は、直接測定されていない推定変数を使用して、データセット内の観測値をモデル化します。NTM での自動モデル調整は、トレーニングまたは検証データの損失を最小限に抑えるモデルを見つけるのに役立ちます。*トレーニング損失*は、モデルがトレーニングデータにどの程度適合しているかを測定します。*検証損失*は、トレーニングされていないデータにどの程度モデルを一般化できるかを測定します。トレーニング損失が少ないということは、モデルがトレーニングデータに適していることを示します。検証の損失が少ないということは、モデルがトレーニングデータに過剰適合していないことを示しているため、モデルが正しくトレーニングされていないドキュメントをモデル化できます。通常望ましいのは、両方の損失を小さくすることです。ただし、トレーニング損失を最小限に抑えると、過剰適合が発生し、検証損失が増加する可能性があります。これにより、モデルの一般性が低下します。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## NTM アルゴリズムによって計算されたメトリクス
<a name="ntm-metrics"></a>

NTM アルゴリズムは、トレーニング中に計算された単一のメトリクス (`validation:total_loss`) を報告します。総損失は、再構成損失とカルバック・ライブラー情報量の合計です。ハイパーパラメータ値を調整するときには、このメトリクスを目標として選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:total\$1loss |  検証セットの総損失  |  最小化  | 

## 調整可能な NTM ハイパーパラメータ
<a name="ntm-tunable-hyperparameters"></a>

NTM アルゴリズムの以下のハイパーパラメータを調整できます。通常、`mini_batch_size` を低く設定し、`learning_rate` 値を小さくすると、検証損失が少なくなりますが、トレーニングに時間がかかる可能性があります。検証損失が低い場合、必ずしも人間がより解釈しやすいトピックが生成されるわけではありません。トレーニングおよび検証の喪失に対する他のハイパーパラメータの影響は、データセットによって異なる可能性があります。互換性のある値を確認するには、[NTM のハイパーパラメータ](ntm_hyperparameters.md) を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| encoder\$1layers\$1activation |  CategoricalParameterRanges  |  ['sigmoid', 'tanh', 'relu']  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4、MaxValue: 0.1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 16、MaxValue:2048  | 
| optimizer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'adadelta']  | 
| rescale\$1gradient |  ContinuousParameterRange  |  MinValue: 0.1、MaxValue: 1.0  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 1.0  | 

# NTM のレスポンス形式
<a name="ntm-in-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。このトピックには、SageMaker AI NTM アルゴリズムで使用可能な出力形式のリストが含まれています。

## JSON レスポンスの形式
<a name="ntm-json"></a>

```
{
    "predictions":    [
        {"topic_weights": [0.02, 0.1, 0,...]},
        {"topic_weights": [0.25, 0.067, 0,...]}
    ]
}
```

## JSONLINES レスポンスの形式
<a name="ntm-jsonlines"></a>

```
{"topic_weights": [0.02, 0.1, 0,...]}
{"topic_weights": [0.25, 0.067, 0,...]}
```

## RECORDIO レスポンスの形式
<a name="ntm-recordio"></a>

```
[
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    }  
]
```

# Object2Vec アルゴリズム
<a name="object2vec"></a>

Amazon SageMaker AI Object2Vec は高度にカスタマイズ可能な汎用のニューラル埋め込みアルゴリズムです。このアルゴリズムは、高次元オブジェクトの低次元高密度埋め込みを学習できます。埋め込みは、元の空間内のオブジェクトのペア間の関係の意味が、埋め込み空間内に保持されるように学習されます。たとえば、学習した埋め込みを使用して、オブジェクトの最近傍を効率的に計算したり、関連オブジェクトの自然なクラスターを低次元空間で視覚化したりすることができます。分類や回帰など、下流の監視タスクで対応するオブジェクトの機能として埋め込みを使用することもできます。

Object2Vec は、SageMaker AI [BlazingText アルゴリズム](blazingtext.md) で最適化されている単語用のよく知られた埋め込み技術である Word2Vec を一般化したものです。実用的なユースケースに Object2Vec を適用する方法を示したブログ投稿については、「[Introduction to Amazon SageMaker AI Object2Vec](https://aws.amazon.com/blogs/machine-learning/introduction-to-amazon-sagemaker-object2vec/)」を参照してください。

**Topics**
+ [Object2Vec アルゴリズムの I/O インターフェイス](#object2vec-inputoutput)
+ [Object2Vec アルゴリズムの EC2 インスタンスに関する推奨事項](#object2vec--instances)
+ [Object2Vec サンプルノートブック](#object2vec-sample-notebooks)
+ [Object2Vec の仕組み](object2vec-howitworks.md)
+ [Object2Vec ハイパーパラメータ](object2vec-hyperparameters.md)
+ [Object2Vec モデルを調整する](object2vec-tuning.md)
+ [Object2Vec トレーニングのデータ形式](object2vec-training-formats.md)
+ [Object2Vec 推論のデータ形式](object2vec-inference-formats.md)
+ [Object2Vec のエンコーダー埋め込み](object2vec-encoder-embeddings.md)

## Object2Vec アルゴリズムの I/O インターフェイス
<a name="object2vec-inputoutput"></a>

Object2Vec は、多数の入力データタイプで使用できます。以下に例を示します。


| 入力データ型 | 例 | 
| --- | --- | 
|  センテンスとセンテンスのペア  | 「複数の男性がプレイしているサッカーの試合」。および「何人かの男性はスポーツをしている」。 | 
|  ラベルとシーケンスのペア  | 映画「タイタニック」のジャンルタグ (例: 「ラブロマンス」や「ドラマ」) とその簡単な説明「ジェームズキャメロンのタイタニックは豪華客船タイタニック号の悲劇的初航海を描いた壮大なアクション満載のラブロマンス映画です。上流階級の彼女が乗っていたこの豪華客船は、1912 年 4 月 15 日の早朝に北大西洋の氷山に接触して沈没し、最終的に 1,500 名を超える犠牲者がでました。」 | 
|  顧客と顧客のペア  |  Jane の顧客 ID と Jackie の顧客 ID。  | 
|  製品と製品のペア  |  フットボールの製品 ID とバスケットボールの製品 ID。  | 
|  商品レビューユーザーと商品のペア  |  ユーザーの ID とそのユーザーが購入した商品 (林檎、梨、オレンジなど)。  | 

入力データをサポートされている形式に変換するには、それを前処理する必要があります。現在、Object2Vec は基本的に次の 2 つの入力タイプをサポートしています。
+ 個別のトークン。単一の `integer-id` のリストとして表されます。例えば、`[10]`。
+ 離散トークンのシーケンス。`integer-ids` のリストとして表されます。例えば、`[0,12,10,13]`。

各ペアのオブジェクトは非対称にすることができます。たとえば、ペアには (トークン、シーケンス)、(トークン、トークン) ペア、(シーケンス、シーケンス) があります。トークン入力の場合、アルゴリズムは単純な埋め込みを互換性のあるエンコーダーとしてサポートします。トークンベクトルのシーケンスの場合、アルゴリズムはエンコーダーとして以下をサポートします。
+  平均プール埋め込み
+  階層型畳み込みニューラルネットワーク (CNN)
+  多層双方向長短期記憶 (BiLSTM) 

各ペアの入力ラベルは、次のいずれかになります。
+ ペアのオブジェクト間の関係を表すカテゴリ別ラベル 
+ 2 つのオブジェクト間の類似性の強度を表すスコア 

分類に使用されるカテゴリ別ラベルの場合、アルゴリズムは交差エントロピー損失関数をサポートします。回帰で使用される評価/スコアベースのラベルの場合、アルゴリズムは平均二乗誤差 (MSE) 損失関数をサポートします。モデルトレーニングジョブを作成するときに、ハイパーパラメータ `output_layer` を使用して、これらの損失関数を指定します。

## Object2Vec アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="object2vec--instances"></a>

使用する Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのタイプは、トレーニングまたは推論を実行しているかによって異なります。

Object2Vec アルゴリズムを使用して CPU 上でモデルをトレーニングする場合は、ml.m5.2xlarge インスタンスから始めます。GPU のトレーニングでは、ml.p2.xlarge インスタンスから始めます。このインスタンスでのトレーニングに時間がかかりすぎる場合は、より大きなインスタンスを使用できます。現在、Object2Vec アルゴリズムは単一のマシンでのみトレーニングできます。ただし、複数の GPU をサポートします。Object2Vec は、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

ディープニューラルネットワークを持つ、トレーニングされた Object2Vec モデルでの推論には、ml.p3.2xlarge GPU インスタンスを使用することをお勧めします。GPU メモリ不足のため、`INFERENCE_PREFERRED_MODE` 環境変数を指定して [GPU 最適化: 分類または回帰](object2vec-inference-formats.md#object2vec-inference-gpu-optimize-classification) または [GPU 最適化: エンコーダー埋め込み](object2vec-encoder-embeddings.md#object2vec-inference-gpu-optimize-encoder-embeddings) 推論ネットワークが GPU にロードされるかどうかを最適化することができます。

## Object2Vec サンプルノートブック
<a name="object2vec-sample-notebooks"></a>
+ [Object2Vec を使用してセンテンスを固定長の埋め込みにエンコードする](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object2vec_sentence_similarity/object2vec_sentence_similarity.html)

# Object2Vec の仕組み
<a name="object2vec-howitworks"></a>

Amazon SageMaker AI Object2Vec アルゴリズムを使用する場合は、データの処理、モデルのトレーニング、推論の生成を行う標準ワークフローに従ってください。

**Topics**
+ [ステップ 1: データを処理する](#object2vec-step-1-data-preprocessing)
+ [ステップ 2: モデルをトレーニングする](#object2vec-step-2-training-model)
+ [ステップ 3: 推論を生成する](#object2vec-step-3-inference)

## ステップ 1: データを処理する
<a name="object2vec-step-1-data-preprocessing"></a>

前処理中に、データを「[Object2Vec トレーニングのデータ形式](object2vec-training-formats.md)」で指定した [JSON Lines](http://jsonlines.org/) テキストファイル形式に変換します。トレーニング中に最高の精度を得られるように、データをモデルに入れる前にランダムにシャッフルします。ランダム配列をどのように生成するかは、言語によって異なります。Python の場合は `np.random.shuffle`、Unix の場合は `shuf` を使用します。

## ステップ 2: モデルをトレーニングする
<a name="object2vec-step-2-training-model"></a>

SageMaker AI Object2Vec アルゴリズムには、次の主なコンポーネントがあります。
+ **2 つの入力チャネル** - 入力チャネルは、同じタイプまたは異なるタイプのオブジェクトのペアを入力として受け取り、それらを独立したカスタマイズ可能なエンコーダーに渡します。
+ **2 つのエンコーダー** - enc0 および enc1 の 2 つのエンコーダーは、各オブジェクトを固定長の埋め込みベクトルに変換します。ペアになっているオブジェクトのエンコードされた埋め込みは、コンパレーターに渡されます。
+ **コンパレーター** - コンパレーターはさまざまな方法で埋め込みを比較し、ペアになったオブジェクト間の関係の強さを示すスコアを出力します。センテンスのペアに対する出力スコア。たとえば、1 はセンテンスのペア間の強い関係を示し、0 は弱い関係を表します。

トレーニング中、アルゴリズムはオブジェクトのペアとそれらの関係ラベルまたはスコアを入力として受け入れます。以前に示したように、各ペアではさまざまなタイプのオブジェクトを使用できます。両方のエンコーダへの入力が同じトークンレベルの単位で構成されている場合は、トレーニングジョブを作成するときに `tied_token_embedding_weight` ハイパーパラメータを `True` に設定することで、共有トークン埋め込みレイヤーを使用できます。たとえば、両方に単語トークンレベルの単位を含むセンテンスを比較する場合などです。指定した比率で負のサンプルを生成するには、負のサンプルの希望する比率のハイパーパラメータ `negative_sampling_rate` を正のサンプルの比率に設定します。このハイパーパラメータによって、観察された正のサンプルとそれ以外の負のサンプルを区別しやすくなります。

オブジェクトのペアは、対応するオブジェクトの入力タイプと互換性のある、カスタマイズ可能な独立したエンコーダーを経由して渡されます。エンコーダーは、ペアになっている各オブジェクトを同じ長さの固定長埋め込みベクトルに変換します。ベクトルのペアは比較演算子に渡され、比較演算子は `comparator_list` ハイパーパラメータで指定された値を使用してベクトルを単一のベクトルにアセンブルします。アセンブルされたベクトルは、多層パーセプトロン (MLP) レイヤーを通過します。これにより、損失関数によって、ユーザーが指定したラベルと比較する出力が生成されます。この比較では、モデルによって予測されるように、ペアのオブジェクト間の関係の強度を評価します。次の図はこのワークフローを示しています。

![\[Object2Vec アルゴリズムのアーキテクチャ (データ入力からスコア)\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/object2vec-training-image.png)


## ステップ 3: 推論を生成する
<a name="object2vec-step-3-inference"></a>

モデルがトレーニングされたら、トレーニングされたエンコーダーを使用して、入力オブジェクトの前処理を行ったり、次の 2 種類の推論を実行したりできます。
+ 対応するエンコーダーを使用してシングルトン入力オブジェクトを固定長埋め込みに変換する
+ ペアになっている入力オブジェクト間の関係ラベルまたはスコアを予測する

推論サーバーは、入力データに基づいてどのタイプがリクエストされているかを自動的に判別します。埋め込みを出力として取得するには、1 つの入力のみを指定します。関係ラベルまたはスコアを予測するには、ペアに両方の入力を指定します。

# Object2Vec ハイパーパラメータ
<a name="object2vec-hyperparameters"></a>

`CreateTrainingJob` リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Object2Vec トレーニングアルゴリズムのハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| enc0\$1max\$1seq\$1len |  enc0 エンコーダーの最大シーケンス長。 **必須** 有効な値: 1 ≤ 整数 ≤ 5000  | 
| enc0\$1vocab\$1size |  enc0 トークンの語彙サイズ。 **必須** 有効な値: 2 ≤ 整数 ≤ 3000000  | 
| bucket\$1width |  バケット処理が有効になっている場合のデータシーケンス長の許容差。バケット処理を有効にするには、このパラメータにゼロ以外の値を指定します。 **オプション** 有効な値: 0 ≤ 整数 ≤ 100 デフォルト値: 0 (バケット処理なし)  | 
| comparator\$1list |  2 つの埋め込みを比較する方法のカスタマイズに使用されるリスト。Object2Vec 比較演算子レイヤーは、両方のエンコーダーからエンコードを入力として受け取り、単一のベクトルを出力します。このベクトルはサブベクトルの連結です。`comparator_list` に渡される文字列値と、それらが渡される順序によって、これらのサブベクトルの組み立て方法が決まります。たとえば、`comparator_list="hadamard, concat"` の場合、比較演算子は、2 つのエンコーディングのアダマール積と 2 つのエンコーディングの連結を連結してベクトルを作成します。一方、`comparator_list="hadamard"` の場合、比較演算子は 2 つのエンコーディングのみのアダマール積としてベクトルを構成します。 **オプション** 有効な値: 3 つの 2 項演算子の名前の任意の組み合わせを含む文字列: `hadamard`、`concat`、または `abs_diff`。現在 Object2Vec アルゴリズムでは、2 つのベクトルエンコーディングのディメンションが同じになるよう義務付けています。これらの演算子によって、次のようにサブベクトルが生成されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `"hadamard, concat, abs_diff"`  | 
| dropout |  ネットワークレイヤーのドロップアウト確率。*ドロップアウト*は、ニューラルネットワークで使用される正則化の一種であり、共依存ニューロンをトリミングすることで過剰適合を減らします。 **オプション** 有効な値: 0.0 ≤ 浮動小数点数 ≤ 1.0 デフォルト値: 0.0  | 
| early\$1stopping\$1patience |  早期停止前に許容される改善なしの連続エポック数が適用されます。改善は、`early_stopping_tolerance` ハイパーパラメータで定義されます。 **オプション** 有効な値: 1 ≤ 整数 ≤ 5 デフォルト値： 3  | 
| early\$1stopping\$1tolerance |  `early_stopping_patience` ハイパーパラメータで指定される連続するエポックが複数回繰り返された後で早期停止が起きるのを回避するために、アルゴリズムが、連続するエポック間で達成しなければならない損失関数の減少。 **オプション** 有効な値: 0.000001 ≤ 浮動小数点数 ≤ 0.1 デフォルト値: 0.01  | 
| enc\$1dim |  埋め込みレイヤーの出力の次元。 **オプション** 有効な値: 4 ≤ 整数 ≤ 10000 デフォルト値: 4096  | 
| enc0\$1network |  enc0 エンコーダーのネットワークモデル。 **オプション** 有効な値: `hcnn`、`bilstm`、または `pooled_embedding` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `hcnn`  | 
| enc0\$1cnn\$1filter\$1width |  畳み込みニューラルネットワーク (CNN) enc0 エンコーダーのフィルタ幅。 **条件付き** 有効な値: 1 ≤ 整数 ≤ 9 デフォルト値： 3  | 
| enc0\$1freeze\$1pretrained\$1embedding |  enc0 の事前トレーニング済み埋め込み重みを凍結するかどうか。 **条件付き** 有効な値: `True` または `False` デフォルト値: `True`  | 
| enc0\$1layers  |  enc0 エンコーダーのレイヤーの数。 **条件付き** 有効な値: `auto` または 1 ≤ 整数 ≤ 4 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `auto`  | 
| enc0\$1pretrained\$1embedding\$1file |  補助データチャネル内の事前トレーニング済み enc0 トークン埋め込みファイルのファイル名。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc0\$1token\$1embedding\$1dim |  enc0 トークン埋め込みレイヤーの出力次元。 **条件付き** 有効な値: 2 ≤ 整数 ≤ 1000 デフォルト値: 300  | 
| enc0\$1vocab\$1file |  事前トレーニング済みの enc0 トークン埋め込みベクトルを数値の語彙 ID にマッピングするための語彙ファイル。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc1\$1network |  enc1 エンコーダーのネットワークモデル。enc1 エンコーダーで、enc0 と同じネットワークを使用する場合は (ハイパーパラメータ値を含む)、値を `enc0` に設定します。  enc0 および enc1 エンコーダーネットワークに同一の対称アーキテクチャがあっても、これらのネットワークの共有パラメータ値は共有されていません。  **オプション** 有効な値: `enc0`、`hcnn`、`bilstm`、または `pooled_embedding` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `enc0`  | 
| enc1\$1cnn\$1filter\$1width |  CNN enc1 エンコーダーのフィルタ幅。 **条件付き** 有効な値: 1 ≤ 整数 ≤ 9 デフォルト値： 3  | 
| enc1\$1freeze\$1pretrained\$1embedding |  enc1 の事前トレーニング済み埋め込み重みを凍結するかどうか。 **条件付き** 有効な値: `True` または `False` デフォルト値: `True`  | 
| enc1\$1layers  |  enc1 エンコーダーのレイヤーの数。 **条件付き** 有効な値: `auto` または 1 ≤ 整数 ≤ 4 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `auto`  | 
| enc1\$1max\$1seq\$1len |  enc1 エンコーダーの最大シーケンス長。 **条件付き** 有効な値: 1 ≤ 整数 ≤ 5000  | 
| enc1\$1pretrained\$1embedding\$1file |  補助データチャネル内の事前トレーニング済み enc1 トークン埋め込みファイルのファイル名。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc1\$1token\$1embedding\$1dim |  enc1 トークン埋め込みレイヤーの出力次元。 **条件付き** 有効な値: 2 ≤ 整数 ≤ 1000 デフォルト値: 300  | 
| enc1\$1vocab\$1file |  事前トレーニング済みの enc1 トークン埋め込みを語彙 ID にマッピングするための語彙ファイル。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc1\$1vocab\$1size |  enc0 トークンの語彙サイズ。 **条件付き** 有効な値: 2 ≤ 整数 ≤ 3000000  | 
| epochs |  トレーニングのために実行するエポックの数  **オプション** 有効な値: 1 ≤ 整数 ≤ 100 デフォルト値: 30  | 
| learning\$1rate |  トレーニングの学習レート。 **オプション** 有効な値: 1.0E-6 ≤ 浮動小数点数 ≤ 1.0 デフォルト値: 0.0004  | 
| mini\$1batch\$1size |  トレーニング中に `optimizer` 用に分割されるデータセットのバッチサイズ。 **オプション** 有効な値: 1 ≤ 整数 ≤ 10000 デフォルト値: 32  | 
| mlp\$1activation |  多層パーセプトロン (MLP) のレイヤーの活性化関数のタイプ。 **オプション** 有効な値: `tanh`、`relu`、または `linear` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `linear`  | 
| mlp\$1dim |  MLP のレイヤーからの出力の寸法。 **オプション** 有効な値: 2 ≤ 整数 ≤ 10000 デフォルト値: 512  | 
| mlp\$1layers |  ネットワークの MLP レイヤーの数。 **オプション** 有効な値: 0 ≤ 整数 ≤ 10 デフォルト値: 2  | 
| negative\$1sampling\$1rate |  アルゴリズムのトレーニングを支援するために生成された、負のサンプルと、ユーザーから提供された正のサンプルの比率。負のサンプルは、実際には発生する可能性が低いデータを表し、トレーニング用に負のラベルが付けられています。観察された正のサンプルとそれ以外の負のサンプルを区別するためにモデルをトレーニングしやすくなります。トレーニングに使用される正のサンプルに対する負のサンプルの比率を指定するには、値を正の整数に設定します。たとえば、すべてのサンプルが正である入力データでアルゴリズムをトレーニングし、`negative_sampling_rate` を 2 に設定した場合、Object2Vec アルゴリズムでは、正のサンプルごとに 2 つの負のサンプルが内部で生成されます。トレーニング中に負のサンプルを生成または使用しない場合は、値を 0 に設定します。 **オプション** 有効な値: 0 ≤ 整数 デフォルト値: 0 (オフ)  | 
| num\$1classes |  分類トレーニングのクラス数。Amazon SageMaker AI では、回帰問題のこのハイパーパラメータは無視されます。 **オプション** 有効な値: 2 ≤ 整数 ≤ 30 デフォルト値: 2  | 
| optimizer |  オプティマイザのタイプ。 **オプション** 有効な値: `adadelta`、`adagrad`、`adam`、`sgd`、または `rmsprop`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `adam`  | 
| output\$1layer |  タスクが回帰または分類であると指定する出力レイヤーのタイプ。 **オプション** 有効な値: `softmax` または `mean_squared_error` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `softmax`  | 
| tied\$1token\$1embedding\$1weight |  両方のエンコーダーで共有埋め込みレイヤーを使用するかどうか。両方のエンコーダへの入力で同じトークンレベルのユニットを使用する場合は、共有トークン埋め込みレイヤーを使用します。たとえば、ドキュメントのコレクションで、1 つのエンコーダーでセンテンスをエンコードし、別のエンコーダーでドキュメント全体をエンコードする場合は、共有トークンの埋め込みレイヤーを使用できます。これは、ドキュメントとドキュメントのいずれも、同じ語彙からの単語トークンで構成されているためです。 **オプション** 有効な値: `True` または `False` デフォルト値: `False`  | 
| token\$1embedding\$1storage\$1type |  トレーニング中に使用されるグラデーション更新のモード: `dense` モードが使用されると、グラデーションのほとんどの行の値がゼロであっても、オプティマイザはトークン埋め込みレイヤーのフルグラデーションのマトリックスを計算します。`sparse` モードを使用すると、オプティマイザはミニバッチで実際に使用されているグラデーションの行のみを保存します。アルゴリズムで遅延グラデーション更新を実行して、ゼロ以外の行でのみグラデーションを計算し、トレーニングはスピードアップする場合は、`row_sparse` を指定します。次のように、値を `row_sparse` に設定すると、他のハイパーパラメータに使用できる値が制限されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) **オプション** 有効な値: `dense` または `row_sparse` デフォルト値: `dense`  | 
| weight\$1decay |  最適化に使用される重み減衰パラメータ。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 10000 デフォルト値: 0 (減衰なし)  | 

# Object2Vec モデルを調整する
<a name="object2vec-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。目標メトリクスで、アルゴリズムによって計算されるいずれかのメトリクスを使用します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## Object2Vec アルゴリズムで計算されるメトリクス
<a name="object2vec-metrics"></a>

Object2Vec アルゴリズムには、分類と回帰の両方のメトリクスがあります。`output_layer` タイプは、自動モデル調整に使用できるメトリクスを決定します。

### Object2Vec アルゴリズムで計算される回帰メトリクス
<a name="object2vec-regressor-metrics"></a>

アルゴリズムは、テスト中と検証中に計算された二乗平均誤差回帰メトリクスを報告します。回帰タスク用にモデルを調整するときには、このメトリクスを目標として選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:mean\$1squared\$1error | 平均平方根誤差 | 最小化 | 
| validation:mean\$1squared\$1error | 平均平方根誤差 | 最小化 | 

### Object2Vec アルゴリズムで計算される分類メトリクス
<a name="object2vec-classification-metrics"></a>

Object2Vec アルゴリズムは、テスト中と検証中に計算された精度および交差エントロピー分類メトリクスを報告します。分類タスクのモデルを調整するときには、目標としてこれらのいずれかを選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:accuracy | 正解率 | 最大化 | 
| test:cross\$1entropy | 交差エントロピー | 最小化 | 
| validation:accuracy | 正解率 | 最大化 | 
| validation:cross\$1entropy | 交差エントロピー | 最小化 | 

## 調整可能な Object2Vec ハイパーパラメータ
<a name="object2vec-tunable-hyperparameters"></a>

Object2Vec アルゴリズムの以下のハイパーパラメータを調整できます。


| ハイパーパラメータ名 | ハイパーパラメータタイプ | 推奨範囲と値 | 
| --- | --- | --- | 
| dropout | ContinuousParameterRange | MinValue: 0.0、MaxValue: 1.0 | 
| early\$1stopping\$1patience | IntegerParameterRange | MinValue: 1、MaxValue: 5 | 
| early\$1stopping\$1tolerance | ContinuousParameterRange | MinValue: 0.001、MaxValue: 0.1 | 
| enc\$1dim | IntegerParameterRange | MinValue: 4、MaxValue: 4096 | 
| enc0\$1cnn\$1filter\$1width | IntegerParameterRange | MinValue: 1、MaxValue: 5 | 
| enc0\$1layers | IntegerParameterRange | MinValue: 1、MaxValue: 4 | 
| enc0\$1token\$1embedding\$1dim | IntegerParameterRange | MinValue: 5、MaxValue: 300 | 
| enc1\$1cnn\$1filter\$1width | IntegerParameterRange | MinValue: 1、MaxValue: 5 | 
| enc1\$1layers | IntegerParameterRange | MinValue: 1、MaxValue: 4 | 
| enc1\$1token\$1embedding\$1dim | IntegerParameterRange | MinValue: 5、MaxValue: 300 | 
| epochs | IntegerParameterRange | MinValue: 4、MaxValue: 20 | 
| learning\$1rate | ContinuousParameterRange | MinValue: 1e-6、MaxValue: 1.0 | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 1、MaxValue: 8192 | 
| mlp\$1activation | CategoricalParameterRanges |  [`tanh`, `relu`, `linear`]  | 
| mlp\$1dim | IntegerParameterRange | MinValue: 16、MaxValue: 1024 | 
| mlp\$1layers | IntegerParameterRange | MinValue: 1、MaxValue: 4 | 
| optimizer | CategoricalParameterRanges | [`adagrad`, `adam`, `rmsprop`, `sgd`, `adadelta`] | 
| weight\$1decay | ContinuousParameterRange | MinValue: 0.0、MaxValue: 1.0 | 

# Object2Vec トレーニングのデータ形式
<a name="object2vec-training-formats"></a>

Object2Vec アルゴリズムでトレーニングする場合は、必ずリクエストの入力データに JSON Lines 形式を使用し、各行が単一のデータポイントを表すようにします。

## 入力: JSON Lines リクエスト形式
<a name="object2vec-in-training-data-jsonlines"></a>

Content-type: application/jsonlines

```
{"label": 0, "in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]}
{"label": 1, "in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]}
{"label": 1, "in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
```

「in0」と「in1」はそれぞれ、encoder0 と encoder1 の入力です。分類と回帰の両方の問題で同じ形式が有効です。回帰の場合、フィールド「`"label"`」は実数値の入力を受け入れることができます。

# Object2Vec 推論のデータ形式
<a name="object2vec-inference-formats"></a>

このページでは、Amazon SageMaker AI Object2Vec モデルからスコア推論を取得するための入力リクエストと出力レスポンスの形式について説明します。

## GPU 最適化: 分類または回帰
<a name="object2vec-inference-gpu-optimize-classification"></a>

GPU メモリ不足のため、`INFERENCE_PREFERRED_MODE` 環境変数を指定して、分類/回帰または [出力: エンコーダー埋め込み](object2vec-encoder-embeddings.md#object2vec-out-encoder-embeddings-data) 推論ネットワークが GPU にロードされるかどうかを最適化することができます。推論の大部分が分類または再帰を対象としている場合は、`INFERENCE_PREFERRED_MODE=classification` を指定します。以下は、分類/回帰推論を最適化する p3.2xlarge の 4 つのインスタンスを使用したバッチ変換の例です。

```
transformer = o2v.transformer(instance_count=4,
                              instance_type="ml.p2.xlarge",
                              max_concurrent_transforms=2,
                              max_payload=1,  # 1MB
                              strategy='MultiRecord',
                              env={'INFERENCE_PREFERRED_MODE': 'classification'},  # only useful with GPU
                              output_path=output_s3_path)
```

## 入力: 分類または回帰リクエストの形式
<a name="object2vec-in-inference-data"></a>

Content-type: application/json

```
{
  "instances" : [
    {"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]},
    {"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]},
    {"in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
  ]
}
```

Content-type: application/jsonlines

```
{"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]}
{"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]}
{"in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
```

分類問題の場合、スコアベクトルの長さは `num_classes` に対応します。回帰問題の場合、長さは 1 です。

## 出力: 分類または回帰リクエスト形式
<a name="object2vec-out-inference-data"></a>

Accept: application/json

```
{
    "predictions": [
        {
            "scores": [
                0.6533935070037842,
                0.07582679390907288,
                0.2707797586917877
            ]
        },
        {
            "scores": [
                0.026291321963071823,
                0.6577019095420837,
                0.31600672006607056
            ]
        }
    ]
}
```

Accept: application/jsonlines

```
{"scores":[0.195667684078216,0.395351558923721,0.408980727195739]}
{"scores":[0.251988261938095,0.258233487606048,0.489778339862823]}
{"scores":[0.280087798833847,0.368331134319305,0.351581096649169]}
```

分類形式と回帰形式の両方で、スコアは各ラベルに適用されます。

# Object2Vec のエンコーダー埋め込み
<a name="object2vec-encoder-embeddings"></a>

このページでは、Amazon SageMaker AI Object2Vec モデルからエンコーダー埋め込み推論を取得するための入力リクエストと出力レスポンスの形式を示します。

## GPU 最適化: エンコーダー埋め込み
<a name="object2vec-inference-gpu-optimize-encoder-embeddings"></a>

埋め込みとは、単語などの個別オブジェクトから実数のベクトルへのマッピングです。

GPU メモリ不足のため、`INFERENCE_PREFERRED_MODE` 環境変数を指定して [Object2Vec 推論のデータ形式](object2vec-inference-formats.md) またはエンコーダー埋め込みの推論ネットワークが GPU にロードされるかどうかを最適化するよう指定することができます。推論の大部分がエンコーダー埋め込み用である場合は、`INFERENCE_PREFERRED_MODE=embedding` を指定します。以下は、エンコーダー埋め込み推論を最適化する p3.2xlarge の 4 つのインスタンスを使用したバッチ変換の例です。

```
transformer = o2v.transformer(instance_count=4,
                              instance_type="ml.p2.xlarge",
                              max_concurrent_transforms=2,
                              max_payload=1,  # 1MB
                              strategy='MultiRecord',
                              env={'INFERENCE_PREFERRED_MODE': 'embedding'},  # only useful with GPU
                              output_path=output_s3_path)
```

## 入力: エンコーダー埋め込み
<a name="object2vec-in-encoder-embeddings-data"></a>

コンテンツタイプ: application/json; infer\$1max\$1seqlens=<FWD-LENGTH>,<BCK-LENGTH>

ここで <FWD-LENGTH> と <BCK-LENGTH> は [1,5000] の範囲の整数であり、前方エンコーダおよび後方エンコーダの最大シーケンス長を定義します。

```
{
  "instances" : [
    {"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4]},
    {"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4]},
    {"in0": [774, 14, 21, 206]}
  ]
}
```

コンテンツタイプ: application/jsonlines; infer\$1max\$1seqlens=<FWD-LENGTH>,<BCK-LENGTH>

ここで <FWD-LENGTH> と <BCK-LENGTH> は [1,5000] の範囲の整数であり、前方エンコーダおよび後方エンコーダの最大シーケンス長を定義します。

```
{"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4]}
{"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4]}
{"in0": [774, 14, 21, 206]}
```

どちらの形式でも、`“in0”` と `“in1.”` のいずれか 1 つの入力タイプのみを指定します。その後、推論サービスは対応するエンコーダーを呼び出し、インスタンスごとに埋め込みを出力します。

## 出力: エンコーダー埋め込み
<a name="object2vec-out-encoder-embeddings-data"></a>

Content-type: application/json

```
{
  "predictions": [
    {"embeddings":[0.057368703186511,0.030703511089086,0.099890425801277,0.063688032329082,0.026327300816774,0.003637571120634,0.021305780857801,0.004316598642617,0.0,0.003397724591195,0.0,0.000378780066967,0.0,0.0,0.0,0.007419463712722]},
    {"embeddings":[0.150190666317939,0.05145975202322,0.098204270005226,0.064249359071254,0.056249320507049,0.01513972133398,0.047553978860378,0.0,0.0,0.011533712036907,0.011472506448626,0.010696629062294,0.0,0.0,0.0,0.008508535102009]}
  ]
}
```

Content-type: application/jsonlines

```
{"embeddings":[0.057368703186511,0.030703511089086,0.099890425801277,0.063688032329082,0.026327300816774,0.003637571120634,0.021305780857801,0.004316598642617,0.0,0.003397724591195,0.0,0.000378780066967,0.0,0.0,0.0,0.007419463712722]}
{"embeddings":[0.150190666317939,0.05145975202322,0.098204270005226,0.064249359071254,0.056249320507049,0.01513972133398,0.047553978860378,0.0,0.0,0.011533712036907,0.011472506448626,0.010696629062294,0.0,0.0,0.0,0.008508535102009]}
```

推論サービスによって出力される埋め込みのベクトル長は、トレーニング時に指定するハイパーパラメータ `enc0_token_embedding_dim`、`enc1_token_embedding_dim`、または `enc_dim` の 1 つの値と等しくなります。

# Sequence to Sequence アルゴリズム
<a name="seq-2-seq"></a>

Amazon SageMaker AI Sequence to Sequence は、入力が一連のトークン (テキスト、オーディオなど) であり、生成される出力が別の一連のトークンである、教師あり学習アルゴリズムです。アプリケーションの例として、機械学習 (1 つの言語で入力した文が別の言語でどうなるかを予測する)、テキスト要約 (入力した長い文字列のより短い文字列での要約を予測する)、音声認識 (トークンの出力文に変換したオーディオクリップ) が含まれます。近年、このドメインの問題はディープニューラルネットワークによってモデル化に成功し、以前の方式を大幅に超えるパフォーマンスを示しています。Amazon SageMaker AI seq2seq は再帰型ニューラルネットワーク (RNN) モデルと畳み込みニューラルネットワーク (CNN) モデルにアテンションを組み合わせたエンコーダーデコーダーアーキテクチャを使用します。

**Topics**
+ [Sequence to Sequence アルゴリズムの入出力インターフェイス](#s2s-inputoutput)
+ [Sequence to Sequence アルゴリズムの EC2 インスタンスに関する推奨事項](#s2s-instances)
+ [Sequence to Sequence サンプルノートブック](#seq-2-seq-sample-notebooks)
+ [Sequence to Sequence の仕組み](seq-2-seq-howitworks.md)
+ [Sequence to Sequence ハイパーパラメータ](seq-2-seq-hyperparameters.md)
+ [Sequence to Sequence モデルを調整する](seq-2-seq-tuning.md)

## Sequence to Sequence アルゴリズムの入出力インターフェイス
<a name="s2s-inputoutput"></a>

**トレーニング**

SageMaker AI seq2seq は、RecordIO-Protobuf 形式のデータを想定します。ただし、通常の場合と同様に、トークンは浮動小数点ではなく整数であることが想定されます。

[seq2seq サンプルノートブック](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/seq2seq_translation_en-de/SageMaker-Seq2Seq-Translation-English-German.html)に、トークン化されたテキストファイルからのデータを protobuf 形式に変換するスクリプトが含まれています。一般的には、データを 32 ビットの整数テンソルにパッキングし、メトリクスの計算や推論に必要な語彙ファイルを生成します。

前処理の完了後、アルゴリズムをトレーニングのために呼び出すことができます。アルゴリズムは以下の 3 つのチャネルを想定します。
+ `train`: トレーニングデータ (事前処理スクリプトによって生成される `train.rec` ファイルなど) が含まれている必要があります。
+ `validation`: 検証データ (事前処理スクリプトによって生成される `val.rec` ファイルなど) が含まれている必要があります。
+ `vocab`: 2 つの語彙ファイル (`vocab.src.json` と `vocab.trg.json`) が含まれている必要があります 

アルゴリズムによってこれらの 3 つのチャネルでデータが見つからなかった場合、トレーニングの結果はエラーになります。

**推論**

ホストされるエンドポイントの場合、推論は 2 つのデータ形式をサポートします。スペース区切りのテキストトークンを使用して推論を実行するには、`application/json` 形式を使用します。それ以外の場合は、`recordio-protobuf` 形式を使用して整数にエンコードされたデータを処理します。どちらのモードも入力データのバッチ処理をサポートしています。`application/json` 形式では、アテンション行列を視覚化することもできます。
+ `application/json`: 入力を JSON 形式で要求し、出力を JSON 形式で返します。コンテンツタイプと受け取りタイプは両方とも `application/json` である必要があります。各シーケンスは空白で区切られたトークンの文字列であることが要求されます。この形式は、バッチ内のソースシーケンスの数が少ないときに推奨されます。また、次の追加の設定オプションにも対応しています。

  `configuration`: \$1`attention_matrix`: `true`\$1: 特定の入力シーケンスについてアテンション行列を返します。
+ `application/x-recordio-protobuf`: 入力を `recordio-protobuf` 形式で要求し、出力を `recordio-protobuf format` 形式で返します。コンテンツタイプと受け取りタイプは両方とも `applications/x-recordio-protobuf` である必要があります。この形式では、後続のプロトコルバッファーへのエンコードのために、ソースシーケンスを整数のリストに変換する必要があります。この形式は、一括での推論に推奨されます。

バッチ変換の場合、推論は JSON Lines 形式をサポートします。バッチ変換は、JSON Lines 形式の入力を想定し、JSON Lines 形式の出力を返します。コンテンツタイプと受け取りタイプは両方とも `application/jsonlines` である必要があります。入力の形式は次のとおりです。

```
content-type: application/jsonlines

{"source": "source_sequence_0"}
{"source": "source_sequence_1"}
```

レスポンスの形式は次のとおりです。

```
accept: application/jsonlines

{"target": "predicted_sequence_0"}
{"target": "predicted_sequence_1"}
```

推論のために入力と出力を特定の形式にシリアル化および逆シリアル化する方法の詳細については、[Sequence to Sequence サンプルノートブック](#seq-2-seq-sample-notebooks)を参照してください。

## Sequence to Sequence アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="s2s-instances"></a>

Amazon SageMaker AI seq2seq アルゴリズムは、GPU インスタンスタイプでのみサポートし、単一のマシンでのトレーニングできます。ただし、複数の GPU を備えたインスタンスを使用することができます。seq2seq アルゴリズムは P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

## Sequence to Sequence サンプルノートブック
<a name="seq-2-seq-sample-notebooks"></a>

SageMaker AI Sequence to Sequence アルゴリズムを使用して英語 - ドイツ語翻訳モデルをトレーニングする方法を示すサンプルノートブックについては、「[Machine Translation English-German Example Using SageMaker AI Seq2Seq](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/seq2seq_translation_en-de/SageMaker-Seq2Seq-Translation-English-German.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# Sequence to Sequence の仕組み
<a name="seq-2-seq-howitworks"></a>

通常、sequence-to-sequence モデリングのニューラルネットワークは、次のようなレイヤーで構成されます。
+ **埋め込みレイヤー**。このレイヤーでは、希薄な方法 (one-hot エンコードなど) でエンコードされた入力トークンである入力行列が、高密度の特徴レイヤーにマッピングされます。高次元の特徴ベクトルは、特定のトークンに関して、単純な one-hot エンコードされたベクトルよりも情報をエンコードできるため、必須です。また、標準的な方法として、この埋め込みレイヤーを事前にトレーニングを行った [FastText](https://fasttext.cc/) や [Glove](https://nlp.stanford.edu/projects/glove/) などの言語ベクトルを使用して初期化する、またはトレーニング中にそれをランダムに初期化してパラメータを学習する方法も挙げられます。
+ **エンコーダーレイヤー**。入力トークンを高密度の特徴スペースにマッピングした後、シーケンスはエンコーダーレイヤーを移行して、(全シーケンスの) 入力埋め込みレイヤーからのすべての情報を固定長の特徴ベクトルに圧縮します。通常、エンコーダーは長・短期記憶 (LSTM) やゲート付き再帰型ユニット (GRU) などの RNN タイプのネットワークで作成されます (LSTM の詳細については、[Colah のブログ](http://colah.github.io/posts/2015-08-Understanding-LSTMs/)を参考にしてください)。
+ **デコーダーレイヤー**。デコーダーレイヤーはこのエンコードされた特徴ベクトルを取得し、トークンの出力シーケンスを生成します。また、このレイヤーは通常、RNN アーキテクチャ (LSTM と GRU) で構成されます。

モデル全体が共同でトレーニングが行われ、ソースシーケンスが指定されたターゲットシーケンスの可能性を最大化します。このモデルは、2014 年に [Sutskever ら](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf)によって最初に導入されました。

**アテンション機構**。エンコーダーデコーダーフレームワークの欠点は、エンコードされた固定長の特徴ベクトルに含めることのできる情報の量には制限があるため、ソースシーケンスの長さが増えるたびにモデルのパフォーマンスが減少する点です。この問題に取り組むために、Bahdanau らは 2015 年に[アテンション機構](https://arxiv.org/pdf/1409.0473.pdf)を提案しました。アテンション機構では、デコーダーが最も重要な情報が存在する可能性があるエンコーダーシーケンス内の場所の検索を試行し、その情報と以前にデコードした単語を使用して、シーケンス内の次のトークンを予測します。

詳細については、Luong らによるホワイトペーパー [Effective Approaches to Attention-based Neural Machine Translation (アテンションに基づくニューラル機械翻訳の効果的なアプローチ)](https://arxiv.org/abs/1508.04025) を参照してください。さらに、Wu らによるホワイトペーパー [Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (Google のニューラル機械翻訳システム: 人間と機械翻訳の間での橋渡し)](https://arxiv.org/abs/1609.08144) では、Google の機械翻訳のアーキテクチャーについて説明しています。

# Sequence to Sequence ハイパーパラメータ
<a name="seq-2-seq-hyperparameters"></a>

次の表に、Amazon SageMaker AI Sequence-to-Sequence (seq2seq) アルゴリズムでトレーニングするときに設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| batch\$1size | 勾配降下のミニバッチサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 64 | 
| beam\$1size | ビームサーチのビームの長さ。トレーニング中に `bleu` の計算に使用され、推論中に使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 5 | 
| bleu\$1sample\$1size | トレーニング中に `bleu` スコアをデコードして計算するために検証データセットから選択するインスタンスの数。完全な検証セットを使用するには -1 に設定します (`bleu` が `optimized_metric` として選択されている場合)。 **オプション** 有効な値: 整数 デフォルト値: 0 | 
| bucket\$1width | (source,target) バケットを最大で (`max_seq_len_source`,`max_seq_len_target`) で返します。より長い側のデータは `bucket_width` のステップを使用し、短い側はターゲット/ソースの長さの平均比でスケールダウンしたステップを使用します。一方の側が他方より先に最大長に達した場合、その側の余分なバケットの幅はその側の `max_len` に固定されます。 **オプション** 有効な値: 正の整数 デフォルト値: 10 | 
| bucketing\$1enabled | バケットを無効にし、最大長に展開するには、`false` に設定します。 **オプション** 有効な値: `true` または `false` デフォルト値: `true` | 
| checkpoint\$1frequency\$1num\$1batches | x バッチごとにチェックポイントと評価を行います。このチェックポイントハイパーパラメータは SageMaker AI の seq2seq アルゴリズムに渡され、最適なモデルを早期停止して取得できます。アルゴリズムのチェックポイントは、アルゴリズムのトレーニングコンテナ内でローカルで実行され、SageMaker AI チェックポイントとは互換性がありません。アルゴリズムは、一時的にチェックポイントをローカルパスに保存し、トレーニングジョブが停止した後、最適なモデルアーティファクトを S3 のモデル出力パスに保存します。 **オプション** 有効な値: 正の整数 デフォルト値: 1000 | 
| checkpoint\$1threshold | トレーニングが停止する前に検証データセット上の `optimized_metric` で改善しないように許可されたモデルのチェックポイントの最大数。このチェックポイントハイパーパラメータは SageMaker AI の seq2seq アルゴリズムに渡され、最適なモデルを早期停止して取得できます。アルゴリズムのチェックポイントは、アルゴリズムのトレーニングコンテナ内でローカルで実行され、SageMaker AI チェックポイントとは互換性がありません。アルゴリズムは、一時的にチェックポイントをローカルパスに保存し、トレーニングジョブが停止した後、最適なモデルアーティファクトを S3 のモデル出力パスに保存します。 **オプション** 有効な値: 正の整数 デフォルト値： 3 | 
| clip\$1gradient | これより大きなクリップのグラデーション絶対値。無効にするには、負の値に設定します。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1 | 
| cnn\$1activation\$1type | 使用される `cnn` のアクティベーションタイプ。 **オプション** 有効な値： 文字列。`glu`、`relu`、`softrelu`、`sigmoid`、`tanh` のいずれか。 デフォルト値: `glu` | 
| cnn\$1hidden\$1dropout | 畳み込みレイヤー間のドロップアウトのドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| cnn\$1kernel\$1width\$1decoder | `cnn` デコーダーのカーネル幅。 **オプション** 有効な値: 正の整数 デフォルト値: 5 | 
| cnn\$1kernel\$1width\$1encoder | `cnn` エンコーダーのカーネル幅。 **オプション** 有効な値: 正の整数 デフォルト値： 3 | 
| cnn\$1num\$1hidden | エンコーダーやデコーダーの `cnn` の非表示ユニットの数。 **オプション** 有効な値: 正の整数 デフォルト値: 512 | 
| decoder\$1type | デコーダーの種類。 **オプション** 有効な値： 文字列。`rnn` または `cnn` です。 デフォルト値: *rnn* | 
| embed\$1dropout\$1source | ソース側の埋め込みのドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| embed\$1dropout\$1target | ターゲット側の埋め込みのドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| encoder\$1type | エンコーダーの種類。`rnn` アーキテクチャーは Bahdanau らによるアテンション機構に基づいており、*cnn* アーキテクチャーは Gehring らに基づいています。 **オプション** 有効な値： 文字列。`rnn` または `cnn` です。 デフォルト値: `rnn` | 
| fixed\$1rate\$1lr\$1half\$1life | `fixed_rate_`\$1 のスケジューラのチェックポイント数に関する学習レートの半減期。 **オプション** 有効な値: 正の整数 デフォルト値: 10 | 
| learning\$1rate | 初期学習レート。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.0003 | 
| loss\$1type | トレーニングの損失関数。 **オプション** 有効な値: 文字列。 `cross-entropy` デフォルト値: `cross-entropy` | 
| lr\$1scheduler\$1type | 学習レートスケジューラタイプ。`plateau_reduce` は、`validation_accuracy` の `optimized_metric` がプラトーに達するたびに学習レートを下げることを意味します。`inv_t` は逆時間減衰です。`learning_rate`/(1\$1`decay_rate`\$1t) **オプション** 有効な値： 文字列。`plateau_reduce`、`fixed_rate_inv_t`、`fixed_rate_inv_sqrt_t` のいずれか 1 つ。 デフォルト値: `plateau_reduce` | 
| max\$1num\$1batches | 処理する更新/バッチの最大数。無限の場合は -1。 **オプション** 有効な値: 整数 デフォルト値: -1 | 
| max\$1num\$1epochs | フィッティングが停止する前にトレーニングデータを移行するエポックの最大数。このパラメータが渡された場合に検証の正確性が改善しない場合でも、トレーニングはエポックがこの数に達するまで続行されます。渡されない場合は無視されます。 **オプション** 有効な値: max\$1num\$1epochs 以下の正の整数。 デフォルト値: なし | 
| max\$1seq\$1len\$1source | ソースシーケンスの長さの最大長。この長さより長いシーケンスはこの長さに切り捨てられます。 **オプション** 有効な値: 正の整数 デフォルト値: 100  | 
| max\$1seq\$1len\$1target | ターゲットシーケンスの長さの最大長。この長さより長いシーケンスはこの長さに切り捨てられます。 **オプション** 有効な値: 正の整数 デフォルト値: 100 | 
| min\$1num\$1epochs | トレーニングが `early_stopping` 条件に従って停止されるまでに実行する必要のあるエポックの最小数。 **オプション** 有効な値: 正の整数 デフォルト値: 0 | 
| momentum | `sgd` に使用されるモーメンタム定数。`adam` または `rmsprop` を使用している場合は、このパラメータを渡さないでください。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし | 
| num\$1embed\$1source | ソーストークンの埋め込みサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 512 | 
| num\$1embed\$1target | ターゲットトークンの埋め込みサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 512 | 
| num\$1layers\$1decoder | デコーダー *rnn* または *cnn* のレイヤーの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1 | 
| num\$1layers\$1encoder | エンコーダー `rnn` または `cnn` のレイヤーの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1 | 
| optimized\$1metric | 早期停止を最適化するメトリクス。 **オプション** 有効な値： 文字列。`perplexity`、`accuracy`、`bleu` のいずれか 1 つ。 デフォルト値: `perplexity` | 
| optimizer\$1type | 選択するオプティマイザー。 **オプション** 有効な値： 文字列。`adam`、`sgd`、`rmsprop` のいずれか 1 つ。 デフォルト値: `adam` | 
| plateau\$1reduce\$1lr\$1factor | 学習レートを乗算する係数 (`plateau_reduce` の場合)。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.5 | 
| plateau\$1reduce\$1lr\$1threshold | `plateau_reduce` スケジューラでは、`optimized_metric` がこの数のチェックポイントを改善しなかった場合、学習レートに減衰係数を乗算します。 **オプション** 有効な値: 正の整数 デフォルト値： 3 | 
| rnn\$1attention\$1in\$1upper\$1layers | Google NMT のペーパーのように、アテンションを *rnn* の上位レイヤーに渡します。複数のレイヤーが使用されている場合にのみ適用できます。 **オプション** 有効な値: ブール値 (`true` または `false`) デフォルト値: `true` | 
| rnn\$1attention\$1num\$1hidden | アテンションレイヤーの非表示ユニットの数。デフォルトは `rnn_num_hidden` です。 **オプション** 有効な値: 正の整数 デフォルト値: `rnn_num_hidden` | 
| rnn\$1attention\$1type | エンコーダーのアテンションモデル。Luong らのペーパーによると、`mlp` は concat を参照し、bilinear は general を参照します。 **オプション** 有効な値： 文字列。`dot`、`fixed`、`mlp`、`bilinear` のいずれか。 デフォルト値: `mlp` | 
| rnn\$1cell\$1type | 特定のタイプの `rnn` アーキテクチャー。 **オプション** 有効な値： 文字列。`lstm` または `gru` です。 デフォルト値: `lstm` | 
| rnn\$1decoder\$1state\$1init | `rnn` デコーダーの状態をエンコーダーから初期化する方法。 **オプション** 有効な値： 文字列。`last`、`avg`、`zero` のいずれか 1 つ。 デフォルト値: `last` | 
| rnn\$1first\$1residual\$1layer | 残差接続がある最初の *rnn* レイヤー、エンコーダーまたはデコーダー内のレイヤーの数が 1 を超える場合にのみ適用可能。 **オプション** 有効な値: 正の整数 デフォルト値: 2 | 
| rnn\$1num\$1hidden | エンコーダーおよびデコーダーの *rnn* の非表示ユニットの数。このアルゴリズムはデフォルトで双方向の長短期記憶 (LSTM) を使用するため、これは 2 の倍数である必要があります。 **オプション** 有効な値: 正の偶数 デフォルト値: 1024 | 
| rnn\$1residual\$1connections | 多層 *rnn* に残差接続を追加する。レイヤーの数は 1 を超える必要があります。 **オプション** 有効な値: ブール値 (`true` または `false`) デフォルト値: `false` | 
| rnn\$1decoder\$1hidden\$1dropout | コンテキストをデコーダーの *rnn* の非表示状態を組み合わせる、非表示状態のドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| training\$1metric | 検証データ上のトレーニングを追跡するメトリクス。 **オプション** 有効な値： 文字列。`perplexity` または `accuracy` です。 デフォルト値: `perplexity` | 
| weight\$1decay | 重み減衰定数。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0 | 
| weight\$1init\$1scale | 重み初期化方法のスケール (初期化方法が `uniform` および `xavier` の場合)。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 2.34 | 
| weight\$1init\$1type | 重み初期化方法の種類。 **オプション** 有効な値： 文字列。`uniform` または `xavier` です。 デフォルト値: `xavier` | 
| xavier\$1factor\$1type | Xavier の係数タイプ。 **オプション** 有効な値： 文字列。`in`、`out`、`avg` のいずれか 1 つ。 デフォルト値: `in` | 

# Sequence to Sequence モデルを調整する
<a name="seq-2-seq-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## Sequence to Sequence アルゴリズムで計算されるメトリクス
<a name="seq-2-seq-metrics"></a>

Sequence to Sequence アルゴリズムは、トレーニング中に計算される 3 つのメトリクスを報告します。ハイパーパラメータ値を調整するときに最適化する目標として、いずれか 1 つを選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:accuracy |  検証データセットで計算される精度。  |  最大化  | 
| validation:bleu |  検証データセットで計算される [BLEU](https://en.wikipedia.org/wiki/BLEU) スコア。BLEU の計算は高価であるため、検証データセットのランダムなサブサンプルに対して BLEU を計算するように選択すると、全体的なトレーニングプロセスを加速することができます。サブサンプルを指定するには、`bleu_sample_size` パラメータを使用します。  |  最大化  | 
| validation:perplexity |  [Perplexity](https://en.wikipedia.org/wiki/Perplexity) は、検証データセットで計算される損失関数です。Perplexity は、経験的サンプルとモデル予測の分布との間の交差エントロピーを測定するため、モデルがサンプル値をどの程度予測できるかの尺度を提供します。サンプルの予測に優れたモデルは、Perplexity が低くなります。  |  最小化  | 

## Sequence to Sequence ハイパーパラメータを調整する
<a name="seq-2-seq-tunable-hyperparameters"></a>

SageMaker AI Sequence to Sequence アルゴリズムの次のハイパーパラメータを調整できます。Sequence to Sequence の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`batch_size`、`optimizer_type`、`learning_rate`、`num_layers_encoder`、および `num_layers_decoder` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| num\$1layers\$1encoder |  IntegerParameterRange  |  [1-10]  | 
| num\$1layers\$1decoder |  IntegerParameterRange  |  [1-10]  | 
| batch\$1size |  CategoricalParameterRange  |  [16,32,64,128,256,512,1024,2048]  | 
| optimizer\$1type |  CategoricalParameterRange  |  ['adam', 'sgd', 'rmsprop']  | 
| weight\$1init\$1type |  CategoricalParameterRange  |  ['xavier', 'uniform']  | 
| weight\$1init\$1scale |  ContinuousParameterRange  |  xavier タイプの場合: MinValue: 2.0、MaxValue: 3.0、uniform タイプの場合: MinValue: -1.0、MaxValue: 1.0  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 0.00005、MaxValue: 0.2  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.1  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.5、MaxValue: 0.9  | 
| clip\$1gradient |  ContinuousParameterRange  |  MinValue: 1.0、MaxValue: 5.0  | 
| rnn\$1num\$1hidden |  CategoricalParameterRange  |  再帰型ニューラルネットワーク (RNN) にのみ適用できます。[128,256,512,1024,2048]   | 
| cnn\$1num\$1hidden |  CategoricalParameterRange  |  畳み込みニューラルネットワーク (CNN) にのみ適用できます。[128,256,512,1024,2048]   | 
| num\$1embed\$1source |  IntegerParameterRange  |  [256-512]  | 
| num\$1embed\$1target |  IntegerParameterRange  |  [256-512]  | 
| embed\$1dropout\$1source |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| embed\$1dropout\$1target |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| rnn\$1decoder\$1hidden\$1dropout |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| cnn\$1hidden\$1dropout |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| lr\$1scheduler\$1type |  CategoricalParameterRange  |  ['plateau\$1reduce', 'fixed\$1rate\$1inv\$1t', 'fixed\$1rate\$1inv\$1sqrt\$1t']  | 
| plateau\$1reduce\$1lr\$1factor |  ContinuousParameterRange  |  MinValue: 0.1、MaxValue: 0.5  | 
| plateau\$1reduce\$1lr\$1threshold |  IntegerParameterRange  |  [1-5]  | 
| fixed\$1rate\$1lr\$1half\$1life |  IntegerParameterRange  |  [10-30]  | 

# テキスト分類 - TensorFlow
<a name="text-classification-tensorflow"></a>

Amazon SageMaker AI テキスト分類 - TensorFlow アルゴリズムは、[TensorFlow ハブ](https://tfhub.dev/)の多くの事前トレーニング済みモデルによる転移学習をサポートする教師あり学習アルゴリズムです。大量のテキストデータが使用可能でない場合でも、転移学習を使用して、使用可能な事前トレーニング済みモデルのいずれかを独自のデータセットで微調整できます。テキスト分類アルゴリズムは、テキスト文字列を入力として受け取り、各クラスラベルの確率を出力します。トレーニングデータセットは CSV 形式である必要があります。このページには、テキスト分類 - TensorFlow の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

**Topics**
+ [SageMaker AI テキスト分類の使用方法 - TensorFlow アルゴリズム](text-classification-tensorflow-how-to-use.md)
+ [テキスト分類 - TensorFlow アルゴリズムの入出力インターフェイス](text-classification-tensorflow-inputoutput.md)
+ [テキスト分類 - TensorFlow アルゴリズムの Amazon EC2 インスタンスの推奨事項](#text-classification-tensorflow-instances)
+ [テキスト分類 - TensorFlow サンプルノートブック](#text-classification-tensorflow-sample-notebooks)
+ [テキスト分類 - TensorFlow の仕組み](text-classification-tensorflow-HowItWorks.md)
+ [TensorFlow ハブモデル](text-classification-tensorflow-Models.md)
+ [テキスト分類 - TensorFlow ハイパーパラメータ](text-classification-tensorflow-Hyperparameter.md)
+ [テキスト分類 - TensorFlow モデルの調整](text-classification-tensorflow-tuning.md)

# SageMaker AI テキスト分類の使用方法 - TensorFlow アルゴリズム
<a name="text-classification-tensorflow-how-to-use"></a>

テキスト分類 - TensorFlow は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker AI Python SDK でテキスト分類 - TensorFlow を使用する方法について説明します。Amazon SageMaker Studio Classic UI からテキスト分類 - TensorFlow を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。

テキスト分類 - TensorFlow アルゴリズムは、互換性のある事前トレーニング済み TensorFlow モデルのいずれかを使用した転移学習をサポートしています。使用可能なすべての事前トレーニング済みモデルのリストについては、「[TensorFlow ハブモデル](text-classification-tensorflow-Models.md)」を参照してください。すべての事前トレーニング済みモデルには一意の `model_id` があります。次の例では、BERT Base Uncased (`model_id`: `tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2`) を使用してカスタムデータセットを微調整しています。事前トレーニング済みモデルはすべて TensorFlow ハブ から事前にダウンロードされ、Amazon S3 バケットに保存されているため、トレーニングジョブはネットワーク分離状態で実行できます。事前に生成されたこれらのモデルトレーニングアーティファクトを使用して SageMaker AI 推定器を構築します。

まず、Docker イメージ URI、トレーニングスクリプト URI、および事前トレーニング済みのモデル URI を取得します。次に、必要に応じてハイパーパラメータを変更します。使用可能なすべてのハイパーパラメータとそのデフォルト値の Python ディクショナリは、`hyperparameters.retrieve_default` で確認できます。詳細については、「[テキスト分類 - TensorFlow ハイパーパラメータ](text-classification-tensorflow-Hyperparameter.md)」を参照してください。これらの値を使用して SageMaker AI 推定器を構築します。

**注記**  
デフォルトのハイパーパラメータ値はモデルによって異なります。例えば、モデルが大きいほど、既定のバッチサイズは小さくなります。

この例では、肯定的および否定的な映画レビューを含む [https://www.tensorflow.org/datasets/catalog/glue#gluesst2](https://www.tensorflow.org/datasets/catalog/glue#gluesst2) データセットを使用しています。データセットを事前にダウンロードして、Amazon S3 で使用できるようにしてあります。モデルを微調整するには、トレーニングデータセットの Amazon S3 の場所を使用して `.fit` を呼び出します。ノートブックで使用する S3 バケットは、それにアクセスするノートブックインスタンスと同じ AWS リージョンに存在する必要があります。

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyperparameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/SST2/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tc-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create an Estimator instance
tf_tc_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Launch a training job
tf_tc_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

カスタムデータセットの転移学習に SageMaker テキスト分類 - TensorFlow アルゴリズムを使用する方法の詳細については、「[Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb)」ノートブックを参照してください。

# テキスト分類 - TensorFlow アルゴリズムの入出力インターフェイス
<a name="text-classification-tensorflow-inputoutput"></a>

TensorFlow ハブモデルに一覧表示されている事前トレーニング済みモデルはそれぞれ、任意の数のクラスを持つテキスト文で構成されるデータセットに合わせて微調整できます。事前トレーニング済みモデルは分類レイヤーをテキスト埋め込みモデルにアタッチし、レイヤーパラメータをランダム値に初期化します。分類レイヤーの出力次元は、入力データで検出されたクラスの数に基づいて決定されます。

テキスト分類 - TensorFlow モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。
+ **トレーニングデータの入力形式:** `data.csv` ファイルを含むディレクトリ。最初の列の各行は、0 からクラス数の間の整数のクラスラベルを含んでいる必要があります。2 列目の各行は、対応するテキストデータを含んでいる必要があります。

入力 CSV ファイルの例を次に示します。ファイルにはヘッダーを含めないことにご注意ください。ファイルは、次のようなパスの Amazon S3 バケットでホストされている必要があります。`s3://bucket_name/input_directory/`。末尾の `/` は必須であることにご注意ください。

```
|   |  |
|---|---|
|0 |hide new secretions from the parental units|
|0 |contains no wit , only labored gags|
|1 |that loves its characters and communicates something rather beautiful about human nature|
|...|...|
```

## 段階的トレーニング
<a name="text-classification-tensorflow-incremental-training"></a>

以前に SageMaker AI でトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。

**注記**  
SageMaker AI テキスト分類 - TensorFlow モデルは、SageMaker AI でトレーニングされた別のテキスト分類 - TensorFlow モデルを使用してのみシードできます。

一連のクラスが同じままである限り、任意のデータセットを段階的トレーニングに使用できます。段階的トレーニングのステップは微調整のステップと同様ですが、事前トレーニング済みモデルから始める代わりに、既存の微調整済みモデルから始めます。

SageMaker AI テキスト分類 - TensorFlow アルゴリズムを使用した段階的トレーニングの使用の詳細については、「[Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb)」サンプルノートブックを参照してください。

## テキスト分類 - TensorFlow アルゴリズムによる推論
<a name="text-classification-tensorflow-inference"></a>

TensorFlow テキスト分類トレーニングの結果として生じる微調整済みモデルを推論のためにホストすることができます。推論用の未加工テキストの形式はすべて、コンテンツタイプ `application/x-text` でなければなりません。

推論を実行すると、確率値、すべてのクラスのクラスラベル、および確率が最も高いクラスインデックスに対応する予測ラベルが JSON 形式にエンコードされて得られます。テキスト分類 - TensorFlow モデルは、リクエストごとに単一の文字列を処理し、1 行だけを出力します。JSON 形式のレスポンスの例を次に示します。

```
accept: application/json;verbose

{"probabilities": [prob_0, prob_1, prob_2, ...],
"labels": [label_0, label_1, label_2, ...],
"predicted_label": predicted_label}
```

`application/json` に `accept` が設定されている場合、モデルは確率のみを出力します。

## テキスト分類 - TensorFlow アルゴリズムの Amazon EC2 インスタンスの推奨事項
<a name="text-classification-tensorflow-instances"></a>

テキスト分類 - TensorFlow アルゴリズムは、次を含むすべてのトレーニング用 CPU および GPU インスタンスをサポートします。
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`
+ `ml.g4dn.xlarge`
+ `ml.g4dn.16.xlarge`
+ `ml.g5.xlarge`
+ `ml.g5.48xlarge`

大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスをお勧めします。CPU (M5 など) インスタンスと GPU (P2、P3、G4Dn、または G5) インスタンスの両方を推論に使用できます。 AWS リージョン間の SageMaker トレーニングインスタンスと推論インスタンスの包括的なリストについては、[Amazon SageMakerの料金](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

## テキスト分類 - TensorFlow サンプルノートブック
<a name="text-classification-tensorflow-sample-notebooks"></a>

カスタムデータセットの転移学習に SageMaker AI テキスト分類 - TensorFlow アルゴリズムを使用する方法の詳細については、「[Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb)」ノートブックを参照してください。

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# テキスト分類 - TensorFlow の仕組み
<a name="text-classification-tensorflow-HowItWorks"></a>

テキスト分類 - TensorFlow アルゴリズムは、テキストを受け取り、1 つの出力クラスラベルに分類します。テキスト分類において [BERT](https://arxiv.org/pdf/1810.04805.pdf) などの深層学習ネットワークは高精度です。また、TextNet など、大規模なテキストデータセットでトレーニングされた深層学習ネットワークもあり、約 11,000 のカテゴリで 1,100 万以上のテキストが格納されています。TextNet データでネットワークをトレーニングした後、特定のフォーカスを持つデータセットでネットワークを微調整し、より具体的なテキスト分類タスクを実行できます。Amazon SageMaker AI テキスト分類 - TensorFlow アルゴリズムは、TensorFlow ハブで使用可能な多くの事前トレーニング済みモデルでの転移学習をサポートします。

トレーニングデータ内のクラスラベルの数に応じて、選択した事前トレーニング済み TensorFlow モデルにテキスト分類レイヤーがアタッチされます。分類レイヤーは、ドロップアウトレイヤー、高密度レイヤー、2 ノルム正則化による全結合レイヤーで構成され、ランダムな重みで初期化されます。ドロップアウトレイヤーのドロップアウト率のハイパーパラメータ値と高密度レイヤーの L2 正則化係数は変更することができます。

ネットワーク全体 (事前トレーニング済みモデルを含む) の微調整、または新しいトレーニングデータの最上位の分類レイヤーだけの微調整のいずれかを実行できます。この転移学習の方法を使用すると、より小さなデータセットでのトレーニングが可能になります。

# TensorFlow ハブモデル
<a name="text-classification-tensorflow-Models"></a>

テキスト分類 - TensorFlow アルゴリズムによる転移学習には、次の事前トレーニング済みモデルが使用可能です。

次のモデルは、指定するデータセットにより、サイズ、モデルパラメータの数、トレーニング時間、および推定レイテンシーが大きく異なります。ユースケースに最適なモデルは、微調整するデータセットの複雑さや、トレーニング時間、推論レイテンシー、またはモデルの精度に関する要件によって異なります。


| モデル名 | `model_id` | ソース | 
| --- | --- | --- | 
|  BERT Base Uncased  | `tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/3) | 
|  BERT Base Cased  | `tensorflow-tc-bert-en-cased-L-12-H-768-A-12-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_cased_L-12_H-768_A-12/3) | 
|  BERT Base Multilingual Cased  | `tensorflow-tc-bert-multi-cased-L-12-H-768-A-12-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_multi_cased_L-12_H-768_A-12/3) | 
|  Small BERT L-2\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-128_A-2/1) | 
|  Small BERT L-2\$1H-256\$1A-4 | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-256_A-4/1) | 
|  Small BERT L-2\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-512_A-8/1) | 
|  Small BERT L-2\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-768_A-12/1) | 
|  Small BERT L-4\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-128_A-2/1) | 
|  Small BERT L-4\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-256_A-4/1) | 
|  Small BERT L-4\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-512_A-8/1) | 
|  Small BERT L-4\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-768_A-12/1) | 
|  Small BERT L-6\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-128_A-2/1) | 
|  Small BERT L-6\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-256_A-4/1) | 
|  Small BERT L-6\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-512_A-8/1) | 
|  Small BERT L-6\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-768_A-12/1) | 
|  Small BERT L-8\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-128_A-2/1) | 
|  Small BERT L-8\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-256_A-4/1) | 
|  Small BERT L-8\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1) | 
|  Small BERT L-8\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-768_A-12/1) | 
|  Small BERT L-10\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-128_A-2/1) | 
|  Small BERT L-10\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-256_A-4/1) | 
|  Small BERT L-10\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-512_A-8/1) | 
|  Small BERT L-10\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-768_A-12/1) | 
|  Small BERT L-12\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-128_A-2/1) | 
|  Small BERT L-12\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-256_A-4/1) | 
|  Small BERT L-12\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-512_A-8/1) | 
|  Small BERT L-12\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-768_A-12/1) | 
|  BERT Large Uncased  | `tensorflow-tc-bert-en-uncased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_uncased_L-24_H-1024_A-16/3) | 
|  BERT Large Cased  | `tensorflow-tc-bert-en-cased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_cased_L-24_H-1024_A-16/3) | 
|  BERT Large Uncased Whole Word Masking  | `tensorflow-tc-bert-en-wwm-uncased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_wwm_uncased_L-24_H-1024_A-16/3) | 
|  BERT Large Cased Whole Word Masking  | `tensorflow-tc-bert-en-wwm-cased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_wwm_cased_L-24_H-1024_A-16/3) | 
|  ALBERT Base  | `tensorflow-tc-albert-en-base` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/albert_en_base/2) | 
|  ELECTRA Small\$1\$1  | `tensorflow-tc-electra-small-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/electra_small/2) | 
|  ELECTRA Base  | `tensorflow-tc-electra-base-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/electra_base/2) | 
|  BERT Base Wikipedia and BooksCorpus  | `tensorflow-tc-experts-bert-wiki-books-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/experts/bert/wiki_books/2) | 
|  BERT Base MEDLINE/PubMed  | `tensorflow-tc-experts-bert-pubmed-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/experts/bert/pubmed/2) | 
|  トラッキングヘッド Base  | `tensorflow-tc-talking-heads-base` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/talkheads_ggelu_bert_en_base/1) | 
|  トラッキングヘッド Large  | `tensorflow-tc-talking-heads-large` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/talkheads_ggelu_bert_en_large/1) | 

# テキスト分類 - TensorFlow ハイパーパラメータ
<a name="text-classification-tensorflow-Hyperparameter"></a>

ハイパーパラメータは、機械学習モデルが学習を開始する前に設定されるパラメータです。Amazon SageMaker AI 組み込みオブジェクト検出 - TensorFlow アルゴリズムでは、次のハイパーパラメータがサポートされています。ハイパーパラメータのチューニングに関する詳細ついては、「[テキスト分類 - TensorFlow モデルの調整](text-classification-tensorflow-tuning.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| batch\$1size |  トレーニングのバッチサイズ。複数の GPU を使用するインスタンスのトレーニングでは、このバッチサイズは GPU 間で使用されます。 有効な値: 正の整数。 デフォルト値: `32`。  | 
| beta\$11 |  `"adam"` および `"adamw"` オプティマイザの beta1。最初のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| beta\$12 |  `"adam"` および `"adamw"` オプティマイザの beta2。2 番目のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.999`。  | 
| dropout\$1rate | 最上位の分類レイヤーのドロップアウトレイヤーのドロップアウト率。`reinitialize_top_layer` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.2` | 
| early\$1stopping |  `"True"` に設定すると、トレーニング中に早期停止ロジックを使用します。`"False"` の場合、早期停止は使用されません。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| early\$1stopping\$1min\$1delta | 改善と認定するのに必要な最小変化。early\$1stopping\$1min\$1delta の値より小さな絶対変化は、改善とは認定されません。early\$1stopping が "True" に設定されている場合にのみ使用されます。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.0`。 | 
| early\$1stopping\$1patience |  改善なしでトレーニングを継続できるエポック数。`early_stopping` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 正の整数。 デフォルト値: `5`。  | 
| epochs |  トレーニングエポックの数。 有効な値: 正の整数。 デフォルト値: `10`。  | 
| epsilon |  `"adam"`、`"rmsprop"`、`"adadelta"`、および `"adagrad"` オプティマイザのイプシロン。通常は、0 で除算されないように小さな値を設定します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `1e-7`。  | 
| initial\$1accumulator\$1value |  アキュムレータの開始値、または `"adagrad"` オプティマイザのパラメータごとのモーメンタム値。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.0001`。  | 
| learning\$1rate | オプティマイザの学習レート。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.001`。 | 
| momentum |  `"sgd"` および `"nesterov"` オプティマイザのモーメンタム。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| optimizer |  オプティマイザのタイプ。詳細については、TensorFlow ドキュメントの「[Optimizers](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)」を参照してください。 有効な値: 文字列、(`"adamw"`、`"adam"`、`"sgd"`、`"nesterov"`、`"rmsprop"`、` "adagrad"`、`"adadelta"`) のいずれか。 デフォルト値: `"adam"`。  | 
| regularizers\$1l2 |  分類レイヤーの高密度レイヤーの L2 正則化係数。`reinitialize_top_layer` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.0001`。  | 
| reinitialize\$1top\$1layer |  `"Auto"` に設定すると、微調整時に最上位の分類レイヤーパラメータが再初期化されます。段階的トレーニングの場合、`"True"` に設定されない限り、最上位の分類レイヤーのパラメータは再初期化されません。 有効な値: 文字列、(`"Auto"`、`"True"`、または `"False"`) のいずれかです。 デフォルト値: `"Auto"`。  | 
| rho |  `"adadelta"` および `"rmsprop"` オプティマイザの勾配の割引係数。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.95`。  | 
| train\$1only\$1on\$1top\$1layer |  `"True"` の場合、最上位の分類レイヤーパラメータのみ微調整されます。`"False"` の場合、すべてのモデルパラメータが微調整されます。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| validation\$1split\$1ratio |  ランダムに分割して検証データを作成するトレーニングデータの割合。検証データが `validation` チャネルを介して提供されていない場合にのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.2`。  | 
| warmup\$1steps\$1fraction |  ウォームアップとして学習レートが 0 から初期学習レートに増加する勾配更新ステップの合計数の割合。`adamw` オプティマイザでのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.1`。  | 

# テキスト分類 - TensorFlow モデルの調整
<a name="text-classification-tensorflow-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## テキスト分類 - TensorFlow アルゴリズムによって計算されたメトリクス
<a name="text-classification-tensorflow-metrics"></a>

次の表を参照して、テキスト分類 - TensorFlow アルゴリズムによって計算されるメトリクスを確認してください。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| validation:accuracy | 実行された予測の総数に対する正しい予測の数の比率。 | 最大化 | `val_accuracy=([0-9\\.]+)` | 

## 調整可能なテキスト分類 - TensorFlow ハイパーパラメータ
<a name="text-classification-tensorflow-tunable-hyperparameters"></a>

次のハイパーパラメータを使用してテキスト分類モデルを調整します。テキスト分類の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`batch_size`、`learning_rate`、および `optimizer` です。選択した `optimizer` に基づいて、`momentum`、`regularizers_l2`、`beta_1`、`beta_2`、および `eps` などのオプティマイザ関連のハイパーパラメータを調整します。例えば、`adamw` または `adam` が `optimizer` である場合にのみ `beta_1` と `beta_2` を使用します。

各 `optimizer` で使用されるハイパーパラメータの詳細については、「[テキスト分類 - TensorFlow ハイパーパラメータ](text-classification-tensorflow-Hyperparameter.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 4, MaxValue: 128 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8、MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['adamw', 'adam', 'sgd', 'rmsprop', 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| train\$1only\$1on\$1top\$1layer | CategoricalParameterRanges | ['True', 'False'] | 

# 時系列データ用の組み込み SageMaker AI アルゴリズム
<a name="algorithms-time-series"></a>

SageMaker AI は、製品の需要、サーバーの負荷、ウェブページのリクエストなどを予測するための時系列データの分析用に調整されたアルゴリズムを提供します。
+ [SageMaker AI DeepAR 予測アルゴリズムを使用する](deepar.md) - 予測アルゴリズムは、再帰型ニューラルネットワーク (RNN) を使用してスカラー (1 次元) 時系列を予測する教師あり学習アルゴリズム。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| DeepAR 予測 | トレーニングおよび (オプションで) テスト | ファイル | JSON Lines または Parquet | GPU または CPU | あり | 

# SageMaker AI DeepAR 予測アルゴリズムを使用する
<a name="deepar"></a>

Amazon SageMaker AI DeepAR 予測アルゴリズムは、再帰型ニューラルネットワーク (RNN) を使用してスカラー (1 次元) 時系列を予測するための、教師あり学習アルゴリズムです。自己回帰和分移動平均 (ARIMA) や指数平滑法 (ETS) などの古典的な予測方法は、単一のモデルを各時系列に適合させます。その後、そのモデルを使用して時系列から未来を外挿します。

ただし多くのアプリケーションでは、一連の横断的な単位にわたって同様の時系列が多数あります。たとえば、さまざまな商品に対する需要、サーバーの負荷、およびウェブページのリクエストを時系列でグループ化することができます。このタイプのアプリケーションでは、すべての時系列にわたって単一のモデルを共同でトレーニングすることにより、メリットを享受できます。DeepAR はこのアプローチを使用します。データセットに何百もの関連する時系列データが含まれている場合、DeepAR は標準の ARIMA や ETS メソッドよりも優れています。トレーニングしたモデルを使用して、トレーニングしたモデルと似た新しい時系列の予測を生成することもできます。

DeepAR アルゴリズムのトレーニング入力は、同一または同様のプロセスによって生成された、1 つまたは可能であればそれ以上の時系列 (`target`) です。この入力データセットに基づき、アルゴリズムではこのプロセスの近似値を学習するモデルをトレーニングし、それを使用してターゲットの時系列がどのように進化するかを予測します。必要に応じて、各ターゲット時系列を `cat` フィールドで指定された静的 (時系に依存しない) カテゴリ別の特徴のベクトルと、`dynamic_feat` フィールドで指定された動的 (時系に依存する) の時系列のベクトルと関連付けることができます。SageMaker AI は、トレーニングデータセットの各時系列からいくつかのトレーニング例をランダムにサンプリングすることによって DeepAR モデルをトレーニングします。各トレーニング例は、事前定義された固定長を持つ一対の隣接コンテキストと予測ウィンドウで構成されています。ネットワークがどの程度までの過去を遡れるかを制御するには、`context_length` ハイパーパラメータを使用します。ネットワークがどの程度までの未来を予測できるかを制御するには、`prediction_length` ハイパーパラメータを使用します。詳細については、「[DeepAR アルゴリズムの仕組み](deepar_how-it-works.md)」を参照してください。

**Topics**
+ [DeepAR アルゴリズムの入出力インターフェイス](#deepar-inputoutput)
+ [DeepAR アルゴリズム使用のベストプラクティス](#deepar_best_practices)
+ [DeepAR アルゴリズムの EC2 インスタンスの推奨事項](#deepar-instances)
+ [DeepAR サンプルノートブック](#deepar-sample-notebooks)
+ [DeepAR アルゴリズムの仕組み](deepar_how-it-works.md)
+ [DeepAR ハイパーパラメータ](deepar_hyperparameters.md)
+ [DeepAR モデルを調整する](deepar-tuning.md)
+ [DeepAR 推論の形式](deepar-in-formats.md)

## DeepAR アルゴリズムの入出力インターフェイス
<a name="deepar-inputoutput"></a>

DeepAR は、2 つのデータチャネルをサポートしています。必須の `train` チャネルは、トレーニングデータセットを表します。オプションの `test` チャネルは、アルゴリズムがトレーニング後にモデルの精度を評価するために使用するデータセットを表します。トレーニングデータセットとテストデータセットは [JSON Lines](http://jsonlines.org/) 形式で提供できます。ファイルは gzip 形式または [Parquet](https://parquet.apache.org/) 形式のものを指定できます。

トレーニングデータとテストデータのパスを指定するときには、単一のファイルまたは複数のファイルを含むディレクトリを指定できます。これらのファイルはサブディレクトリに保存されていても構いません。ディレクトリを指定すると、ピリオド (.) で始まるファイルと *\$1SUCCESS* という名前のファイルを除いて、ディレクトリ内のすべてのファイルが対応するチャネルの入力として使用されます。これにより、Spark ジョブによって生成された出力フォルダを DeepAR トレーニングジョブの入力チャネルとして直接使用できるようになります。

DeepAR モデルはデフォルトでは、指定された入力パスのファイル拡張子 (`.json`、`.json.gz`、または `.parquet`) から入力形式を判別します。パスの末尾がこれらの拡張子以外である場合、SDK for Python で形式を明示的に指定する必要があります。[s3\$1input](https://sagemaker.readthedocs.io/en/stable/session.html#sagemaker.session.s3_input) クラスの `content_type` パラメータを使用します。

入力ファイルのレコードには、以下のフィールドが含まれています。
+ `start` - `YYYY-MM-DD HH:MM:SS` 形式の文字列。開始タイムスタンプにタイムゾーン情報を含めることはできません。
+ `target` - 時系列を表す浮動小数点値または整数の配列。欠損値は、`null` リテラル、JSON の `"NaN"` 文字列、または Parquet の `nan` 浮動小数点値としてエンコードできます。
+ `dynamic_feat` (オプション) - カスタムの特徴の時系列 (動的特徴) のベクトルを表す、浮動小数点値または整数の配列の配列。このフィールドを設定した場合は、すべてのレコードに同じ数の内部配列 (同じ数の特徴時系列) が含まれている必要があります。さらに、各内部配列は、関連付けられている `target` 値と `prediction_length` と同じ長さにする必要があります。欠損値は特徴ではサポートされません。たとえば、ターゲットの時系列がさまざまな製品の需要を表す場合、関連付けられた `dynamic_feat` は、プロモーションが特定の商品に適用されたか (1) または適用されていないか (0) を示すブール時系列になります。

  ```
  {"start": ..., "target": [1, 5, 10, 2], "dynamic_feat": [[0, 1, 1, 0]]}
  ```
+ `cat` (オプション) - レコードが属するグループをエンコードするために使用できるカテゴリ別特徴の配列。カテゴリ別特徴は、0 から始まる正の整数のシーケンスとしてエンコードする必要があります。たとえば、カテゴリ別ドメイン \$1R, G, B\$1 は \$10, 1, 2\$1 としてエンコードできます。各カテゴリ別ドメインのすべての値が、トレーニングデータセット内で表されている必要があります。これは、DeepAR アルゴリズムが、トレーニング中に観察されたカテゴリについてしか予測できないためです。さらに、各カテゴリ別特徴は、次元が `embedding_dimension` ハイパーパラメータによって制御される低次元空間に埋め込まれています。詳細については、「[DeepAR ハイパーパラメータ](deepar_hyperparameters.md)」を参照してください。

JSON ファイルを使用する場合は、ファイルが [JSON Lines](http://jsonlines.org/) 形式である必要があります。例:

```
{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ...]]}
{"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]}
{"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}
```

この例では、各時系列に、関連付けられている 2 つのカテゴリ別特徴と 1 つの時系列特徴があります。

Parquet の場合、同じ 3 つのフィールドを列として使用します。さらに、`"start"` を `datetime` 型として使用できます。Parquet ファイルを圧縮するには、gzip (`gzip`) または Snappy 圧縮ライブラリ (`snappy`) を使用します。

アルゴリズムが `cat` フィールドと `dynamic_feat` フィールドなしでトレーニングされる場合、「グローバル」モデル、つまり推論時のターゲットの時系列の特定のアイデンティティに依存せず、その形状のみによる条件付きのモデルを学習します。

モデルが各時系列で提供された `cat` および `dynamic_feat` の特徴データの条件付きである場合、予測は、対応する `cat` の特徴を持つ時系列の特性の影響を受ける場合があります。たとえば、`target` の時系列が衣料品の需要を表す場合は、最初のコンポーネントの品目の種類 (0 = 靴、1 = 衣服など) と、2 番目のコンポーネントの品目の色 (例: 0 = 赤、1 = 青) をエンコードする 2 次元の `cat` ベクトルを関連付けることができます。サンプルの入力は次のようになります。

```
{ "start": ..., "target": ..., "cat": [0, 0], ... } # red shoes
{ "start": ..., "target": ..., "cat": [1, 1], ... } # blue dress
```

推論時、トレーニングデータで観測された `cat` の値の組み合わせである、`cat` の値を持つターゲットの予測をリクエストできます。次に例を示します。

```
{ "start": ..., "target": ..., "cat": [0, 1], ... } # blue shoes
{ "start": ..., "target": ..., "cat": [1, 0], ... } # red dress
```

トレーニングデータには以下のガイドラインが適用されます。
+ 時系列の開始時刻と長さは異なる場合があります。たとえば、マーケティングでは通常、製品がカタログに掲載される日は異なるため、開始日も異なります。ただし、すべてのシリーズにおいて、頻度やカテゴリ別特徴の数、動的特徴の数は同じでなければなりません。
+ トレーニングファイルを、ファイル内の時系列の位置に関してシャッフルします。つまり、時系列はファイル内でランダムな順序で出現します。
+ `start` フィールドが正しく設定されていることを確認します。アルゴリズムは `start` タイムスタンプを使用して内部の特徴を取得します。
+ カテゴリ別特徴 (`cat`) を使用する場合は、すべての時系列には同じ数のカテゴリ別特徴が含まれている必要があります。データセットに `cat` フィールドが含まれている場合、アルゴリズムはそれを使用してデータセットからグループの基数を抽出します。デフォルトでは、`cardinality` は `"auto"` です。データセットに `cat` フィールドが含まれていても、それを使用しないようにするには、無効にするために、`cardinality` を `""` に設定します。モデルが特徴 `cat` を使用してトレーニングされた場合は、推論のためにそれを含める必要があります。
+ データセットに `dynamic_feat` フィールドが含まれている場合、アルゴリズムはそれを自動的に使用します。すべての時系列に、同じ数の特徴時系列が含まれている必要があります。各特徴時系列の時間ポイントは、ターゲットの時間ポイントと 1 対 1 で対応します。さらに、`dynamic_feat` フィールドのエントリは `target` と同じ長さである必要があります。データセットに `dynamic_feat` フィールドが含まれていても、それを使用しないようにするには、無効にするために、`num_dynamic_feat` を `""` に設定します。モデルが `dynamic_feat` フィールドを使用してトレーニングされた場合は、推論のためにこのフィールドを提供する必要があります。さらに各特徴は、提供されたターゲットの長さに `prediction_length` を加えた長さである必要があります。つまり、未来の特徴値を提供する必要があります。

オプションのテストチャネルデータを指定した場合、DeepAR アルゴリズムは異なる正確性メトリクスでトレーニング済みモデルを評価します。アルゴリズムは、テストデータの二乗平均平方根誤差 (RMSE) を次のように計算します。

![\[RMSE 計算式: Sqrt(1/nT(Sum[i,t](y-hat(i,t)-y(i,t))^2))\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/deepar-1.png)


ここで、*y**i*,*t* は時間 *t* における時系列 *i* の真の値です。*ŷ**i*,*t* は、平均予測です。合計は、テストセット内の *n* 個の時系列すべてと、各時系列の最後の T 個の時間ポイントの和です。ここで、T は予測期間に対応します。予測期間の長さを指定するには、`prediction_length` ハイパーパラメータを設定します。詳細については、「[DeepAR ハイパーパラメータ](deepar_hyperparameters.md)」を参照してください。

さらにこのアルゴリズムは、重み付けされた分位損失を使用して予測分布の正確性を評価します。[0, 1] の範囲にある変位値の場合、重み付けされた分位損失は次のように定義されます。

![\[重み付けされた分位損失の方程式。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/deepar-2.png)


 *q**i*,*t*(τ) は、モデルが予測する分布の τ 分位数です。損失を計算する分位数を指定するには、`test_quantiles` ハイパーパラメータを設定します。これらに加えて、規定の分位損失の平均がトレーニングログの一部として報告されます。詳細については、「[DeepAR ハイパーパラメータ](deepar_hyperparameters.md)」を参照してください。

推論のために、DeepAR は JSON 形式と以下のフィールドを受け入れます。
+  `"instances"`: JSON Lines 形式の時系列を 1 つ以上含む
+  `"configuration"` の名前: 予測を生成するためのパラメータを含む 

詳細については、「[DeepAR 推論の形式](deepar-in-formats.md)」を参照してください。

## DeepAR アルゴリズム使用のベストプラクティス
<a name="deepar_best_practices"></a>

時系列データを準備するときには、以下のベストプラクティスに従うと、最善の結果を得ることができます。
+ トレーニングとテストのデータセットを分割する場合を除き、トレーニングとテストのため、および推論のためにモデルを呼び出す際には、常に時系列全体を提供します。`context_length` の設定方法にかかわらず、時系列を分割したり、その一部だけを指定したりしないでください。モデルは、遅延値の特徴には、`context_length` に設定された値より遡ったデータポイントを使用します。
+ DeepAR モデルを調整するときには、データセットを分割して、トレーニングデータセットとテストデータセットを作成することができます。典型的な評価では、トレーニングに使用したのと同じ時系列でモデルをテストしますが、トレーニング中に表示される最後の時間ポイントの直後に続く未来の `prediction_length` 時間ポイントでモデルをテストします。この基準を満たすトレーニングデータセットとテストデータセットを作成するには、テストセットとしてデータセット全体 (使用可能なすべての時系列の全長) を使用し、トレーニング用に各時系列から最後の `prediction_length` ポイントを削除します。トレーニング中には、モデルはテスト時に評価される時間ポイントのターゲット値を確認しません。テスト中、アルゴリズムはテストセット内の各時系列の最後の `prediction_length` ポイントを保留し、予測を生成します。その後、保留した値と予測を比較します。より複雑な評価を作成するには、テストセット内で時系列を複数回繰り返しますが、それぞれ異なる終了ポイントで切り捨てます。このアプローチにより、精度メトリクスは、さまざまな時間ポイントからの複数の予測で平均化されます。詳細については、「[DeepAR モデルを調整する](deepar-tuning.md)」を参照してください。
+ `prediction_length` に非常に大きい値 (>400) を使用しないでください。このような値を設定すると、モデルの速度が遅くなり、精度が低下します。未来の予測をさらに生成するには、より低い頻度でデータを集約することを検討してください。例えば、`1min` ではなく `5min` を使用します。
+ 遅延が使用されるため、モデルは `context_length` に指定された値より遡って時系列を調べることができます。そのため、このパラメータを大きい値に設定する必要はありません。`prediction_length` に使用した値から開始することをお勧めします。
+ 可能な限り多くの時系列について DeepAR モデルをトレーニングすることをお勧めします。単一の時系列でトレーニングされた DeepAR モデルも問題なく機能する可能性はありますが、ARIMA や ETS などの標準的な予測アルゴリズムは、より正確な結果を提供する可能性があります。データセットに関連する時系列データが何百も含まれている場合、DeepAR アルゴリズムは標準の方法より優れた性能を発揮するようになります。DeepAR では現在、すべてのトレーニング時系列にわたって利用可能な観測の総数が 300 以上であることが要求されます。

## DeepAR アルゴリズムの EC2 インスタンスの推奨事項
<a name="deepar-instances"></a>

GPU と CPU インスタンスの両方で､単一および複数マシンの両方の設定で DeepAR をトレーニングできます。1 つの CPU インスタンス (ml.c4.2xlarge や ml.c4.4xlarge など) から開始することをお勧めします。必要な場合のみ GPU インスタンスと複数マシンに切り替えます。GPU と複数のマシンを使用すると、大規模モデル (1 レイヤーに多数のセルが含まれ、多数のレイヤーから成る) の場合、および大サイズのミニバッチ (たとえば、512 を上回るサイズ) の場合にのみスループットが向上します。

推論のために DeepAR がサポートするのは、CPU インスタンスのみです。

`context_length`、`prediction_length`、`num_cells`、`num_layers`、または `mini_batch_size` に大きな値を指定すると、スモールインスタンスには大きすぎるモデルが作成される可能性があります。この場合は、使用するインスタンスタイプをより大きなものにするか、これらのパラメータの値を小さくします。この問題は、ハイパーパラメータ調整ジョブを実行するときにも頻繁に発生します。その場合は、モデル調整ジョブに十分な大きさのインスタンスタイプを使用し、重要なパラメータの上限値を制限することを検討して、ジョブの失敗を回避してください。

## DeepAR サンプルノートブック
<a name="deepar-sample-notebooks"></a>

SageMaker AI DeepAR アルゴリズムをトレーニングするための時系列データセットを準備する方法、および推論を実行するためにトレーニング済みモデルをデプロイする方法を示すサンプルノートブックについては、「[DeepAR demo on electricity dataset](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/deepar_electricity/DeepAR-Electricity.html)」を参照してください。このサンプルでは、実際のデータセットを対象とした DeepAR の高度な機能を示しています。SageMaker AI でサンプルを実行する際に使用できる Jupyter ノートブックインスタンスを作成してアクセスする手順については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

Amazon SageMaker AI DeepAR アルゴリズムの詳細については、次のブログ記事を参照してください。
+ [Now available in Amazon SageMaker AI: DeepAR algorithm for more accurate time series forecasting](https://aws.amazon.com/blogs/machine-learning/now-available-in-amazon-sagemaker-deepar-algorithm-for-more-accurate-time-series-forecasting/)
+ [Deep demand forecasting with Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/deep-demand-forecasting-with-amazon-sagemaker/)

# DeepAR アルゴリズムの仕組み
<a name="deepar_how-it-works"></a>

トレーニング中、DeepAR はトレーニングデータセットとオプションのテストデータセットを受け入れます。テストデータセットは、トレーニングされたモデルを評価するために使用されます。一般的に、データセットに同じ一連の時系列を含める必要はありません。特定のトレーニングセットでトレーニングされたモデルを使用すると、トレーニングセット内の時系列の今後の予測と他の時系列の予測を生成できます。トレーニングデータセットとテストデータセットはどちらも 1 つまたは複数 (可能な場合) のターゲット時系列で構成されています。各ターゲット時系列は、必要に応じて特徴時系列のベクトルおよびカテゴリ別特徴のベクトルと関連付けることができます。詳細については、「[DeepAR アルゴリズムの入出力インターフェイス](deepar.md#deepar-inputoutput)」を参照してください。

次の例は、*i* によりインデックス付けされたトレーニングセットの要素であり、ターゲット時系列 *Zi,t* と 2 つの関連する特徴の時系列 *Xi,1,t* と *Xi,2,t* から構成されます。

![\[図 1: ターゲット時系列と関連付けられた特徴時系列\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ts-full-159.base.png)


ターゲット時系列には欠損値が含まれている可能性があり、これらは時系列では切れ目で表されています。DeepAR\$1 は、今後認識される特徴の時系列のみをサポートします。これにより、「what-if」 シナリオを実行できます。たとえば、商品の価格を何らかの方法で変更した場合はどうなりますか?

各ターゲット時系列は、複数のカテゴリ別特徴に関連付けることもできます。これらの特徴を使用すると、時系列がどのグループに属するかをエンコードできます。カテゴリ別特徴を使用すると、モデルはグループの典型的な動作を学習できます。これを使用してモデルの精度を高めることができます。DeepAR はこれを実装するために、グループ内のすべての時系列の共通プロパティをキャプチャする各グループの埋め込みベクトルを学習します。

## DeepAR アルゴリズムでの特徴時系列の仕組み
<a name="deepar_under-the-hood"></a>

週末の急増などの時間依存パターンの学習を容易にするために、DeepAR はターゲット時系列の頻度に基づいて特徴の時系列を自動的に作成します。DeepAR は、このように派生した特徴の時系列を使用するだけでなく、トレーニングと推論の間にユーザーが提供するカスタムの特徴の時系列も使用します。次の図は、派生した 2 つの時系列の特徴を示しています。*ui,1,t* はその日の時間を表し、*ui,2,t* はその曜日を表します。

![\[図 2: 派生した時系列\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ts-full-159.derived.png)


DeepAR アルゴリズムは、これらの時系列データを自動的に生成します。次の表に、サポートされている基本的な時間頻度で派生する特徴をリストします。


| 時系列の頻度 | 派生する特徴 | 
| --- | --- | 
| Minute |  `minute-of-hour`, `hour-of-day`, `day-of-week`, `day-of-month`, `day-of-year`  | 
| Hour |  `hour-of-day`, `day-of-week`, `day-of-month`, `day-of-year`  | 
| Day |  `day-of-week`, `day-of-month`, `day-of-year`  | 
| Week |  `day-of-month`, `week-of-year`  | 
| Month |  月  | 

DeepAR は、トレーニングデータセットの各時系列からいくつかのトレーニング例をランダムにサンプリングすることによってモデルをトレーニングします。各トレーニング例は、事前定義された固定長を持つ一対の隣接コンテキストと予測ウィンドウで構成されています。`context_length` ハイパーパラメータは、どの程度の過去まで遡ってネットワークを調べられるのかを制御し、`prediction_length` ハイパーパラメータは、どの程度の未来まで予測を生成できるかを制御します。トレーニング中、アルゴリズムは指定された予測長より短い時系列を含むトレーニングセット要素を無視します。次の図は、要素 *i* から抽出された、コンテキストの長さが 12 時間、予測の長さが 6 時間の 5 つのサンプルを示しています。簡潔にするために、特徴時系列 *xi,1,t* と *ui,2,t* は省略しました。

![\[図 3: サンプリングされた時系列\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ts-full-159.sampled.png)


季節的パターンをキャプチャするために、DeepAR はターゲット時系列から遅延した値も自動的にフィードします。頻度が 1 時間に 1 回の例では、時間インデックス *t = T* ごとに、モデルは過去約 1、2、3 日に発生した *zi,t* の値を公開します。

![\[図 4: 遅延した時系列\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ts-full-159.lags.png)


トレーニングされたモデルは、推論のために、トレーニング中に使用されたかどうかにかかわらず、ターゲット時系列を入力として受け取り、それ以降の `prediction_length` 値の確率分布を予測します。DeepAR はデータセット全体についてトレーニングされるため、予測では同様の時系列から学習したパターンが考慮されます。

DeepAR の背後にある数学の詳細については、[DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks (DeepAR: 自己回帰反復ネットワークによる確率予測) ](https://arxiv.org/abs/1704.04110)を参照してください。

# DeepAR ハイパーパラメータ
<a name="deepar_hyperparameters"></a>

次の表に、Amazon SageMaker AI DeepAR 予測アルゴリズムでトレーニングするときに設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| context\$1length |  予測を生成する前にモデルが参照する時間ポイントの数。このパラメータの値は、`prediction_length` とほぼ同じである必要があります。モデルはターゲットからの遅延入力も受信するため、`context_length` は一般的な季節性よりもはるかに小さくなります。たとえば、毎日の時系列が年次的な季節性を持つ場合があります。このモデルには 1 年間の遅延が自動的に含まれるため、コンテキストの長さは 1 年よりも短くなります。モデルが選択する遅延値は、時系列の頻度によって異なります。たとえば、毎日の頻度の遅延値は、前の週、2 週間、3 週間、4 週間、および 1 年です。 **必須** 有効な値: 正の整数  | 
| epochs |  トレーニングデータへのパスの最大数。最適な値は、データサイズと学習レートによって異なります。`early_stopping_patience` も参照してください。通常の値の範囲は 10 ～ 1000 です。 **必須** 有効な値: 正の整数  | 
| prediction\$1length |  モデルが予測するようにトレーニングされる時間ステップの数。予測地平線とも呼ばれます。トレーニング済みモデルは常にこの長さで予測を生成します。それよりも長い予測を生成することはできません。`prediction_length` は、モデルのトレーニング時に固定されます。後で変更することはできません。 **必須** 有効な値: 正の整数  | 
| time\$1freq |  データセット内の時系列の詳細度。`time_freq` を使用して、適切なデータ機能と遅延を選択します。モデルは、以下の基本的な頻度をサポートしています。また、これらの基本的な頻度の倍数もサポートしています。たとえば、`5min` は 5 分の頻度を指定します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/deepar_hyperparameters.html) **必須** 有効な値: `5min` など、*M*、*W*、*D*、*H*、または *min* が後に続く整数。  | 
| cardinality |  カテゴリ別特徴 (`cat`) を使用する場合、`cardinality` は、カテゴリ別特徴ごとのカテゴリ (グループ) の数を指定するリストです。データから基数を推測するには、これを `auto` に設定します。`auto` モードは、データセットにカテゴリ別特徴が使用されていない場合にも機能します。これはパラメータの推奨設定です。 カテゴリ別特徴がデータに存在する場合でも、DeepAR でそれを使用しないようにするには、cardinality を `ignore` に設定します。 追加のデータ検証を実行するには、このパラメータを実際の値に明示的に設定します。たとえば、2 つのカテゴリ別特徴が提供され、最初の特徴には可能な値が 2 つ、もう 1 つの特徴には 3 つある場合は、これを [2, 3] に設定します。 カテゴリ別特徴の使用方法の詳細については、DeepAR のメインドキュメントページのデータセクションを参照してください。 **オプション** 有効な値: `auto`、`ignore`、正の整数の配列、空の文字列  デフォルト値: `auto`  | 
| dropout\$1rate |  トレーニング時に使用するドロップアウト率。モデルはゾーンアウトの正則化を使用します。反復ごとに、隠れニューロンのランダムなサブセットが更新されることはありません。通常の値の範囲は 0.2 未満です。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.1  | 
| early\$1stopping\$1patience |  このパラメータが設定されると、`epochs` の指定された数内で進捗が見られない場合にトレーニングが停止します。損失が最も少ないモデルが最終的なモデルとして返されます。 **オプション** 有効な値: 整数  | 
| embedding\$1dimension |  カテゴリ別特徴ごとに学習された埋め込みベクトルのサイズ (アルゴリズムはすべてのカテゴリ別特徴に対して同じ値を使用します)。 DeepAR モデルは、カテゴリグループ化機能が提供される場合に、グループレベルの時系列パターンを学習できます。これを行うために、モデルは各グループのサイズ `embedding_dimension` の埋め込みベクトルを学習し、グループ内のすべての時系列の共通プロパティをキャプチャします。より大きな `embedding_dimension` であれば、モデルはさらに複雑なパターンをキャプチャできます。ただし、`embedding_dimension` が増加するとモデル内のパラメータ数も増加するため、これらのパラメータを正確に学習するにはさらに多くのトレーニングデータが必要です。このパラメータの典型的な値は 10～100 の間にあります。 **オプション** 有効な値: 正の整数 デフォルト値: 10  | 
| learning\$1rate |  トレーニングで使用する学習レート。通常の値の範囲は 1e-4 から 1e-1 です。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 1e-3  | 
| likelihood |  モデルは確率予測を生成し、分散の変位値を提供してサンプルを返すことができます。データによっては、不確実性予測に使用される適切な尤度 (ノイズモデル) を選択します。次の可能性を選択できます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/deepar_hyperparameters.html) **オプション** 有効な値: *ガウス分布*、*ベータ*、*負の 2 項分布*、*スチューデントの t 分布*、または *決定論的 L1* のいずれか 1 つ。 デフォルト値: `student-T`  | 
| mini\$1batch\$1size |  トレーニング時に使用するミニバッチのサイズ。通常の値の範囲は 32 ～ 512 です。 **オプション** 有効な値: 正の整数 デフォルト値: 128  | 
| num\$1cells |  RNN の非表示のレイヤーごとに使用するセルの数。通常の値の範囲は 30 ～ 100 です。 **オプション** 有効な値: 正の整数 デフォルト値: 40  | 
| num\$1dynamic\$1feat |  データに指定されている `dynamic_feat` の数。データから動的特徴の数を推測するには、これを `auto` に設定します。`auto` モードは、データセットに動的特徴が使用されていない場合にも機能します。これはパラメータの推奨設定です。 動的特徴がデータに存在している場合でも、DeepAR でそれを使用しないようにするには、`num_dynamic_feat` を `ignore` に設定します。 追加のデータ検証を実行するには、このパラメータを実際の整数値に明示的に設定します。たとえば、動的な特徴が 2 つ提供されている場合は、これを 2 に設定します。 **オプション** 有効な値: `auto`、`ignore`、正の整数、または空の文字列 デフォルト値: `auto`  | 
| num\$1eval\$1samples |  テスト精度メトリクスを計算するときに時系列ごとに使用されるサンプル数。このパラメータは、トレーニングまたは最終モデルには影響しません。特に、モデルに対するクエリは、異なるサンプル数を使用して実行できます。このパラメータは、トレーニング後にテストチャネルで報告された精度スコアのみに影響します。値が小さいほど評価は速くなりますが、その場合、評価スコアは一般的に悪くなり、確実性が低下します。評価時の分位数が大きい場合は (たとえば、0.95)、評価サンプルの数を増やすことが重要である可能性があります。 **オプション** 有効な値: 整数 デフォルト値: 100  | 
| num\$1layers |  RNN の非表示レイヤーの数。通常の値の範囲は 1 ～ 4 です。 **オプション** 有効な値: 正の整数 デフォルト値: 2  | 
| test\$1quantiles |  テストチャネルで分位損失を計算するための分位数。 **オプション** 有効な値: 浮動小数点数の配列 デフォルト値: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]  | 

# DeepAR モデルを調整する
<a name="deepar-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## DeepAR アルゴリズムによって計算されるメトリクス
<a name="deepar-metrics"></a>

DeepAR アルゴリズムは、トレーニング中に計算される 3 つのメトリクスを報告します。モデルを調整するときには、目標としてこれらのいずれかを選択します。目標には、提供されたテストチャネルの予測精度 (推奨) またはトレーニング損失を使用します。DeepAR アルゴリズムのトレーニング/テストの分割に関する推奨事項については、[DeepAR アルゴリズム使用のベストプラクティス](deepar.md#deepar_best_practices)を参照してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:RMSE |  テストセットで計算された予測と実際のターゲット間の二乗平均平方根誤差。  |  最小化  | 
| test:mean\$1wQuantileLoss |  テストセットで計算された平均全体分位損失。使用する分位数を制御するには、`test_quantiles` ハイパーパラメータを設定します。  |  最小化  | 
| train:final\$1loss |  モデルの最後のトレーニングエポックで平均化された、トレーニングの負の対数尤度損失。  |  最小化  | 

## DeepAR アルゴリズムの調整可能なハイパーパラメータ
<a name="deepar-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して DeepAR モデルを調整します。DeepAR の目標メトリクスに最大の影響を持つハイパーパラメータ (最も影響の大きいものから順にリストされる) は、`epochs`、`context_length`、`mini_batch_size`、`learning_rate`、および `num_cells` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| epochs |  `IntegerParameterRanges`  |  MinValue: 1、MaxValue: 1000  | 
| context\$1length |  `IntegerParameterRanges`  |  MinValue: 1、MaxValue: 200  | 
| mini\$1batch\$1size |  `IntegerParameterRanges`  |  MinValue: 32、MaxValue: 1028  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 1e-5、MaxValue: 1e-1  | 
| num\$1cells |  `IntegerParameterRanges`  |  MinValue: 30、MaxValue: 200  | 
| num\$1layers |  `IntegerParameterRanges`  |  MinValue: 1、MaxValue: 8  | 
| dropout\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.00、MaxValue: 0.2  | 
| embedding\$1dimension |  `IntegerParameterRanges`  |  MinValue: 1、MaxValue: 50  | 

# DeepAR 推論の形式
<a name="deepar-in-formats"></a>

このページでは、Amazon SageMaker AI DeepAR モデルによる推論のリクエストとレスポンスの形式について説明します。

## DeepAR JSON リクエストの形式
<a name="deepar-json-request"></a>

モデルのエンドポイントを使用して、トレーニング済みモデルのクエリを実行します。エンドポイントは次の JSON リクエストの形式になっています。

このリクエストでは、`instances` フィールドはモデルによって予測されるべき時系列に対応しています。

モデルがカテゴリを使用してトレーニングされた場合は、インスタンスごとに `cat` を指定する必要があります。モデルが `cat` フィールドなしでトレーニングされた場合は、省略する必要があります。

モデルがカスタム特徴時系列 (`dynamic_feat`) を使用してトレーニングされた場合は、各インスタンスに同数の `dynamic_feat` 値を指定する必要があります。各インスタンスは、`length(target) + prediction_length` で算出される長さである必要があります。ここで、最後の `prediction_length` 値は、予測される未来の時間ポイントに対応します。モデルがカスタム特徴時系列なしでトレーニングされた場合は、フィールドをリクエストに含めないでください。

```
{
    "instances": [
        {
            "start": "2009-11-01 00:00:00",
            "target": [4.0, 10.0, "NaN", 100.0, 113.0],
            "cat": [0, 1],
            "dynamic_feat": [[1.0, 1.1, 2.1, 0.5, 3.1, 4.1, 1.2, 5.0, ...]]
        },
        {
            "start": "2012-01-30",
            "target": [1.0],
            "cat": [2, 1],
            "dynamic_feat": [[2.0, 3.1, 4.5, 1.5, 1.8, 3.2, 0.1, 3.0, ...]]
        },
        {
            "start": "1999-01-30",
            "target": [2.0, 1.0],
            "cat": [1, 3],
            "dynamic_feat": [[1.0, 0.1, -2.5, 0.3, 2.0, -1.2, -0.1, -3.0, ...]]
        }
    ],
    "configuration": {
         "num_samples": 50,
         "output_types": ["mean", "quantiles", "samples"],
         "quantiles": ["0.5", "0.9"]
    }
}
```

`configuration` フィールドはオプションです。`configuration.num_samples` は、平均と分位数を推定するためにモデルが生成するサンプルパスの数を設定します。`configuration.output_types` は、リクエストで返される情報を記述します。有効な値は、`"mean"`、`"quantiles"`、`"samples"` です。`"quantiles"` を指定すると、`configuration.quantiles` のそれぞれの変位値は時系列として返されます。`"samples"` を指定した場合、モデルは、他の出力を計算するために使用した未加工サンプルも返します。

## DeepAR JSON のレスポンス形式
<a name="deepar-json-response"></a>

以下はレスポンスの形式です。ここで、`[...]` は数字の配列です。

```
{
    "predictions": [
        {
            "quantiles": {
                "0.9": [...],
                "0.5": [...]
            },
            "samples": [...],
            "mean": [...]
        },
        {
            "quantiles": {
                "0.9": [...],
                "0.5": [...]
            },
            "samples": [...],
            "mean": [...]
        },
        {
            "quantiles": {
                "0.9": [...],
                "0.5": [...]
            },
            "samples": [...],
            "mean": [...]
        }
    ]
}
```

DeepAR のレスポンスのタイムアウトは 60 秒です。単一のリクエストで複数の時系列を渡すと、予測は順次生成されます。各時系列の予測には通常、モデルのサイズに応じて約 300 ～ 1000 ミリ秒以上かかるため、1 回の要求であまりにも多くの時系列を渡すと、タイムアウトが生じる可能性があります。リクエストごとに送信する時系列を少なくして、送信するリクエストの数を増やすことをお勧めします。DeepAR アルゴリズムはインスタンスごとに複数のワーカーを使用するため、複数のリクエストを並行して送信することで、はるかに高いスループットを達成できます。

デフォルトでは、CPU ごとに十分なメモリがある場合、DeepAR は推論のために CPU ごとに 1 つのワーカーを使用します。モデルが大きく、各 CPU でモデルを実行するのに十分なメモリがない場合は、ワーカーの数が削減されます。推論に使用されるワーカーの数は、環境変数 `MODEL_SERVER_WORKERS` を使用して上書きできます。例えば、SageMaker AI の [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) API を呼び出すときに `MODEL_SERVER_WORKERS=1` を設定することで上書きできます。

## DeepAR アルゴリズムを使用したバッチ変換
<a name="deepar-batch"></a>

DeepAR の予測は、JSON Lines 形式を使用したデータのバッチ変換による推論の取得をサポートします。この形式では、各レコードは JSON オブジェクトとして 1 行で表され、各行は改行文字で区切られます。形式は、モデルのトレーニングに使用される JSON Lines 形式と同じです。詳細については、「[DeepAR アルゴリズムの入出力インターフェイス](deepar.md#deepar-inputoutput)」を参照してください。例:

```
{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ..]]}
{"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]}
{"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}
```

**注記**  
変換ジョブを [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) で作成する場合は、`BatchStrategy` の値を `SingleRecord` に設定し、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html) 設定の `SplitType` の値を `Line` に設定してください。そうしないと、現在のデフォルト値ではランタイムエラーが発生します。

ホストエンドポイント推論リクエスト形式と同様に、以下の両方に該当する場合は、各インスタンスに `cat` フィールドと `dynamic_feat` フィールドが必要です。
+ モデルは、`cat` フィールドと `dynamic_feat` フィールドの両方を含むデータセットに関してトレーニングされている。
+ トレーニングジョブで使用される対応する `cardinality` 値と `num_dynamic_feat` 値が、`"".` に設定されていない。

ホストエンドポイントの推論とは異なり、設定フィールドは、`DEEPAR_INFERENCE_CONFIG` という名前の環境変数を使用して、バッチ推論ジョブ全体に対して 1 回設定されます。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) API を呼び出してモデルを作成するときに、`DEEPAR_INFERENCE_CONFIG` の値を渡すことができます。`DEEPAR_INFERENCE_CONFIG` がコンテナ環境で欠落している場合、推論コンテナは次のデフォルトを使用します。

```
{
    "num_samples": 100,
    "output_types": ["mean", "quantiles"],
    "quantiles": ["0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9"]
}
```

出力も JSON Lines 形式であり、各予測が 1 行で表され、対応する入力ファイルのインスタンスの順序と同じ順序で配置されます。予測は、オンライン推論モードのレスポンスによって返されるオブジェクトと同じオブジェクトとしてエンコードされます。例えば、次のようになります。

```
{ "quantiles": { "0.1": [...], "0.2": [...] }, "samples": [...], "mean": [...] }
```

SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) リクエストの [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html) 設定では、デフォルト値の `None` によって同じ行の JSON オブジェクトがすべて連結されるため、クライアントは `AssembleWith` 値を明示的に `Line` に設定する必要があります。

例えば、以下はカスタムの `DEEPAR_INFERENCE_CONFIG` を持つ DeepAR ジョブに対する SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) リクエストです。

```
{
   "BatchStrategy": "SingleRecord",
   "Environment": { 
      "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }",
      ...
   },
   "TransformInput": {
      "SplitType": "Line",
      ...
   },
   "TransformOutput": { 
      "AssembleWith": "Line",
      ...
   },
   ...
}
```

# 教師なし組み込み SageMaker AI アルゴリズム
<a name="algorithms-unsupervised"></a>

Amazon SageMaker AI には、クラスタリング、次元削減、パターン認識、異常検出など、さまざまな教師なし学習タスクに使用できる組み込みアルゴリズムがいくつか用意されています。
+ [IP Insights](ip-insights.md) - IPv4 アドレスの使用パターンを学習します。このアルゴリズムは、IPv4 アドレスと、ユーザー ID やアカウント番号などの各種エンティティとの間の関連付けをキャプチャするように設計されています。
+ [K-Means アルゴリズム](k-means.md) - 1 つのグループのメンバーができるだけ互いに類似し、他のグループのメンバーとできるだけ異なる離散グループをデータ内に見つけます。
+ [主成分分析法 (PCA) アルゴリズム](pca.md) - データポイントを最初のいくつかの主成分に射影することにより、データセット内の次元 (特徴の数) を縮退させます。目的は、できるだけ多くの情報やバリエーションを保持することです。数学者の場合、主成分はデータの共分散行列の固有ベクトルです。
+ [ランダムカットフォレスト (RCF) アルゴリズム](randomcutforest.md) - その他の高度に構造化またはパターン化されたデータとは異なるデータセット内の異常なデータポイントを検出します。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| IP Insights | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU または GPU | あり | 
| K-Means | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPUCommon (1 つ以上のインスタンス上の単一の GPU デバイス) | なし | 
| PCA | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | GPU または CPU | あり | 
| ランダムカットフォレスト | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU | あり | 

# IP Insights
<a name="ip-insights"></a>

Amazon SageMaker AI IP Insights は、IPv4 アドレスの使用パターンを学習する教師なし学習アルゴリズムです。このアルゴリズムは、IPv4 アドレスと、ユーザー ID やアカウント番号などの各種エンティティとの間の関連付けをキャプチャするように設計されています。たとえば、異常な IP アドレスからウェブサービスにログインしようとしているユーザーを識別するために使用できます。あるいは、異常な IP アドレスからコンピューティングリソースを作成しようとしているアカウントを識別するために使用することもできます。トレーニング済みの IP Insight モデルは、リアルタイムの予測を行うためにエンドポイントでホストしたり、バッチ変換の処理で使用したりできます。

SageMaker AI IP Insights は、履歴データを (エンティティ、IPv4 アドレス) のペアとして取り込み、各エンティティの IP 使用パターンを学習します。(エンティティ、IPv4 アドレス) イベントを使用してクエリが実行されると、SageMaker AI IP Insights モデルは、そのイベントのパターンがどの程度異常であるかを推測するスコアを返します。たとえば、ユーザーが IP アドレスからログインしようとしたときに、IP Insights のスコアが十分に高ければ、ウェブログインサーバーは多要素認証システムの起動を決定する可能性があります。より高度なソリューションでは、IP Insights のスコアを他の機械学習モデルに取り込むことができます。たとえば、IP Insights のスコアを他の特徴と組み合わせて、[Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) などの別のセキュリティシステムの結果をランク付けすることができます。

SageMaker AI IP Insights アルゴリズムは、埋め込みと呼ばれる IP アドレスのベクトル表現も学習できます。**ベクトルとしてエンコードされた埋め込みを、IP アドレスで観測された情報を使用するダウンストリームの機械学習タスクの特徴として使用することができます。たとえば、クラスタリングに含まれる IP アドレス間の類似性を測定するタスクや、視覚化タスクなどに使用できます。

**Topics**
+ [IP Insights アルゴリズムの入出力インターフェイス](#ip-insights-inputoutput)
+ [IP Insights アルゴリズムの EC2 インスタンスに関する推奨事項](#ip-insights-instances)
+ [IP Insights サンプルノートブック](#ip-insights-sample-notebooks)
+ [IP Insights の仕組み](ip-insights-howitworks.md)
+ [IP Insights ハイパーパラメータ](ip-insights-hyperparameters.md)
+ [IP Insights モデルを調整する](ip-insights-tuning.md)
+ [IP Insights データ形式](ip-insights-data-formats.md)

## IP Insights アルゴリズムの入出力インターフェイス
<a name="ip-insights-inputoutput"></a>

**トレーニングおよび検証**

SageMaker AI IP Insights アルゴリズムは、トレーニングと検証のデータチャネルをサポートします。オプションの検証チャネルを使用して、事前定義された負のサンプリング戦略で曲線下面積 (AUC) スコアを計算します。AUC メトリクスは、モデルが正のサンプルと負のサンプルをどの程度区別しているかを検証します。トレーニングおよび検証データのコンテンツタイプは、`text/csv` 形式である必要があります。CSV データの最初の列は、エンティティの一意の識別子を提供する不透明な文字列です。2 列目は、ドット区切りの 10 進数表記の IPv4 アドレスです。IP Insights は現在、ファイルモードのみをサポートしています。詳細および例については、[IP Insights トレーニングデータの形式](ip-insights-training-data-formats.md)を参照してください。

**推論**

IP Insights は推論のために、`text/csv`、`application/json`、および `application/jsonlines` データコンテンツタイプをサポートします。SageMaker AI から提供される推論に共通するデータ形式の詳細については、「[推論の共通データ形式](cdf-inference.md)」を参照してください。IP Insights 推論は、`application/json` または `application/jsonlines` として形式設定された出力を返します。出力データの各レコードには、各入力データポイントに対応する `dot_product` (または互換性スコア) が含まれています。詳細および例については、[IP Insights 推論データの形式](ip-insights-inference-data-formats.md)を参照してください。

## IP Insights アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="ip-insights-instances"></a>

SageMaker AI IP Insights アルゴリズムは、GPU インスタンスと CPU インスタンスの両方で実行できます。トレーニングジョブの場合は、GPU インスタンスを使用することをお勧めします。ただし、大規模なトレーニングデータセットを使用する特定のワークロードでは、分散型の CPU インスタンスを使用すると、トレーニングコストを削減できる可能性があります。推論の場合は、CPU インスタンスを使用することをお勧めします。IP Insights は P2、P3、G4dn、G5 の GPU ファミリーをサポートしています。

### IP Insights アルゴリズムの GPU インスタンス
<a name="ip-insights-instances-gpu"></a>

IP Insights は、使用可能な GPU をすべてサポートします。トレーニングを加速させる必要がある場合は、ml.p3.2xlarge などの単一 GPU インスタンスから始めて、ml.p3.8xlarge や ml.p3.16xlarge などのマルチ GPU 環境に移行することをお勧めします。マルチ GPU は、ミニバッチのトレーニングデータを自動的に分割します。単一の GPU から複数の GPU に切り替えると、`mini_batch_size` が、使用される GPU の数だけ均等に分割されます。これを補うために、`mini_batch_size` の値を大きくすることをお勧めします。

### IP Insights アルゴリズムの CPU インスタンス
<a name="ip-insights-instances-cpu"></a>

お勧めする CPU インスタンスのタイプは、インスタンスの使用可能なメモリとモデルのサイズによって大きく異なります。モデルサイズは、`vector_dim` と `num_entity_vectors` の 2 つのハイパーパラメータによって決まります。サポートされる最大モデルサイズは 8 GB です。次の表に、さまざまなモデルサイズの入力パラメータに基づいてデプロイする一般的な EC2 インスタンスのタイプをリストしてあります。表 1 で、最初の列の `vector_dim` の値は 32～2048 の範囲で、最初の行の `num_entity_vectors` の値は 10,000～50,00,000 の範囲です。


| `vector_dim` \$1 `num_entity_vectors`. | 10,000 | 50,000 | 100,000 | 500,000 | 1,000,000 | 5,000,000 | 10,000,000 | 50,000,000 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 32 |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.xlarge | ml.m5.2xlarge | ml.m5.4xlarge | 
|  `64`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.2xlarge | ml.m5.2xlarge |  | 
|  `128`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.2xlarge | ml.m5.4xlarge |  | 
|  `256`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.xlarge | ml.m5.4xlarge |  |  | 
|  `512`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.2xlarge |  |  |  | 
|  `1024`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.xlarge | ml.m5.4xlarge |  |  |  | 
|  `2048`  |  ml.m5.large  | ml.m5.large | ml.m5.xlarge | ml.m5.xlarge |  |  |  |  | 

`mini_batch_size`、`num_ip_encoder_layers`、`random_negative_sampling_rate`、および `shuffled_negative_sampling_rate` ハイパーパラメータの値も、必要なメモリ量に影響します。これらの値が大きい場合は、通常よりも大きいインスタンスタイプを使用しなければならない可能性があります。

## IP Insights サンプルノートブック
<a name="ip-insights-sample-notebooks"></a>

SageMaker AI IP Insights アルゴリズムをトレーニングし、それを使用して推論を実行する方法を示すサンプルノートブックについては、「[An Introduction to the SageMaker AI IP Insights Algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ipinsights_login/ipinsights-tutorial.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成したら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# IP Insights の仕組み
<a name="ip-insights-howitworks"></a>

Amazon SageMaker AI IP Insights は、エンティティを IP アドレスに関連付ける (エンティティ、IPv4 アドレス) のペア形式の観測データを消費する、教師なしアルゴリズムです。IP Insights は、エンティティと IP アドレスの両方の潜在的なベクトル表現を学習することによって、エンティティが特定の IP アドレスを使用する可能性がどれほど高いのかを判別します。これら 2 つの表現の間の距離は、この関連付けにどの程度の可能性があるかを示すプロキシとして機能します。

IP Insights アルゴリズムは、ニューラルネットワークを使用して、エンティティと IP アドレスの潜在的なベクトル表現を学習します。エンティティはまず、大規模な固定ハッシュ空間にハッシュされ、次に単純な埋め込みレイヤーによってエンコードされます。ユーザー名やアカウント ID などの文字列は、ログファイルに表示されるとおりに IP Insights に直接入力できます。エンティティ識別子のデータを前処理する必要はありません。トレーニング中にも推論中にもエンティティを任意の文字列値として提供できます。ハッシュサイズは、異なるエンティティが同じ潜在ベクトルにマッピングされたときに発生する衝突の数が重要でないことを保証できるだけの十分高い値に設定する必要があります。**適切なハッシュサイズを選択する方法の詳細については、[Feature Hashing for Large Scale Multitask Learning (大規模マルチタスク学習の特徴ハッシュ)](https://alex.smola.org/papers/2009/Weinbergeretal09.pdf) を参照してください。一方、IP アドレスについては、IP Insights は特別に設計されたエンコーダーネットワークを使用し、IP アドレスのプレフィックス構造を利用して、各 IPv4 アドレスを一意に表します。

IP Insights はトレーニング中、エンティティと IP アドレスをランダムにペアにして、負のサンプルを自動的に生成します。これらの負のサンプルは、実際には発生する可能性の低いデータを表します。モデルは、トレーニングデータで観察された正のサンプルと、生成された負のサンプルとを区別するようにトレーニングされます。具体的には、モデルは次のように定義される交差エントロピー (ログの損失とも呼ばれる) を最小限に抑えるようにトレーニングされます。****

![\[対数損失の方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ip-insight-image-cross-entropy.png)


yn は、サンプルが観測データを管理する実分布から取得されたものか (yn=1)、負のサンプルを生成する分布から取得されたものか (yn=0) を示すラベルです。pn は、サンプルが実分布から取得したものである確率であり、モデルによって予測されます。

負のサンプルの生成は、観測データの正確なモデルを実現するために使用される重要なプロセスです。たとえば、負のサンプルの IP アドレスがすべて 10.0.0.0 である場合など、負のサンプルの可能性が非常に低い場合、モデルは負のサンプルの区別を自明な方法で学習し、実際の観測データセットを正確に特徴付けることができません。負のサンプルの現実性を高く保つために、IP Insights は IP アドレスをランダムに生成し、トレーニングデータから IP アドレスをランダムに選択することによって、負のサンプルを生成します。負のサンプリングのタイプと負のサンプルを生成するレートを設定するには、`random_negative_sampling_rate` および `shuffled_negative_sampling_rate` ハイパーパラメータを使用します。

n 番目の (エンティティ、IP アドレスのペア) が提供されると、IP Insights モデルは、エンティティと IP アドレスとの互換性を示す*スコア* Sn を出力します。このスコアは、実際の分布から取得したペア (エンティティ, IP アドレス) を、負の分布から取得したペアと比較することで得られる、対数オッズ比に対応します。これは次のように定義されます。

![\[スコアの方程式、対数オッズ比のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ip-insight-image-log-odds.png)


スコアは基本的に、n 番目のエンティティと IP アドレスのベクトル表現間の類似性の尺度です。これは、ランダムに生成されたデータセットのイベントより現実のイベントを観察する方がどれほど可能性が高いかを示していると解釈することができます。トレーニング中に、アルゴリズムはこのスコアを使用して、実分布 pn から取得したサンプルである確率の推定値を計算し、交差エントロピー最小化で使用します。

![\[サンプルが実分布から取得したものである確率の方程式を示すイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/ip-insight-image-sample-probability.png)


# IP Insights ハイパーパラメータ
<a name="ip-insights-hyperparameters"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Amazon SageMaker AI IP Insights アルゴリズムのハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1entity\$1vectors | トレーニングするエンティティベクトル表現 (エンティティ埋め込みベクトル) の数。トレーニングセット内の各エンティティは、ハッシュ関数を使用してこれらのベクトルの 1 つにランダムに割り当てられます。ハッシュ衝突のために、複数のエンティティが同じベクトルに割り当てられる可能性があります。この場合、同じベクトルが複数のエンティティを表します。衝突率がそれほど高くない限り、これは一般的にモデルのパフォーマンスにはほとんど影響しません。衝突率を低く保つには、この値をできるだけ高く設定します。ただし、モデルサイズ、つまりトレーニングと推論の両方におけるメモリ要件は、このハイパーパラメータに比例して直線的に拡大します。この値は、一意のエンティティ識別子の数の 2 倍に設定することをお勧めします。 **必須** 有効な値: 1 ≤ 正の整数 ≤ 250,000,000  | 
| vector\$1dim | エンティティと IP アドレスを表す埋め込みベクトルのサイズ。値が大きいほど、これらの表現を使用してエンコードできる情報が多くなります。実際には、モデルサイズはこのパラメータに比例して線形的に拡大し、ディメンションの大きさを制限することができます。さらに、使用するベクトル表現が大きすぎると、特に小さなトレーニングデータセットの場合は、モデルが過剰適合となる可能性があります。過剰適合が発生するのは、モデルがデータ内のパターンを学習していないが、トレーニングデータを効果的に記憶していることにより、一般化できず推論中のパフォーマンスが低下する場合です。推奨値は 128 です。 **必須** 有効な値: 4 ≤ 正の整数 ≤ 4096  | 
| batch\$1metrics\$1publish\$1interval | Apache MXNet Speedometer 関数がネットワークのトレーニング速度 (サンプル数/秒) を出力する間隔 (X バッチごと)。 **オプション** 有効な値: 正の整数 ≥ 1 デフォルト値: 1,000 | 
| epochs | トレーニングデータへのパスの数。最適な値は、データサイズと学習レートによって異なります。通常の値の範囲は 5 ～ 100 です。 **オプション** 有効な値: 正の整数 ≥ 1 デフォルト値: 10 | 
| learning\$1rate | オプティマイザの学習レート。IP Insights は勾配降下ベースの Adam オプティマイザを使用します。学習レートは、ステップサイズを効果的に制御して、各反復でモデルパラメータを更新します。学習レートが高すぎると、トレーニングが最小値を上回る可能性があるため、モデルが発散する可能性があります。一方、学習レートが低すぎると収束が遅くなります。通常の値の範囲は 1e-4 から 1e-1 です。 **オプション** 有効な値: 1e-6 ≤ 浮動小数点数 ≤ 10.0 デフォルト値: 0.001 | 
| mini\$1batch\$1size | 各ミニバッチ内の例の数。トレーニング手順では、データをミニバッチ単位で処理します。最適な値は、データセット内の一意のアカウント識別子の数に応じて異なります。一般的に、`mini_batch_size` が大きければ大きいほど、トレーニングは速くなり、シャッフルされた負のサンプルの組み合わせの数も多くなります。ただし、`mini_batch_size` が大きいと、トレーニングは不十分な極小値に収束し、推論に関するパフォーマンスが比較的低くなる可能性があります。 **オプション** 有効な値: 1 ≤ 正の整数 ≤ 500000 デフォルト値: 10,000 | 
| num\$1ip\$1encoder\$1layers | IP アドレスの埋め込みをエンコードするために使用された完全接続レイヤーの数。レイヤーの数が多いほど、IP アドレス間のパターンをキャプチャするモデルの能力が高まります。ただし、多数のレイヤーを使用すると、過剰適合が起きる可能性が高くなります。 **オプション** 有効な値: 0 ≤ 正の整数 ≤ 100 デフォルト値： 1 | 
| random\$1negative\$1sampling\$1rate | 入力例ごとに生成されるランダムな負のサンプルの数 R。トレーニング手順は、モデルのベクトル表現が折りたたまれて単一点になるのを防ぐ目的で、負のサンプルに依存します。ランダムな負のサンプリングは、ミニバッチ内の各入力アカウントに対して R 個のランダム IP アドレスを生成します。`random_negative_sampling_rate` (R) と `shuffled_negative_sampling_rate` (S) の合計は、1 ≤ R \$1 S ≤ 500 の範囲内でなければなりません。 **オプション** 有効な値: 0 ≤ 正の整数 ≤ 500 デフォルト値： 1 | 
| shuffled\$1negative\$1sampling\$1rate | 入力例ごとに生成される、シャッフルされた負のサンプルの数 S。トレーニングデータ自体からランダムに抽出された、より現実的な負のサンプルを使用する方が役立つ場合もあります。この種の負のサンプリングを実現するには、ミニバッチ内でデータをシャッフルします。シャッフルされた負のサンプリングは、ミニバッチ内で IP アドレスとアカウントの組み合わせをシャッフルすることによって S 個の負の IP アドレスを生成します。`random_negative_sampling_rate` (R) と `shuffled_negative_sampling_rate` (S) の合計は、1 ≤ R \$1 S ≤ 500 の範囲内でなければなりません。 **オプション** 有効な値: 0 ≤ 正の整数 ≤ 500 デフォルト値： 1 | 
| weight\$1decay | 重み減衰係数。このパラメータは、モデルによるトレーニングデータの過剰適合を回避するために必要な L2 正則化係数を追加します。 **オプション** 有効な値: 0.0 ≤ 浮動小数点数 ≤ 10.0 デフォルト値: 0.00001 | 

# IP Insights モデルを調整する
<a name="ip-insights-tuning"></a>

ハイパーパラメータ調整とも呼ばれる*モデル自動調整*は、モデルの最適なバージョンを見つけるために、データセットに対してさまざまなハイパーパラメータをテストする多数のジョブを実行します。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## IP Insights アルゴリズムによって計算されたメトリクス
<a name="ip-insights-metrics"></a>

Amazon SageMaker AI IP Insights アルゴリズムは、IP アドレスとエンティティ間の関連付けを学習する教師なし学習アルゴリズムです。このアルゴリズムは、観測されたデータポイント (正のサンプル) をランダムに生成されたデータポイント (負のサンプル) と区別することを学習する識別子モデルをトレーニングします。****IP Insights の自動モデル調整は、ラベルなしの検証データと自動的に生成された負のサンプルを最も正確に区別できるモデルを見つけるのに役立ちます。検証データセットのモデル精度は、受信者動作特性曲線下面積によって測定されます。この `validation:discriminator_auc` メトリクスは、0.0 ～ 1.0 の値をとることができます。ここで、1.0 は完全な精度を示します。

IP Insights アルゴリズムは、検証時に `validation:discriminator_auc` メトリクスを計算します。その値は、ハイパーパラメータ調整を最適化する目標関数として使用されます。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:discriminator\$1auc |  検証データセットの受信者動作特性曲線の下の領域。検証データセットはラベル付けされません。曲線下面積 (AUC) は、検証データポイントとランダムに生成されたデータポイントを区別するモデルの能力を表すメトリクスです。  |  最大化  | 

## 調整可能な IP Insights ハイパーパラメータ
<a name="ip-insights-tunable-hyperparameters"></a>

SageMaker AI IP Insights アルゴリズムの次のハイパーパラメータを調整できます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| epochs |  IntegerParameterRange  |  MinValue: 1、MaxValue: 100  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4、MaxValue: 0.1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 100、MaxValue: 50000  | 
| num\$1entity\$1vectors |  IntegerParameterRanges  |  MinValue: 10000、MaxValue: 1000000  | 
| num\$1ip\$1encoder\$1layers |  IntegerParameterRanges  |  MinValue: 1、MaxValue: 10  | 
| random\$1negative\$1sampling\$1rate |  IntegerParameterRanges  |  MinValue: 0、MaxValue: 10  | 
| shuffled\$1negative\$1sampling\$1rate |  IntegerParameterRanges  |  MinValue: 0、MaxValue: 10  | 
| vector\$1dim |  IntegerParameterRanges  |  MinValue: 8、MaxValue: 256  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 1.0  | 

# IP Insights データ形式
<a name="ip-insights-data-formats"></a>

このセクションでは、トレーニング中および推論中に IP Insights アルゴリズムによって使用される入力および出力データ形式の例を示します。

**Topics**
+ [IP Insights トレーニングデータの形式](ip-insights-training-data-formats.md)
+ [IP Insights 推論データの形式](ip-insights-inference-data-formats.md)

# IP Insights トレーニングデータの形式
<a name="ip-insights-training-data-formats"></a>

以下は、IP Insights アルゴリズムで使用可能なデータ入力形式です。Amazon SageMaker AI の組み込みアルゴリズムは、「[トレーニングの共通データ形式](cdf-training.md)」で説明している一般的な入力トレーニング形式に従います。ただし、SageMaker AI IP Insights アルゴリズムは現在、CSV データ入力形式のみをサポートしています。

## IP Insights トレーニングデータ入力の形式
<a name="ip-insights-training-input-format-requests"></a>

### 入力: CSV
<a name="ip-insights-input-csv"></a>

CSV ファイルには列が 2 つ含まれている必要があります。最初の列は、エンティティの一意の識別子に対応する不透明な文字列です。2 番目の列は、エンティティのアクセスイベントの IPv4 アドレス (ドット区切りの 10 進数表記) です。

content-type: text/csv

```
entity_id_1, 192.168.1.2
entity_id_2, 10.10.1.2
```

# IP Insights 推論データの形式
<a name="ip-insights-inference-data-formats"></a>

以下は、IP Insights アルゴリズムで使用可能な入出力形式です。Amazon SageMaker AI の組み込みアルゴリズムは、「[推論の共通データ形式](cdf-inference.md)」で説明している一般的な入力推論形式に従います。ただし、SageMaker AI IP Insights アルゴリズムは現在、RecordIO 形式をサポートしていません。

## IP Insights 入力リクエストの形式
<a name="ip-insights-input-format-requests"></a>

### 入力: CSV 形式
<a name="ip-insights-input-csv-format"></a>

CSV ファイルには列が 2 つ含まれている必要があります。最初の列は、エンティティの一意の識別子に対応する不透明な文字列です。2 番目の列は、エンティティのアクセスイベントの IPv4 アドレス (ドット区切りの 10 進数表記) です。

content-type: text/csv

```
entity_id_1, 192.168.1.2
entity_id_2, 10.10.1.2
```

### 入力: JSON 形式
<a name="ip-insights-input-json"></a>

JSON データは、さまざまな形式で提供できます。IP Insights は、SageMaker AI の共通形式に従います。推論形式の詳細については、[推論の共通データ形式](cdf-inference.md)を参照してください。

content-type: application/json

```
{
  "instances": [
    {"data": {"features": {"values": ["entity_id_1", "192.168.1.2"]}}},
    {"features": ["entity_id_2", "10.10.1.2"]}
  ]
}
```

### 入力: JSON Lines 形式
<a name="ip-insights-input-jsonlines"></a>

JSON Lines コンテンツタイプは、バッチ変換ジョブを実行する際に役立ちます。SageMaker AI の推論形式の詳細については、「[推論の共通データ形式](cdf-inference.md)」を参照してください。バッチ変換ジョブの実行の詳細については、[Amazon SageMaker AI による推論のためのバッチ変換](batch-transform.md)を参照してください。

content-type: application/jsonlines

```
{"data": {"features": {"values": ["entity_id_1", "192.168.1.2"]}}},
{"features": ["entity_id_2", "10.10.1.2"]}]
```

## IP Insights 出力レスポンスの形式
<a name="ip-insights-ouput-format-response"></a>

### 出力: JSON レスポンス形式
<a name="ip-insights-output-json"></a>

SageMaker AI IP Insights アルゴリズムのデフォルト出力は、入力エンティティと IP アドレスの間の `dot_product` です。dot\$1product は、モデルが考慮するエンティティと IP アドレスの互換性を示します。`dot_product` は無制限です。イベントが異常かどうかを予測するには、定義した分布に基づいてしきい値を設定する必要があります。異常検出に `dot_product` を使用する方法の詳細については、「[An Introduction to the SageMaker AI IP Insights Algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ipinsights_login/ipinsights-tutorial.html)」を参照してください。

accept: application/json

```
{
  "predictions": [
    {"dot_product": 0.0},
    {"dot_product": 2.0}
  ]
}
```

上級ユーザーは、Accept の見出しに追加の content-type パラメータ `verbose=True` を指定することで、モデルの学習済みエンティティおよび IP 埋め込みにアクセスできます。モデルのデバッグ、視覚化、および理解には、`entity_embedding` と `ip_embedding` を使用できます。さらに、分類やクラスタリングなどの他の機械学習手法でこれらの埋め込みを使用できます。

accept: application/json;verbose=True

```
{
  "predictions": [
    {
        "dot_product": 0.0,
        "entity_embedding": [1.0, 0.0, 0.0],
        "ip_embedding": [0.0, 1.0, 0.0]
    },
    {
        "dot_product": 2.0,
        "entity_embedding": [1.0, 0.0, 1.0],
        "ip_embedding": [1.0, 0.0, 1.0]
    }
  ]
}
```

### 出力: JSON Lines レスポンス形式
<a name="ip-insights-jsonlines"></a>

accept: application/jsonlines 

```
{"dot_product": 0.0}
{"dot_product": 2.0}
```

accept: application/jsonlines; verbose=True 

```
{"dot_product": 0.0, "entity_embedding": [1.0, 0.0, 0.0], "ip_embedding": [0.0, 1.0, 0.0]}
{"dot_product": 2.0, "entity_embedding": [1.0, 0.0, 1.0], "ip_embedding": [1.0, 0.0, 1.0]}
```

# K-Means アルゴリズム
<a name="k-means"></a>

K-means は、教師なしの学習アルゴリズムです。これは、1 つのグループのメンバーができるだけ類似し、他のグループのメンバーとできるだけ異なる離散グループをデータ内に見つけようとします。類似度を決定するためにアルゴリズムで使用する属性を定義します。

Amazon SageMaker AI は、変更されたバージョンのウェブスケール k-means クラスタリングアルゴリズムを使用します。オリジナルバージョンのアルゴリズムに比べると、Amazon SageMaker AI で使用しているバージョンの方が高い精度です。オリジナルのアルゴリズムと同様に、大規模なデータセットにスケールでき、トレーニング時間を改善します。これを行うために、Amazon SageMaker AI で使用されるバージョンは、トレーニングデータのミニバッチ (小さいランダムなサブセット) をストリーミングします。ミニバッチ k-means の詳細については、[Web-scale k-means Clustering (ウェブスケールの k-means クラスタリング)](https://dl.acm.org/doi/10.1145/1772690.1772862) を参照してください。

k-means アルゴリズムは表形式のデータを想定します。表の行はクラスタリングする観測値を表し、列は観測値の属性を表します。各行の *n* 属性は *n* 次元空間のポイントを表します。これらのポイント間のユークリッド距離は、対応する観測値の類似度を表します。アルゴリズムは、類似する属性値で観測値をグループ化します (これらの観測値に対応するポイントが近づきます)。Amazon SageMaker AI での k-means の仕組みの詳細については、「[K-Means クラスタリングの仕組み](algo-kmeans-tech-notes.md)」を参照してください。

**Topics**
+ [k-means アルゴリズムの入出力インターフェイス](#km-inputoutput)
+ [k-means アルゴリズムの EC2 インスタンスに関する推奨事項](#km-instances)
+ [k-means サンプルノートブック](#kmeans-sample-notebooks)
+ [K-Means クラスタリングの仕組み](algo-kmeans-tech-notes.md)
+ [K-Means ハイパーパラメータ](k-means-api-config.md)
+ [k-means モデルを調整する](k-means-tuning.md)
+ [k-means のレスポンス形式](km-in-formats.md)

## k-means アルゴリズムの入出力インターフェイス
<a name="km-inputoutput"></a>

トレーニングの場合、k-means アルゴリズムは、データが*トレーニング*チャネル (`S3DataDistributionType=ShardedByS3Key` を推奨) と、データをスコアリングするオプションの*テスト*チャネル (`S3DataDistributionType=FullyReplicated` を推奨) で提供されることを想定します。トレーニングでは `recordIO-wrapped-protobuf` と `CSV` の両方の形式がサポートされます。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについてモデルをトレーニングできます。

推論の場合は、`text/csv`、`application/json`、および `application/x-recordio-protobuf` がサポートされます。k-means は、観測値ごとに `closest_cluster` ラベルと `distance_to_cluster` を返します。

入出力ファイル形式の詳細については、[k-means のレスポンス形式](km-in-formats.md) (推論の場合) および[k-means サンプルノートブック](#kmeans-sample-notebooks)を参照してください。k-means アルゴリズムは、トレーニングセットがラベル付きの「バッグ」で構成されている複数インスタンスの学習をサポートしていません。各バッグはラベルなしのインスタンスの集合です。

## k-means アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="km-instances"></a>

k-means は CPU インスタンスでトレーニングすることをお勧めします。GPU インスタンスでトレーニングできますが、インスタンスあたり 1 つの GPU しか使用されないため、GPU トレーニングを単一 GPU インスタンス (ml.g4dn.xlarge など) に制限する必要があります。k-means アルゴリズムは、トレーニングと推論用の P2、P3、G4dn、G5 インスタンスをサポートします。

## k-means サンプルノートブック
<a name="kmeans-sample-notebooks"></a>

SageMaker AI K-means アルゴリズムを使用して、主成分分析で識別された属性を基準に米国の郡の人口をセグメント化するサンプルノートブックの詳細については、「[Analyze US census data for population segmentation using Amazon SageMaker AI](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/US-census_population_segmentation_PCA_Kmeans/sagemaker-countycensusclustering.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# K-Means クラスタリングの仕組み
<a name="algo-kmeans-tech-notes"></a>

K-means は、類似するオブジェクトをグループ化するモデルをトレーニングするアルゴリズムです。k-means アルゴリズムは、入力データセットの各観測値を *n* 次元空間 (*n* は観測値の属性の数) 内のポイントにマッピングすることでこれを実現します。たとえば、データセットには、2 次元空間のポイント (*t, h*) にマップされる特定の場所の温度と湿度の観測値が含まれている場合があります。



**注記**  
クラスタリングアルゴリズムは教師なしです。教師なしの学習では、トレーニングデータセット内のオブジェクトに関連付けられている可能性のあるラベルは使用されません。詳細については、「[教師なし学習](algorithms-choose.md#algorithms-choose-unsupervised-learning)」を参照してください。

k-means クラスタリングでは、各クラスターに中心があります。モデルトレーニング時に、k-means アルゴリズムは、データセット内の各観測値に対応するポイントからクラスター中心までの距離をクラスタリングの基準として使用します。作成するクラスターの数 (*k*) を選択します。

たとえば、手書き数字を認識するモデルを作成し、トレーニングに MNIST データセットを選択するとします。データセットでは、何千もの手書き数字 (0 ～ 9) のイメージが提供されます。この例では、数字ごとに 1 つずつ (0、1、...、9)、10 個のクラスターを作成することを選択できます。モデルトレーニングの一環として、k-means アルゴリズムは入力イメージを 10 個のクラスターにグループ化します。

MNIST データセット内の各イメージは 28x28 ピクセルのイメージで、合計 784 ピクセルです。各イメージは、2 次元空間 (x,y) のポイントと同様に 784 次元空間のポイントに対応します。ポイントが属するクラスターを見つけるために、k-means はすべてのクラスター中心からそのポイントまでの距離を調べます。次に、最も近い中心を持つクラスターをイメージが属するクラスターとして選択します。

**注記**  
Amazon SageMaker AI は、カスタマイズされたバージョンのアルゴリズムを使用します。この場合、アルゴリズムで *k* クラスターを作成することを指定する代わりに、追加のクラスター中心 *(K = k\$1x)* を指定することでモデルの精度を向上させることを選択できます。ただし、アルゴリズムは最終的にこれらを *k* クラスターまで減らします。

SageMaker AI では、トレーニングジョブの作成時にクラスターの数を指定します。詳細については、「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)」を参照してください。リクエストボディに、`HyperParameters` 文字列マップを追加して、`k` および `extra_center_factor` 文字列を指定します。

以下は、SageMaker AI でのモデルトレーニングに関する k-means の仕組みの概要です。

1. 初期の *K* クラスター中心を決定します。
**注記**  
次のトピックでは、*K* クラスターは *k \$1 x* を表します。*k* と *x* はモデルトレーニングジョブの作成時に指定します。

1. これを入力トレーニングデータに対して反復処理し、クラスター中心が再計算されます。

1. 結果のクラスターは *k* まで減少します (データサイエンティストがリクエストで *k\$1x* クラスターの作成を指定した場合)。

以下のセクションでは、データサイエンティストがモデルトレーニングジョブを `HyperParameters` 文字列マップの一部として設定するために指定できるいくつかのパラメータについても説明します。

**Topics**
+ [ステップ 1: 初期のクラスター中心を決定する](#kmeans-step1)
+ [ステップ 2: トレーニングデータセットに対して反復処理し、クラスター中心を計算する](#kmeans-step2)
+ [ステップ 3: クラスターを *K* から *k* に減らす](#kmeans-step3)

## ステップ 1: 初期のクラスター中心を決定する
<a name="kmeans-step1"></a>

SageMaker AI で k-means を使用する場合、初期のクラスター中心はランダムにサンプリングされた小さなバッチの観測値から選択されます。次のいずれかの戦略を選択して、これらの初期のクラスター中心が選択される方法を決定します。
+ ランダムなアプローチ - 入力データセット内の *K* 個の観測値をクラスターの中心としてランダムに選択します。たとえば、MNIST トレーニングデータセット内の任意の 10 個のイメージに対応する 784 次元空間を指すクラスター中心を選択できます。
+ 次のように動作する k-means\$1\$1 アプローチ: 

  1. 1 つのクラスターから開始し、その中心を決定します。トレーニングデータセットから観測値をランダムに選択し、観測値に対応するポイントをクラスター中心として使用します。たとえば、MNIST データセット内で手書き数字のイメージをランダムに選択します。次に、イメージに対応する 784 次元空間のポイントをクラスター中心として選択します。これはクラスター中心 1 です。

  1. クラスター 2 の中心を決定します。トレーニングデータセット内の残りの観測値から、観測値をランダムに選択します。以前に選択したものとは異なる観測値を 1 つ選択します。この観測値は、クラスター中心 1 から遠く離れているポイントに対応します。MNIST データセットを例として使用して、次の操作を行います。
     + 残りの各イメージについて、クラスター中心 1 からの対応するポイントの距離を調べます。距離を 2 乗し、距離の 2 乗に比例する確率を割り当てます。この方法では、以前に選択したものとは異なるイメージの方が、クラスター中心 2 として選択される確率が高くなります。
     + 前のステップで割り当てられた確率に基づいて、イメージの 1 つをランダムに選択します。イメージに対応するポイントがクラスター中心 2 です。

  1. ステップ 2 を繰り返してクラスター中心 3 を探します。今回は、クラスター中心 2 からの残りのイメージの距離を調べます。

  1. *K* クラスターの中心が求められるまでプロセスを繰り返します。

SageMaker AI でモデルをトレーニングするには、トレーニングジョブを作成します。リクエストでは、次の `HyperParameters` 文字列マップを指定することで設定情報を提供します。
+ 作成するクラスターの数を指定するには、`k` 文字列を追加します。
+ 精度を向上させるために、オプションの `extra_center_factor` 文字列を追加します。
+ 初期のクラスター中心を決定するために使用する戦略を指定するには、`init_method` 文字列を追加し、その値を `random` または `k-means++` に設定します。

SageMaker AI k means 推定の詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)ドキュメントの「[K-means](https://sagemaker.readthedocs.io/en/stable/algorithms/unsupervised/kmeans.html)」を参照してください。

これで、初期の一連のクラスター中心を入手しました。

## ステップ 2: トレーニングデータセットに対して反復処理し、クラスター中心を計算する
<a name="kmeans-step2"></a>

前のステップで作成したクラスター中心はほぼランダムであり、トレーニングデータセットに関する考慮事項がいくつかあります。このステップでは、トレーニングデータセットを使用して、これらの中心を真のクラスター中心に向かって移動します。アルゴリズムは、トレーニングデータセットに対して反復処理し、*K* クラスターの中心を再計算します。

1. 観測値のミニバッチ (すべてのレコードからランダムに選択された小さなサブセット) をトレーニングデータセットから読み取り、次の操作を行います。
**注記**  
モデルトレーニングジョブの作成時に、`mini_batch_size` 文字列マップ内の `HyperParameters` 文字列でバッチサイズを指定します。

   1. ミニバッチ内のすべての観測値を、最も近いクラスター中心を持つクラスターの 1 つに割り当てます。

   1. 各クラスターに割り当てられた観測値の数を計算します。次に、クラスターごとに割り当てられた新しいポイントの比率を計算します。

      たとえば、次のクラスターを考えてみます。

      クラスター c1 = 以前に 100 ポイントが割り当てられています。このステップでミニバッチから 25 ポイントを追加しました。

      クラスター c2 = 以前に 150 ポイントが割り当てられています。このステップでミニバッチから 40 ポイントを追加しました。

      クラスター c3 = 以前に 450 ポイントが割り当てられています。このステップでミニバッチから 5 ポイントを追加しました。

      次のように、各クラスターに割り当てられた新しいポイントの比率を計算します。

      ```
      p1 = proportion of points assigned to c1 = 25/(100+25)
      p2 = proportion of points assigned to c2 = 40/(150+40)
      p3 = proportion of points assigned to c3 = 5/(450+5)
      ```

   1. 各クラスターに追加された新しいポイントの中心を計算します。

      ```
      d1 = center of the new points added to cluster 1
      d2 = center of the new points added to cluster 2
      d3 = center of the new points added to cluster 3
      ```

   1. 次のように、加重平均を計算して、更新されたクラスター中心を調べます。

      ```
      Center of cluster 1 = ((1 - p1) * center of cluster 1) + (p1 * d1)
      Center of cluster 2 = ((1 - p2) * center of cluster 2) + (p2 * d2)
      Center of cluster 3 = ((1 - p3) * center of cluster 3) + (p3 * d3)
      ```

1. 次のミニバッチを読み取り、ステップ 1 を繰り返して、クラスター中心を再計算します。

1. ミニバッチ k-means の詳細については、「[Web-Scale k-means Clustering](https://citeseerx.ist.psu.edu/document?repid=rep1type=pdf&doi=b452a856a3e3d4d37b1de837996aa6813bedfdcf)」を参照してください。

## ステップ 3: クラスターを *K* から *k* に減らす
<a name="kmeans-step3"></a>

アルゴリズムによって *K* クラスターが作成された場合 (*(K = k\$1x)* で、*x* は 1 より大きい)、*K* クラスターが *k* クラスターに減らされます。(詳細については、前の説明の「`extra_center_factor`」を参照してください。) これは、Lloyd 法と `kmeans++` の初期化を *K* クラスターの中心に適用することで行います。Lloyd 法の詳細については、[k-means clustering](https://pdfs.semanticscholar.org/0074/4cb7cc9ccbbcdadbd5ff2f2fee6358427271.pdf) を参照してください。

# K-Means ハイパーパラメータ
<a name="k-means-api-config"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで、使用するトレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Amazon SageMaker AI によって提供される k-means トレーニングアルゴリズムのハイパーパラメータを示します。k-means クラスタリングの仕組みの詳細については、「[K-Means クラスタリングの仕組み](algo-kmeans-tech-notes.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim | 入力データ内の特徴の数。 **必須** 有効な値: 正の整数  | 
| k |  必要なクラスターの数。 **必須** 有効な値: 正の整数  | 
| epochs | トレーニングデータに対して実行するパスの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1  | 
| eval\$1metrics | モデルのスコアを報告するために使用されるメトリクスタイプの JSON リスト。許容値は、平均二乗偏差の場合 `msd`、平方距離の合計の場合 `ssd` です。テストデータが提供されている場合は、リクエストされた各メトリクスのスコアが報告されます。 **オプション** 有効な値: `[\"msd\"]`、`[\"ssd\"]`、 または `[\"msd\",\"ssd\"]`。 デフォルト値: `[\"msd\"]`  | 
| extra\$1center\$1factor | アルゴリズムは、実行時に K 個の中心 = `num_clusters` \$1 `extra_center_factor` を作成し、モデルを完成させるときに中心の数を K から `k` に減らします。 **オプション** 有効な値: 正の整数または `auto`。 デフォルト値: `auto`  | 
| half\$1life\$1time\$1size | クラスター平均を計算するときに観測に付ける重みを決定するために使用されます。この重みは、観測ポイントが増えるにつれて指数関数的に減衰します。ポイントが最初に観測される際、クラスターの平均の計算時に 1 の重みが割り当てられます。`half_life_time_size` ポイントを観測した後、その重みが 1/2 になるように、指数関数的減衰関数の減衰定数が選択されます。0 に設定した場合、減衰はありません。 **オプション** 有効な値: 負以外の整数 デフォルト値: 0  | 
| init\$1method | アルゴリズムが初期クラスターの中心を選択する方法。標準的な k-means アプローチがランダムに選択します。別の k-means\$1\$1 法では、初期クラスターの中心をランダムに選択します。さらに、既存の中心からの残りのデータポイントの距離の 2 乗に比例する確率分布で中心の選択に重み付けすることによって、残りの初期クラスターの位置を広げます。 **オプション** 有効な値: `random` または `kmeans++`。 デフォルト値: `random`  | 
| local\$1lloyd\$1init\$1method | `k` 個の中心を含む最終モデルを構築するために使用された、ロイドの期待値最大化 (EM) 手順の初期化方法。 **オプション** 有効な値: `random` または `kmeans++`。 デフォルト値: `kmeans++`  | 
| local\$1lloyd\$1max\$1iter | `k` 個の中心を含む最終モデルを構築するために使用された、ロイドの期待値最大化 (EM) 手順の最大反復回数。 **オプション** 有効な値: 正の整数 デフォルト値: 300  | 
| local\$1lloyd\$1num\$1trials | `k` 個の中心を含む最終モデルを構築するときに、最小の損失でロイドの期待値最大化 (EM) 手順が実行される回数。 **オプション** 有効な値: 正の整数または `auto`。 デフォルト値: `auto`  | 
| local\$1lloyd\$1tol | `k` 個の中心を含む最終モデルを構築するために使用されたロイドの期待値最大化 (EM) 手順の早期停止における損失の変化の許容度。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.0001  | 
| mini\$1batch\$1size | データイテレーターのミニバッチごとの観測数。 **オプション** 有効な値: 正の整数 デフォルト値: 5000  | 

# k-means モデルを調整する
<a name="k-means-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

Amazon SageMaker AI k-means アルゴリズムは、メンバーが可能な限り類似するクラスターにデータがグループ化される教師なしアルゴリズムです。教師なしであるため、ハイパーパラメータの最適化に利用できる検証データセットは使用されません。ただし、テストデータセットを使用して、各トレーニング実行の最後にデータポイントから最終的なクラスターの重心までの距離の 2 乗に依存するメトリクスを出力します。テストデータセットの最も厳密なクラスターを報告するモデルを見つけるには、ハイパーパラメータ調整ジョブを使用します。クラスターはそれらのメンバーの類似性を最適化します。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## k-means アルゴリズムによって計算されたメトリクス
<a name="km-metrics"></a>

k-means アルゴリズムは、トレーニング中に以下のメトリクスを計算します。モデルを調整するときに、これらのメトリクスの 1 つを目標メトリクスとして選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:msd | テストセット内の各レコードからモデルの最も近い中心までの距離の 2 乗の平均。 | 最小化 | 
| test:ssd | テストセット内の各レコードからモデルの最も近い中心までの距離の 2 乗の合計。 | 最小化 | 



## 調整可能な k-means ハイパーパラメータ
<a name="km-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して Amazon SageMaker AI k-means モデルを調整します。k-means 目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`mini_batch_size`、`extra_center_factor`、および `init_method` です。ハイパーパラメータ `epochs` を調整すると、一般的に小さな改善が見られます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| epochs | IntegerParameterRanges | MinValue: 1、MaxValue: 10 | 
| extra\$1center\$1factor | IntegerParameterRanges | MinValue: 4、MaxValue: 10 | 
| init\$1method | CategoricalParameterRanges | ['kmeans\$1\$1', 'random'] | 
| mini\$1batch\$1size | IntegerParameterRanges | MinValue: 3000、MaxValue:15000 | 

# k-means のレスポンス形式
<a name="km-in-formats"></a>

SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。このトピックでは、SageMaker AI k-means アルゴリズムで利用可能な出力形式をリストします。

## JSON レスポンスの形式
<a name="km-json"></a>

```
{
    "predictions": [
        {
            "closest_cluster": 1.0,
            "distance_to_cluster": 3.0,
        },
        {
            "closest_cluster": 2.0,
            "distance_to_cluster": 5.0,
        },

        ....
    ]
}
```

## JSONLINES レスポンスの形式
<a name="km-jsonlines"></a>

```
{"closest_cluster": 1.0, "distance_to_cluster": 3.0}
{"closest_cluster": 2.0, "distance_to_cluster": 5.0}
```

## RECORDIO レスポンスの形式
<a name="km-recordio"></a>

```
[
    Record = {
        features = {},
        label = {
            'closest_cluster': {
                keys: [],
                values: [1.0, 2.0]  # float32
            },
            'distance_to_cluster': {
                keys: [],
                values: [3.0, 5.0]  # float32
            },
        }
    }
]
```

## CSV レスポンスの形式
<a name="km-csv"></a>

各行の最初の値は `closest_cluster` に対応します。

各行の 2 番目の値は `distance_to_cluster` に対応します。

```
1.0,3.0
2.0,5.0
```

# 主成分分析法 (PCA) アルゴリズム
<a name="pca"></a>

PCA は教師なし機械学習アルゴリズムで、できる限りの情報を保持しながら、データセット内の次元 (特徴の数) の縮退を試行します。これは、互いに相関しない元の特徴のコンポジットである、*成分*と呼ばれる新しい特徴のセットを見つけることで行われます。また、それらには制限が設けられているため、最初の成分はデータ内で考えられる最大の変動性、2 番目の成分は 2 番目に大きな変動性と続きます。

Amazon SageMaker AI では、PCA はシナリオに応じて次の 2 つのモードで動作します。
+ **regular**: 疎データと標準的な数の観測および特徴を備えたデータセットの場合。
+ **randomized**: 多数の観測および特徴の両方を備えたデータセットの場合。このモードは近似アルゴリズムを使用します。

PCA は表形式のデータを使用します。

行は低次元空間に組み込む観測を表します。列は減少した近似を見つける特徴を表します。アルゴリズムは共分散行列 (または分散方式での近似値) を計算し、その後このサマリーに対して特異値分解を実行して、主成分を生成します。

**Topics**
+ [PCA アルゴリズムの入出力インターフェイス](#pca-inputoutput)
+ [PCA アルゴリズムの EC2 インスタンスに関する推奨事項](#pca-instances)
+ [PCA サンプルノートブック](#PCA-sample-notebooks)
+ [PCA の仕組み](how-pca-works.md)
+ [PCA のハイパーパラメータ](PCA-reference.md)
+ [PCA のレスポンス形式](PCA-in-formats.md)

## PCA アルゴリズムの入出力インターフェイス
<a name="pca-inputoutput"></a>

PCA はトレーニングのために、トレーニングチャネルで提供されるデータを想定し、テストアルゴリズムに渡されたデータセットをオプションでサポートします。このデータセットは最終的なアルゴリズムで採点されます。トレーニングでは `recordIO-wrapped-protobuf` と `CSV` の両方の形式がサポートされます。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについてモデルをトレーニングできます。

推論については、PCA は `text/csv`、`application/json`、`application/x-recordio-protobuf` に対応しています。結果は `application/json` または`application/x-recordio-protobuf` 形式のいずれかが "射影" のベクトルとともに返されます。

入出力ファイル形式の詳細については、[PCA のレスポンス形式](PCA-in-formats.md) (推論の場合) および[PCA サンプルノートブック](#PCA-sample-notebooks)を参照してください。

## PCA アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="pca-instances"></a>

PCA は、トレーニングと推論用の CPU インスタンスと GPU インスタンスをサポートします。最もパフォーマンスの高いインスタンスタイプは、入力データの仕様に大きく依存します。GPU インスタンスの場合、PCA は P2、P3、G4dn、G5 をサポートします。

## PCA サンプルノートブック
<a name="PCA-sample-notebooks"></a>

SageMaker AI 主成分分析法アルゴリズムを使用して MNIST データセット内の 0～9 の手書き数字のイメージを分析する方法を示すサンプルノートブックについては、「[An Introduction to PCA with MNIST](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/pca_mnist/pca_mnist.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# PCA の仕組み
<a name="how-pca-works"></a>

主成分分析法 (PCA) は、できる限りの情報を保持しながら、データセット内の次元 (特徴の数) を縮退させる学習アルゴリズムです。

PCA は、互いに相関しない元の特徴のコンポジットである、*成分*と呼ばれる新しい特徴のセットを見つけることで次元を縮退させます。最初の成分はデータ内で考えられる最大の変動性、2 番目の成分は 2 番目に大きな変動性と続きます。

これは教師なしの次元縮退アルゴリズムです。教師なしの学習では、トレーニングデータセット内のオブジェクトに関連付けられている可能性のあるラベルは使用されません。

行 ![\[x_1,…,x_n\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-39b.png) の各次元が `1 * d` である行列を入力すると、データはミニバッチの行に分割され、トレーニングノード (ワーカー) に分配されます。各ワーカーは、その後そのデータのサマリーを計算します。計算終了後、個々のワーカーのサマリーは 1 つの解に統一されます。

**モード**

Amazon SageMaker AI の PCA アルゴリズムは、状況に応じて、次の 2 つのモードのいずれかを使用してこれらのサマリーを計算します。
+ **regular**: 疎データと標準的な数の観測および特徴を備えたデータセットの場合。
+ **randomized**: 多数の観測および特徴の両方を備えたデータセットの場合。このモードは近似アルゴリズムを使用します。

アルゴリズムの最後のステップでは、統一解に対して特異値分解を実行し、主成分はそこから派生します。

## モード 1: Regular
<a name="mode-1"></a>

ワーカーは、![\[Equation in text-form: \sum x_i^T x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-1b.png) と ![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-2b.png) の両方を計算します。

**注記**  
![\[Equation in text-form: x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-3b.png) は行ベクトル `1 * d` であるため、![\[Equation in text-form: x_i^T x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-4b.png) は行列です (スカラーではありません)。コード内で行ベクトルを使用すると、キャッシュを効率的に取得できます。

共分散行列は ![\[Equation in text-form: \sum x_i^T x_i - (1/n) (\sum x_i)^T \sum x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-32b.png) という式で計算され、その上位の特異ベクトル `num_components` がモデルを形成します。

**注記**  
`subtract_mean` が `False` である場合、![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-2b.png) の計算と減算は回避します。

ベクトルの次元 `d` が十分に小さく、![\[Equation in text-form: d^2\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-7b.png) がメモリに収まる場合に、このアルゴリズムを使用します。

## モード 2: Randomized
<a name="mode-2"></a>

入力データセット内の特徴の数が多い場合は、共分散行列を近似するメソッドを使用します。次元 `b * d` のすべてのミニバッチ ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-23b.png) において、各ミニバッチで乗算する行列 `(num_components + extra_components) * b` をランダムに初期化し、行列 `(num_components + extra_components) * d` を作成します。これらの行列の合計はワーカーによって計算され、サーバーが最終的な `(num_components + extra_components) * d` 行列に対して SVD を実行します。右上のその `num_components` 特異ベクトルは、入力行列の上位の特異ベクトルの近似値です。

![\[Equation in text-form: \ell\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-38b.png) ` = num_components + extra_components` であるとします。次元 `b * d` のミニバッチ ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-23b.png) が指定されると、ワーカーは次元 ![\[Equation in text-form: \ell * b\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-38.png) のランダム行列 ![\[Equation in text-form: H_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-24b.png) を抽出します。環境で GPU と CPU のどちらが使用されているかに応じて、および次元のサイズに応じて、行列は、各エントリが `+-1` であるランダム符号行列である場合と、*FJLT* (高速 Johnson Lindenstrauss 変換、詳細については [FJLT Transforms (FJLT 変換)](https://www.cs.princeton.edu/~chazelle/pubs/FJLT-sicomp09.pdf) とそのフォローアップ論文を参照) である場合があります。その後、ワーカーは ![\[Equation in text-form: H_t X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-26b.png) を計算し、![\[Equation in text-form: B = \sum H_t X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-27b.png) を保持します。ワーカーは、![\[Equation in text-form: h^T\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-28b.png)、![\[Equation in text-form: H_1,..,H_T\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-29b.png) の列の合計 (`T` はミニバッチの総数)、`s` (すべての入力行の合計) も保持します。データの全シャードを処理した後、ワーカーはサーバーに `B`、`h`、`s`、および `n` (入力行の合計数) を送信します。

サーバーへの各種入力は ![\[Equation in text-form: B^1, h^1, s^1, n^1,…\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-30b.png) と表記します。サーバーは、`B`、`h`、`s`、`n` (それぞれの入力の合計) を計算します。さらに ![\[Equation in text-form: C = B – (1/n) h^T s\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-31b.png) を計算し、その特異値分解を見つけます。右上の特異ベクトルと `C` の特異値が問題に対する近似解として使用されます。

# PCA のハイパーパラメータ
<a name="PCA-reference"></a>

`CreateTrainingJob` リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Amazon SageMaker AI によって提供される PCA トレーニングアルゴリズムのハイパーパラメータを示します。PCA の仕組みについては、「[PCA の仕組み](how-pca-works.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim |  入力する次元。 **必須** 有効な値: 正の整数  | 
| mini\$1batch\$1size |  ミニバッチ内の行の数。 **必須** 有効な値: 正の整数  | 
| num\$1components |  計算する主成分の数。 **必須** 有効な値: 正の整数  | 
| algorithm\$1mode |  主成分を計算するモード。 **オプション** 有効な値: *regular* または *randomized* デフォルト値: *regular*  | 
| extra\$1components |  値が大きくなると、その解はより正確になりますが、ランタイムとメモリ消費量が直線的に増加します。デフォルトの -1 は、最大 10 と `num_components` を意味します。*randomized* モードでのみ有効です。 **オプション** 有効な値: 負以外の整数または -1 デフォルト値: -1  | 
| subtract\$1mean |  トレーニング中と推論時の両方でデータにバイアスをかけないかどうかを示します。 **オプション** 有効な値: *true* または *false* のいずれか 1 つ デフォルト値: *true*  | 

# PCA のレスポンス形式
<a name="PCA-in-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」 で説明されている一般的な入力推論形式に従います。このトピックには、SageMaker AI PCA アルゴリズムで使用可能な出力形式のリストが含まれています。

## JSON レスポンスの形式
<a name="PCA-json"></a>

Accept: application/json

```
{
    "projections": [
        {
            "projection": [1.0, 2.0, 3.0, 4.0, 5.0]
        },
        {
            "projection": [6.0, 7.0, 8.0, 9.0, 0.0]
        },
        ....
    ]
}
```

## JSONLINES レスポンスの形式
<a name="PCA-jsonlines"></a>

Accept: application/jsonlines

```
{ "projection": [1.0, 2.0, 3.0, 4.0, 5.0] }
{ "projection": [6.0, 7.0, 8.0, 9.0, 0.0] }
```

## RECORDIO レスポンスの形式
<a name="PCA-recordio"></a>

Accept: application/x-recordio-protobuf

```
[
    Record = {
        features = {},
        label = {
            'projection': {
                keys: [],
                values: [1.0, 2.0, 3.0, 4.0, 5.0]
            }
        }
    },
    Record = {
        features = {},
        label = {
            'projection': {
                keys: [],
                values: [1.0, 2.0, 3.0, 4.0, 5.0]
            }
        }
    }  
]
```

# ランダムカットフォレスト (RCF) アルゴリズム
<a name="randomcutforest"></a>

Amazon SageMaker AI ランダムカットフォレスト (RCF) は、データセット内の異常なデータポイントを検出する、教師なしのアルゴリズムです。これらは、その他の高度に構造化された、またはパターン化されたデータとは異なる観測値です。異常は、時系列データにおける突然のスパイク、周期性の中断、分類できないデータポイントとして現れる場合があります。プロットで見ると「通常の」データと容易に区別できることが多いため、簡単に説明できます。「通常の」データは多くの場合に単純なモデルで記述できるため、これらの異常をデータセットに含めると、機械学習タスクの複雑さが大幅に増加する可能性があります。

各データポイントで、RCF は異常スコアを関連付けます。低スコア値であれば、データポイントは「通常」とみなされています。高い値は、データ内に異常があることを示します。「低」および「高」の定義はアプリケーションによって異なりますが、一般的な方法としては、平均スコアから 3 標準偏差を超えるスコアであれば、異常とみなされます。

交通量解析や音量スパイク検出など、異常検出アルゴリズムは 1 次元時系列データに広く応用されます。これに対し RCF は、任意の次元入力で機能するように設計されています。Amazon SageMaker AI RCF は、特徴数、データセットのサイズ、インスタンス数に関して適切にスケーリングされます。

**Topics**
+ [RCF アルゴリズムの入出力インターフェイス](#rcf-input_output)
+ [RCF アルゴリズムのインスタンスに関する推奨事項](#rcf-instance-recommend)
+ [RCF サンプルノートブック](#rcf-sample-notebooks)
+ [RCF の仕組み](rcf_how-it-works.md)
+ [RCF ハイパーパラメータ](rcf_hyperparameters.md)
+ [RCF モデルを調整する](random-cut-forest-tuning.md)
+ [RCF のレスポンス形式](rcf-in-formats.md)

## RCF アルゴリズムの入出力インターフェイス
<a name="rcf-input_output"></a>

Amazon SageMaker AI ランダムカットフォレストでは、`train` および `test` データチャネルをサポートしています。オプションのテストチャネルは、正確性、精度、リコール、およびラベル付けされたデータの F1 スコアメトリクスを計算するために使用されます。トレーニングとテストデータコンテンツタイプは、`application/x-recordio-protobuf` または `text/csv` の形式です。テストデータについて、text/csv 形式を使用する場合に、コンテンツを text/csv;label\$1size=1 として指定する必要があります。各行の最初の列は異常ラベルを表します。異常データポイントの場合は「1」、通常のデータポイントの場合は「0」です。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについて RCF モデルをトレーニングできます。

トレーニングチャネルは `S3DataDistributionType=ShardedByS3Key` のみがサポートされ、テストチャネルでは `S3DataDistributionType=FullyReplicated` のみがサポートされます。次の例では、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) を使用してトレーニングチャネルの S3 ディストリビューションタイプを指定しています。

**注記**  
`sagemaker.inputs.s3_input` メソッドは、[SageMaker Python SDK v2](https://sagemaker.readthedocs.io/en/stable/v2.html#s3-input) で `sagemaker.inputs.TrainingInput` に名前が変更されました。

```
  import sagemaker
    
  # specify Random Cut Forest training job information and hyperparameters
  rcf = sagemaker.estimator.Estimator(...)
    
  # explicitly specify "ShardedByS3Key" distribution type
  train_data = sagemaker.inputs.TrainingInput(
       s3_data=s3_training_data_location,
       content_type='text/csv;label_size=0',
       distribution='ShardedByS3Key')
    
  # run the training job on input data stored in S3
  rcf.fit({'train': train_data})
```

実行ロールに関する一般的なエラーを回避するには、必要な実行ロール `AmazonSageMakerFullAccess` と `AmazonEC2ContainerRegistryFullAccess` があることを確認します。イメージが存在しない、またはアクセス権限が正しくないという一般的なエラーを回避するには、ECR イメージがトレーニングインスタンスに割り当てられたディスク容量より大きくないことを確認してください。これを回避するには、十分なディスク容量があるインスタンスでトレーニングジョブを実行します。さらに、ECR イメージが別の AWS アカウントの Elastic Container Service (ECS) リポジトリのもので、アクセス許可を付与するリポジトリアクセス許可を設定していない場合、エラーが発生します。リポジトリポリシーステートメントの設定の詳細については、「[ECR repository permissions」(ECR リポジトリのアクセス許可](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html)) を参照してください。

S3 データソース属性のカスタマイズの詳細については、「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)」を参照してください。最後に、複数インスタンスのトレーニングの利点を活かすために、トレーニングデータは少なくともインスタンスと同じ数のファイルに分割されている必要があります。

RCF では、推論のために `application/x-recordio-protobuf`、`text/csv`、および `application/json` 入力データコンテンツタイプをサポートしています。詳細については、[組み込みアルゴリズムのパラメータ](common-info-all-im-models.md)のドキュメントを参照してください。RCF 推論は、`application/x-recordio-protobuf` または `application/json` フォーマットされた出力を返します。これらの出力データの各レコードには、各入力データポイントの対応する異常スコアが含まれています。詳細については、[一般的なデータ形式 - 推論](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)を参照してください。

入出力ファイル形式の詳細については、[RCF のレスポンス形式](rcf-in-formats.md) (推論の場合) および[RCF サンプルノートブック](#rcf-sample-notebooks)を参照してください。

## RCF アルゴリズムのインスタンスに関する推奨事項
<a name="rcf-instance-recommend"></a>

トレーニングには、`ml.m4`、`ml.c4`、および `ml.c5` インスタンスファミリーをお勧めします。推論には、最大限のパフォーマンスと使用時間当たりのコスト最小化のために、特に `ml.c5.xl` インスタンスタイプを使用することをお勧めします。このアルゴリズムは技術的には GPU インスタンスタイプで実行可能であるとはいえ、GPU ハードウェアを利用することはしません。

## RCF サンプルノートブック
<a name="rcf-sample-notebooks"></a>

RCF モデルをトレーニングし、それを使用して推論を実行する方法の例については、「[An Introduction to SageMaker AI Random Cut Forests](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/random_cut_forest/random_cut_forest.html)」ノートブックを参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

RCF アルゴリズムの使用に関するブログ記事については、「[Use the built-in Amazon SageMaker AI Random Cut Forest algorithm for anomaly detection](https://aws.amazon.com/blogs/machine-learning/use-the-built-in-amazon-sagemaker-random-cut-forest-algorithm-for-anomaly-detection/)」を参照してください。

# RCF の仕組み
<a name="rcf_how-it-works"></a>

Amazon SageMaker AI ランダムカットフォレスト (RCF) は、データセット内の異常なデータポイントを検出する、教師なしのアルゴリズムです。これらは、その他の高度に構造化された、またはパターン化されたデータとは異なる観測値です。異常は、時系列データにおける突然のスパイク、周期性の中断、分類できないデータポイントとして現れる場合があります。プロットで見ると「通常の」データと容易に区別できることが多いため、簡単に説明できます。「通常の」データは多くの場合に単純なモデルで記述できるため、これらの異常をデータセットに含めると、機械学習タスクの複雑さが大幅に増加する可能性があります。

RCF アルゴリズムの主なアイデアは、ツリーのフォレストを作成することです。各ツリーは、トレーニングデータのサンプルのパーティションを使用して取得されます。たとえば、入力データのランダムなサンプルが最初に決定されます。ランダムなサンプルは、フォレスト内のツリーの数に応じて分割されます。各ツリーにこのようなパーティションが与えられ、そのポイントのサブセットが k-d ツリーに編成されます。ツリーによってデータポイントに割り当てられた異常スコアは、想定されたツリーの複雑性の変化、そのポイントのツリーへの追加の結果として定義されます。これは、ツリー内の生成されるポイントの深さにおおよそ反比例します。Random Cut Forest は、各構成ツリーからの平均スコアを計算し、サンプルサイズに関して結果をスケーリングすることによって、異常スコアを割り当てます。RCF アルゴリズムは、リファレンス [1] で説明されているものに基づいています。

## ランダムなデータのサンプリング
<a name="rcf-rndm-sample-data"></a>

RCF アルゴリズムにおける最初のステップは、トレーニングデータのランダムなサンプルを取得することです。特に、合計データポイント ![\[Equation in text-form: N\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf14.jpg) からのサイズ ![\[Equation in text-form: K\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf13.jpg) のサンプルが必要だとします。トレーニングデータが十分に小さければ、データセット全体を使用することができ、このセットからランダムに ![\[Equation in text-form: K\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf13.jpg) 個の要素を抽出することができます。ただし、多くの場合、トレーニングデータが大きすぎてすべてが一度には収まらないため、このアプローチは実行不可能です。代わりに、貯蔵サンプリングと呼ばれる手法を使用します。

[貯蓄サンプリング](https://en.wikipedia.org/wiki/Reservoir_sampling)は、データセット ![\[Equation in text-form: S={S_1,...,S_N}\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf3.jpg) からランダムなサンプルを効率的に引き出すためのアルゴリズムであり、データセット内の要素は一度に 1 つずつまたはバッチで観測できます。実際に、![\[Equation in text-form: N\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf14.jpg) が*事前*に認識されていなくても、貯蓄サンプリングは成功します。![\[Equation in text-form: K=1\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf15.jpg) である場合など、1 つのサンプルしかリクエストされない場合、アルゴリズムは次のようになります。

**アルゴリズム: 貯蔵サンプリング**
+  入力: データセットまたはデータストリーム![\[Equation in text-form: S={S_1,...,S_N}\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf3.jpg) 
+  ランダムなサンプル![\[Equation in text-form: X=S_1\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf4.jpg)の初期化 
+  確認済みのサンプルごと ![\[Equation in text-form: S_n,n=2,...,N\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf5.jpg):
  +  均一な乱数![\[Equation in text-form: \xi \in [0,1]\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf6.jpg)を選択 
  +  もし ![\[Equation in text-form: \xi \less 1/n\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf7.jpg) 
    +  ![\[Equation in text-form: X=S_n\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf8.jpg) を設定する 
+  戻り値![\[Equation in text-form: X\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf9.jpg) 

このアルゴリズムは、すべての ![\[Equation in text-form: n=1,...,N\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf11.jpg) において ![\[Equation in text-form: P(X=S_n)=1/N\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf10.jpg) となるようなランダムなサンプルを選択します。![\[Equation in text-form: K>1\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/rcf12.jpg) である場合、アルゴリズムはさらに複雑になります。また、ランダムサンプリングの中で置き換えがあるものとないものの区別が必要です。RCF は、[2] で説明されているアルゴリズムに基づいて、トレーニングデータに対して置き換えのない拡張貯蔵サンプリングを実行します。

## RCF モデルをトレーニングして推論を生成する
<a name="rcf-training-inference"></a>

RCF の次のステップは、ランダムなデータサンプルを使用してランダムカットフォレストを構築することです。まず、サンプルは、フォレスト内のツリー数に等しく、等しいサイズのパーティション数に分割されます。次に、各パーティションは個々のツリーに送信されます。ツリーは、データドメインを境界ボックスに分割することにより、そのパーティションを再帰的にバイナリツリーに編成します。

この手順を、分かりやすく例を挙げて説明しましょう。たとえば、あるツリーに次の 2 次元データセットが指定されているとします。対応するツリーは、ルートノードに初期化されます。

![\[2 次元データセット。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/RCF1.jpg)


図: 1 つの異常データポイント (オレンジ色) を除き、ほとんどのデータがクラスター内 (青) にある 2 次元データセット。ツリーはルートノードで初期化されます。

RCF アルゴリズムは、まずデータの境界ボックスを計算し、ランダムな次元 (より高い「分散」を持つ次元の重み付けを高くする) を選択し、その後、その次元を通して超平面「カット」の位置をランダムに決定することにより、ツリー内のこれらのデータを整理します。生成される 2 つのサブスペースが独自のサブツリーを定義します。この例では、カットにより、サンプルの残りの部分から孤立したポイントが分離されます。結果のバイナリツリーの最初のレベルは、2 つのノードで構成されます。1 つは、最初のカットの左側のポイントのサブツリーを構成し、もう 1 つは右側にある単一点を表します。

![\[2 次元データセットを分割するランダムなカット。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/RCF2.jpg)


図: 2 次元データセットを分割するランダムなカット。異常なデータポイントは、他のポイントよりも小さなツリーの深さの境界ボックスに孤立して存在する可能性が高くなります。

その後、境界ボックスはデータの左右の半分それぞれについて計算され、ツリーの各葉がサンプルからの単一のデータポイントを表すようになるまでプロセスが繰り返されます。孤立したポイントが十分に離れている場合、ランダムなカットはポイント分離という結果になる可能性が高くなります。この観察は、大まかに言えば、ツリーの深さが異常スコアに反比例することを示しています。

トレーニング済みの RCF モデルを使用して推論を実行する場合、最終的な異常スコアは各ツリーで報告されるスコア全体の平均として報告されます。新しいデータポイントは、ツリーにまだ存在しないことがありますのでご注意ください。新しいポイントに関連付けられたスコアを確認するには、データポイントが指定されたツリーに挿入され、ツリーが効率的に (また一時的に) 上述のトレーニングプロセスと同等の方法で再構築されることが必要です。つまり、結果のツリーでは、その入力データポイントはツリーの構築時に最初に使用されたサンプルのメンバーのようになります。報告されたスコアは、ツリー内の入力ポイントの深さに反比例します。

## ハイパーパラメータを選択する
<a name="rcf-choose-hyperparam"></a>

RCF モデルを調整するために使用される主なハイパーパラメータは `num_trees` と `num_samples_per_tree` です。最終スコアは各ツリーで報告されるスコアの平均であるため、`num_trees` が増加すると、異常スコアで観察されるノイズは減少します。最適な値はアプリケーションごとに異なりますが、スコアノイズとモデル複雑さ間のバランスとして最初に 100 ツリーを使用することをお勧めします。推論時間はツリーの数に比例することに注意してください。トレーニング時間も影響を受けますが、大方は上述の貯蔵サンプリングアルゴリズムによって決まります。

パラメータ `num_samples_per_tree` は、データセット内で想定される異常の密度と関連しています。特に、`num_samples_per_tree` が異常データの比率を通常データに近づけるように `1/num_samples_per_tree` を選択する必要があります。たとえば、各ツリーで 256 サンプルを使用する場合、時間の 256 分の 1､つまりおよそ 0.4% の異常がデータに含まれていることが予測されます。ここでも、このハイパーパラメータの最適な値はアプリケーションに応じて異なります。

## リファレンス
<a name="references"></a>

1.  Sudipto Guha、Nina Mishra、Gourav Roy、および Okke Schrijvers。「堅牢なランダムカットフォレストベースの、ストリームにおける異常検出。」 *機械学習に関する国際会議*、2712～2721 ページ、2016 年。

1.  Byung-Hoon Park、George Ostrouchov、Nagiza F. Samatova、および Al Geist。「貯蔵ベースの、データストリームから置換可能なランダムサンプリング。」 *2004 年データマイニングに関する SIAM 国際会議会報*、492 ～ 496 ページ。Society for Industrial and Applied Mathematics、2004 年。

# RCF ハイパーパラメータ
<a name="rcf_hyperparameters"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Amazon SageMaker AI RCF アルゴリズムのハイパーパラメータを示します。ハイパーパラメータの選択に関する推奨事項を含む詳細については、「[RCF の仕組み](rcf_how-it-works.md)」を参照してください。




| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim |  データセット内の特徴の数。([ランダムカットフォレスト](https://sagemaker.readthedocs.io/en/stable/algorithms/unsupervised/randomcutforest.html)推定器を使用する場合、この値は自動的に計算されるため、指定する必要はありません)。 **必須** 有効な値 : 正の整数 (最小: 1、最大: 10000)  | 
| eval\$1metrics |  ラベル付きテストデータセットに使用されるメトリクスのリスト。出力用に次のメトリクスを選択できます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/rcf_hyperparameters.html) **オプション** 有効な値: `accuracy` または `precision_recall_fscore` から取得された有効な値が含まれるリスト。 デフォルト値: `accuracy`、`precision_recall_fscore` がとちらも計算されます。  | 
| num\$1samples\$1per\$1tree |  トレーニングデータセットから各ツリーに指定されたランダムなサンプルの数。 **オプション** 有効な値: 正の整数 (最小: 1、最大: 2048) デフォルト値: 256  | 
| num\$1trees |  フォレスト内のツリーの数。 **オプション** 有効な値: 正の整数 (最小: 50、最大: 1000) デフォルト値: 100  | 

# RCF モデルを調整する
<a name="random-cut-forest-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整またはハイパーパラメータ最適化とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

Amazon SageMaker AI RCF アルゴリズムは、ハイパーパラメータの最適化のためにラベル付きテストデータセットを必要とする、教師なしの異常検出アルゴリズムです。RCF は、テストデータポイントの異常スコアを計算し、それらのスコアが平均スコアの標準偏差の 3 倍を超えている場合は、データポイントを異常とラベル付けします。これは 3 シグマ限界法と呼ばれます。F1 スコアは、計算ラベルと実際のラベルの差に基づいて計算されます。ハイパーパラメータ調整ジョブは、そのスコアを最大化するモデルを見つけます。ハイパーパラメータ最適化の成功は、テストデータセットに対する 3 シグマ限界法の適用可能性に依存します。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## RCF アルゴリズムによって計算されたメトリクス
<a name="random-cut-forest-metrics"></a>

RCF アルゴリズムは、トレーニング中に以下のメトリクスを計算します。モデルを調整するときには、このメトリクスを目標メトリクスとして選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:f1 | 計算ラベルと実際のラベルの差に基づく、テストデータセットの F1 スコア。 | 最大化 | 

## 調整可能な RCF ハイパーパラメータ
<a name="random-cut-forest-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して RCF モデルを調整できます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| num\$1samples\$1per\$1tree | IntegerParameterRanges | MinValue: 1、MaxValue:2048 | 
| num\$1trees | IntegerParameterRanges | MinValue: 50、MaxValue:1000 | 

# RCF のレスポンス形式
<a name="rcf-in-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。SageMaker AI ランダムカットフォレストは、高密度と疎の JSON および RecordIO 形式の両方をサポートしています。このトピックには、SageMaker RCF AI アルゴリズムで使用可能な出力形式のリストが含まれています。

## JSON レスポンスの形式
<a name="RCF-json"></a>

ACCEPT: application/json。

```
    {                                                                                                                                                                                                                                                                                    
        "scores":    [                                                                                                                                                                                                                                                                   
            {"score": 0.02},                                                                                                                                                                                                                                                             
            {"score": 0.25}                                                                                                                                                                                                                                                              
        ]                                                                                                                                                                                                                                                                                
    }
```

### JSONLINES レスポンスの形式
<a name="RCF-jsonlines"></a>

ACCEPT: application/jsonlines。

```
{"score": 0.02},
{"score": 0.25}
```

## RECORDIO レスポンスの形式
<a name="rcf-recordio"></a>

ACCEPT: application/x-recordio-protobuf。

```
    [                                                                                                                                                                                                                                                                                    
         Record = {                                                                                                                                                                                                                                                                           
             features = {},                                                                                                                                                                                                                                                                   
             label = {                                                                                                                                                                                                                                                                       
                 'score': {                                                                                                                                                                                                                                                                   
                     keys: [],                                                                                                                                                                                                                                                                
                     values: [0.25]  # float32                                                                                                                                                                                                                                                
                 }                                                                                                                                                                                                                                                                            
             }                                                                                                                                                                                                                                                                                
         },                                                                                                                                                                                                                                                                                   
         Record = {                                                                                                                                                                                                                                                                           
             features = {},                                                                                                                                                                                                                                                                   
             label = {                                                                                                                                                                                                                                                                       
                 'score': {                                                                                                                                                                                                                                                                   
                     keys: [],                                                                                                                                                                                                                                                                
                     values: [0.23]  # float32                                                                                                                                                                                                                                                
                 }                                                                                                                                                                                                                                                                            
             }                                                                                                                                                                                                                                                                                
         }                                                                                                                                                                                                                                                                                    
    ]
```

# コンピュータビジョン用の組み込み SageMaker AI アルゴリズム
<a name="algorithms-vision"></a>

SageMaker AI は、イメージ分類、オブジェクト検出、コンピュータビジョンに使用される画像処理アルゴリズムを提供しています。
+ [画像分類 - MXNet](image-classification.md) - 回答を含むサンプルデータを使用します (教師ありアルゴリズムと呼ばれる)。** このアルゴリズムを使用してイメージを分類します。
+ [画像分類 - TensorFlow](image-classification-tensorflow.md) — トレーニング済 TensorFlow Hub モデルを使用して、特定のタスクに合わせて微調整します (教師ありアルゴリズムと呼ばれる)。 このアルゴリズムを使用してイメージを分類します。
+ [オブジェクト検出 - MXNet](object-detection.md) — 1 つの深層ニューラルネットワークを使用して、イメージ内のオブジェクトを検出および分類します。このアルゴリズムは、入力としてイメージを取得し、イメージシーン内のオブジェクトのすべてのインスタンスを識別する、教師あり学習アルゴリズムです。
+ [オブジェクト検出 - TensorFlow](object-detection-tensorflow.md) — 画像内の境界ボックスとオブジェクトラベルを検出します。これは、利用可能な事前トレーニング済み TensorFlow モデルによる転移学習をサポートする教師あり学習アルゴリズムです。
+ [セマンティックセグメンテーションアルゴリズム](semantic-segmentation.md) - コンピュータビジョンアプリケーション開発のためのピクセルレベルのきめ細かいアプローチを提供します。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| 画像分類 - MXNet | トレーニングと検証、(オプションで) train\$1lst、validation\$1lst、およびモデル | ファイルまたはパイプ | recordIO またはイメージファイル (.jpg または .png)  | GPU | あり | 
| 画像分類 - TensorFlow | トレーニングおよび検証 | ファイル | 画像ファイル (.jpg、.jpeg、または .png)  | CPU または GPU | はい (単一インスタンス上の複数の GPU 間でのみ) | 
| オブジェクト検出 | トレーニングと検証、(オプションで) train\$1annotation、validation\$1annotation、およびモデル | ファイルまたはパイプ | recordIO またはイメージファイル (.jpg または .png)  | GPU | あり | 
| オブジェクト検出 - TensorFlow | トレーニングおよび検証 | ファイル | 画像ファイル (.jpg、.jpeg、または .png)  | GPU | はい (単一インスタンス上の複数の GPU 間でのみ) | 
| セマンティックセグメンテーション | トレーニングと検証、train\$1annotation、validation\$1annotation、および (オプションで) label\$1map およびモデル | ファイルまたはパイプ | 画像ファイル | GPU (単一インスタンスのみ) | なし | 

# 画像分類 - MXNet
<a name="image-classification"></a>

Amazon SageMaker の画像分類アルゴリズムは、マルチラベル分類をサポートする教師あり学習アルゴリズムです。入力として画像を取得し、その画像に割り当てられた 1 つ以上のラベルを出力します。畳み込みニューラルネットワークを使用します。これは、ゼロからトレーニングすることも、大量のトレーニングイメージが使用可能でない場合に転移学習を使用してトレーニングすることもできます。

Amazon SageMaker AI イメージ分類アルゴリズムに推奨される入力形式は、Apache MXNet [RecordIO](https://mxnet.apache.org/api/faq/recordio) です。ただし、.jpg または .png の形式で RAW イメージを使用することもできます。機械学習システムの効率的なデータ準備と読み込みの概要については、[こちらの説明](https://mxnet.apache.org/api/architecture/note_data_loading)を参照してください。

**注記**  
既存の深層学習フレームワークとの高い相互運用性を維持するために、これは他の Amazon SageMaker AI アルゴリズムによって一般に使用される protobuf データ形式とは異なります。

畳み込みネットワークの詳細については、以下を参照してください。
+ [Deep residual learning for image recognition (イメージ認識のための深層残差学習)](https://arxiv.org/abs/1512.03385) Kaiming He 他、2016 IEEE Conference on Computer Vision and Pattern Recognition (2016 年コンピュータビジョンとパターン認識に関する IEEE 会議)
+ [ImageNet イメージデータベース](http://www.image-net.org/)
+ [Gluon-CV と MXNet によるイメージ分類](https://gluon-cv.mxnet.io/build/examples_classification/index.html)

**Topics**
+ [イメージ分類アルゴリズムの入出力インターフェイス](#IC-inputoutput)
+ [イメージ分類アルゴリズムの EC2 インスタンスの推奨事項](#IC-instances)
+ [イメージ分類サンプルノートブック](#IC-sample-notebooks)
+ [イメージ分類の仕組み](IC-HowItWorks.md)
+ [イメージ分類ハイパーパラメータ](IC-Hyperparameter.md)
+ [イメージ分類モデルを調整する](IC-tuning.md)

## イメージ分類アルゴリズムの入出力インターフェイス
<a name="IC-inputoutput"></a>

SageMaker AI イメージ分類アルゴリズムは、ファイルモードでのトレーニング用に RecordIO (`application/x-recordio`) とイメージ (`image/png`、`image/jpeg`、`application/x-image`) コンテンツタイプの両方をサポートし、パイプモードでのトレーニング用に RecordIO (`application/x-recordio`) コンテンツタイプをサポートします。ただし、RecordIO ファイルを作成せずに、拡張マニフェスト形式を使用して、イメージファイル (`image/png`、`image/jpeg`、`application/x-image`) を使用してパイプモードでトレーニングすることもできます。

分散トレーニングは、ファイルモードとパイプモードでサポートされています。パイプモードで RecordIO コンテンツタイプを使用する場合は、`S3DataSource` の `S3DataDistributionType` を `FullyReplicated` に設定する必要があります。このアルゴリズムは、データが各マシンにコピーされる完全にレプリケートされるモデルをサポートします。

このアルゴリズムでは、推論に `image/png`、`image/jpeg`、および `application/x-image` のみをサポートします。

### RecordIO 形式でトレーニングする
<a name="IC-recordio-training"></a>

トレーニングに RecordIO フォーマットを使用する場合は、`train` チャネルと `validation` チャネルの両方を `InputDataConfig` リクエストの [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) パラメータの値として指定します。1 つの RecordIO (`.rec`) ファイルを `train` チャネルで指定し、もう 1 つの RecordIO ファイルを `validation` チャネルで指定します。両方のチャネルのコンテンツタイプを `application/x-recordio` に設定します。

### イメージ形式でトレーニングする
<a name="IC-image-training"></a>

トレーニングにイメージフォーマットを使用する場合は、`train`、`validation`、`train_lst`、`validation_lst` チャネルを `InputDataConfig` リクエストの [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) パラメータの値として指定します。`.jpg` および `.png` チャネルの個々のイメージデータ (`train` または `validation` ファイル) を指定します。`.lst` チャネルと `train_lst` チャネルそれぞれに 1 つの `validation_lst` ファイルを指定します。4 つのチャネルすべてのコンテンツタイプを `application/x-image` に設定します。

**注記**  
SageMaker AI は、トレーニングデータと検証データを異なるチャネルから別々に読み取るため、それぞれのデータは異なるフォルダに保存する必要があります。

`.lst` ファイルはタブ区切りファイルで、イメージファイルのリストを含む 3 つの列があります。最初の列はイメージのインデックスを指定し、2 番目の列はイメージのクラスラベルインデックスを指定します。3 番目の列はイメージファイルの相対パスを指定します。最初の列のイメージインデックスはすべてのイメージにわたって一意である必要があります。一連のクラスラベルインデックスには連番が付けられ、番号は 0 から開始する必要があります。たとえば、0 は cat クラス、1 は dog クラスなどです。

 次は、`.lst` ファイルの例です。

```
5      1   your_image_directory/train_img_dog1.jpg
1000   0   your_image_directory/train_img_cat1.jpg
22     1   your_image_directory/train_img_dog2.jpg
```

たとえば、トレーニングイメージが `s3://<your_bucket>/train/class_dog`、`s3://<your_bucket>/train/class_cat` などに保存されている場合は、`train` チャネルのパスをデータの最上位ディレクトリである `s3://<your_bucket>/train` として指定します。`.lst` ファイルで、`train_image_dog1.jpg` という名前の個々のファイルの相対パスを `class_dog` クラスディレクトリに `class_dog/train_image_dog1.jpg` として指定します。すべてのイメージファイルを `train` ディレクトリ内にある 1 つのサブディレクトリに保存することもできます。その場合は、そのサブディレクトリの相対パスを使用します。例えば、`s3://<your_bucket>/train/your_image_directory`。

### 拡張マニフェストイメージ形式でトレーニングする
<a name="IC-augmented-manifest-training"></a>

拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `InputDataConfig` パラメータの値として、トレーニングチャネルと検証チャネルの両方を指定する必要があります。形式を使用している間、イメージとそれに対応する注釈のリストを含む S3 マニフェストファイルを生成する必要があります。マニフェストファイル形式は、各行が 1 つのサンプルを表す [JSON Lines](http://jsonlines.org/) 形式になっている必要があります。イメージは、その S3 の場所を指す `'source-ref'` タグを使用して指定します。注釈は、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで指定されている `"AttributeNames"` パラメータ値の下に入力します。`metadata` タグの下に追加のメタデータを含めることもできますが、これらはアルゴリズムによって無視されます。次の例では、`"AttributeNames"` は画像および注釈参照 `["source-ref", "class"]` のリストに含まれます。対応するラベル値は最初のイメージの場合は `"0"`、2 番目のイメージの場合は `“1”` です。

```
{"source-ref":"s3://image/filename1.jpg", "class":"0"}
{"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
```

ImageClassification アルゴリズムをトレーニングする場合、入力ファイルの `"AttributeNames"` の順番が重要になります。パイプ指定されたデータは特定の順で受け入れられます。`image` が最初になり、その後に `label` が続きます。したがって、この例の「AttributeNames」では、`"source-ref"` が最初になり、その後に `"class"` が続きます。拡張マニフェストで ImageClassification アルゴリズムを使用する場合、`RecordWrapperType` パラメータの値は `"RecordIO"` である必要があります。

値の JSON 配列を指定することで、マルチラベルのトレーニングもサポートされます。`num_classes` ハイパーパラメータは、クラスの合計数と一致するように設定する必要があります。有効なラベル形式には、multi-hot と class-id の 2 つがあります。

multi-hot 形式では、各ラベルはすべてのクラスの multi-hot エンコードされたベクトルであり、各クラスは 0 または 1 の値をとります。次の例では 3 つのクラスがあります。最初のイメージはクラス 0 と 2 でラベル付けされ、2 番目のイメージはクラス 2 のみでラベル付けされます。

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
```

class-id 形式では、各ラベルはデータポイントに適用される [0, `num_classes`) からのクラス ID のリストです。代わりに、前の例は次のようになります。

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
```

multi-hot 形式はデフォルトですが、 `label-format` パラメータを使用してコンテンツタイプに明示的に設定できます (`"application/x-recordio; label-format=multi-hot".`)。 GroundTruth によって出力される形式である class-id 形式は、明示的に設定する必要があります (`"application/x-recordio; label-format=class-id".`)。

拡張マニフェストファイルの詳細については、[トレーニングジョブの拡張マニフェストファイル](augmented-manifest.md)を参照してください。

### 段階的トレーニング
<a name="IC-incremental-training"></a>

SageMaker AI で以前にトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードすることもできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。SageMaker AI イメージ分類モデルは、SageMaker AI でトレーニングされた別の組み込みイメージ分類モデルでのみシードできます。

事前トレーニング済みモデルを使用するには、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで、`InputDataConfig` パラメータに `ChannelName` を "model" と指定します。モデルチャネルの `ContentType` を `application/x-sagemaker-model` に設定します。モデルチャネルにアップロードする新しいモデルと事前トレーニング済みモデルの両方の入力ハイパーパラメータの設定は、`num_layers`、`image_shape`、および `num_classes` 入力パラメータの設定と同じである必要があります。これらのパラメータはネットワークアーキテクチャーを定義します。事前トレーニング済みモデルファイルには、SageMaker AI によって出力された圧縮モデルアーティファクト (.tar.gz 形式) を使用します。入力データには、RecordIO 形式またはイメージ形式を使用できます。

### イメージ分類アルゴリズムによる推論
<a name="IC-inference"></a>

生成されたモデルは推論のためにホストでき、エンコードされた `.jpg` および `.png` イメージ形式を `image/png, image/jpeg`、および `application/x-image` コンテンツタイプとしてサポートします。入力イメージのサイズは自動的に変更されます。出力は、JSON 形式、またはバッチ変換用の [JSON Lines テキスト形式](http://jsonlines.org/)でエンコードされたすべてのクラスの確率値です。イメージ分類モデルはリクエストごとに 1 つのイメージを処理するため、JSON または JSON Lines 形式で 1 行のみを出力します。以下は、JSON Lines 形式のレスポンスの例です。

```
accept: application/jsonlines

 {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
```

トレーニングと推論の詳細については、概要説明で言及しているイメージ分類サンプルノートブックのインスタンスを参照してください。

## イメージ分類アルゴリズムの EC2 インスタンスの推奨事項
<a name="IC-instances"></a>

イメージ分類では、P2、P3、G4dn、G5 インスタンスをサポートしています。大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスを使用することをお勧めします。分散型トレーニングでは複数 GPU および複数マシン設定でアルゴリズムを実行することもできます。CPU (C4 など) インスタンスと GPU (P2、P3、G4dn、または G5) インスタンスの両方を推論に使用できます。

## イメージ分類サンプルノートブック
<a name="IC-sample-notebooks"></a>

SageMaker AI 画像分類アルゴリズムを使用するサンプルノートブックについては、「[Build and Register an MXNet Image Classification Model via SageMaker Pipelines](https://github.com/aws-samples/amazon-sagemaker-pipelines-mxnet-image-classification/blob/main/image-classification-sagemaker-pipelines.ipynb)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。イメージ分類サンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# イメージ分類の仕組み
<a name="IC-HowItWorks"></a>

イメージ分類アルゴリズムでは、イメージを入力として受け取り、それを出力カテゴリの 1 つに分類します。ディープラーニングはイメージ分類ドメインに革命をもたらし、優れたパフォーマンスを実現しました。イメージ分類の精度を高めるために、[ResNet](https://arxiv.org/abs/1512.03385)、[DenseNet](https://arxiv.org/abs/1608.06993)、[Inception](https://arxiv.org/pdf/1409.4842.pdf) などのさまざまなディープラーニングネットワークが開発されています。同時に、これらのネットワークのトレーニングに不可欠なラベル付きのイメージデータを収集する作業が行われてきました。[ImageNet](https://www.image-net.org/) はこのような大規模データセットの 1 つで、約 11,000 個のカテゴリを持つ 1,100 万を超えるイメージがあります。ネットワークが ImageNet データでトレーニングされたら、簡単な再調整や微調整を加えるだけで、そのネットワークを他のデータセットでも一般化できます。この転移学習アプローチでは、ネットワークは重み (この例では ImageNet でトレーニングされたもの) で初期化されます。これは後で別のデータセットのイメージ分類タスク用に微調整できます。

Amazon SageMaker AI のイメージ分類は、完全トレーニングと転移学習の 2 つのモードで実行できます。完全トレーニングモードでは、ネットワークはランダムな重みで初期化され、ユーザーデータでゼロからトレーニングされます。転送学習モードでは、ネットワークは事前にトレーニングされた重みで初期化され、最上位の完全に接続されたレイヤーだけがランダムな重みで初期化されます。次に、ネットワーク全体が新しいデータで微調整されます。このモードでは、小規模なデータセットでもトレーニングを実現できます。これは、ネットワークがすでにトレーニングされているため、十分なトレーニングデータがない場合でも使用できるからです。

# イメージ分類ハイパーパラメータ
<a name="IC-Hyperparameter"></a>

ハイパーパラメータは、機械学習モデルが学習を開始する前に設定されるパラメータです。Amazon SageMaker AI 組み込みのイメージ分類アルゴリズムでは、次のハイパーパラメータがサポートされています。イメージ分類ハイパーパラメータの調整については、「[イメージ分類モデルを調整する](IC-tuning.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1classes | 出力クラスの数。このパラメータは、ネットワーク出力のディメンションを定義し、通常はデータセット内のクラス数に設定されます。 マルチクラス分類に加えて、マルチラベル分類もサポートされています。拡張マニフェストファイルを使用したマルチラベル分類の操作方法の詳細については、「[イメージ分類アルゴリズムの入出力インターフェイス](image-classification.md#IC-inputoutput)」を参照してください。 **必須** 有効な値: 正の整数  | 
| num\$1training\$1samples | 入力データセット内のトレーニング例の数。 この値とトレーニングセット内のサンプル数が一致しない場合、`lr_scheduler_step` パラメータの動作は未定義になり、分散型トレーニングの精度に影響することがあります。 **必須** 有効な値: 正の整数  | 
| augmentation\$1type |  データ補強タイプ。入力イメージは、次に示す複数の方法で補強できます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/IC-Hyperparameter.html) **オプション**  有効な値: `crop`、`crop_color`、または `crop_color_transform` デフォルト値: なし  | 
| beta\$11 | `adam` の beta1。つまり、最初のモーメントの見積もりの指数関数的減衰率です。 **オプション**  有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.9 | 
| beta\$12 | `adam` の beta2。つまり、2 番目のモーメントの見積もりの指数関数的減衰率です。 **オプション**  有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.999 | 
| checkpoint\$1frequency | モデルパラメータを保存する期間 (エポック数)。 すべてのチェックポイントファイルは、最終的なモデルファイル「model.tar.gz」の一部として保存され、指定されたモデルの場所に S3 にアップロードされることに注意してください。これにより、トレーニング中に保存されたチェックポイントの数に比例してモデルファイルのサイズが大きくなります。 **オプション** 有効な値: `epochs` 以下の正の整数。 デフォルト値: なし (検証精度が最も高いエポックにチェックポイントを保存します) | 
| early\$1stopping | トレーニング中に早期停止ロジックを使用する場合は `True`。使用しない場合は `False`。 **オプション** 有効な値: `True` または `False` デフォルト値: `False` | 
| early\$1stopping\$1min\$1epochs | 早期停止ロジックを呼び出す前に実行する必要があるエポックの最小数。`early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 10 | 
| early\$1stopping\$1patience | 関連メトリクスで改善が見られなかった場合にトレーニングを終了する前に待機するエポックの数。`early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 5 | 
| early\$1stopping\$1tolerance | 精度検証メトリクスの改善を測定する相対的な許容値。精度の改善を前回の最高精度で除算した比率が `early_stopping_tolerance` 値セットより小さい場合、早期停止は改善がないと見なします。`early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 1 デフォルト値: 0.0 | 
| epochs | トレーニングエポックの数。 **オプション** 有効な値: 正の整数 デフォルト値: 30 | 
| eps | `adam` と `rmsprop` のイプシロン。通常は、0 で除算されないように小さな値に設定されます。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 1e-8 | 
| gamma | `rmsprop` のガンマ、二乗勾配の移動平均の減衰係数。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.9 | 
| image\$1shape | 入力イメージのディメンション。これはネットワークの入力レイヤーと同じサイズになります。フォーマットは "`num_channels`, 高さ, 幅" として定義されます。ネットワークが入力の多様なディメンションを処理できるため、イメージディメンションは任意の値を受け取ることができます。ただし、大きなイメージディメンションが使用されている場合はメモリの制約がある可能性があります。事前にトレーニングされたモデルでは、224 x 224 に固定されたイメージサイズのみを使用できます。イメージ分類の一般的なイメージディメンションは '3,224,224' です。これは ImageNet データセットに似ています。 トレーニングの場合、任意の次元でいずれかの入力イメージがこのパラメータよりも小さいと、トレーニングは失敗します。イメージが大きい場合、このパラメータで指定されたクロップ領域を使用して、イメージの一部がクロップされます。ハイパーパラメータ `augmentation_type` が設定されている場合、ランダムクロップが行われ、それ以外の場合は、中央クロップが行われます。 推論時に、入力イメージのサイズはトレーニング中に使用された `image_shape` に変更されます。縦横比は保持されず、イメージはクロップされません。 **オプション** 有効な値: 文字列 デフォルト値: '3,224,224' | 
| kv\$1store |  分散型トレーニング中の重み更新同期モード。重み更新は、複数マシン間で同期的または非同期的に更新できます。同期更新は、一般には非同期更新よりも精度が高くなりますが、低速な可能性があります。詳細については、MXNet の分散型トレーニングを参照してください。 このパラメータは、単一のマシントレーニングには適用されません。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/IC-Hyperparameter.html) **オプション** 有効な値: `dist_sync` または `dist_async` デフォルト値: なし  | 
| learning\$1rate | 初期学習レート。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.1 | 
| lr\$1scheduler\$1factor | `lr_scheduler_step` = `lr_new` \$1 `lr_old` として定義される、`lr_scheduler_factor` パラメータと組み合わせて使用される学習レートを下げる率。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.1 | 
| lr\$1scheduler\$1step | 学習レートを下げるエポック。`lr_scheduler_factor` パラメータで説明しているように、学習レートはこれらのエポックで `lr_scheduler_factor` だけ下げられます。たとえば、値が "10, 20" に設定されている場合、学習レートは 10 番目のエポックの後に `lr_scheduler_factor` だけ下げられ、20 番目のエポックの後に再び `lr_scheduler_factor` だけ下げられます。エポックは "," で区切られます。 **オプション** 有効な値: 文字列 デフォルト値: なし | 
| mini\$1batch\$1size | トレーニングのバッチサイズ。単一マシンのマルチ GPU の設定では、各 GPU は `mini_batch_size`/num\$1gpu トレーニングサンプルを処理します。dist\$1sync モードの複数マシントレーニングでは、実際のバッチサイズは `mini_batch_size` \$1 マシン数です。詳細については、MXNet のドキュメントを参照してください。 **オプション** 有効な値: 正の整数 デフォルト値: 32 | 
| momentum | `sgd` と `nag` のモーメンタムであり、他のオプティマイザでは無視されます。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.9 | 
| multi\$1label |  各サンプルに複数のラベルを割り当てることができる複数ラベル分類に使用するフラグ。全クラスの平均精度が記録されます。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| num\$1layers | ネットワークのレイヤー数。大きなイメージサイズ (たとえば、224x224 - ImageNet など) のデータでは、レイヤー数をセット [18、34、50、101、152、200] から選択することをお勧めします。小さなイメージサイズ (たとえば、28x28 - CIFAR など) のデータでは、レイヤー数をセット [20、32、44、56、110] から選択することをお勧めします。各セット内のレイヤー数は ResNet の論文に基づきます。転移学習では、レイヤー数は基本ネットワークのアーキテクチャを定義するため、セット [18、34、50、101、152、200] からのみ選択できます。 **オプション** 有効な値: [18, 34, 50, 101, 152, 200] または [20, 32, 44, 56, 110] 内の正の整数。 デフォルト値: 152 | 
| optimizer | オプティマイザのタイプ。オプティマイザのパラメータの詳細については、MXNet の API を参照してください。 **オプション** 有効な値: `sgd`、`adam`、`rmsprop`、`nag` のいずれか。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/IC-Hyperparameter.html) デフォルト値: `sgd` | 
| precision\$1dtype | トレーニングに使用される重みの精度。アルゴリズムは、重みに単精度 (`float32`) または半精度 (`float16`) を使用できます。重みに半精度を使用すると、メモリ消費量が減少します。 **オプション** 有効な値: `float32` または `float16` デフォルト値: `float32` | 
| resize | トレーニングのためにイメージのサイズを変更した後、イメージの最短辺にあるピクセル数です。パラメータが設定されていない場合、トレーニングデータはサイズ変更なしで使用されます。パラメータは、トレーニングの失敗を防ぐため、`image_shape` の幅と高さのコンポーネントよりも大きくする必要があります。 イメージコンテンツタイプを使用する場合は**必須** RecordIO コンテンツタイプを使用する場合は**オプション** 有効な値: 正の整数 デフォルト値: なし  | 
| top\$1k | トレーニング中に top-k 精度を報告します。top-1 トレーニング精度はすでに報告されている通常のトレーニング精度と同じであるため、このパラメータは 1 より大きい必要があります。 **オプション** 有効な値: 1 より大きい正の整数。 デフォルト値: なし | 
| use\$1pretrained\$1model | トレーニングに事前トレーニング済みモデルを使用するためのフラグ。1 に設定すると、対応するレイヤー数の事前トレーニング済みモデルがロードされ、トレーニングに使用されます。最上位 FC レイヤーのみがランダムな重みで再初期化されます。それ以外の場合、ネットワークはゼロからトレーニングされます。 **オプション** 有効な値: 0 または 1 デフォルト値: 0 | 
| use\$1weighted\$1loss |  重みがクラスの分布に基づいて計算される、複数ラベル分類に重み付き交差エントロピー損失を使用するためのフラグ (`multi_label` = 1 の場合にのみ使用)。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| weight\$1decay | `sgd` と `nag` の係数重み減衰であり、他のオプティマイザでは無視されます。 **オプション** 有効な値: 浮動小数点数。[0, 1] の範囲です。 デフォルト値: 0.0001 | 

# イメージ分類モデルを調整する
<a name="IC-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## イメージ分類アルゴリズムによって計算されたメトリクス
<a name="IC-metrics"></a>

イメージ分類アルゴリズムは教師ありアルゴリズムです。このアルゴリズムは、トレーニング中に計算された精度メトリクスを報告します。モデルを調整するときには、このメトリクスを目標メトリクスとして選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:accuracy | 実行された予測の総数に対する正しい予測の数の比率。 | 最大化 | 

## 調整可能なイメージ分類ハイパーパラメータ
<a name="IC-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用してイメージ分類モデルを調整します。イメージ分類の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`mini_batch_size`、`learning_rate`、および `optimizer` です。選択した `optimizer` に基づいて、`momentum`、`weight_decay`、`beta_1`、`beta_2`、`eps`、`gamma` などのオプティマイザ関連のハイパーパラメータを調整します。たとえば、`adam` が `optimizer` である場合にのみ `beta_1` と `beta_2` を使用します。

各オプティマイザで使用されるハイパーパラメータの詳細については、[イメージ分類ハイパーパラメータ](IC-Hyperparameter.md)を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8、MaxValue: 1.0 | 
| gamma | ContinuousParameterRanges | MinValue: 1e-8、MaxValue: 0.999 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.5 | 
| mini\$1batch\$1size | IntegerParameterRanges | MinValue: 8、MaxValue: 512 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['sgd', ‘adam’, ‘rmsprop’, 'nag'] | 
| weight\$1decay | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 

# 画像分類 - TensorFlow
<a name="image-classification-tensorflow"></a>

Amazon SageMaker 画像分類 - TensorFlow アルゴリズムは、[TensorFlow ハブ](https://tfhub.dev/s?fine-tunable=yes&module-type=image-classification&subtype=module,placeholder&tf-version=tf2)の多くの事前トレーニング済みモデルによる転移学習をサポートする教師あり学習アルゴリズムです。大量の画像データが使用可能でない場合でも、転移学習を使用して、使用可能な事前トレーニング済みモデルのいずれかを独自のデータセットで微調整できます。画像分類アルゴリズムは、画像を入力として受け取り、指定された各クラスラベルの確率を出力します。トレーニングデータセットは、.jpg、.jpeg、または .png 形式の画像で構成されている必要があります。このページには、画像分類 - TensorFlow の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

**Topics**
+ [SageMaker 画像分類 - TensorFlow アルゴリズムの使用方法](IC-TF-how-to-use.md)
+ [画像分類 - TensorFlow アルゴリズムの入出力インターフェイス](IC-TF-inputoutput.md)
+ [画像分類 - TensorFlow アルゴリズムの Amazon EC2 インスタンスの推奨事項](#IC-TF-instances)
+ [画像分類 - TensorFlow サンプルノートブック](#IC-TF-sample-notebooks)
+ [画像分類 - TensorFlow の仕組み](IC-TF-HowItWorks.md)
+ [TensorFlow Hub モデル](IC-TF-Models.md)
+ [画像分類 - TensorFlow ハイパーパラメータ](IC-TF-Hyperparameter.md)
+ [画像分類 - TensorFlow モデルを調整する](IC-TF-tuning.md)

# SageMaker 画像分類 - TensorFlow アルゴリズムの使用方法
<a name="IC-TF-how-to-use"></a>

画像分類 - TensorFlow は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker AI Python SDK で画像分類 - TensorFlow を使用する方法について説明します。Amazon SageMaker Studio Classic UI から画像分類 - TensorFlow を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。

画像分類 - TensorFlow アルゴリズムは、互換性のある事前トレーニング済みの TensorFlow Hub モデルのいずれかを使用した転移学習をサポートします。使用可能なすべての事前トレーニング済みモデルのリストについては、「[TensorFlow Hub モデル](IC-TF-Models.md)」を参照してください。事前トレーニング済みのモデルには一意の `model_id` があります。次の例では、MobileNet V2 1.00 224 (`model_id`: `tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4`) を使用してカスタムデータセットを微調整しています。事前トレーニング済みのモデルはすべて TensorFlow Hub から事前にダウンロードされ、Amazon S3 バケットに保存されるため、トレーニングジョブはネットワークから切り離された状態で実行できます。事前に生成されたこれらのモデルトレーニングアーティファクトを使用して SageMaker AI 推定器を構築します。

まず、Docker イメージ URI、トレーニングスクリプト URI、および事前トレーニング済みのモデル URI を取得します。次に、必要に応じてハイパーパラメータを変更します。使用可能なすべてのハイパーパラメータとそのデフォルト値の Python ディクショナリは、`hyperparameters.retrieve_default` で確認できます。詳細については、「[画像分類 - TensorFlow ハイパーパラメータ](IC-TF-Hyperparameter.md)」を参照してください。これらの値を使用して SageMaker AI 推定器を構築します。

**注記**  
デフォルトのハイパーパラメータ値はモデルによって異なります。モデルが大きくなると、デフォルトのバッチサイズは小さくなり、`train_only_top_layer` ハイパーパラメータは `"True"` に設定されます。

この例では、5 つのクラスの花の画像を含む [https://www.tensorflow.org/datasets/catalog/tf_flowers](https://www.tensorflow.org/datasets/catalog/tf_flowers) データセットを使用しています。Apache 2.0 ライセンスで TensorFlow からデータセットを事前にダウンロードし、Amazon S3 で利用できるようになりました。モデルを微調整するには、トレーニングデータセットの Amazon S3 の場所を使用して `.fit` を呼び出します。

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# The sample training data is available in the following S3 bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/tf_flowers/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create SageMaker Estimator instance
tf_ic_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Use S3 path of the training data to launch SageMaker TrainingJob
tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

# 画像分類 - TensorFlow アルゴリズムの入出力インターフェイス
<a name="IC-TF-inputoutput"></a>

TensorFlow Hub モデルに一覧表示されている事前トレーニング済みモデルはそれぞれ、任意の数の画像クラスを持つデータセットに合わせて微調整できます。画像分類 - TensorFlow モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。
+ **トレーニングデータの入力形式:** トレーニングデータは、クラスの数と同じ数のサブディレクトリを持つディレクトリである必要があります。各サブディレクトリには、そのクラスに属する .jpg、.jpeg、.png 形式の画像が必要です。

入力のディレクトリ構造の例を次に示します。このサンプルデータセットには、`roses` と `dandelion` の 2 つのクラスがあります。各クラスフォルダの画像ファイルには任意の名前を付けることができます。入力ディレクトリは、次のようなパスの Amazon S3 バケットでホストされている必要があります: `s3://bucket_name/input_directory/`。末尾の `/` は必須であることに注意してください。

```
input_directory
    |--roses
        |--abc.jpg
        |--def.jpg
    |--dandelion
        |--ghi.jpg
        |--jkl.jpg
```

トレーニング済みモデルは、クラスフォルダ名を出力クラス確率リストのインデックスにマッピングするラベルマッピングファイルを出力します。このマッピングはアルファベット順です。例えば、前の例では dandelion クラスはインデックス 0 で、roses クラスはインデックス 1 です。

トレーニングが完了すると、微調整されたモデルができあがり、段階的トレーニングを使用してさらにトレーニングしたり、推論用に展開したりできます。画像分類 - TensorFlow アルゴリズムは、微調整されたモデルに前処理と後処理のシグネチャを自動的に追加します。これにより、モデルは画像を入力として取り込み、クラス確率を返すことができます。クラスインデックスをクラスラベルにマッピングするファイルは、モデルとともに保存されます。

## 段階的トレーニング
<a name="IC-TF-incremental-training"></a>

以前に SageMaker AI でトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。

**注記**  
SageMaker 画像分類 - TensorFlow モデルは、SageMaker AI でトレーニングされた別の画像分類 - TensorFlow モデルを使用してのみシードできます。

一連のクラスが同じままである限り、任意のデータセットを段階的トレーニングに使用できます。段階的トレーニングのステップは微調整のステップと同様ですが、事前トレーニング済みモデルから始める代わりに、既存の微調整済みモデルから始めます。SageMaker AI 画像分類 - TensorFlow アルゴリズムを使用した段階的トレーニングの例については、「[Introduction to SageMaker TensorFlow - Image Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/image_classification_tensorflow/Amazon_TensorFlow_Image_Classification.ipynb)」サンプルノートブックを参照してください。

## 画像分類 - TensorFlow アルゴリズムによる推論
<a name="IC-TF-inference"></a>

TensorFlow 画像分類トレーニングの結果として生じる微調整済みモデルを推論のためにホストすることができます。推論用の入力画像はすべて `.jpg`、`jpeg`、または `.png` 形式で、コンテンツタイプ `application/x-image` である必要があります。画像分類 - TensorFlow アルゴリズムは、入力画像のサイズを自動的に変更します。

推論を実行すると、確率値、すべてのクラスのクラスラベル、および確率が最も高いクラスインデックスに対応する予測ラベルが JSON 形式にエンコードされて得られます。画像分類 - TensorFlow モデルは、リクエストごとに単一の画像を処理し、1 行だけを出力します。JSON 形式のレスポンスの例を次に示します。

```
accept: application/json;verbose

 {"probabilities": [prob_0, prob_1, prob_2, ...],
  "labels":        [label_0, label_1, label_2, ...],
  "predicted_label": predicted_label}
```

`application/json` に `accept` が設定されている場合、モデルは確率のみを出力します。画像分類 - TensorFlow アルゴリズムによるトレーニングと推論の詳細については、「[Introduction to SageMaker TensorFlow - Image Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/image_classification_tensorflow/Amazon_TensorFlow_Image_Classification.ipynb)」サンプルノートブックを参照してください。

## 画像分類 - TensorFlow アルゴリズムの Amazon EC2 インスタンスの推奨事項
<a name="IC-TF-instances"></a>

画像分類 - TensorFlow アルゴリズムは、次を含むすべてのトレーニング用 CPU および GPU インスタンスをサポートします。
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`
+ `ml.g4dn.xlarge`
+ `ml.g4dn.16.xlarge`
+ `ml.g5.xlarge`
+ `ml.g5.48xlarge`

大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスをお勧めします。CPU (M5 など) インスタンスと GPU (P2、P3、G4Dn、または G5) インスタンスの両方を推論に使用できます。

## 画像分類 - TensorFlow サンプルノートブック
<a name="IC-TF-sample-notebooks"></a>

カスタムデータセットの転移学習に SageMaker 画像分類 - TensorFlow アルゴリズムを使用する方法の詳細については、「[Introduction to SageMaker TensorFlow - Image Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/image_classification_tensorflow/Amazon_TensorFlow_Image_Classification.ipynb)」ノートブックを参照してください。

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# 画像分類 - TensorFlow の仕組み
<a name="IC-TF-HowItWorks"></a>

画像分類 - TensorFlow アルゴリズムでは、画像を入力として受け取り、それを出力クラスレベルの 1 つに分類します。MobileNet、ResNet、Inception、EfficientNet などのさまざまな深層学習ネットワークは、画像分類において非常に正確です。また、大規模な画像データセットで学習させる深層学習ネットワークもあります。ImageNet には、1,100 万を超える画像と約 11,000 のクラスがあります。ImageNet データでネットワークをトレーニングした後、特定のフォーカスを持つデータセットでネットワークを微調整し、より具体的な分類タスクを実行できます。Amazon SageMaker 画像分類 - TensorFlow アルゴリズムは、TensorFlow ハブで使用可能な多くの事前トレーニング済みモデルでの転移学習をサポートします。

トレーニングデータ内のクラスラベルの数に応じて、選択した事前トレーニング済みの TensorFlow Hub モデルに分類レイヤーがアタッチされます。分類レイヤーは、ドロップアウトレイヤー、高密度レイヤー、2 ノルム正則化による全結合レイヤーで構成され、ランダムな重みで初期化されます。このモデルには、ドロップアウトレイヤーのドロップアウト率と高密度レイヤーの L2 正則化係数のハイパーパラメータがあります。その後、ネットワーク全体 (事前トレーニング済みモデルを含む) の微調整、または新しいトレーニングデータの最上位の分類レイヤーだけの微調整のいずれかを実行できます。この転移学習の方法を使用すると、より小さなデータセットでのトレーニングが可能になります。

# TensorFlow Hub モデル
<a name="IC-TF-Models"></a>

画像分類 - TensorFlow アルゴリズムによる転移学習には、次の事前トレーニング済みモデルが使用可能です。

次のモデルは、指定するデータセットにより、サイズ、モデルパラメータの数、トレーニング時間、および推定レイテンシーが大きく異なります。ユースケースに最適なモデルは、微調整するデータセットの複雑さや、トレーニング時間、推論レイテンシー、またはモデルの精度に関する要件によって異なります。


| モデル名 | `model_id` | ソース | 
| --- | --- | --- | 
| MobileNet V2 1.00 224 | `tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/classification/4) | 
| MobileNet V2 0.75 224 | `tensorflow-ic-imagenet-mobilenet-v2-075-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v2_075_224/classification/4) | 
| MobileNet V2 0.50 224 | `tensorflow-ic-imagenet-mobilenet-v2-050-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v2_050_224/classification/4) | 
| MobileNet V2 0.35 224 | `tensorflow-ic-imagenet-mobilenet-v2-035-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v2_035_224/classification/4) | 
| MobileNet V2 1.40 224 | `tensorflow-ic-imagenet-mobilenet-v2-140-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v2_140_224/classification/4) | 
| MobileNet V2 1.30 224 | `tensorflow-ic-imagenet-mobilenet-v2-130-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v2_130_224/classification/4) | 
| MobileNet V2 | `tensorflow-ic-tf2-preview-mobilenet-v2-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/tf2-preview/mobilenet_v2/classification/4) | 
| Inception V3 | `tensorflow-ic-imagenet-inception-v3-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/inception_v3/classification/4) | 
| Inception V2 | `tensorflow-ic-imagenet-inception-v2-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/inception_v2/classification/4) | 
| Inception V1 | `tensorflow-ic-imagenet-inception-v1-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/inception_v1/classification/4) | 
| Inception V3 Preview | `tensorflow-ic-tf2-preview-inception-v3-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/tf2-preview/inception_v3/classification/4) | 
| Inception ResNet V2 | `tensorflow-ic-imagenet-inception-resnet-v2-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/inception_resnet_v2/classification/4) | 
| ResNet V2 50 | `tensorflow-ic-imagenet-resnet-v2-50-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_v2_50/classification/4) | 
| ResNet V2 101 | `tensorflow-ic-imagenet-resnet-v2-101-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_v2_101/classification/4) | 
| ResNet V2 152 | `tensorflow-ic-imagenet-resnet-v2-152-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_v2_152/classification/4) | 
| ResNet V1 50 | `tensorflow-ic-imagenet-resnet-v1-50-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_v1_50/classification/4) | 
| ResNet V1 101 | `tensorflow-ic-imagenet-resnet-v1-101-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_v1_101/classification/4) | 
| ResNet V1 152 | `tensorflow-ic-imagenet-resnet-v1-152-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_v1_152/classification/4) | 
| ResNet 50 | `tensorflow-ic-imagenet-resnet-50-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/resnet_50/classification/1) | 
| EfficientNet B0 | `tensorflow-ic-efficientnet-b0-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b0/classification/1) | 
| EfficientNet B1 | `tensorflow-ic-efficientnet-b1-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b1/classification/1) | 
| EfficientNet B2 | `tensorflow-ic-efficientnet-b2-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b2/classification/1) | 
| EfficientNet B3 | `tensorflow-ic-efficientnet-b3-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b3/classification/1) | 
| EfficientNet B4 | `tensorflow-ic-efficientnet-b4-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b4/classification/1) | 
| EfficientNet B5 | `tensorflow-ic-efficientnet-b5-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b5/classification/1) | 
| EfficientNet B6 | `tensorflow-ic-efficientnet-b6-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b6/classification/1) | 
| EfficientNet B7 | `tensorflow-ic-efficientnet-b7-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/efficientnet/b7/classification/1) | 
| EfficientNet B0 Lite | `tensorflow-ic-efficientnet-lite0-classification-2` | [TensorFlow Hub リンク](https://tfhub.dev/tensorflow/efficientnet/lite0/classification/2) | 
| EfficientNet B1 Lite | `tensorflow-ic-efficientnet-lite1-classification-2` | [TensorFlow Hub リンク](https://tfhub.dev/tensorflow/efficientnet/lite1/classification/2) | 
| EfficientNet B2 Lite | `tensorflow-ic-efficientnet-lite2-classification-2` | [TensorFlow Hub リンク](https://tfhub.dev/tensorflow/efficientnet/lite2/classification/2) | 
| EfficientNet B3 Lite | `tensorflow-ic-efficientnet-lite3-classification-2` | [TensorFlow Hub リンク](https://tfhub.dev/tensorflow/efficientnet/lite3/classification/2) | 
| EfficientNet B4 Lite | `tensorflow-ic-efficientnet-lite4-classification-2` | [TensorFlow Hub リンク](https://tfhub.dev/tensorflow/efficientnet/lite4/classification/2) | 
| MobileNet V1 1.00 224 | `tensorflow-ic-imagenet-mobilenet-v1-100-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/4) | 
| MobileNet V1 1.00 192 | `tensorflow-ic-imagenet-mobilenet-v1-100-192-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_100_192/classification/4) | 
| MobileNet V1 1.00 160 | `tensorflow-ic-imagenet-mobilenet-v1-100-160-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_100_160/classification/4) | 
| MobileNet V1 1.00 128 | `tensorflow-ic-imagenet-mobilenet-v1-100-128-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_100_128/classification/4) | 
| MobileNet V1 0.75 224 | `tensorflow-ic-imagenet-mobilenet-v1-075-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_075_224/classification/4) | 
| MobileNet V1 0.75 192 | `tensorflow-ic-imagenet-mobilenet-v1-075-192-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_075_192/classification/4) | 
| MobileNet V1 0.75 160 | `tensorflow-ic-imagenet-mobilenet-v1-075-160-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_075_160/classification/4) | 
| MobileNet V1 0.75 128 | `tensorflow-ic-imagenet-mobilenet-v1-075-128-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_075_128/classification/4) | 
| MobileNet V1 0.50 224 | `tensorflow-ic-imagenet-mobilenet-v1-050-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_050_224/classification/4) | 
| MobileNet V1 0.50 192 | `tensorflow-ic-imagenet-mobilenet-v1-050-192-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_050_192/classification/4) | 
| MobileNet V1 1.00 160 | `tensorflow-ic-imagenet-mobilenet-v1-050-160-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_050_160/classification/4) | 
| MobileNet V1 0.50 128 | `tensorflow-ic-imagenet-mobilenet-v1-050-128-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_050_128/classification/4) | 
| MobileNet V1 0.25 224 | `tensorflow-ic-imagenet-mobilenet-v1-025-224-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_025_224/classification/4) | 
| MobileNet V1 0.25 192 | `tensorflow-ic-imagenet-mobilenet-v1-025-192-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_025_192/classification/4) | 
| MobileNet V1 0.25 160 | `tensorflow-ic-imagenet-mobilenet-v1-025-160-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_025_160/classification/4) | 
| MobileNet V1 0.25 128 | `tensorflow-ic-imagenet-mobilenet-v1-025-128-classification-4` | [TensorFlow Hub リンク](https://tfhub.dev/google/imagenet/mobilenet_v1_025_128/classification/4) | 
| BiT-S R50x1 | `tensorflow-ic-bit-s-r50x1-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/s-r50x1/ilsvrc2012_classification/1) | 
| BiT-S R50x3 | `tensorflow-ic-bit-s-r50x3-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/s-r50x3/ilsvrc2012_classification/1) | 
| BiT-S R101x1 | `tensorflow-ic-bit-s-r101x1-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/s-r101x1/ilsvrc2012_classification/1) | 
| BiT-S R101x3 | `tensorflow-ic-bit-s-r101x3-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/s-r101x3/ilsvrc2012_classification/1) | 
| BiT-M R50x1 | `tensorflow-ic-bit-m-r50x1-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r50x1/ilsvrc2012_classification/1) | 
| BiT-M R50x3 | `tensorflow-ic-bit-m-r50x3-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r50x3/ilsvrc2012_classification/1) | 
| BiT-M R101x1 | `tensorflow-ic-bit-m-r101x1-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r101x1/ilsvrc2012_classification/1) | 
| BiT-M R101x3 | `tensorflow-ic-bit-m-r101x3-ilsvrc2012-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r101x3/ilsvrc2012_classification/1) | 
| BiT-M R50x1 ImageNet-21k | `tensorflow-ic-bit-m-r50x1-imagenet21k-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r50x1/imagenet21k_classification/1) | 
| BiT-M R50x3 ImageNet-21k | `tensorflow-ic-bit-m-r50x3-imagenet21k-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r50x3/imagenet21k_classification/1) | 
| BiT-M R101x1 ImageNet-21k | `tensorflow-ic-bit-m-r101x1-imagenet21k-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r101x1/imagenet21k_classification/1) | 
| BiT-M R101x3 ImageNet-21k | `tensorflow-ic-bit-m-r101x3-imagenet21k-classification-1` | [TensorFlow Hub リンク](https://tfhub.dev/google/bit/m-r101x3/imagenet21k_classification/1) | 

# 画像分類 - TensorFlow ハイパーパラメータ
<a name="IC-TF-Hyperparameter"></a>

ハイパーパラメータは、機械学習モデルが学習を開始する前に設定されるパラメータです。Amazon SageMaker AI 組み込みの画像分類 - TensorFlow アルゴリズムでは、次のハイパーパラメータがサポートされています。ハイパーパラメータのチューニングに関する詳細ついては、「[画像分類 - TensorFlow モデルを調整する](IC-TF-tuning.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| augmentation |  トレーニングデータに `augmentation_random_flip`、`augmentation_random_rotation`、`augmentation_random_zoom` を適用するには、`"True"` に設定します。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| augmentation\$1random\$1flip |  `augmentation` が `"True"` に設定されている場合にデータ拡張に使用するフリップモードを示します。詳細については、TensorFlow ドキュメントの「[RandomFlip](https://www.tensorflow.org/api_docs/python/tf/keras/layers/RandomFlip)」を参照してください。 有効な値: 文字列、(`"horizontal_and_vertical"`、`"vertical"` または `"None"`) のいずれか。 デフォルト値: `"horizontal_and_vertical"`。  | 
| augmentation\$1random\$1rotation |  `augmentation` が `"True"` に設定されている場合にデータ拡張に使用するローテーションの量を示します。値は 2π の端数を表します。正の値は反時計回りに回転し、負の値は時計回りに回転します。`0` は、回転しないことを意味します。詳細については、TensorFlow ドキュメントの「[RandomRotation](https://www.tensorflow.org/api_docs/python/tf/keras/layers/RandomRotation)」を参照してください。 有効な値: 浮動小数点数、範囲: [`-1.0`, `1.0`]。 デフォルト値: `0.2`。  | 
| augmentation\$1random\$1zoom |  `augmentation` が `"True"` に設定されている場合に、データ拡張に使用する垂直ズームの量を示します。正の値ではズームアウトし、負の値ではズームインします。`0` は、ズームしないことを意味します。詳細については、TensorFlow ドキュメントの「[RandomZoom](https://www.tensorflow.org/api_docs/python/tf/keras/layers/RandomZoom)」を参照してください。 有効な値: 浮動小数点数、範囲: [`-1.0`, `1.0`]。 デフォルト値: `0.1`。  | 
| batch\$1size |  トレーニングのバッチサイズ。複数の GPU を使用するインスタンスのトレーニングでは、このバッチサイズは GPU 間で使用されます。 有効な値: 正の整数。 デフォルト値: `32`。  | 
| beta\$11 |  `"adam"` オプティマイザーの beta1。最初のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| beta\$12 |  `"adam"` オプティマイザの beta2。2 番目のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.999`。  | 
| binary\$1mode |  `binary_mode` を `"True"` に設定すると、モデルは正のクラスの確率数を 1 つ返し、追加の `eval_metric` オプションを使用できます。二項分類の問題にのみ使用してください。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| dropout\$1rate | 最上位の分類レイヤーのドロップアウトレイヤーのドロップアウト率。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.2` | 
| early\$1stopping |  `"True"` に設定すると、トレーニング中に早期停止ロジックを使用します。`"False"` の場合、早期停止は使用されません。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| early\$1stopping\$1min\$1delta | 改善と認定するのに必要な最小変化。early\$1stopping\$1min\$1delta の値より小さな絶対変化は、改善とは認定されません。early\$1stopping が "True" に設定されている場合にのみ使用されます。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.0`。 | 
| early\$1stopping\$1patience |  改善なしでトレーニングを継続できるエポック数。`early_stopping` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 正の整数。 デフォルト値: `5`。  | 
| epochs |  トレーニングエポックの数。 有効な値: 正の整数。 デフォルト値: `3`。  | 
| epsilon |  `"adam"`、`"rmsprop"`、`"adadelta"`、および `"adagrad"` オプティマイザのイプシロン。通常は、0 で除算されないように小さな値を設定します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `1e-7`。  | 
| eval\$1metric |  `binary_mode` が `"False"` に設定されている場合、`"accuracy"` にできるのは `eval_metric` のみです。`binary_mode` が `"True"` である場合、有効な値のいずれかを選択します。詳細については、TensorFlow ドキュメントの「[Metrics](https://www.tensorflow.org/api_docs/python/tf/keras/metrics)」を参照してください。 有効な値: 文字列、次のいずれか: (`"accuracy"`、`"precision"`、`"recall"`、`"auc"`、または `"prc"`)。 デフォルト値: `"accuracy"`。  | 
| image\$1resize\$1interpolation |  画像のサイズを変更するときに使用する補間メソッドを示します。詳細については、TensorFlow ドキュメントの「[image.resize](https://www.tensorflow.org/api_docs/python/tf/image/resize)」を参照してください。 有効な値: 文字列、次のいずれか: (`"bilinear"`、`"nearest"`、`"bicubic"`、`"area"`、` "lanczos3"`、`"lanczos5"`、`"gaussian"`、または `"mitchellcubic"`)。 デフォルト値: `"bilinear"`。  | 
| initial\$1accumulator\$1value |  アキュムレータの開始値、または `"adagrad"` オプティマイザのパラメータごとのモーメンタム値。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.0001`。  | 
| label\$1smoothing |  ラベル値の信頼度をどの程度緩和すべきかを示します。例えば、`label_smoothing` が `0.1` であれば、非ターゲットラベルは `0.1/num_classes ` で、ターゲットラベルは `0.9+0.1/num_classes` です。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.1`。  | 
| learning\$1rate | オプティマイザの学習レート。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.001`。 | 
| momentum |  `"sgd"`、`"nesterov"`、および `"rmsprop"` オプティマイザのモーメンタム。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| optimizer |  オプティマイザのタイプ。詳細については、TensorFlow ドキュメントの「[Optimizers](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)」を参照してください。 有効な値: 文字列、(`"adam"`、`"sgd"`、`"nesterov"`、`"rmsprop"`、` "adagrad"`、`"adadelta"`) のいずれか。 デフォルト値: `"adam"`。  | 
| regularizers\$1l2 |  分類レイヤーの高密度レイヤーの L2 正則化係数。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `.0001`。  | 
| reinitialize\$1top\$1layer |  `"Auto"` に設定すると、微調整時に最上位の分類レイヤーパラメータが再初期化されます。段階的トレーニングの場合、`"True"` に設定されない限り、最上位の分類レイヤーのパラメータは再初期化されません。 有効な値: 文字列、(`"Auto"`、`"True"`、または `"False"`) のいずれかです。 デフォルト値: `"Auto"`。  | 
| rho |  `"adadelta"` および `"rmsprop"` オプティマイザの勾配の割引係数。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.95`。  | 
| train\$1only\$1top\$1layer |  `"True"` の場合、最上位の分類レイヤーパラメータのみ微調整されます。`"False"` の場合、すべてのモデルパラメータが微調整されます。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 

# 画像分類 - TensorFlow モデルを調整する
<a name="IC-TF-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## 画像分類 - TensorFlow アルゴリズムによって計算されたメトリクス
<a name="IC-TF-metrics"></a>

イメージ分類アルゴリズムは教師ありアルゴリズムです。このアルゴリズムは、トレーニング中に計算された精度メトリクスを報告します。モデルを調整するときには、このメトリクスを目標メトリクスとして選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:accuracy | 実行された予測の総数に対する正しい予測の数の比率。 | 最大化 | 

## 調整可能な画像分類 - TensorFlow ハイパーパラメータ
<a name="IC-TF-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用してイメージ分類モデルを調整します。イメージ分類の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`batch_size`、`learning_rate`、および `optimizer` です。選択した `optimizer` に基づいて、`momentum`、`regularizers_l2`、`beta_1`、`beta_2`、`eps` などのオプティマイザ関連のハイパーパラメータを調整します。たとえば、`adam` が `optimizer` である場合にのみ `beta_1` と `beta_2` を使用します。

各 `optimizer` で使用されるハイパーパラメータの詳細については、「[画像分類 - TensorFlow ハイパーパラメータ](IC-TF-Hyperparameter.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 8、MaxValue: 512 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8、MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['sgd', ‘adam’, ‘rmsprop’, 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| train\$1only\$1top\$1layer | ContinuousParameterRanges | ['True', 'False'] | 

# オブジェクト検出 - MXNet
<a name="object-detection"></a>

Amazon SageMaker AI オブジェクト検出 - MXNet アルゴリズムは、単一の深層ニューラルネットワークを使用して、イメージ内のオブジェクトを検出および分類します。このアルゴリズムは、入力としてイメージを取得し、イメージシーン内のオブジェクトのすべてのインスタンスを識別する、教師あり学習アルゴリズムです。オブジェクトは、指定されたコレクション内のいずれかのクラスに分類され、そのクラスに属しているという信頼性スコアが付けられます。イメージ内のその場所とスケールは、長方形の境界ボックスで示されます。[シングルショットマルチボックス検出器 (SSD)](https://arxiv.org/pdf/1512.02325.pdf) フレームワークが使用され、[VGG](https://arxiv.org/pdf/1409.1556.pdf) と [ResNet](https://arxiv.org/pdf/1603.05027.pdf) の 2 つの基本ネットワークがサポートされます。ネットワークはゼロからトレーニングすることも、[ImageNet](http://www.image-net.org/) データセットで事前トレーニングされたモデルでトレーニングすることもできます。

**Topics**
+ [オブジェクト検出アルゴリズムの入出力インターフェイス](#object-detection-inputoutput)
+ [オブジェクト検出アルゴリズムの EC2 インスタンスに関する推奨事項](#object-detection-instances)
+ [オブジェクト検出サンプルノートブック](#object-detection-sample-notebooks)
+ [オブジェクト検出の仕組み](algo-object-detection-tech-notes.md)
+ [オブジェクト検出ハイパーパラメータ](object-detection-api-config.md)
+ [オブジェクト検出モデルを調整する](object-detection-tuning.md)
+ [オブジェクト検出リクエストとレスポンスの形式](object-detection-in-formats.md)

## オブジェクト検出アルゴリズムの入出力インターフェイス
<a name="object-detection-inputoutput"></a>

SageMaker AI オブジェクト検出アルゴリズムは、ファイルモードでのトレーニング用に RecordIO (`application/x-recordio`) とイメージ (`image/png`、`image/jpeg`、`application/x-image`) の両方のコンテンツタイプをサポートし、パイプモードでのトレーニング用に RecordIO (`application/x-recordio`) をサポートします。ただし、RecordIO ファイルを作成せずに、拡張マニフェスト形式を使用して、イメージファイル (`image/png`、`image/jpeg`、`application/x-image`) を使用してパイプモードでトレーニングすることもできます。Amazon SageMaker AI オブジェクト検出アルゴリズムに推奨される入力形式は、[Apache MXNet RecordIO](https://mxnet.apache.org/api/architecture/note_data_loading) です。ただし、.jpg または .png の形式で RAW イメージを使用することもできます。このアルゴリズムでは、推論に `application/x-image` のみがサポートされます。

**注記**  
既存の深層学習フレームワークとの高い相互運用性を維持するために、これは他の Amazon SageMaker AI アルゴリズムによって一般に使用される protobuf データ形式とは異なります。

データ形式の詳細については、[オブジェクト検出サンプルノートブック](#object-detection-sample-notebooks)を参照してください。

### RecordIO 形式でトレーニングする
<a name="object-detection-recordio-training"></a>

トレーニングに RecordIO 形式を使用する場合は、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `InputDataConfig` パラメータの値としてトレーニングチャネルと検証チャネルの両方を指定します。1 つの RecordIO (.rec) ファイルを train チャネルで指定し、もう 1 つの RecordIO ファイルを validation チャネルで指定します。両方のチャネルのコンテンツタイプを `application/x-recordio` に設定します。RecordIO ファイルを生成する方法の例は、オブジェクト検出サンプルノートブックにあります。[MXNet の GluonCV](https://gluon-cv.mxnet.io/build/examples_datasets/recordio.html) のツールを使用して、[PASCAL ビジュアルオブジェクトクラス](http://host.robots.ox.ac.uk/pascal/VOC/)や [Common Objects in Context (COCO)](http://cocodataset.org/#home) などの一般的なデータセット用の RecordIO ファイルを生成することもできます。

### イメージ形式を使用してトレーニングする
<a name="object-detection-image-training"></a>

トレーニングにイメージ形式を使用する場合は、`train`、`validation`、`train_annotation`、`validation_annotation` チャネルを [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `InputDataConfig` パラメータの値として指定します。トレーニングチャネルおよび検証チャネルの個々のイメージデータ (.jpg または .png ファイル) を指定します。注釈データには、JSON 形式を使用できます。`train_annotation` チャネルと `validation_annotation` チャネルで対応する .json ファイルを指定します。イメージタイプに基づいて、4 つすべてのチャネルのコンテンツタイプを `image/png` または `image/jpeg` に設定します。データセットに .jpg と .png の両方のイメージが含まれている場合は、コンテンツタイプ `application/x-image` を使用することもできます。次は、.json ファイルの例です。

```
{
   "file": "your_image_directory/sample_image1.jpg",
   "image_size": [
      {
         "width": 500,
         "height": 400,
         "depth": 3
      }
   ],
   "annotations": [
      {
         "class_id": 0,
         "left": 111,
         "top": 134,
         "width": 61,
         "height": 128
      },
      {
         "class_id": 0,
         "left": 161,
         "top": 250,
         "width": 79,
         "height": 143
      },
      {
         "class_id": 1,
         "left": 101,
         "top": 185,
         "width": 42,
         "height": 130
      }
   ],
   "categories": [
      {
         "class_id": 0,
         "name": "dog"
      },
      {
         "class_id": 1,
         "name": "cat"
      }
   ]
}
```

各イメージは注釈用に .json ファイルを必要とし、.json ファイルは対応するイメージと同じ名前である必要があります。上記の .json ファイルの名前は "sample\$1image1.json" になります。注釈 .json ファイルには 4 つのプロパティが含まれています。"file" プロパティはイメージファイルの相対パスを指定します。例えば、トレーニングイメージとそれに対応する .json ファイルが s3://*your\$1bucket*/train/sample\$1image and s3://*your\$1bucket*/train\$1annotation に保存されている場合、train チャネルと train\$1annotation チャネルのパスを、それぞれ s3://*your\$1bucket*/train and s3://*your\$1bucket*/train\$1annotation に指定します。

.json ファイルでは、sample\$1image1.jpg という名前のイメージの相対パスは sample\$1image/sample\$1image1.jpg になります。`"image_size"` プロパティはイメージ全体の寸法を指定します。SageMaker AI オブジェクト検出アルゴリズムは現在、3 チャネルのイメージしかサポートしていません。`"annotations"` プロパティは、イメージ内のオブジェクトのカテゴリと境界ボックスを指定します。各オブジェクトには、`"class_id"` インデックスと 4 つの境界ボックス座標 (`"left"`、`"top"`、`"width"`、`"height"`) によって注釈が付けられています。`"left"` (x 座標) と `"top"` (y 座標) の値は、境界ボックスの左上隅を表します。`"width"` (x 座標) と `"height"` (y 座標) の値は、境界ボックスの大きさを表します。原点 (0, 0) は、イメージ全体の左上隅です。1 つのイメージ内に複数のオブジェクトがある場合は、すべての注釈を単一の .json ファイルに含める必要があります。`"categories"` プロパティには、クラスインデックスとクラス名の間のマッピングが保存されます。クラスインデックスは連続して番号付けされ、番号付けは 0 から始まります。注釈 .json ファイルの場合、`"categories"` プロパティはオプションです。

### 拡張マニフェストイメージ形式でトレーニングする
<a name="object-detection-augmented-manifest-training"></a>

拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `InputDataConfig` パラメータの値として、トレーニングチャネルと検証チャネルの両方を指定する必要があります。形式を使用している間、イメージとそれに対応する注釈のリストを含む S3 マニフェストファイルを生成する必要があります。マニフェストファイル形式は、各行が 1 つのサンプルを表す [JSON Lines](http://jsonlines.org/) 形式になっている必要があります。イメージは、その S3 の場所を指す `'source-ref'` タグを使用して指定します。注釈は、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで指定されている `"AttributeNames"` パラメータ値の下に入力します。`metadata` タグの下に追加のメタデータを含めることもできますが、これらはアルゴリズムによって無視されます。次の例では、`"AttributeNames` が `["source-ref", "bounding-box"]` リストに含まれています。

```
{"source-ref": "s3://your_bucket/image1.jpg", "bounding-box":{"image_size":[{ "width": 500, "height": 400, "depth":3}], "annotations":[{"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}}
{"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}
```

オブジェクト検出アルゴリズムをトレーニングする場合、入力ファイルの `"AttributeNames"` の順番が重要になります。パイプ指定されたデータは特定の順で受け入れられます。`image` が最初になり、その後に `annotations` が続きます。したがって、この例の「AttributeNames」では、`"source-ref"` が最初になり、その後に `"bounding-box"` が続きます。拡張マニフェストでオブジェクト検出を使用する場合は、`RecordWrapperType` パラメータの値を `"RecordIO"` として設定する必要があります。

拡張マニフェストファイルの詳細については、[トレーニングジョブの拡張マニフェストファイル](augmented-manifest.md)を参照してください。

### 段階的トレーニング
<a name="object-detection-incremental-training"></a>

SageMaker AI で以前にトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードすることもできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。SageMaker AI オブジェクト検出モデルは、SageMaker AI でトレーニングされた別の組み込みオブジェクト検出モデルでのみシードできます。

事前トレーニング済みモデルを使用するには、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで、`InputDataConfig` パラメータに `ChannelName` を "model" と指定します。モデルチャネルの `ContentType` を `application/x-sagemaker-model` に設定します。モデルチャネルにアップロードする新しいモデルと事前トレーニング済みモデルの両方の入力ハイパーパラメータの設定は、`base_network` および `num_classes` 入力パラメータの設定と同じである必要があります。これらのパラメータはネットワークアーキテクチャーを定義します。事前トレーニング済みモデルファイルには、SageMaker AI によって出力された圧縮モデルアーティファクト (.tar.gz 形式) を使用します。入力データには、RecordIO 形式またはイメージ形式を使用できます。

段階的トレーニングの詳細とその使用方法については、[Amazon SageMaker AI の段階的トレーニングを使用する](incremental-training.md)を参照してください。

## オブジェクト検出アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="object-detection-instances"></a>

オブジェクト検出アルゴリズムは P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスを使用することをお勧めします。分散型トレーニングでは複数 GPU および複数マシン設定でオブジェクト検出アルゴリズムを実行することができます。

推論には、CPU インスタンス (C5、M5 など) と GPU インスタンス (P3、G4dn など) の両方を使用できます。

## オブジェクト検出サンプルノートブック
<a name="object-detection-sample-notebooks"></a>

SageMaker AI オブジェクト検出アルゴリズムを使用して、

シングルショットマルチボックス検出器を使った [Caltech Birds (CUB 200 2011)](http://www.vision.caltech.edu/datasets/cub_200_2011/) データセットでモデルをトレーニングおよびホストする方法を示すサンプルノートブックについては、「[Amazon SageMaker AI Object Detection for Bird Species](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object_detection_birds/object_detection_birds.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。オブジェクト検出アルゴリズムを使用したオブジェクト検出例のノートブックは、「**Introduction to Amazon Algorithms**」セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

Amazon SageMaker AI オブジェクト検出アルゴリズムの詳細については、次のブログ記事を参照してください。
+ [Amazon SageMaker AI オブジェクト検出モデルのトレーニングと での実行 AWS IoT Greengrass – パート 1/3: トレーニングデータの準備](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-1-of-3/)
+ [Amazon SageMaker AI オブジェクト検出モデルのトレーニングと での実行 AWS IoT Greengrass – パート 2/3: カスタムオブジェクト検出モデルのトレーニング](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-2-of-3/)
+ [Amazon SageMaker AI オブジェクト検出モデルのトレーニングと での実行 AWS IoT Greengrass — パート 3/3: エッジへのデプロイ](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-3-of-3/)

# オブジェクト検出の仕組み
<a name="algo-object-detection-tech-notes"></a>

オブジェクト検出アルゴリズムは、既知のオブジェクトカテゴリの集合から、イメージ内のオブジェクトのすべてのインスタンスを識別し、特定します。アルゴリズムはイメージを入力として受け取り、オブジェクトが属するカテゴリと、そのカテゴリに属する信頼性スコアを出力します。アルゴリズムはさらに、長方形の境界ボックスを使用してオブジェクトの位置とスケールを予測します。Amazon SageMaker AI オブジェクト検出は、分類タスク用に事前にトレーニングされた畳み込みニューラルネットワーク (CNN) を基本ネットワークとして使用する[シングルショットマルチボックス検出器 (SSD)](https://arxiv.org/pdf/1512.02325.pdf) アルゴリズムを使用します。SSD は、中間レイヤーの出力を検出用の特徴として使用します。

[VGG](https://arxiv.org/pdf/1409.1556.pdf) や [ResNet](https://arxiv.org/pdf/1603.05027.pdf) などのさまざまな CNN が、イメージ分類タスクで優れたパフォーマンスを達成しています。Amazon SageMaker AI オブジェクト検出は、SSD の基本ネットワークとして VGG-16 と ResNet-50 の両方をサポートしています。アルゴリズムは完全トレーニングモードまたは転移学習モードでトレーニングできます。完全トレーニングモードでは、基本ネットワークはランダムな重みで初期化されてから、ユーザーデータでトレーニングされます。転移学習モードでは、基本ネットワークの重みは事前トレーニング済みモデルからロードされます。

オブジェクト検出アルゴリズムは、反転、再スケール、ジッターなどの標準データオーグメンテーションオペレーションをオンザフライで内部的に使用することにより、オーバーフィットの回避に役立ちます。

# オブジェクト検出ハイパーパラメータ
<a name="object-detection-api-config"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで、使用するトレーニングアルゴリズムを指定します。トレーニングデータセットからモデルのパラメータを推定するのに役立つ、アルゴリズム固有のハイパーパラメータを指定することもできます。次の表に、Amazon SageMaker AI によって提供されるオブジェクト検出アルゴリズムのトレーニング用のハイパーパラメータを示します。オブジェクトトレーニングの仕組みについては、[オブジェクト検出の仕組み](algo-object-detection-tech-notes.md)を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1classes |  出力クラスの数。このパラメータは、ネットワーク出力のディメンションを定義し、通常はデータセット内のクラス数に設定されます。 **必須** 有効な値: 正の整数  | 
| num\$1training\$1samples |  入力データセット内のトレーニング例の数。  この値とトレーニングセット内のサンプル数が一致しない場合、`lr_scheduler_step` パラメータの動作は未定義になり、分散トレーニングの精度に影響することがあります。  **必須** 有効な値: 正の整数  | 
| base\$1network |  使用する基本ネットワークアーキテクチャー。 **オプション** 有効な値: 'vgg-16' または 'resnet-50' デフォルト値: 'vgg-16'  | 
| early\$1stopping |  トレーニング中に早期停止ロジックを使用する場合は `True`。使用しない場合は `False`。 **オプション** 有効な値: `True` または `False` デフォルト値: `False`  | 
| early\$1stopping\$1min\$1epochs |  早期停止ロジックを呼び出す前に実行する必要があるエポックの最小数。`early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 10  | 
| early\$1stopping\$1patience |  `early_stopping_tolerance` ハイパーパラメータで定義されているように、関連するメトリクスが改善されない場合に、トレーニングを終了するまでに待機するエポックの数。`early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| early\$1stopping\$1tolerance |  早期停止を回避するためには、`validation:mAP` の相対的な改善、平均精度の平均 (mAP) が超える必要がある許容値。mAP の変化を前回の mAP の最高値で除算した比率が、設定された `early_stopping_tolerance` 値より小さい場合、早期停止は改善がないと見なします。`early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 1 デフォルト値: 0.0  | 
| image\$1shape |  入力イメージのイメージサイズ。入力イメージをこのサイズの正方形のイメージに拡大縮小します。パフォーマンスを向上させるために 300 と 512 を使用することをお勧めします。 **オプション** 有効な値: 正の整数 ≥300 デフォルト: 300  | 
| epochs |  トレーニングエポックの数。 **オプション** 有効な値: 正の整数 デフォルト: 30  | 
| freeze\$1layer\$1pattern |  基本ネットワーク内のフリーズレイヤーの正規表現 (regex)。たとえば、`freeze_layer_pattern` = `"^(conv1_\|conv2_).*"` と設定した場合、名前に `"conv1_"` または `"conv2_"` が含まれているレイヤーはフリーズされます。つまり、これらのレイヤーの重みはトレーニング中に更新されません。レイヤー名は、ネットワークシンボルファイル [vgg16-symbol.json](http://data.mxnet.io/models/imagenet/vgg/vgg16-symbol.json ) および [resnet-50-symbol.json](http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json) で確認できます。レイヤーを凍結すると、そのウェイトをさらに変更することはできなくなります。これにより、正確性が少し失われる代わりにトレーニング時間が大幅に減ります。この手法は、基本レイヤーの低いレイヤーを再トレーニングする必要がない転送学習で一般的に使用されます。 **オプション** 有効な値: 文字列 デフォルト: レイヤーのフリーズなし。  | 
| kv\$1store |  分散トレーニングに使用される重み更新同期モード。重みは、複数マシン間で同期的または非同期的に更新できます。同期更新は、一般には非同期更新よりも精度が高くなりますが、低速な可能性があります。詳細については、MXNet チュートリアルの「[Distributed Training (分散トレーニング)](https://mxnet.apache.org/api/faq/distributed_training)」を参照してください。  このパラメータは、単一のマシントレーニングには適用されません。  **オプション** 有効な値: `'dist_sync'` または `'dist_async'` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object-detection-api-config.html) デフォルト: -  | 
| label\$1width |  トレーニングデータと検証データを同期するために使用される強制パディングラベル幅。たとえば、データ内の 1 つのイメージに最大 10 個のオブジェクトが含まれ、各オブジェクトの注釈が 5 つの数字 [class\$1id, left, top, width, height] で指定されている場合、`label_width` は (10\$15 \$1 ヘッダー情報の長さ) 以上になります。ヘッダー情報の長さは通常 2 です。トレーニングには少し大きい `label_width` (この例では 60 など) を使用することをお勧めします。 **オプション** 有効な値: データ内の最大長の注釈情報に対応できる大きさの正の整数。 デフォルト: 350  | 
| learning\$1rate |  最初の学習レート。 **オプション** 有効な値: (0, 1] の浮動小数点数 デフォルト: 0.001  | 
| lr\$1scheduler\$1factor |  学習レートを下げる割合。`lr_new` = `lr_old` \$1 `lr_scheduler_factor` として定義されている `lr_scheduler_step` パラメータと一緒に使用します。 **オプション** 有効な値: (0, 1) の浮動小数点数 デフォルト: 0.1  | 
| lr\$1scheduler\$1step |  学習レートを下げるエポック。学習レートは、"epoch1、epoch2、..." のようにカンマ区切りの文字列でリストされたエポックごとに `lr_scheduler_factor` だけ下げられます。たとえば、値が "10, 20" に設定され、`lr_scheduler_factor` が 1/2 に設定されている場合、学習レートは 10 番目のエポックの後に半減し、20 番目のエポックの後に再び半減します。 **オプション** 有効な値: 文字列 デフォルト: 空の文字列  | 
| mini\$1batch\$1size |  トレーニングのバッチサイズ。単一マシンのマルチ GPU の設定では、各 GPU は `mini_batch_size`/`num_gpu` トレーニングサンプルを処理します。`dist_sync` モードの複数マシントレーニングでは、実際のバッチサイズは `mini_batch_size` \$1 マシン数です。`mini_batch_size` を大きくすると、通常、トレーニングは加速しますが、メモリ不足の問題が発生する可能性があります。メモリ使用量は、`mini_batch_size`、`image_shape`、および `base_network` アーキテクチャーに関連します。たとえば、単一の p3.2xlarge インスタンスでメモリ不足エラーの発生を回避する `mini_batch_size` の最大値は 32 であり、base\$1network は "resnet-50"、`image_shape` は 300 に設定します。同じインスタンスで、`mini_batch_size` を 64 に設定し、基本ネットワークとして `vgg-16`、`image_shape` を 300 に設定します。 **オプション** 有効な値: 正の整数 デフォルト: 32  | 
| momentum |  `sgd` のモーメンタム。他のオプティマイザでは無視されます。 **オプション** 有効な値: (0, 1] の浮動小数点数 デフォルト: 0.9  | 
| nms\$1threshold |  非最大抑制しきい値。 **オプション** 有効な値: (0, 1] の浮動小数点数 デフォルト: 0.45  | 
| optimizer |  オプティマイザのタイプ。オプティマイザ値の詳細については、「[MXNet's API (MXNet の API)](https://mxnet.apache.org/api/python/docs/api/)」を参照してください。 **オプション** 有効な値: ['sgd', 'adam', 'rmsprop', 'adadelta'] デフォルト: 'sgd'  | 
| overlap\$1threshold |  評価重複しきい値。 **オプション** 有効な値: (0, 1] の浮動小数点数 デフォルト: 0.5  | 
| use\$1pretrained\$1model |  トレーニングに事前トレーニング済みモデルを使用するかどうかを示します。1 に設定すると、対応するアーキテクチャーの事前トレーニングモデルがロードされ、トレーニングに使用されます。それ以外の場合、ネットワークはゼロからトレーニングされます。 **オプション** 有効な値: 0 または 1 デフォルト: 1  | 
| weight\$1decay |  `sgd` と `rmsprop` の重み減衰係数。他のオプティマイザでは無視されます。 **オプション** 有効な値: (0, 1) の浮動小数点数 デフォルト: 0.0005  | 

# オブジェクト検出モデルを調整する
<a name="object-detection-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## オブジェクト検出アルゴリズムで計算されるメトリクス
<a name="object-detection-metrics"></a>

オブジェクト検出アルゴリズムは、トレーニング中に単一のメトリクス `validation:mAP` についてレポートします。モデルを調整するときに、このメトリクスを目標メトリクスとして選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:mAP |  検証セットで計算された平均精度の平均 (mAP)。  |  最大化  | 



## 調整可能なオブジェクト検出ハイパーパラメータ
<a name="object-detection-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して Amazon SageMaker AI オブジェクト検出モデルを調整します。オブジェクト検出の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`mini_batch_size`、`learning_rate`、および `optimizer` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-6、MaxValue: 0.5  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 8、MaxValue: 64  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.999  | 
| optimizer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'rmsprop', 'adadelta']  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.999  | 

# オブジェクト検出リクエストとレスポンスの形式
<a name="object-detection-in-formats"></a>

このページでは、Amazon SageMaker AI オブジェクト検出 - MXNet モデルの推論リクエストとレスポンスの形式について説明します。

## リクエストの形式
<a name="object-detection-json"></a>

モデルのエンドポイントを使用して、トレーニング済みモデルのクエリを実行します。エンドポイントは、`image/jpeg` および `image/png` コンテンツタイプの .jpg および .png イメージ形式を使用します。

## レスポンスの形式
<a name="object-detection-recordio"></a>

レスポンスは、JSON 形式でエンコードされたイメージ内のすべてのオブジェクトの信頼スコアと境界ボックス座標を含むクラスインデックスです。以下は、レスポンス .json ファイルの例です。

```
{"prediction":[
  [4.0, 0.86419455409049988, 0.3088374733924866, 0.07030484080314636, 0.7110607028007507, 0.9345266819000244],
  [0.0, 0.73376623392105103, 0.5714187026023865, 0.40427327156066895, 0.827075183391571, 0.9712159633636475],
  [4.0, 0.32643985450267792, 0.3677481412887573, 0.034883320331573486, 0.6318609714508057, 0.5967587828636169],
  [8.0, 0.22552496790885925, 0.6152569651603699, 0.5722782611846924, 0.882301390171051, 0.8985623121261597],
  [3.0, 0.42260299175977707, 0.019305512309074402, 0.08386176824569702, 0.39093565940856934, 0.9574796557426453]
]}
```

この .json ファイルの各行には、検出されたオブジェクトを表す配列が含まれています。これらの各オブジェクト配列は、6 つの数字のリストで構成されています。最初の数字は予測されたクラスラベルです。2 番目の数字は、検出に関連付けられている信頼性スコアです。最後の 4 つの数字は、境界ボックスの座標 [xmin, ymin, xmax, ymax] を表します。これらの出力境界ボックスのコーナーのインデックスは、全体的なイメージサイズによって正規化されます。このエンコードは、入力 .json 形式で使用されているものとは異なることに注意してください。たとえば、検出結果の最初のエントリでは、0.3088374733924866 は境界ボックスの左座標 (左上隅の x 座標) をイメージ全体の幅に対する比率として表したもの、0.07030484080314636 は境界ボックスの上部座標 (左上隅の y 座標) をイメージ全体の高さに対する比率として表したもの、0.7110607028007507 は境界ボックスの右座標 (右下隅の x 座標) をイメージ全体の幅に対する比率として表したもの、0.9345266819000244 は境界ボックスの下部座標 (右下隅の y 座標) をイメージ全体の高さに対する比率として表したものです。

信頼性の低い検出結果を避けるために、信頼性スコアが低い検出結果を除外することをお勧めします。「[object detection sample notebook](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_birds/object_detection_birds.ipynb)」では、しきい値を使用して信頼度の低い検出を削除し、元のイメージに境界ボックスをプロットするスクリプトの例を提供しています。

バッチ変換の場合、レスポンスは JSON 形式です。この形式は上記の JSON 形式と同じです。各イメージの検出結果は JSON ファイルで表されます。例:

```
{"prediction": [[label_id, confidence_score, xmin, ymin, xmax, ymax], [label_id, confidence_score, xmin, ymin, xmax, ymax]]}
```

トレーニングと推論の詳細については、[オブジェクト検出サンプルノートブック](object-detection.md#object-detection-sample-notebooks)を参照してください。

## 出力: JSON レスポンス形式
<a name="object-detection-output-json"></a>

accept: application/json;annotation=1

```
{
   "image_size": [
      {
         "width": 500,
         "height": 400,
         "depth": 3
      }
   ],
   "annotations": [
      {
         "class_id": 0,
         "score": 0.943,
         "left": 111,
         "top": 134,
         "width": 61,
         "height": 128
      },
      {
         "class_id": 0,
         "score": 0.0013,
         "left": 161,
         "top": 250,
         "width": 79,
         "height": 143
      },
      {
         "class_id": 1,
         "score": 0.0133,
         "left": 101,
         "top": 185,
         "width": 42,
         "height": 130
      }
   ]
}
```

# オブジェクト検出 - TensorFlow
<a name="object-detection-tensorflow"></a>

Amazon SageMaker AI オブジェクト検出 - TensorFlow アルゴリズムは、[TensorFlow モデルガーデン](https://github.com/tensorflow/models)の多くの事前トレーニング済みモデルによる転移学習をサポートする教師あり学習アルゴリズムです。大量の画像データが使用可能でない場合でも、転移学習を使用して、使用可能な事前トレーニング済みモデルのいずれかを独自のデータセットで微調整できます。オブジェクト検出アルゴリズムは画像を入力として受け取り、境界ボックスのリストを出力します。トレーニングデータセットは `jpg`、`.jpeg`、または `.png` フォーマット内の画像で構成されている必要があります。。このページには、オブジェクト検出 - TensorFlow の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

**Topics**
+ [SageMaker AI オブジェクト検出 - TensorFlow アルゴリズムの使用方法](object-detection-tensorflow-how-to-use.md)
+ [オブジェクト検出 - TensorFlow アルゴリズムの入出力インターフェイス](object-detection-tensorflow-inputoutput.md)
+ [オブジェクト検出 - TensorFlow アルゴリズムの Amazon EC2 インスタンスに関する推奨事項](#object-detection-tensorflow-instances)
+ [オブジェクト検出 - TensorFlow サンプルノートブック](#object-detection-tensorflow-sample-notebooks)
+ [オブジェクト検出 - TensorFlow の仕組み](object-detection-tensorflow-HowItWorks.md)
+ [TensorFlow モデル](object-detection-tensorflow-Models.md)
+ [オブジェクト検出 - TensorFlow ハイパーパラメータ](object-detection-tensorflow-Hyperparameter.md)
+ [オブジェクト検出 - TensorFlow モデルを調整する](object-detection-tensorflow-tuning.md)

# SageMaker AI オブジェクト検出 - TensorFlow アルゴリズムの使用方法
<a name="object-detection-tensorflow-how-to-use"></a>

オブジェクト検出 - TensorFlow は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker AI Python SDK でオブジェクト検出 - TensorFlow を使用する方法について説明します。Amazon SageMaker Studio Classic UI からオブジェクト検出 - TensorFlow を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。

オブジェクト検出 - TensorFlow アルゴリズムは、互換性のある事前トレーニング済みの TensorFlow モデルのいずれかを使用した転移学習をサポートします。使用可能なすべての事前トレーニング済みモデルのリストについては、「[TensorFlow モデル](object-detection-tensorflow-Models.md)」を参照してください。事前トレーニング済みのモデルにはそれぞれ一意の `model_id` があります。次の例では、ResNet50 (`model_id`: `tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8`) を使用してカスタムデータセットを微調整しています。事前トレーニング済みモデルはすべて TensorFlow ハブから事前にダウンロードされ、Amazon S3 バケットに保存されているため、トレーニングジョブはネットワーク分離状態で実行できます。事前に生成されたこれらのモデルトレーニングアーティファクトを使用して SageMaker AI 推定器を構築します。

まず、Docker イメージ URI、トレーニングスクリプト URI、および事前トレーニング済みのモデル URI を取得します。次に、必要に応じてハイパーパラメータを変更します。使用可能なすべてのハイパーパラメータとそのデフォルト値の Python ディクショナリは、`hyperparameters.retrieve_default` で確認できます。詳細については、「[オブジェクト検出 - TensorFlow ハイパーパラメータ](object-detection-tensorflow-Hyperparameter.md)」を参照してください。これらの値を使用して SageMaker AI 推定器を構築します。

**注記**  
デフォルトのハイパーパラメータ値はモデルによって異なります。例えば、モデルが大きくなると、デフォルトのエポック数は小さくなります。

この例では、道を歩く歩行者の画像を含む [https://www.cis.upenn.edu/~jshi/ped_html/#pub1](https://www.cis.upenn.edu/~jshi/ped_html/#pub1) データセットを使用しています。データセットを事前にダウンロードして、Amazon S3 で使用できるようにしてあります。モデルを微調整するには、トレーニングデータセットの Amazon S3 の場所を使用して `.fit` を呼び出します。

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyperparameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_COCO_format/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-od-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create an Estimator instance
tf_od_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Launch a training job
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

SageMaker AI オブジェクト検出 - TensorFlow アルゴリズムを使用してカスタムデータセットの転移学習を行う方法の詳細については、「[Introduction to SageMaker TensorFlow - Object Detection](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_tensorflow/Amazon_Tensorflow_Object_Detection.ipynb)」ノートブックを参照してください。

# オブジェクト検出 - TensorFlow アルゴリズムの入出力インターフェイス
<a name="object-detection-tensorflow-inputoutput"></a>

TensorFlow モデルにリストされている事前トレーニング済みの各モデルは、任意の数の画像クラスを持つ任意のデータセットに合わせて微調整できます。オブジェクト検出 - TensorFlow モデルへの入力用にトレーニングデータをフォーマットする方法に注意してください。
+ **トレーニングデータ入力形式:** トレーニングデータは、`images` サブディレクトリと `annotations.json` ファイルを含むディレクトリでなければなりません。

入力のディレクトリ構造の例を次に示します。入力ディレクトリは、次のようなパスの Amazon S3 バケットでホストされている必要があります。`s3://bucket_name/input_directory/`末尾の `/` は必須であることに注意してください。

```
input_directory
    |--images
        |--abc.png
        |--def.png
    |--annotations.json
```

`annotations.json` ファイルには、境界ボックスとそのクラスラベルに関する情報がディクショナリと `"images"` および `"annotations"`キーの形式で含まれている必要があります。`"images"` キーの値はディクショナリのリストである必要があります。画像ごとに以下の情報を含むディクショナリが 1 つある必要があります。`{"file_name": image_name, "height": height, "width": width, "id": image_id}``"annotations"` キーの値もディクショナリのリストである必要があります。境界ボックスごとに、以下の情報を含む辞書が 1 つある必要があります。`{"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}`

トレーニング後、ラベルマッピングファイルとトレーニング済みモデルが Amazon S3 バケットに保存されます。

## 段階的トレーニング
<a name="object-detection-tensorflow-incremental-training"></a>

以前に SageMaker AI でトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。

**注記**  
SageMaker AI オブジェクト検出 - TensorFlow モデルは、SageMaker AI でトレーニングされた別のオブジェクト検出 - TensorFlow モデルでのみシードできます。

一連のクラスが同じままである限り、任意のデータセットを段階的トレーニングに使用できます。段階的トレーニングのステップは微調整のステップと同様ですが、事前トレーニング済みモデルから始める代わりに、既存の微調整済みモデルから始めます。SageMaker AI オブジェクト検出 - TensorFlow で段階的トレーニングを使用する方法の詳細については、「[Introduction to SageMaker TensorFlow - Object Detection](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_tensorflow/Amazon_Tensorflow_Object_Detection.ipynb)」ノートブックを参照してください。

## オブジェクト検出 - TensorFlow アルゴリズムによる推論
<a name="object-detection-tensorflow-inference"></a>

TensorFlow オブジェクト検出トレーニングの結果として生じる微調整済みモデルを推論のためにホストすることができます。推論用の入力イメージはすべて `.jpg`、`jpeg`、または `.png` の形式で、コンテンツタイプは `application/x-image` である必要があります。オブジェクト検出 - TensorFlow アルゴリズムは、入力画像のサイズを自動的に変更します。

推論を実行すると、境界ボックス、予測クラス、各予測のスコアが JSON 形式でエンコードされます。オブジェクト検出 - TensorFlow モデルは、リクエストごとに 1 つの画像を処理し、1 行だけを出力します。JSON 形式のレスポンスの例を次に示します。

```
accept: application/json;verbose

{"normalized_boxes":[[xmin1, xmax1, ymin1, ymax1],....], 
    "classes":[classidx1, class_idx2,...], 
    "scores":[score_1, score_2,...], 
    "labels": [label1, label2, ...], 
    "tensorflow_model_output":<original output of the model>}
```

`accept` が `application/json` に設定されている場合、モデルは正規化されたボックス、クラス、スコアのみを出力します。

## オブジェクト検出 - TensorFlow アルゴリズムの Amazon EC2 インスタンスに関する推奨事項
<a name="object-detection-tensorflow-instances"></a>

オブジェクト検出 - TensorFlow アルゴリズムは、以下を含むすべての GPU インスタンスをトレーニング用にサポートします。
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`

大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスを使用することをお勧めします。CPU (M5 など) インスタンスと GPU (P2 または P3) インスタンスの両方を推論に使用できます。 AWS リージョン間の SageMaker トレーニングインスタンスと推論インスタンスの包括的なリストについては、[Amazon SageMakerの料金](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

## オブジェクト検出 - TensorFlow サンプルノートブック
<a name="object-detection-tensorflow-sample-notebooks"></a>

SageMaker AI オブジェクト検出 - TensorFlow アルゴリズムを使用してカスタムデータセットの転移学習を行う方法の詳細については、「[Introduction to SageMaker TensorFlow - Object Detection](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_tensorflow/Amazon_Tensorflow_Object_Detection.ipynb)」ノートブックを参照してください。

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# オブジェクト検出 - TensorFlow の仕組み
<a name="object-detection-tensorflow-HowItWorks"></a>

オブジェクト検出 - TensorFlow アルゴリズムは、画像を入力として受け取り、境界ボックスとオブジェクトラベルを予測します。MobileNet、ResNet、Inception、EfficientNet などのさまざまな深層学習ネットワークは、オブジェクト検出において非常に正確です。328,000 枚の画像を含む共通オブジェクトインコンテキスト (COCO) など、大規模な画像データセットでトレーニングされた深層学習ネットワークもあります。COCO データでネットワークをトレーニングした後、特定のフォーカスを持つデータセットでネットワークを微調整し、より具体的なオブジェクト検出タスクを実行できます。Amazon SageMaker AI オブジェクト検出 - TensorFlow アルゴリズムは、TensorFlow モデルガーデンで利用できる多くの事前トレーニング済みモデルでの転移学習をサポートします。

トレーニングデータ内のクラスラベルの数に応じて、選択した事前トレーニング済みの TensorFlow モデルにオブジェクト検出レイヤーがアタッチされます。その後、ネットワーク全体 (事前トレーニング済みのモデルを含む) を微調整、または新しいトレーニングデータの最上位の分類レイヤーだけの微調整のいずれかを実行できます。この転移学習の方法を使用すると、より小さなデータセットでのトレーニングが可能になります。

# TensorFlow モデル
<a name="object-detection-tensorflow-Models"></a>

オブジェクト検出 - TensorFlow アルゴリズムによる転移学習には、以下の事前トレーニング済みモデルを使用できます。

次のモデルは、指定するデータセットにより、サイズ、モデルパラメータの数、トレーニング時間、および推定レイテンシーが大きく異なります。ユースケースに最適なモデルは、微調整するデータセットの複雑さや、トレーニング時間、推論レイテンシー、またはモデルの精度に関する要件によって異なります。


| モデル名 | `model_id` | ソース | 
| --- | --- | --- | 
| ResNet50 V1 FPN 640 | `tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| EfficientDet D0 512 | `tensorflow-od1-ssd-efficientdet-d0-512x512-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d0_coco17_tpu-32.tar.gz) | 
| EfficientDet D1 640 | `tensorflow-od1-ssd-efficientdet-d1-640x640-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d1_coco17_tpu-32.tar.gz) | 
| EfficientDet D2 768 | `tensorflow-od1-ssd-efficientdet-d2-768x768-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d2_coco17_tpu-32.tar.gz) | 
| EfficientDet D3 896 | `tensorflow-od1-ssd-efficientdet-d3-896x896-coco17-tpu-32` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d3_coco17_tpu-32.tar.gz) | 
| MobileNet V1 FPN 640 | `tensorflow-od1-ssd-mobilenet-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| MobileNet V2 FPNLite 320 | `tensorflow-od1-ssd-mobilenet-v2-fpnlite-320x320-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8.tar.gz) | 
| MobileNet V2 FPNLite 640 | `tensorflow-od1-ssd-mobilenet-v2-fpnlite-640x640-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.tar.gz) | 
| ResNet50 V1 FPN 1024 | `tensorflow-od1-ssd-resnet50-v1-fpn-1024x1024-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_1024x1024_coco17_tpu-8.tar.gz) | 
| ResNet101 V1 FPN 640 | `tensorflow-od1-ssd-resnet101-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet101_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| ResNet101 V1 FPN 1024 | `tensorflow-od1-ssd-resnet101-v1-fpn-1024x1024-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet101_v1_fpn_1024x1024_coco17_tpu-8.tar.gz) | 
| ResNet152 V1 FPN 640 | `tensorflow-od1-ssd-resnet152-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet152_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| ResNet152 V1 FPN 1024 | `tensorflow-od1-ssd-resnet152-v1-fpn-1024x1024-coco17-tpu-8` | [TensorFlow モデルガーデンリンク](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet152_v1_fpn_1024x1024_coco17_tpu-8.tar.gz) | 

# オブジェクト検出 - TensorFlow ハイパーパラメータ
<a name="object-detection-tensorflow-Hyperparameter"></a>

ハイパーパラメータは、機械学習モデルが学習を開始する前に設定されるパラメータです。Amazon SageMaker AI 組み込みオブジェクト検出 - TensorFlow アルゴリズムでは、次のハイパーパラメータがサポートされています。ハイパーパラメータのチューニングに関する詳細ついては、「[オブジェクト検出 - TensorFlow モデルを調整する](object-detection-tensorflow-tuning.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| batch\$1size |  トレーニングのバッチサイズ。 有効な値: 正の整数。 デフォルト値: `3`。  | 
| beta\$11 |  `"adam"` オプティマイザーの beta1。最初のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| beta\$12 |  `"adam"` オプティマイザの beta2。2 番目のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.999`。  | 
| early\$1stopping |  `"True"` に設定すると、トレーニング中に早期停止ロジックを使用します。`"False"` の場合、早期停止は使用されません。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| early\$1stopping\$1min\$1delta | 改善と認定するのに必要な最小変化。early\$1stopping\$1min\$1delta の値より小さな絶対変化は、改善とは認定されません。early\$1stopping が "True" に設定されている場合にのみ使用されます。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.0`。 | 
| early\$1stopping\$1patience |  改善なしでトレーニングを継続できるエポック数。`early_stopping` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 正の整数。 デフォルト値: `5`。  | 
| epochs |  トレーニングエポックの数。 有効な値: 正の整数。 デフォルト値: 小さいモデルの場合は `5`、大きいモデルの場合は `1`。  | 
| epsilon |  `"adam"`、`"rmsprop"`、`"adadelta"`、および `"adagrad"` オプティマイザのイプシロン。通常は、0 で除算されないように小さな値を設定します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `1e-7`。  | 
| initial\$1accumulator\$1value |  アキュムレータの開始値、または `"adagrad"` オプティマイザのパラメータごとのモーメンタム値。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.1`。  | 
| learning\$1rate | オプティマイザの学習レート。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.001`。 | 
| momentum |  `"sgd"` および `"nesterov"` オプティマイザのモーメンタム。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| optimizer |  オプティマイザのタイプ。詳細については、TensorFlow ドキュメントの「[Optimizers](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)」を参照してください。 有効な値: 文字列、(`"adam"`、`"sgd"`、`"nesterov"`、`"rmsprop"`、` "adagrad"`、`"adadelta"`) のいずれか。 デフォルト値: `"adam"`。  | 
| reinitialize\$1top\$1layer |  `"Auto"` に設定すると、微調整時に最上位の分類レイヤーパラメータが再初期化されます。段階的トレーニングの場合、`"True"` に設定されない限り、最上位の分類レイヤーのパラメータは再初期化されません。 有効な値: 文字列、(`"Auto"`、`"True"`、または `"False"`) のいずれかです。 デフォルト値: `"Auto"`。  | 
| rho |  `"adadelta"` および `"rmsprop"` オプティマイザの勾配の割引係数。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.95`。  | 
| train\$1only\$1on\$1top\$1layer |  `"True"` の場合、最上位の分類レイヤーパラメータのみ微調整されます。`"False"` の場合、すべてのモデルパラメータが微調整されます。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 

# オブジェクト検出 - TensorFlow モデルを調整する
<a name="object-detection-tensorflow-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## オブジェクト検出 - TensorFlow アルゴリズムで計算されるメトリクス
<a name="object-detection-tensorflow-metrics"></a>

次の表を参照して、オブジェクト検出 - TensorFlow アルゴリズムによって計算されるメトリクスを確認してください。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| validation:localization\$1loss | ボックス予測におけるローカリゼーションの損失。 | 最小化 | `Val_localization=([0-9\\.]+)` | 

## 調整可能なオブジェクト検出 - TensorFlow ハイパーパラメータ
<a name="object-detection-tensorflow-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用してオブジェクト検出モデルを調整します。オブジェクト検出の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`batch_size`、`learning_rate`、および `optimizer` です。選択した `optimizer` に基づいて、`momentum`、`regularizers_l2`、`beta_1`、`beta_2`、`eps` などのオプティマイザ関連のハイパーパラメータを調整します。たとえば、`adam` が `optimizer` である場合にのみ `beta_1` と `beta_2` を使用します。

各 `optimizer` で使用されるハイパーパラメータの詳細については、「[オブジェクト検出 - TensorFlow ハイパーパラメータ](object-detection-tensorflow-Hyperparameter.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 8、MaxValue: 512 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8、MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['sgd', ‘adam’, ‘rmsprop’, 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| train\$1only\$1on\$1top\$1layer | CategoricalParameterRanges | ['True', 'False'] | 
| initial\$1accumulator\$1value | CategoricalParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 

# セマンティックセグメンテーションアルゴリズム
<a name="semantic-segmentation"></a>

SageMaker AI セマンティックセグメンテーションアルゴリズムは、コンピュータビジョンアプリケーション開発のためのピクセルレベルのきめ細かいアプローチを提供します。イメージ内のすべてのピクセルに、事前定義された一連のクラスのクラスラベルを付けます。タグ付けはシーンを理解するための基本であり、自動運転車や医療用画像診断、ロボットセンシングなど、増加するコンピュータビジョンアプリケーションにとって不可欠です。

比較においては、SageMaker AI [画像分類 - MXNet](image-classification.md) は、イメージ全体のみを分析し、それらを複数の出力カテゴリの 1 つに分類する、教師あり学習アルゴリズムです。[オブジェクト検出 - MXNet](object-detection.md)は、イメージ内のオブジェクトのすべてのインスタンスを検出および分類する教師あり学習アルゴリズムです。このアルゴリズムは、イメージ内の各オブジェクトの位置とスケールを長方形の境界ボックスで示します。

セマンティックセグメンテーションアルゴリズムは、イメージ内のすべてのピクセルを分類するため、イメージに含まれるオブジェクトの形状に関する情報も提供します。セグメンテーション出力は、グレースケールイメージ (セグメンテーションマスクと呼ばれる) として表されます。**セグメンテーションマスクは、入力イメージと同じ形状のグレースケールイメージです。

SageMaker AI セマンティックセグメンテーションアルゴリズムは、[MXNet Gluon フレームワークと Gluon CV ツールキット](https://github.com/dmlc/gluon-cv)を使用して構築されています。深層ニューラルネットワークを学習するための 3 つの組み込みアルゴリズムを選択できます。[完全畳み込みネットワーク (FCN) アルゴリズム](https://arxiv.org/abs/1605.06211)、[ピラミッドシーン解析 (PSP) アルゴリズム](https://arxiv.org/abs/1612.01105)、または [DeepLabV3](https://arxiv.org/abs/1706.05587) を使用することができます。

これらの 3 つのアルゴリズムには、それぞれ 2 つの異なるコンポーネントがあります。
+ バックボーン (またはエンコーダー) - 信頼性の高い特徴アクティベーションマップを作成するネットワーク。****
+ デコーダー - エンコードされたアクティベーションマップからセグメンテーションマスクを構築するネットワーク。**

FCN、PSP、および DeepLabV3 アルゴリズム用のバックボーン ([ResNet50 または ResNet101](https://arxiv.org/abs/1512.03385)) も選択できます。これらのバックボーンには、以前 [ImageNet](http://www.image-net.org/) 分類タスクでトレーニングされた事前トレーニング済みの成果物が含まれています。セグメンテーションのためにこれらのバックボーンを微調整するには、独自のデータを使用します。また、これらのネットワークを初期化し、独自のデータのみを使用して最初からトレーニングすることもできます。デコーダーは事前トレーニングされていません。

推論のためにトレーニング済みモデルをデプロイするには、SageMaker AI ホスティングサービスを使用します。推論中に、PNG イメージとして、または各ピクセルのクラスごとに一連の確率として、セグメンテーションマスクをリクエストできます。これらのマスクは、追加のダウンストリームイメージ処理やその他のアプリケーションを含む、大規模なパイプラインの一部として使用できます。

**Topics**
+ [セマンティックセグメンテーションサンプルノートブック](#semantic-segmentation-sample-notebooks)
+ [セマンティックセグメンテーションアルゴリズムの入出力インターフェイス](#semantic-segmentation-inputoutput)
+ [セマンティックセグメンテーションアルゴリズムの EC2 インスタンスに関する推奨事項](#semantic-segmentation-instances)
+ [セマンティックセグメンテーションハイパーパラメータ](segmentation-hyperparameters.md)
+ [セマンティックセグメンテーションモデルの調整](semantic-segmentation-tuning.md)

## セマンティックセグメンテーションサンプルノートブック
<a name="semantic-segmentation-sample-notebooks"></a>

SageMaker AI セマンティックセグメンテーションアルゴリズムを使用してモデルをトレーニングし、それをデプロイして推論を実行するサンプル Jupyter ノートブックについては、「[Semantic Segmentation Example](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/semantic_segmentation_pascalvoc/semantic_segmentation_pascalvoc.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。

すべての SageMaker AI サンプルのリストを表示するには、ノートブックインスタンスを作成して開き、**[SageMaker AI サンプル]** タブを選択します。セマンティックセグメンテーションサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] にあります。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

## セマンティックセグメンテーションアルゴリズムの入出力インターフェイス
<a name="semantic-segmentation-inputoutput"></a>

SageMaker AI セマンティックセグメンテーションは、顧客のトレーニングデータセットが [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) 上にあることを想定しています。一度トレーニングされると、Amazon S3 上に結果のモデルアーティファクトが生成されます。SageMaker AI セマンティックセグメンテーションの入力インターフェイス形式は、ほとんどの標準化セマンティックセグメンテーションベンチマークデータセットの形式と似ています。Amazon S3 のデータセットは `train` と `validation` の 2 つのチャネルに提供されることが想定されており、4 つのディレクトリ (イメージ用 2 つと注釈用 2 つ) が使用されます。注釈は、圧縮されていない PNG イメージであることが想定されています。データセットには、注釈マッピングの確立方法を説明するラベルマップも含まれている可能性があります。そうでない場合、アルゴリズムはデフォルトを使用します。このアルゴリズムはさらに、Amazon S3 から直接パイプ入力モードでトレーニングするための拡張マニフェストイメージ形式 (`application/x-image`) もサポートしています。推論の場合、エンドポイントは `image/jpeg` コンテンツタイプのイメージを受け入れます。

### トレーニングの仕組み
<a name="semantic-segmentation-inputoutput-training"></a>

トレーニングデータは、`train`、`train_annotation`、`validation`、および `validation_annotation` の 4 つのディレクトリに分割されます。これらの各ディレクトリ用のチャネルが 1 つずつあります。データセットには、`train_annotation` チャネルと `validation_annotation` チャネル用に 1 つずつ `label_map.json` ファイルが含まれていることも想定されています。これらの JSON ファイルを提供しなかった場合、SageMaker AI がデフォルトのセットラベルマップを提供します。

これらのファイルを指定するデータセットは、次の例のようになります。

```
s3://bucket_name
    |
    |- train
                 |
                 | - 0000.jpg
                 | - coffee.jpg
    |- validation
                 |
                 | - 00a0.jpg
                 | - bananna.jpg
    |- train_annotation
                 |
                 | - 0000.png
                 | - coffee.png
    |- validation_annotation
                 |
                 | - 00a0.png
                 | - bananna.png
    |- label_map
                 | - train_label_map.json
                 | - validation_label_map.json
```

train ディレクトリと validation ディレクトリ内のすべての JPG イメージには、`train_annotation` ディレクトリと `validation_annotation` ディレクトリ内に同じ名前の対応する PNG ラベルイメージがあります。この命名規則は、トレーニング中にアルゴリズムがラベルをそれに対応するイメージに関連付けるのに役立ちます。`train`、`train_annotation`、`validation`、および `validation_annotation` チャネルは必須です。注釈は単一チャネルの PNG イメージです。この形式は、アルゴリズムが注釈イメージを単一チャネルの 8 ビット符号なし整数として読み取る際に、イメージ内のメタデータ (モード) が役立つ場合に有効です。モードのサポートの詳細については、[Python Image Library のドキュメント](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#modes)を参照してください。8 ビットピクセルのトゥルーカラー `P` モードを使用することをお勧めします。

モードを使用する場合、エンコードされるイメージは単純な 8 ビット整数です。このマッピングからラベルのマップを取得するために、アルゴリズムはチャネルごとに 1 つのマッピングファイル (*ラベルマップ*と呼ばれる) を使用します。ラベルマップは、イメージ内の値を実際のラベルインデックスにマッピングするために使用されます。デフォルトのラベルマップ (指定していない場合はデフォルトで提供されない) では、注釈マトリックス (イメージ) のピクセル値がラベルに直接インデックスを付けます。これらのイメージは、グレースケール PNG ファイルまたは 8 ビットインデックス付き PNG ファイルです。スケールされていないデフォルトのケースのラベルマップファイルは次のとおりです。

```
{
  "scale": "1"
}
```

表示用にコントラストを追加する目的で、一部の注釈ソフトウェアはラベルイメージを一定量だけスケールします。これをサポートするために、SageMaker AI セマンティックセグメンテーションアルゴリズムは、再スケーリングオプションを提供して、値を実際のラベル値にスケールダウンします。スケールダウンしても適切な整数値に変換されない場合、アルゴリズムはデフォルトでスケール値以下の最大の整数値を設定します。次のコードは、スケール値を設定してラベル値を再スケールする方法を示しています。

```
{
  "scale": "3"
}
```

次の例は、入力注釈イメージの `encoded_label` 値が、トレーニングで使用される `mapped_label` 値にマッピングされたときに、この `"scale"` 値を使用して再スケーリングされる方法を示しています。入力注釈イメージのラベル値は、スケールは 3 で 0、3、6 であるため、トレーニング用に 0、1、2 にマッピングされます。

```
encoded_label = [0, 3, 6]
mapped_label = [0, 1, 2]
```

場合によっては、クラスごとに特定のカラーマッピングを指定する必要があります。次の `label_map` ファイルの例に示すように、ラベルマッピングでマップオプションを使用します。

```
{
    "map": {
        "0": 5,
        "1": 0,
        "2": 2
    }
}
```

この例のラベルマッピングは次のとおりです。

```
encoded_label = [0, 5, 2]
mapped_label = [1, 0, 2]
```

ラベルマッピングにより、さまざまな注釈システムと注釈ソフトウェアを使用して、前処理をそれほど行わずにデータを取得できます。チャネルごとに 1 つのラベルマップを指定できます。`label_map` チャネルのラベルマップのファイルは、4 つのディレクトリ構造の命名規則に従う必要があります。ラベルマップを指定しなかった場合、アルゴリズムはスケール 1 (デフォルト) を想定します。

### 拡張マニフェスト形式によるトレーニング
<a name="semantic-segmentation-inputoutput-training-augmented-manifest"></a>

拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。拡張マニフェストファイルにはデータオブジェクトが含まれているため、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで説明するとおり、[JSON Lines](http://jsonlines.org/) 形式にする必要があります。マニフェストの各行は、イメージの Amazon S3 URI と注釈イメージの URI を含むエントリです。

マニフェストファイル内の各 JSON オブジェクトには `source-ref` キーを含める必要があります。`source-ref` キーには、イメージの Amazon S3 URI の値を含める必要があります。ラベルは、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで指定されている `AttributeNames` パラメータ値に基づいて提供されます。metadata タグの下に追加のメタデータを含めることもできますが、これらはアルゴリズムによって無視されます。次の例では、`AttributeNames` は画像および注釈参照 `["source-ref", "city-streets-ref"]` のリストに含まれます。これらの名前は `-ref` で追加する必要があります。拡張マニフェストでセマンティックセグメンテーションアルゴリズムを使用するときは、`RecordWrapperType` パラメータの値は `"RecordIO"`、`ContentType` パラメータの値は `application/x-recordio` である必要があります。

```
{"source-ref": "S3 bucket location", "city-streets-ref": "S3 bucket location", "city-streets-metadata": {"job-name": "label-city-streets", }}
```

拡張マニフェストファイルの詳細については、[トレーニングジョブの拡張マニフェストファイル](augmented-manifest.md)を参照してください。

### 段階的トレーニング
<a name="semantic-segmentation-inputoutput-incremental-training"></a>

SageMaker AI では、以前にトレーニングしたモデルを使用して、新しいモデルのトレーニングをシードすることもできます。この段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。現在、段階的トレーニングは、組み込みの SageMaker AI セマンティックセグメンテーションでトレーニングされたモデルに対してのみサポートされています。

独自のトレーニング済みモデルを使用するには、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `InputDataConfig` で `ChannelName` を「モデル」として指定します。モデルチャネルの `ContentType` を `application/x-sagemaker-model` に設定します。ネットワークアーキテクチャーを定義する `backbone`、`algorithm`、`crop_size`、および `num_classes` 入力パラメータは、新しいモデルとモデルチャネルにアップロードする事前トレーニング済みモデルの入力ハイパーパラメータで一貫して指定する必要があります。事前トレーニング済みのモデルファイルには、SageMaker AI 出力からの圧縮 (.tar.gz) アーティファクトを使用できます。入力データには、イメージ形式のみ使用できます。段階的トレーニングの詳細とその使用方法については、[Amazon SageMaker AI の段階的トレーニングを使用する](incremental-training.md)を参照してください。

### 推論を生成する
<a name="semantic-segmentation-inputoutput-inference"></a>

エンドポイントにデプロイされているトレーニング済みモデルに対してクエリを実行するには、イメージと、必要な出力のタイプを示す `AcceptType` を指定する必要があります。エンドポイントは、`image/jpeg` コンテンツタイプの JPEG イメージを使用します。`AcceptType` として `image/png` をリクエストした場合、アルゴリズムはラベルそのものと同じ形式のセグメンテーションマスクを持つ PNG ファイルを出力します。accept タイプとして `application/x-recordio-protobuf` をリクエストした場合、アルゴリズムは recordio-protobuf 形式でエンコードされたクラスの確率を返します。後者の形式は、3 次元がクラスの数と同じサイズである 3D テンソルを出力します。このコンポーネントは、各ピクセルの各クラスラベルの確率を表します。

## セマンティックセグメンテーションアルゴリズムの EC2 インスタンスに関する推奨事項
<a name="semantic-segmentation-instances"></a>

SageMaker AI セマンティックセグメンテーションアルゴリズムは、トレーニング用に GPU インスタンスのみをサポートしています。バッチサイズの大きいトレーニングには、より多くのメモリを備えた GPU インスタンスを使用することをお勧めします。このアルゴリズムは、単一マシン構成の P2、P3、G4dn、または G5 インスタンスを使用してトレーニングできます。

推論には、CPU インスタンス (C5、M5 など) と GPU インスタンス (P3、G4dn など) のいずれか、またはその両方を使用できます。推論のために CPU、GPU、メモリ、およびネットワーク容量のさまざまな組み合わせを提供するインスタンスタイプについては、「[Amazon SageMaker AI ML Instance Types](https://aws.amazon.com/sagemaker/pricing/instance-types/)」を参照してください。

# セマンティックセグメンテーションハイパーパラメータ
<a name="segmentation-hyperparameters"></a>

次の表は、ネットワークアーキテクチャ、データ入力、トレーニング用に Amazon SageMaker AI セマンティックセグメンテーションアルゴリズムでサポートされているハイパーパラメータのリストです。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `AlgorithmName` でトレーニング用のセマンティックセグメンテーションを指定します。

**ネットワークアーキテクチャーハイパーパラメータ**


| Parameter Name | 説明 | 
| --- | --- | 
| backbone |  アルゴリズムのエンコーダーコンポーネントに使用するバックボーン。 **オプション** 有効な値: `resnet-50`、`resnet-101` デフォルト値: `resnet-50`  | 
| use\$1pretrained\$1model |  バックボーンに事前トレーニング済みモデルを使用するかどうか。 **オプション** 有効な値: `True`、`False` デフォルト値: `True`  | 
| algorithm |  セマンティックセグメンテーションに使用するアルゴリズム。 **オプション** 有効な値: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/segmentation-hyperparameters.html) デフォルト値: `fcn`  | 

**データハイパーパラメータ**


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1classes |  セグメント化するクラスの数。 **必須** 有効な値: 2 ≤ 正の整数 ≤ 254  | 
| num\$1training\$1samples |  トレーニングデータのサンプル数。アルゴリズムはこの値を使用して、学習レートスケジューラを設定します。 **必須** 有効な値: 正の整数  | 
| base\$1size |  トリミング前にイメージを拡大縮小し直す方法を定義します。イメージは拡大縮小し直され、ロングサイズの長さが 0.5 ～ 2.0 の乱数で乗算された `base_size` に設定されて、ショートサイズがアスペクト比を維持して計算されます。 **オプション** 有効な値: 正の整数 > 16 デフォルト値: 520  | 
| crop\$1size |  トレーニング中の入力イメージのサイズ。入力イメージを、`base_size` に基づいてランダムに拡大縮小し直し、辺の長さが `crop_size` に等しいランダム正方形トリミングを行います。`crop_size` は、自動的に 8 の倍数に切り上げられます。 **オプション** 有効な値: 正の整数 > 16 デフォルト値: 240  | 

**トレーニングハイパーパラメータ**


| Parameter Name | 説明 | 
| --- | --- | 
| early\$1stopping |  トレーニング中に早期停止ロジックを使用するかどうか。 **オプション** 有効な値: `True`、`False` デフォルト値: `False`  | 
| early\$1stopping\$1min\$1epochs |  実行する必要のあるエポックの最小数。 **オプション** 有効な値: 整数 デフォルト値: 5  | 
| early\$1stopping\$1patience |  アルゴリズムが早期停止を強制する前に低パフォーマンスの許容範囲を満たすエポックの数。 **オプション** 有効な値: 整数 デフォルト値: 4  | 
| early\$1stopping\$1tolerance |  mIOU の相対的な改善がこの値より小さい場合、早期停止はエポックの改善がないと見なします。これは `early_stopping` = `True` の場合にのみ使用されます。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 1 デフォルト値: 0.0  | 
| epochs |  トレーニングするエポック数。 **オプション** 有効な値: 正の整数 デフォルト値: 10  | 
| gamma1 |  `rmsprop` の 2 乗勾配の移動平均に使用される減衰係数。`rmsprop` にのみ使用されます。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 1 デフォルト値: 0.9  | 
| gamma2 |  `rmsprop` のモーメンタム係数。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 1 デフォルト値: 0.9  | 
| learning\$1rate |  最初の学習レート。 **オプション** 有効な値: 0 < 浮動小数点数 ≤ 1 デフォルト値: 0.001  | 
| lr\$1scheduler |  経時減少を制御する学習レートスケジュールの形状。 **オプション** 有効な値:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/segmentation-hyperparameters.html) デフォルト値: `poly`  | 
| lr\$1scheduler\$1factor |  `lr_scheduler` が `step` に設定される場合、`lr_scheduler_step` で指定された各エポック後に `learning_rate` ずつ減算 (乗算) する比率。それ以外の場合は無視されます。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 1 デフォルト値: 0.1  | 
| lr\$1scheduler\$1step |  エポックのカンマ区切りのエポックのリスト。このエポックの後、`learning_rate` は `lr_scheduler_factor` だけ減算 (乗算) されます。例えば、値が `"10, 20"` に設定されている場合、`learning-rate` は 10 番目のエポックの後に `lr_scheduler_factor` だけ減算され、20 番目のエポックの後に再びこの係数だけ減算されます。 `lr_scheduler` が `step` に設定されると、**条件付きで必須**です。それ以外の場合は無視されます。 有効な値: 文字列 デフォルト値: (使用時に値が必須であるため、デフォルトはありません)  | 
| mini\$1batch\$1size |  トレーニングのバッチサイズ。大きな `mini_batch_size` を使用すると通常、トレーニングは加速しますが、メモリ不足が起きる可能性があります。メモリ使用量は、`mini_batch_size` パラメータと `image_shape` パラメータの値、およびバックボーンアーキテクチャーの影響を受けます。 **オプション** 有効な値: 正の整数  デフォルト値: 16  | 
| momentum |  オプティマイザの`sgd`モーメンタム。他のオプティマイザを使用すると、セマンティックセグメンテーションアルゴリズムはこのパラメータを無視します。 **オプション** 有効な値: 0 < 浮動小数点数 ≤ 1 デフォルト値: 0.9  | 
| optimizer |  オプティマイザのタイプ。オプティマイザの詳細については、該当するリンクを選択してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/segmentation-hyperparameters.html) **オプション** 有効な値:`adam`、`adagrad`、`nag`、`rmsprop`、`sgd` デフォルト値: `sgd`  | 
| syncbn |  `True` に設定されている場合、バッチの正規化平均と分散は、GPU 全体で処理されたすべてのサンプルに対して計算されます。 **オプション**  有効な値: `True`、`False` デフォルト値: `False`  | 
| validation\$1mini\$1batch\$1size |  検証用のバッチサイズ。`mini_batch_size` が大きいと通常、トレーニングは加速しますが、メモリ不足が起きる可能性があります。メモリ使用量は、`mini_batch_size` パラメータと `image_shape` パラメータの値、およびバックボーンアーキテクチャーの影響を受けます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/segmentation-hyperparameters.html) **オプション** 有効な値: 正の整数 デフォルト値: 16  | 
| weight\$1decay |  `sgd` オプティマイザの重み減衰係数。他のオプティマイザを使用すると、アルゴリズムはこのパラメータを無視します。 **オプション** 有効な値: 0 < 浮動小数点数 < 1 デフォルト値: 0.0001  | 

# セマンティックセグメンテーションモデルの調整
<a name="semantic-segmentation-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

## セマンティックセグメンテーションアルゴリズムによって計算されたメトリクス
<a name="semantic-segmentation-metrics"></a>

セマンティックセグメンテーションアルゴリズムは、2 つの検証メトリクスについて報告します。ハイパーパラメータ値を調整する場合は、目標としてこれらのメトリクスから選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:mIOU |  検証セット内のイメージについて、予測されたセグメンテーションと Ground Truth の交点の領域を、検証セット内のイメージに対してそれらの間の総合の面積で割った面積。Jaccard インデックスとも呼ばれます。  |  最大化  | 
| validation:pixel\$1accuracy | 検証セットのイメージで正しく分類されているピクセルの割合。 |  最大化  | 

## 調整可能なセマンティックセグメンテーションハイパーパラメータ
<a name="semantic-segmentation-tunable-hyperparameters"></a>

セマンティックセグメンテーションアルゴリズムの次のハイパーパラメータを調整できます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4、MaxValue: 1e-1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 1、MaxValue: 128  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.9、MaxValue: 0.999  | 
| optimzer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'adadelta']  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 1e-5、MaxValue: 1e-3  | 