zuang-fpsgd

20
【論文紹介】 Zuang et al. “Fast Prallel SGD for Matrix Factorization in Shared Memory Systems” 2013/11/16 RecSys2013読み会 at Gunosyオフィス 加藤公一 @hamukazu シルバーエッグテクノロジー

Upload: kimikazu-kato

Post on 18-Jun-2015

897 views

Category:

Technology


1 download

DESCRIPTION

2013/11/16 RecSys読み会での発表資料です。

TRANSCRIPT

Page 1: Zuang-FPSGD

【論文紹介】 Zuang et al. “Fast Prallel SGD for Matrix Factorization in Shared

Memory Systems”

2013/11/16 RecSys2013読み会 at Gunosyオフィス

加藤公一 @hamukazu シルバーエッグテクノロジー

Page 2: Zuang-FPSGD

要旨

Page 3: Zuang-FPSGD

レイティング問題

• 映画を見た人たちがそれぞれの作品の面白さを1~5の点数で評価したとする。

• ある人が、まだ見てない映画について、どのような点数を与えるだろうか?

• 注意:ショッピング向けのレコメンデーション(これを買った人がどれを買ってくれそうか)とは違う

Page 4: Zuang-FPSGD

Matrix Factorization Technique

≈ ×

=

与えられたuser×item行列 サイズの小さい行列の積で近似

行列の積によって不明部分を埋める

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

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

Sparse!

(不明要素を含む)

≒ ≐ ≔ Q

Page 5: Zuang-FPSGD

≈ ×

与えられたuser×item行列 サイズの小さい行列の積で近似

Sparse!

(不明要素を含む)

≐ ≔ Q

最小化:

∧ ∨ ≐ ∻ ≑ ∩ ∽ ≘

≲ ≩ ∻ ≪ ∺ ≲ ≩ ∻ ≪ ∾ ∰ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ∲ ∫ ⊸ ≐ ≫ ≐ ≫ ∲ ≆ ∫ ⊸ ≑ ≫ ≑ ≫ ∲ ≆

Page 6: Zuang-FPSGD

最急降下法

目的関数

を最小化したいとする。

∧ ∽ ∧ ∨ ≸ ∩ ∻ ≸ ∲ ≒ ≤ 以下を収束するまで繰り返す

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

∧ ∨ ≸ ∩ ∽ ≎ ≘ ≩ ∽ ∱

∧ ≩ ∨ ≸ ∩ ∻ ≸ ∽ ∨ ≸ ∱ ∻ ∺ ∺ ∺ ∻ ≸ ≤ ∩ ∲ ≒ ≤

≸ ⋃ ≸ ⊡ ⊮ ≲ ∧ 確率的最急降下法(SGD)

≸ ≪ ⋃ ≸ ≪ ⊡ ⊮ ≀ ∧ ≩ ≀ ≸ ≪

∧ ≩ ∨ ≸ ∩ ≸ ≪ ∻ ≪ ∲ ≊ ≩ ただし は一部の変数 のみに依存する

≪ ∲ ≊ ≩ すべての について

i をランダムに選ぶ

アルゴリズム

アルゴリズム

最急降下法と確率的最急降下法(一般論)

Page 7: Zuang-FPSGD

SGDの前提

• 高速にそこそこいい解を得たい

–本当の最適解を得ることはあきらめている

Page 8: Zuang-FPSGD

MFのSGD

これは ≰ ≩ ∻ ≱ ≪ にのみ依存

∧ ≩ ∻ ≪ ∽ ∱ ∲ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ∲ ∫ ⊸ ≐ ∲ ≫ ≰ ≩ ≫ ∲ ∫ ⊸ ≑ ∲ ≫ ≱ ≪ ≫ ∲ ∧ ∨ ≐ ∻ ≑ ∩ ∽ ∱ ∲

≘ ≲ ≩ ∻ ≪ ∺ ≲ ≩ ∻ ≪ ∾ ∰

∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ∲ ∫ ⊸ ≐ ∲ ≫ ≐ ≫ ∲ ≆ ∫ ⊸ ≑ ∲ ≫ ≑ ≫ ∲ ≆

