【論文紹介】
Zuang et al. “Fast Prallel SGD for
Matrix Factorization in Shared
Memory Systems”
2013/11/16
RecSys2013読み会 at Gunosyオフィス
加藤公一 @hamukazu
シルバーエッグテクノロジー
要旨
レイティング問題
• 映画を見た人たちがそれぞれの作品の面白
さを1~5の点数で評価したとする。
• ある人が、まだ見てない映画について、どの
ような点数を与えるだろうか?
• 注意:ショッピング向けのレコメンデーション
(これを買った人がどれを買ってくれそうか)と
は違う
Matrix Factorization Technique
与えられたuser×item行列

Sparse!

×

≈

Itemのratingは少数の特徴量で
表現できるという前提

例:映画の場合、ジャンル、
監督、主演俳優、など

≔
≐

=

≒

(不明要素を含む)

サイズの小さい行列の積で近似

Q
行列の積によって不明部分を埋める
与えられたuser×item行列

Sparse!

≒

(不明要素を含む)

最小化:

サイズの小さい行列の積で近似

×

≈

≔
≐

Q

≘ ∨≲ ⊡ ≰≔ ≱ ∩∲ ∫ ⊸ ≫≐ ≫∲ ∫ ⊸ ≫≑≫∲
∧ ∨≐ ∻ ≑ ∩ ∽
≩∻≪ ≩ ≪
≐ ≆ ≑ ≆
≲≩∻≪ ∺≲≩∻≪ ∾∰
最急降下法と確率的最急降下法(一般論)
最急降下法
目的関数

∧ ∽ ∧ ∨ ≸∩ ∻

を最小化したいとする。

≤
≸∲≒

アルゴリズム

≸ ⋃ ≸ ⊡ ⊮ ≲∧

以下を収束するまで繰り返す

≎
≘ ∧ ∨≸∩∻ ≸ ∽ ∨≸ ∻ ∺ ∺ ∺ ∻ ≸ ∩ ∲ ≒≤
∧ ∨≸ ∩ ∽ ≩
∱
≤
≩∽∱
∧≩∨≸∩
≸≪ ∻ ≪ ∲ ≊ ≩

確率的最急降下法(SGD)

ただし

は一部の変数

のみに依存する

アルゴリズム

以下を収束するまで繰り返す
i をランダムに選ぶ
すべての

≪ ∲ ≊≩
≀ ∧≩
≸ ≪ ⋃ ≸≪ ⊡ ⊮ ≀ ≸ ≪
について
SGDの前提
• 高速にそこそこいい解を得たい
– 本当の最適解を得ることはあきらめている
MFのSGD
≘

∱
≔ ≱≪ ∩ ∲ ∫ ⊸ ≐ ≫ ≐ ≫ ∲ ∫ ⊸ ≑ ≫ ≑ ≫ ∲
∧∨≐ ∻ ≑∩ ∽ ∲
∨≲≩∻≪ ⊡ ≰≩
∲ ≆ ∲ ≆
≲≩∻≪ ∺≲≩∻≪ ∾∰
∱ ∨≲≩∻≪ ⊡ ≰≔ ≱≪ ∩∲ ∫ ⊸≐ ≫≰≩≫∲ ∫ ⊸≑ ≫≱≪ ≫∲
∧≩∻≪ ∽ ∲
≩
∲
∲
≰≩∻ ≱≪ にのみ依存

≀ ∧≩∻≪ ∽ ⊡∨≲≩∻≪ ⊡ ≰≔ ≱≪ ∩≱≪≫ ∫ ⊸≐ ≰≩≫
≩
≀ ≰≩≫
≀ ∧≩∻≪ ∽ ⊡∨≲≩∻≪ ⊡ ≰≔ ≱≪ ∩≰≩≫ ∫ ⊸≑≱≪≫
≩
≀ ≱≪ ≫
≰≩≫ ⋃ ≰≩≫ ∫ ⊮∨≥≩≪ ≱≪≫ ⊡ ⊸≐ ≰≩≫∩
≱≪≫ ⋃ ≱≪≫ ∫ ⊮∨≥≩≪ ≰≩≫ ⊡ ⊸≑≱≪≫∩
≥≩≪ ∽ ≲≩≪ ⊡ ≰≔ ≱≪
≩
これは

