非負値スパーステンソル因子分解におけるMultiplicative更新手法の高速化
リンク > 情報学広場:情報処理学会電子図書館
っていうので,先日HPCS2015でポスター展示出してきました.
NMFに詳しい人は un-folding とか k-mode expansion とか聞いたことあると思うんですけど,基本的やっていることはそれです.
---
やったことは,定式化ではなくて実装の話で,
1) 高次テンソルをk-mode展開して各因子毎に行列表現に展開する
2) 各因子毎に異るデータ構造を取得して,因子毎に更新データを保存しておく
3) 因子行列は全因子間で共有する
---
1)はこんな感じで行列表現して,更にスパースデータであれば要素毎に潰しやすくなる
2)も,X,\hat{X}に対して,上図みたいにデータ構造を因子毎に持っておくと,
こんな感じでランダム・アクセスが防げるので処理が速くなる.
3)因子行列 In はしょうがないので全因子間で(マルチスレッドを意識していますけど)共通に持たせる.
ただ,これはあらゆるパターンでうまくいくわけではなくて,データ構造が小さい割に次元が多いような構造だと逆に処理が遅くなるし無駄にメモリ空間を食います.
原稿には書いていないけど,ここらへんのベンチマークは簡単に取ってみたけど,たぶんCPUのキャッシュサイズにもよるんだと思うけど, 1Kくらいのデータサイズだと逆に遅くなる.100Kくらいになると効いてくる.
で,実はこんなことやっているのは更にもっと速くしたいので,この処理自体は目的の途中段階なんですが,CPU単体でも結構速く動くし,今度のオープンハウスでこのネタの話もするので一先ずHPCSで発表してきました.
以下,雑記
業績にカウントしたくて発表したのではなくて,何かと技術の参照先として未発表だと色んな所で面倒なことになるし,なんでもいいから公開情報の参照先があると便利なので,そういう意味でHPCSのポスター発表は多用させてもらっています.
あと,昔はポスターインデキシングがあって,けっこうみんな後から興味持って聞きに来てくれるんだけど,今回は企業紹介ばかりなのと全然知り合いも減ってきた感があるしポスター聞きに来てくれる人が少なかったので,自分で東大の大島さんを捕まえて無理にでも説明してきてしまった.
とりあえず,公知日は1週間前というのは覚えておこうと思う
※コメント投稿者のブログIDはブログ作成者のみに通知されます