インテル® DAAL 2017 デベロッパー・ガイド
分散処理モードは、データセットが計算ノードの nblocks ブロックに分割されていると仮定します。
訓練段階での分散処理モードの暗黙的 ALS 推薦のパラメーターは次のとおりです。
パラメーター |
デフォルト値 |
説明 |
|
---|---|---|---|
computeStep |
適用不可 |
アルゴリズムを初期化するために必要なパラメーターです。次のいずれか。
|
|
algorithmFPType |
double |
アルゴリズムが中間計算に使用する浮動小数点の型。float または double を指定できます。 |
|
method |
fastCSR |
CSR 数値テーブル用のパフォーマンス指向の計算メソッド。アルゴリズムでサポートされている唯一のメソッドです。 |
|
nFactors |
10 |
係数の総数。 |
|
maxIterations |
5 |
反復回数。 |
|
alpha |
40 |
信頼度。 |
|
lambda |
0.01 |
正規化のパラメーター。 |
|
preferenceThreshold |
0 |
選択値を定義するしきい値。 現在サポートしている唯一のしきい値は、0 です。 |
各反復で、暗黙的 ALS 訓練アルゴリズムはユーザー係数 (X) およびアイテム係数 (Y) の再計算を交互に行います。これらの計算により各反復は次の部分に分割されます。
入力データセットおよび前に計算されたアイテム係数を使用して、ユーザー係数をすべて再計算します。
転置形式の入力データセットおよび前に計算されたアイテム係数を使用して、アイテム係数をすべて再計算します。
インテル® DAAL では、分散処理モードの暗黙的 ALS の計算には、行列 X と Y および転置行列を提供する必要があります。
各部分にはローカルノードまたはマスターノードで実行される 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); }
このステップは行列を操作します。
この行列の部分は入力部分モデルとして使用されます。
このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。
入力 ID |
入力 |
|
---|---|---|
partialModel |
ローカルノードで計算される部分モデル。 |
このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。
結果 ID |
結果 |
|
---|---|---|
outputOfStep1ForStep2 |
ステップ 1 で計算された数値テーブルの和を含む f x f 数値テーブルのポインター。 |
このステップは、入力としてステップ 1 の部分結果を使用します。
このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。
入力 ID |
入力 |
|
---|---|---|
inputOfStep2FromStep1 |
ステップ 1 で計算された数値テーブルのコレクション。(lowerPackedTriangularMatrix レイアウトの PackedTriangularMatrix クラスを除く) NumericTable の派生クラスのオブジェクトをコレクションに含めることができます。 |
このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。
結果 ID |
結果 |
|
---|---|---|
outputOfStep2ForStep4 |
マージされたクロス積を含む f x f 数値テーブルのポインター。 |
各ノード i で、このステップは前のステップの結果を使用します。「オフセットテーブル i」および「ノード i の部分モデルブロック」の 2 つの行列を追加で提供する必要があります。
オフセットテーブル i テーブルの唯一の要素は行列を指します。
「オフセットテーブル i」テーブルは、ステップ 1 で取得した部分モデルの最初の要素の行列の列のインデックスを含む必要があります。このテーブルに、i 番目のノードにある入力データセットの部分の開始行のインデックスを含めます。
「ノード i の部分モデルブロック」テーブルは、転送する部分モデルのサブセットのノードを指定するキー/値データのコレクションを含みます。例えば、key[i] (図の key1) がインデックス {j1, j2, j3} を含む場合、部分モデルの行 j1、j2、および j3 を計算ノード i に転送する必要があります。
このステップの暗黙的 ALS 推薦訓練の入力は次のとおりです。入力 ID をパラメーターとして、アルゴリズムの入力を提供するメソッドに渡します。詳細は、「アルゴリズム」を参照してください。
入力 ID |
入力 |
|
---|---|---|
partialModel |
ローカルノードで計算される部分モデル。 |
|
partialModelBlocksToNode |
ローカルノードに部分モデルのコンポーネントをマップするキー/値データのコレクション。このコレクションの i 番目の要素は i 番目のノードに転送する係数のインデックスを含む数値テーブルです。 |
|
offset |
入力部分モデルの開始行のグローバル・インデックスを含む 1x1 数値テーブルのポインター。 |
このステップで、暗黙的 ALS 推薦訓練は次の結果を計算します。結果 ID をパラメーターとして、アルゴリズムの結果にアクセスするメソッドに渡します。詳細は、「アルゴリズム」を参照してください。
結果 ID |
結果 |
|
---|---|---|
outputOfStep3ForStep4 |
ステップ 4 で使用する部分モデルを含むキー/値データのコレクション。コレクションの各要素は PartialModel クラスのオブジェクトを含みます。 |
このステップは、前のステップの結果および転置形式の以下の行列の部分を使用します。
ステップの結果はこの行列の再計算された部分です。
このステップの暗黙的 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