

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

# 因数分解機アルゴリズム
<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
            }   
        }
    }
]
```