Accelerating Graph Adjacency Matrix Multiplications with Adjacency Forest
-
Masaaki Nishino, Norihito Yasuda, Shin-ichi Minato, Masaaki Nagata
-
SDM 2014
概要
-
AXみたいな行列計算を高速にしたい
-
Aの列中の値が同じ(確率遷移行列とか)だと余分な計算を省ける
-
さらにAを分解して個々に省略手法を適用できる
-
3倍位速くなった
提案手法 Single Tree Adjacency Forest(STAF)
-
Column-scaled nonzeros property
-
行列の各列j中の値=0 or cj
-
こんなやつ $$ A = \left( \begin{matrix} 0&0&0.33&0.5 \\ 0.5&0.33&0.33&0.5 \\ 0.5&0.33&0.33&0 \\ 0&0.33&0&0 \end{matrix} \right) $$
-
他にもdocument-wordのバイナリ行列とか色々
-
隣接リスト形式で行毎に持っているとする
-
と、接尾辞が同じ所をまとめて計算できる
-
例: 右上の $$0x_1 + 0x_2 + 0.33x_3 + 0.5x_4$$ と $$0.5x_1 + 0.33x_2 + 0.33x_3 + 0.5x_4$$
-
$$ 0.33x_3 + 0.5x_4 $$をまとめて計算して、左に伝搬する感じにすると良い、演算回数が減る
-
論文中の木で表現した図を見たほうが早い
-
構築はTrieと同じノリ
-
あまり良くないので、もうちょい頑張る
-
Aを列で分割する
-
$$ A^{(1)} = \left( \begin{matrix} 0&0&0&0 \\ 0.5&0.33&0&0 \\ 0.5&0.33&0&0 \\ 0&0.33&0&0 \end{matrix} \right), $$
$$ A^{(2)} = \left( \begin{matrix} 0&0&0.33&0.5 \\ 0&0&0.33&0.5 \\ 0&0&0.33&0 \\ 0&0&0&0 \end{matrix} \right) $$
-
それぞれに対して適用、分割した結果のマージはちょっと考えれば出来る
-
どうやって分割するのか?
-
難しいので、ヒューリスティックなスコア関数を作って貪欲に振り分け
実験
まとめ
-
もうちょい行けそう
-
列(というかindex)の順番もすごく大事(に見える)なので、そこを含めた分割をするといいのかな?
PageRank SDM 行列計算
2017/01/19
最終更新:2017年01月19日 15:31