zuang-fpsgd
DESCRIPTION
2013/11/16 RecSys読み会での発表資料です。TRANSCRIPT
![Page 1: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/1.jpg)
【論文紹介】 Zuang et al. “Fast Prallel SGD for Matrix Factorization in Shared
Memory Systems”
2013/11/16 RecSys2013読み会 at Gunosyオフィス
加藤公一 @hamukazu シルバーエッグテクノロジー
![Page 2: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/2.jpg)
要旨
![Page 3: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/3.jpg)
レイティング問題
• 映画を見た人たちがそれぞれの作品の面白さを1~5の点数で評価したとする。
• ある人が、まだ見てない映画について、どのような点数を与えるだろうか?
• 注意:ショッピング向けのレコメンデーション(これを買った人がどれを買ってくれそうか)とは違う
![Page 4: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/4.jpg)
Matrix Factorization Technique
≈ ×
=
与えられたuser×item行列 サイズの小さい行列の積で近似
行列の積によって不明部分を埋める
Itemのratingは少数の特徴量で表現できるという前提
例:映画の場合、ジャンル、監督、主演俳優、など
Sparse!
(不明要素を含む)
≒ ≐ ≔ Q
![Page 5: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/5.jpg)
≈ ×
与えられたuser×item行列 サイズの小さい行列の積で近似
Sparse!
(不明要素を含む)
≐ ≔ Q
最小化:
≒
∧ ∨ ≐ ∻ ≑ ∩ ∽ ≘
≲ ≩ ∻ ≪ ∺ ≲ ≩ ∻ ≪ ∾ ∰ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ∲ ∫ ⊸ ≐ ≫ ≐ ≫ ∲ ≆ ∫ ⊸ ≑ ≫ ≑ ≫ ∲ ≆
![Page 6: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/6.jpg)
最急降下法
目的関数
を最小化したいとする。
∧ ∽ ∧ ∨ ≸ ∩ ∻ ≸ ∲ ≒ ≤ 以下を収束するまで繰り返す
以下を収束するまで繰り返す
∧ ∨ ≸ ∩ ∽ ≎ ≘ ≩ ∽ ∱
∧ ≩ ∨ ≸ ∩ ∻ ≸ ∽ ∨ ≸ ∱ ∻ ∺ ∺ ∺ ∻ ≸ ≤ ∩ ∲ ≒ ≤
≸ ⋃ ≸ ⊡ ⊮ ≲ ∧ 確率的最急降下法(SGD)
≸ ≪ ⋃ ≸ ≪ ⊡ ⊮ ≀ ∧ ≩ ≀ ≸ ≪
∧ ≩ ∨ ≸ ∩ ≸ ≪ ∻ ≪ ∲ ≊ ≩ ただし は一部の変数 のみに依存する
≪ ∲ ≊ ≩ すべての について
i をランダムに選ぶ
アルゴリズム
アルゴリズム
最急降下法と確率的最急降下法(一般論)
![Page 7: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/7.jpg)
SGDの前提
• 高速にそこそこいい解を得たい
–本当の最適解を得ることはあきらめている
![Page 8: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/8.jpg)
MFのSGD
これは ≰ ≩ ∻ ≱ ≪ にのみ依存
∧ ≩ ∻ ≪ ∽ ∱ ∲ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ∲ ∫ ⊸ ≐ ∲ ≫ ≰ ≩ ≫ ∲ ∫ ⊸ ≑ ∲ ≫ ≱ ≪ ≫ ∲ ∧ ∨ ≐ ∻ ≑ ∩ ∽ ∱ ∲
≘ ≲ ≩ ∻ ≪ ∺ ≲ ≩ ∻ ≪ ∾ ∰
∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ∲ ∫ ⊸ ≐ ∲ ≫ ≐ ≫ ∲ ≆ ∫ ⊸ ≑ ∲ ≫ ≑ ≫ ∲ ≆
≀ ∧ ≩ ∻ ≪ ≀ ≰ ≩ ≫ ∽ ⊡ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ≱ ≪ ≫ ∫ ⊸ ≐ ≰ ≩ ≫ ≀ ∧ ≩ ∻ ≪ ≀ ≱ ≪ ≫ ∽ ⊡ ∨ ≲ ≩ ∻ ≪ ⊡ ≰ ≔ ≩ ≱ ≪ ∩ ≰ ≩ ≫ ∫ ⊸ ≑ ≱ ≪ ≫
≥ ≩ ≪ ∽ ≲ ≩ ≪ ⊡ ≰ ≔ ≩ ≱ ≪
つまり、ランダムに i, j を選んで以下を計算
ただし、
≰ ≩ ≫ ⋃ ≰ ≩ ≫ ∫ ⊮ ∨ ≥ ≩ ≪ ≱ ≪ ≫ ⊡ ⊸ ≐ ≰ ≩ ≫ ∩ ≱ ≪ ≫ ⋃ ≱ ≪ ≫ ∫ ⊮ ∨ ≥ ≩ ≪ ≰ ≩ ≫ ⊡ ⊸ ≑ ≱ ≪ ≫ ∩
![Page 9: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/9.jpg)
問題
• SGDを共有メモリで並列に高速に計算したい
![Page 10: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/10.jpg)
既存手法の紹介
• HogWild
–文字通りワイルドな方法
• DSGD
–分散環境
![Page 11: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/11.jpg)
確認
≈ × i
j
i j
≒ ≐ ≔ Q
≲ ≩ ∻ ≪ ≰ ≔ ≩ ≱ ≪
≲ ≩ ∻ ≪ ⊼ ≰ ≔ ≩ ≱ ≪ ≰ ≩ ≫ ⋃ ≰ ≩ ≫ ⊡ ⊮ ∨ ≥ ≩ ≪ ≱ ≪ ≫ ⊡ ⊸ ≐ ≰ ≩ ≫ ∩ ≱ ≪ ≫ ⋃ ≱ ≪ ≫ ⊡ ⊮ ∨ ≥ ≩ ≪ ≰ ≩ ≫ ⊡ ⊸ ≑ ≱ ≪ ≫ ∩
≥ ≩ ≪ ∽ ≲ ≩ ≪ ⊡ ≰ ≔ ≩ ≱ ≪
ランダムに i, j を選んで以下を計算
ただし、
アルゴリズム
![Page 12: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/13.jpg)
問題点
• アトミックな処理がたくさん必要
–衝突しているときを考慮してP, Qの読み書きはアトミックに
![Page 14: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/15.jpg)
DSGDの問題点
• 非ゼロ要素の分布によっては計算負荷のバランスが悪い
–待ち時間が発生する
–分散環境を想定したので、通信コストを下げるのが最優先だった
![Page 16: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/16.jpg)
FPSGD(提案手法)
• M×M(M>R)のブロックに分割
• 計算が終わったスレッドにフリーなブロックを割り当てる
– フリー:同じ行、同じ列に計算中ブロックがないブロック
• いくつかあるフリーなブロックのうち、更新回数が少ないものを優先的に割り当て
–計算の偏りがないように
![Page 17: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/17.jpg)
:処理中
:フリー
例
ロックフリー!
![Page 18: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/18.jpg)
Partial Random Method
• 行列要素へのアクセスを、ランダムにせずに順序性を持たせることでキャッシュミスを減らす
• ただし、そうすることで収束性が不安定になり逆効果になることもあるので注意
• 本論文では、ブロックはランダムに、ブロック内の要素は順番にアクセスするPartial Random Methodを提案する
収束性の実験
原論文から抜粋
![Page 19: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/19.jpg)
実験結果
FPSGD**=FPSGDの実装で、スケジューリングの部分をDSGD相当に変更したバージョン (つまり実質的にDSGD。スケ
ジューリング以外のところで差がでないように調整)
原論文より抜粋
![Page 20: Zuang-FPSGD](https://reader036.vdocuments.net/reader036/viewer/2022081404/558297b9d8b42a94688b4733/html5/thumbnails/20.jpg)
まとめ
• 従来の分散システム向けMatrix Factorization
をもとに共有メモリ向けの効率のよいアルゴリズムを考案
• スケジューリングの工夫により計算リソースの無駄軽減に成功
• キャッシュを意識したメモリアクセスで高速化に成功