Deep Learning論文紹介「Generating Text with Recurrent Neural Networks」

リカレントニューラルネット(RNN)を使って文章を生成する話。

RNNはパワフルだけど学習が難しい。Hessian-free最適化(HF)を使えばいい感じに学習できて、難しい問題に使える。

この論文では文字を入力として言語モデルを作って、そこから文章を生成する。

標準的なRNNだとちょっと問題があったのでmultiplicativeな亜種を作った。入力文字によって隠れ層のベクトルを次の層へ伝達する際の遷移行列を選べるようにしたものである。

multiplicative RNN(MRNN)をHFで、8つのハイエンドGPUを積んだマシンで5日掛けて学習した結果、既存の言語モデルを上回る成績を得た。

隠れ層の活性化関数はtanh、出力層は素通し。

Sequence memoizerはデータ構造の関係から32GBメモリのマシンで扱えるデータセットは130MBぐらい、MRNNはこの上限がない。

実験では86種類の文字から構成される100MBのデータを使った。隠れ層が1500個、factorが1500個で、490万個のパラメータがある。重みはスパースに初期化して、BPTTをアンロールすると500層の隠れ層があることに相当する。

(ちなみに僕の手元にある岩波文庫1冊分のスキャンデータは530KBなので100MBのデータはだいたい200冊分)

実験結果 memorizerに比べてbit per characterが小さい。文章を生成させたらちゃんと意味のわかる単語が生成される。

感想 N-gramモデルで文章生成して遊んでみたことがあると、これを使ってどれくらい良くなったか試してみたくなる。文字を入力としているのに単語が作られていて興味深いが「どの範囲が単語か」を判定するにはこれだけではできないな。どうすればいいかな。

さいごに

この記事はDeep Learningに興味を持った著者が、関連論文を読んで勉強しながら書いているものです。そのため間違いなどが含まれている可能性があります。もしなにか気になる点がありましたらご指摘いただけるとありがたいです。