≀ ∧ ≩ ∻ ≪ ≀ ≰ ≩ ≫ ∽ ⊡ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ≱ ≪ ≫ ∫ ⊸ ≐ ≰ ≩ ≫ ≀ ∧ ≩ ∻ ≪ ≀ ≱ ≪ ≫ ∽ ⊡ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ≰ ≩ ≫ ∫ ⊸ ≑ ≱ ≪ ≫

≥ ≩ ≪ ∽ ≲ ≩ ≪ ⊡ ≰ ≔ ≩ ≱ ≪

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

ただし、

≰ ≩ ≫ ⋃ ≰ ≩ ≫ ∫ ⊮ ∨ ≥ ≩ ≪ ≱ ≪ ≫ ⊡ ⊸ ≐ ≰ ≩ ≫ ∩ ≱ ≪ ≫ ⋃ ≱ ≪ ≫ ∫ ⊮ ∨ ≥ ≩ ≪ ≰ ≩ ≫ ⊡ ⊸ ≑ ≱ ≪ ≫ ∩

Page 9: Zuang-FPSGD

問題

• SGDを共有メモリで並列に高速に計算したい

Page 10: Zuang-FPSGD

既存手法の紹介

• HogWild

–文字通りワイルドな方法

• DSGD

–分散環境

Page 11: Zuang-FPSGD

確認

≈ × i

i j

≒ ≐ ≔ Q

≲ ≩ ∻ ≪ ≰ ≔ ≩ ≱ ≪

≲ ≩ ∻ ≪ ⊼ ≰ ≔ ≩ ≱ ≪ ≰ ≩ ≫ ⋃ ≰ ≩ ≫ ⊡ ⊮ ∨ ≥ ≩ ≪ ≱ ≪ ≫ ⊡ ⊸ ≐ ≰ ≩ ≫ ∩ ≱ ≪ ≫ ⋃ ≱ ≪ ≫ ⊡ ⊮ ∨ ≥ ≩ ≪ ≰ ≩ ≫ ⊡ ⊸ ≑ ≱ ≪ ≫ ∩

≥ ≩ ≪ ∽ ≲ ≩ ≪ ⊡ ≰ ≔ ≩ ≱ ≪

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

ただし、

アルゴリズム

Page 12: Zuang-FPSGD

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

Page 13: Zuang-FPSGD

問題点

• アトミックな処理がたくさん必要

–衝突しているときを考慮してP, Qの読み書きはアトミックに

Page 14: Zuang-FPSGD

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

Page 15: Zuang-FPSGD

DSGDの問題点

• 非ゼロ要素の分布によっては計算負荷のバランスが悪い

–待ち時間が発生する

–分散環境を想定したので、通信コストを下げるのが最優先だった

Page 16: Zuang-FPSGD

FPSGD(提案手法)

• M×M(M>R)のブロックに分割

• 計算が終わったスレッドにフリーなブロックを割り当てる

– フリー:同じ行、同じ列に計算中ブロックがないブロック

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

–計算の偏りがないように

Page 17: Zuang-FPSGD

:処理中

:フリー

ロックフリー!

Page 18: Zuang-FPSGD

Partial Random Method

• 行列要素へのアクセスを、ランダムにせずに順序性を持たせることでキャッシュミスを減らす

• ただし、そうすることで収束性が不安定になり逆効果になることもあるので注意

• 本論文では、ブロックはランダムに、ブロック内の要素は順番にアクセスするPartial Random Methodを提案する

収束性の実験

原論文から抜粋

Page 19: Zuang-FPSGD

実験結果

FPSGD**=FPSGDの実装で、スケジューリングの部分をDSGD相当に変更したバージョン (つまり実質的にDSGD。スケ

ジューリング以外のところで差がでないように調整)

原論文より抜粋

Page 20: Zuang-FPSGD

まとめ

• 従来の分散システム向けMatrix Factorization

をもとに共有メモリ向けの効率のよいアルゴリズムを考案

• スケジューリングの工夫により計算リソースの無駄軽減に成功

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