つまり、ランダムに i, j を選んで以下を計算

ただし、
問題
• SGDを共有メモリで並列に高速に計算したい
既存手法の紹介
• HogWild
– 文字通りワイルドな方法

• DSGD
– 分散環境
確認
j

≲≩∻≪

i

≒

i

≈

≰≔
≩

j

≱≪

Q
≔ ≲≩∻≪ ⊼ ≰≔ ≱≪
≐
≩

アルゴリズム
ランダムに i, j を選んで以下を計算

×

≰≩≫ ⋃ ≰≩≫ ⊡ ⊮∨≥≩≪ ≱≪≫ ⊡ ⊸≐ ≰≩≫ ∩
≱≪≫ ⋃ ≱≪≫ ⊡ ⊮∨≥≩≪ ≰≩≫ ⊡ ⊸≑≱≪≫∩
≥≩≪ ∽ ≲≩≪ ⊡ ≰≔ ≱≪
≩
ただし、
HogWild
複数スレッドで以下を同時に繰り返す

≰ ≩ ∻ ≱≪

ランダムに i,j を選ぶ
を更新

根拠:i や j がぶつかることはめったにない
(サイズが十分大きいから)
ぶつかっても無視して進める
(あまり影響はない)
ここらへんがワイルド
F. Niu et al., HOGWILD: A lock-free approach to parallelizing stochastic gradient descent,
Advance in Neural Information Processing Systems 24, 2011
問題点
• アトミックな処理がたくさん必要
– 衝突しているときを考慮してP, Qの読み書きはア
トミックに
DSGD
入力s×s個のブロックに分ける
以下を複数ノードで並列計算
i ←ノード番号
j ←i
以下を繰り返す
( i, j )ブロックの範囲内でランダムに更新
j←(j+1) mod s
隣のノードにデータ送信
sはノード数
Node0

Node1
Node2

R. Gemulla et al., Large scale matrix factorization with distributed stochastic gradient descent, ACM SIGKDD, 2011
DSGDの問題点
• 非ゼロ要素の分布によっては計算負荷のバ
ランスが悪い
– 待ち時間が発生する
– 分散環境を想定したので、通信コストを下げるの
が最優先だった
FPSGD(提案手法)
• M×M(M>R)のブロックに分割
• 計算が終わったスレッドにフリーなブロックを
割り当てる
– フリー:同じ行、同じ列に計算中ブロックがないブ
ロック

• いくつかあるフリーなブロックのうち、更新回
数が少ないものを優先的に割り当て
– 計算の偏りがないように
例

:処理中

:フリー

ロックフリー!
Partial Random Method
• 行列要素へのアクセスを、ランダムにせずに順序性を
持たせることでキャッシュミスを減らす
• ただし、そうすることで収束性が不安定になり逆効果
になることもあるので注意
• 本論文では、ブロックはランダムに、ブロック内の要素
は順番にアクセスするPartial Random Methodを提案
する
収束性の実験

原論文から抜粋
実験結果
FPSGD**=FPSGDの実装で、スケ
ジューリングの部分をDSGD相当
に変更したバージョン
(つまり実質的にDSGD。スケ
ジューリング以外のところで差が
でないように調整)

原論文より抜粋
まとめ
• 従来の分散システム向けMatrix Factorization
をもとに共有メモリ向けの効率のよいアルゴ
リズムを考案
• スケジューリングの工夫により計算リソース
の無駄軽減に成功

• キャッシュを意識したメモリアクセスで高速化
に成功

Zuang-FPSGD