インテル® DAAL 2018 デベロッパー・ガイド

訓練

分散処理モードは、データセットが計算ノードの nblocks ブロックに分割されていると仮定します。

アルゴリズムのパラメーター

訓練段階での分散処理モードの暗黙的 ALS 推薦のパラメーターは次のとおりです。

パラメーター

デフォルト値

説明

computeStep

適用不可

アルゴリズムを初期化するために必要なパラメーターです。次のいずれか。

  • step1Local - 第 1 ステップ、ローカルノードで実行
  • step2Master - 第 2 ステップ、マスターノードで実行
  • step3Local - 第 3 ステップ、ローカルノードで実行
  • step4Local - 第 4 ステップ、ローカルノードで実行

algorithmFPType

float

アルゴリズムが中間計算に使用する浮動小数点の型。float または double を指定できます。

method

fastCSR

CSR 数値テーブル用のパフォーマンス指向の計算メソッド。アルゴリズムでサポートされている唯一のメソッドです。

nFactors

10

係数の総数。

maxIterations

5

反復回数。

alpha

40

信頼度。

lambda

0.01

正規化のパラメーター。

preferenceThreshold

0

選択値を定義するしきい値。

現在サポートしている唯一のしきい値は、0 です。

計算プロセス

各反復で、暗黙的 ALS 訓練アルゴリズムはユーザー係数 (X) およびアイテム係数 (Y) の再計算を交互に行います。これらの計算により各反復は次の部分に分割されます。

  1. 入力データセットおよび前に計算されたアイテム係数を使用して、ユーザー係数をすべて再計算します。

  2. 転置形式の入力データセットおよび前に計算されたアイテム係数を使用して、アイテム係数をすべて再計算します。

各部分にはローカルノードまたはマスターノードで実行される 4 つのステップが含まれます (下記の図は nblocks=3)。暗黙的 ALS 訓練段階のメインループはマスターノードで実行されます。





以下の擬似コードは計算全体を表しています。

for (iteration = 0; iteration < maxIterations; iteration++)
{
    /* 部分ユーザー係数を更新 */
    outputOfStep1ForStep2 = computeStep1Local(itemPartialResultLocal);
    outputOfStep2ForStep4 = computeStep2Master(outputOfStep1ForStep2);
    outputOfStep3ForStep4 = computeStep3Local(itemOffsetTable, itemPartialResultLocal, itemStep3LocalInput);
    inputOfStep4FromStep3 = getInputOfStep4FromStep3(outputOfStep3ForStep4);
    userPartialResultLocal = computeStep4Local(outputOfStep2ForStep4, inputOfStep4FromStep3, dataTable);

    /* 部分アイテム係数を更新 */
    outputOfStep1ForStep2 = computeStep1Local(userPartialResultLocal);
    outputOfStep2ForStep4 = computeStep2Master(outputOfStep1ForStep2);
    outputOfStep3ForStep4 = computeStep3Local(userOffsetTable, userPartialResultLocal, userStep3LocalInput);
    inputOfStep4FromStep3 = getInputOfStep4FromStep3(outputOfStep3ForStep4);
    itemPartialResultLocal = computeStep4Local(outputOfStep2ForStep4, inputOfStep4FromStep3, dataTable);
}

ステップ 1 - ローカルノード

このステップは行列を操作します。

この行列の部分は入力部分モデルとして使用されます。


暗黙的 ALS 訓練、分散処理ワークフローのステップ 1

このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

入力 ID

入力

partialModel

ローカルノードで計算される部分モデル。

このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

結果 ID

結果

outputOfStep1ForStep2

ステップ 1 で計算された数値テーブルの和を含む f x f 数値テーブルのポインター。

ステップ 2 - マスターノード

このステップは、入力としてステップ 1 の部分結果を使用します。


暗黙的 ALS 訓練、分散処理ワークフローのステップ 2

このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

入力 ID

入力

inputOfStep2FromStep1

ステップ 1 で計算された数値テーブルのコレクション。(lowerPackedTriangularMatrix レイアウトの PackedTriangularMatrix クラスを除く) NumericTable の派生クラスのオブジェクトをコレクションに含めることができます。

このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

結果 ID

結果

outputOfStep2ForStep4

マージされたクロス積を含む f x f 数値テーブルのポインター。

ステップ 3 - ローカルノード

各ノード i で、このステップは前のステップの結果を使用します。「オフセットテーブル iおよび「アルゴリズムの初期化段階で計算された初期化のステップ 3 の入力 iの 2 つの行列を追加で提供する必要があります。

オフセットテーブル i」テーブルの唯一の要素は次の要素を指します。

初期化のステップ 3 の入力は、初期化段階の outputOfInitForComputeStep3 出力を指すキー/値データのコレクションです。


暗黙的 ALS 訓練、分散処理ワークフローのステップ 3

このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

入力 ID

入力

partialModel

ローカルノードで計算される部分モデル。

非推奨: partialModelBlocksToNode

代わりに使用: inputOfStep3FromInit

アルゴリズムの初期化段階で計算されたキー/値データのコレクション。

offset

入力部分モデルの開始行のグローバル・インデックスを含むサイズ 1x1 の数値テーブル。アルゴリズムの初期化段階で計算されたキー/値データのコレクション offsets の一部。

このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

結果 ID

結果

outputOfStep3ForStep4

ステップ 4 で使用する部分モデルを含むキー/値データのコレクション。コレクションの各要素は PartialModel クラスのオブジェクトを含みます。

ステップ 4 - ローカルノード

このステップは、前のステップの結果および転置形式の以下の行列の部分を使用します。

ステップの結果はこの行列の再計算された部分です。


暗黙的 ALS 訓練、分散処理ワークフローのステップ 4

このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

入力 ID

入力

partialModels

ステップ 3 で計算されたユーザー係数/アイテム係数を含む部分モデルを含むキー/値データのコレクション。コレクションの各要素は PartialModel クラスのオブジェクトを含みます。

partialData

入力データセットの i 番目の部分を含む CSR 数値テーブルのポインター。データがユーザー/アイテムで割られると仮定します。

inputOfStep4FromStep2

ステップ 2 で計算された f x f 数値テーブルのポインター。

このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。

結果 ID

結果

outputOfStep4ForStep1

i 番目のデータブロックに対応する部分暗黙的 ALS モデルのポインター。部分モデルはユーザー係数/アイテム係数を格納します。

outputOfStep4ForStep3

サンプル

C++: impl_als_csr_distr.cpp

Java*: ImplAlsCSRDistr.java

Python*: impl_als_csr_distr.py

関連情報