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

訓練

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

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

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

パラメーター

デフォルト値

説明

computeStep

適用不可

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

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

algorithmFPType

double

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

method

fastCSR

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

nFactors

10

係数の総数。

maxIterations

5

反復回数。

alpha

40

信頼度。

lambda

0.01

正規化のパラメーター。

preferenceThreshold

0

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

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

計算プロセス

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

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

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

重要

インテル® DAAL では、分散処理モードの暗黙的 ALS の計算には、行列 XY および転置行列を提供する必要があります。

各部分にはローカルノードまたはマスターノードで実行される 4 つのステップが含まれます (下記の図は nblocks=3)。暗黙的 ALS 訓練段階のメインループはマスターノードで実行されます。以下の擬似コードは計算全体を表しています。

for (iteration = 0; iteration < maxIterations; iteration++)
{
    /* 部分ユーザー係数を更新 */
    computeStep1Local(itemsPartialResultLocal);
    computeStep2Master();
    computeStep3Local(itemsOffsetTable, itemsPartialResultLocal, itemsFactorsToNodes);
    usersPartialResultLocal = computeStep4Local(itemsPartialResultLocal);

    /* 部分アイテム係数を更新 */
    computeStep1Local(usersPartialResultLocal);
    computeStep2Master();
    computeStep3Local(usersOffsetTable, usersPartialResultLocal, usersFactorsToNodes);
    itemsPartialResultLocal = computeStep4Local(usersPartialResultLocal);
}

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

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

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


Implicit Alternating Least Squares Training, Distributed Processing Step1 Workflow

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

入力 ID

入力

partialModel

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

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

結果 ID

結果

outputOfStep1ForStep2

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

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

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


Implicit Alternating Least Squares Training, Distributed Processing Step2 Workflow

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

入力 ID

入力

inputOfStep2FromStep1

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

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

結果 ID

結果

outputOfStep2ForStep4

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

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

各ノード i で、このステップは前のステップの結果を使用します。「オフセットテーブル iおよび「ノード i の部分モデルブロック」の 2 つの行列を追加で提供する必要があります。

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

「オフセットテーブル iテーブルは、ステップ 1 で取得した部分モデルの最初の要素の行列の列のインデックスを含む必要があります。このテーブルに、i 番目のノードにある入力データセットの部分の開始行のインデックスを含めます。

「ノード i の部分モデルブロック」テーブルは、転送する部分モデルのサブセットのノードを指定するキー/値データのコレクションを含みます。例えば、key[i] (図の key1) がインデックス {j1, j2, j3} を含む場合、部分モデルの行 j1、j2、および j3 を計算ノード i に転送する必要があります。


Implicit Alternating Least Squares Training, Distributed Processing Step3 Workflow

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

入力 ID

入力

partialModel

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

partialModelBlocksToNode

ローカルノードに部分モデルのコンポーネントをマップするキー/値データのコレクション。このコレクションの i 番目の要素は i 番目のノードに転送する係数のインデックスを含む数値テーブルです。

offset

入力部分モデルの開始行のグローバル・インデックスを含む 1x1 数値テーブルのポインター。

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

結果 ID

結果

outputOfStep3ForStep4

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

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

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

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


Implicit Alternating Least Squares Training, Distributed Processing Step4 Workflow

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

入力 ID

入力

partialModels

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

partialData

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

inputOfStep4FromStep2

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

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

結果 ID

結果

outputOfStep4ForStep1

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

outputOfStep4ForStep3

サンプル

インテル® DAAL ディレクトリーの次のサンプルを参照してください。

C++: ./examples/cpp/source/implicit_als/implicit_als_csr_distributed.cpp

Java*: ./examples/java/source/com/intel/daal/examples/implicit_als/ImplicitAlsCSRDistributed.java

Python*: ./examples/python/source/implicit_als/implicit_als_csr_distributed.py

関連情報