LSTM / Long Short Term Memory / 長期短期記憶

LSTMについて。

 

LSTMは、ニューラルネットワークのなかでもRNN(リカレントニューラルネットワーク)に分類されるものです。RNNは時系列データを学習するためのニューラルネットワークで、LSTMはRNNの中でも繰り返し改善が施されたもので、RNNの主流と言っても過言ではないでしょう。画像処理系のCNNとあわせて、昨今のニューラルネットワークの双璧をなしていると個人的には思っています。

 

主たる改善は、LSTM、Long Short Term Memory(長期短期記憶)という言葉が表すように、時系列データのなかから短期的な情報だけでなく、長期的な情報も取り込めるような設計が施されているところにあります。従来のRNNでは勾配消失問題が発生するため、長期的な情報をうまく取り込むことができませんでしたが、LSTMではこの問題が解決されています。

 

LSTMの歴史は(人口知能においては比較的)古く、1997年に論文が発表されています。

http://deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf

その後、LSTMは複数回の改善(Forgate Gate、Peeple Connectioin、Full Gradient)がなされました。

このあたりは、非常に素晴らしい記事であるわかるLSTM ~ 最近の動向と共に - Qiita に詳しく記載されています。

 

LSTMにはLSTM Blockという概念が出てきます。前述までの改善は主にこのLSTM Blockに対してなされているものです。LSTM Blockは太陽系における惑星のようなもので、LSTMを理解するうえで非常に重要な概念ではありますが、これだけではLSTMを理解したというわけにはいきません。LSTMに対する理解の解像度を上げるのであれば、Blockで表示されるチャートで表現される意味を数式で理解することをお勧めします。また、実際にコードを書きたいのであれば、LSTMそのものの理解を実装ベースで深める必要があります。

 

前者についてはイメージはあるのですが、、少し書き出すのに時間がかかりそうです。後者については、TensorflowのLSTMのサンプルが有効だと思います。説明自体は

Recurrent Neural Networks

にあり、コードはGithubにあります。

github.com

特に以下のコードです。

tensorflow/ptb_word_lm.py at master · tensorflow/tensorflow · GitHub

 

2つの特徴的な関数がヒントになります。

BasicLSTMCell

https://www.tensorflow.org/versions/r0.9/api_docs/python/rnn_cell.html#BasicLSTMCell

MultiRNNCell

https://www.tensorflow.org/versions/r0.9/api_docs/python/rnn_cell.html#MultiRNNCell

 

関数を深掘りする前に、このチュートリアルが行っていることを説明しますと、特定の言語サンプルに対する、ある優秀な解析の再現を行っています。

 

特定の言語サンプルとは、PTB(Penn Tree Bank)のことです。以下のサイトで「Basic Examples」として提供されています。

rnnlm.org

該当する、simple-examples.tgzをダウンロードし、tar vxfzで展開すると、data/ ディレクトリの中に、ptb.test.txt (テストデータ) , ptb.train.txt (訓練データ) , ptb.valid.txt (開発データ、ハイパーパラメータの調整用) があります。ptb.test.txtの冒頭を見てみましょう。

no it was n't black monday    

but while the new york stock exchange did n't fall apart friday as the dow jones industrial average plunged N points most of it in the final hour it barely managed to stay this side of chaos ..

ブラックマンデーニューヨーク証券取引所と証券関連の言葉が綴られていますね。

PTBはコーパスというテキストを大量に集めてデータベース化した資料の1つで、データに構造を持たせたものになります。コンパクトにまとめられており、ベンチマークとしてよく利用されるそうです。やや話が逸れますが、日本語のコーパスとしては、小納言というサイトがあります。

KOTONOHA「現代日本語書き言葉均衡コーパス」 少納言

 

次に、ある優秀な解析の部分ですが、2014年に発表されたRNNの正則化に関するZarembaさんの論文に基づいています。

[1409.2329] Recurrent Neural Network Regularization 

 PDFはこちらです。

http://arxiv.org/pdf/1409.2329v5.pdf

 

LSTMでは、過学習を防止するために通常のドロップアウトがうまく機能しないことに対し、ドロップアウトの適応方法を紹介するものです。言語モデリングの応用事例として、上記のPTB(simple-examples)に適応した際の結果が紹介されている他、スピーチの認識、機械翻訳、画像キャプションの生成などへの適応が紹介されています。 

 

BasicLSTMCellについて

 

前置きが長くなりましたが、TensorflowのLSTMに関する関数の1つであるBasicLSTMCellで用いられているLSTMはこの論文に基づいて実装されています。Memory Cellの構造は以下のとおりです。

f:id:neuralnet:20160818220030p:plain

(転載については、Zarembaさんに許可を頂いております)

 

他、97年の初版LSTMに基づいたLSTMCellという関数もあります。

 

(続く)