mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2013年06月 来月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

2013年06月29日() [n年日記]

#1 Replicated Softmax Model

比較実験の必要があって, Ruslan Salakhutdinov の Replicated Softmax Model のプログラムを書いた(正確には, 1つだけ公開されているPythonのコードに色々手を 入れた)ので, 公開します。

Replicated Softmax (Salakhutdinov & Hinton, NIPS 2009)はいわゆる"Deep Net"の 一つで, レイヤーが一つの単純なRBMでテキストをモデル化するものです。 多層にするなどの色々な細かい改良はありますが, これが事実上の state of the art だと思います。 LDAのような混合モデルより性能が良いと言われていて(最適化が非常に難しいですが, これは僕も確認済み), 文書を潜在的なトピックの組み合わせの1/0のビットパターンで 表現します。 *1

上のコードは, http://www.fylance.de/rsm/ で唯一公開されていたPythonのコードを色々拡張して使えるようにしたもの。 これは NumPy で書かれているので, Pythonですが, 処理の割には非常に高速に動作 します。実は自分でC言語で書き直してみましたが, 処理速度はほぼ同等でした。(!)
NumPyは文書データのようなスパースな行列もフルで持つので, かなりメモリを食います が, C言語だと工夫するとメモリ消費量は非常に小さくできます (具体的には, 700MB->30MBくらいになる)。 ただ, そうすると大きなデータを食わせられますが, 大きいデータはいずれにしても iterationが超重くなるので, 見通しがよいPython版のみ公開することにしました。

実際にやってみると, RBM共通らしいですが, まず局所解が非常に多く, かなり パラメータを工夫しないとまともなパープレキシティが出ない, ということが わかります。
一方で文書の hidden activation が行列計算一回で出るというのは面白く, 上のページ でもそれを行うスクリプトを同梱しておきました。これを見ると, シグモイド関数に かかるので1/0とは限らず, 0.5とか0.7とかも出るのかと思っていたら, 実際には ほとんどの場合にactivationは0か1になってしまうのが印象的でした。これでは中々 最適化は難しいだろう, という。
僕の今やっている話はこういう問題がなく, MCMCでスルスルと最適化してやはり LDA以上の性能が出るのですが, それはまた後でということで。


*1: 基本的には Gehler の RaP (Rate Adapting Poisson)モデルと同じですが, RaPは 文書の単語頻度のポアソン分布の期待値を出力するため, 文書長が同じでないと 使えないのに対し, RSMは多項分布なので長さに関わらず使える, というのが唯一違う点です。

1 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project