Theano: DeepLearning : 感情分析のための LSTM

DeepLearning 0.1 文書: 感情分析のための LSTM (翻訳/要約)

* DeepLearning 0.1 documentation: LSTM Networks for Sentiment Analysis の簡単な要約です。

 

概要

このチュートリアルは Long Short Term Memory (LSTM) を使用した Recurrent Neural Network (RNN) が Theano を使用してどのように実装できるかのサンプルを提供することを目的にしています。このチュートリアルでは、このモデルは、時に IMDB データセットとして知られる、大規模な映画レビュー・データセット からの映画レビュー上の感情解析を遂行するために使用されます。

このタスクでは、映画レビューが与えられた時に、それがポジティブかネガティブかをモデルが予測することを試みます。これは2値分類タスクです。

 

データ

以前に言及したように、提供されるスクリプトは大規模な映画レビュー・データセット上で LSTM RNN を訓練するために使用されます。

データセットは公開されていますが、このチュートリアルではデータセットのコピーを提供します。これは LSTM 実装のニーズに従って前もって前処理されたものです。このチュートリアルで提供されているコードを実行するとローカル・ディレクトリにデータを自動的にダウンロードします。貴方自身のデータを使用するためには、このチュートリアルの一部として提供される 前処理スクリプト を使用してください。

モデルが訓練されれば、このチュートリアルの一部として提供される word-index dictionary (imdb.dict.pkl.gz) を使用して貴方自身のコーパスでテストできます。

 

モデル

LSTM

伝統的な RNN では、勾配 back-propagation フェーズの間、勾配シグナルは recurrent 隠れ層のニューロンの間の結合に関係する重み行列により(時間ステップの数だけ)大規模な回数乗算されることになります。これは、移行行列 (transition matrix) の重みの巨大さが学習プロセス上に強いインパクトを持てることを意味しています。

もし行列の重みが小さい場合(あるいは、より形式的には、もし重み行列の leading eigenvalue(固有値)が 1.0 より小さい場合)は、勾配消失 (vanishing gradients) と呼ばれる状況につながります。そこでは勾配シグナルが非常に小さくなり学習が非常に遅くなるか、作業を停止してしまいます。それはまたデータの long-term 依存性を学習するタスクをより困難なものにします。逆に、行列の重みが大きい場合(あるいは、再度、より形式的には、重み行列の leading eigenvalue が 1.0 より大きい場合)には、勾配シグナルが学習を発散させるほど大きくなる状況につながります。これは多くの場合、勾配発散 (exploding gradients) として言及されます。

これらの問題は、メモリセルと呼ばれる新しい構造を導入する LSTM モデルの裏にある主要な動機です(下図 1 参照)。メモリセルは4つの主要な要素から成ります: 入力ゲート、self-recurrent 結合を持つニューロン(それ自身への結合)、忘却ゲート、そして出力ゲートです。self-recurrent 結合は 1.0 の重みを持ち、任意の外部の推論を除いて、メモリセルの状態が一つの時間ステップから他へ移行する時に定数 (constant) であり続けることを保証します。

ゲートはメモリセル自身とその環境の相互作用を調整する役目を負います。入力ゲートは incoming シグナルにメモリセル状態を変更したりブロックしたりすることを可能にします。一方、出力ゲートはメモリセルの状態を他のニューロンへの効果を持たせたり、あるいは防いだりします。最後に、忘却ゲートはメモリセルの self-recurrent 結合を調節することができ、セルに以前の状態を必要に応じて記憶したり忘れたりすることを可能にします。

_images/lstm_memorycell.png

Figure 1 : LSTM メモリセルのイラスト

 

下の式はメモリセルの層が全ての時間ステップ t においてどのように更新されるかを記述しています。これらの式においては :

  • x_t は時刻 t におけるメモリセル層への入力
  • W_i, W_f, W_c, W_o, U_i, U_f, U_c, U_o そして V_o は重み行列
  • b_i, b_f, b_c そして b_o はバイアス・ベクトル

まず、i_t、入力ゲートのための値、そして時刻 t におけるメモリセルの状態のための候補値 \widetilde{C_t} を計算します :

(1)

i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)

(2)

\widetilde{C_t} = tanh(W_c x_t + U_c h_{t-1} + b_c)

2番目に、時刻 t におけるメモリセルの忘却ゲートの活性化(関数) f_t のための値を計算します :

(3)

f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)

入力ゲート活性化の値 i_t、忘却ゲート活性化 f_t そして候補状態値 \widetilde{C_t} が与えられれば、時刻 t におけるメモリセルの新しい状態 C_t を計算できます :

(4)

C_t = i_t * \widetilde{C_t} + f_t * C_{t-1}

メモリセルの新しい状態で、それらの出力ゲートそして、続いてそれらの出力の値を計算できます :

(5)

o_t = \sigma(W_o x_t + U_o h_{t-1} + V_o C_t + b_o)

(6)

h_t = o_t * tanh(C_t)

私たちのモデル

このチュートリアルで使用されているモデルは標準的な LSTM モデルの変種です。この変種では、セルの出力ゲートの活性化はメモリセルの状態 C_t に依存しません。これは計算の一部をより効率的に遂行することを可能にします。(詳細は下の実装ノート参照)。これは、実装した変種においては、行列 V_o はなく、そして等式 (5) は (7) で置換されます :

(7)

o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)

私たちのモデルは単一の LSTM 層から成り、下図 2 のように平均プーリングとロジスティック回帰層が続きます。そして、入力シーケンス x_0, x_1, x_2, ..., x_n から、LSTM 層のメモリセルが representation シーケンス h_0, h_1, h_2, ...,
h_n を生成します。それからこの representation シーケンスは全ての時間ステップに渡って平均化されて representation h という結果になります。最後に、この representation はロジスティック回帰層に供給されます。そのターゲットは入力シーケンスに関連するクラスラベルです。

_images/lstm.png

Figure 2 :
このチュートリアルで使用されるモデルのイラスト図。単一の LSTM 層から成り、時間に渡る平均プーリングとロジスティック回帰が続きます。
 

実装ノート: このチュートリアルに含まれるコードでは、等式 (1), (2), (3) そして (7) は計算をより効率的にするために並列に実行されます。これが可能なのは、これらの等式のいずれも他の等式により生成される結果に依存しないからです。これは、4 の行列 W_* を単一の重み行列 W に結合 (concatenate) して同じ結合を重み行列 U_* についても遂行して行列 U を生成してそしてバイアス・ベクトル b_* についてベクトル b を生成することにより達成されます。そして、pre-nonlinearity(事前非線形)活性化が次で計算されます :

z = W x_t + U h_{t-1} + b

結果はスライスされて i, f, \widetilde{C_t}, そして o のための事前非線形活性化を得ます、そして非線形が各々に独立的に適用されます。

 

コード – 引用 (Citations)

コード

LSTM 実装は次の2つのファイルで見つかります :

  • lstm.py : 主要なスクリプト。モデルを定義して訓練します。
  • imdb.py : 2番目のスクリプト。IMDB データセットのロードと前処理を扱います。

両方のスクリプトをダウンロードして同じフォルダーに配置した後、ユーザは次の呼び出しでコードを実行できます :

THEANO_FLAGS="floatX=float32" python lstm.py

スクリプトは自動的にデータをダウンロードしてそれを解凍します。

Note: 提供されているコードは確率的勾配降下 (Stochastic Gradient Descent (SGD)), AdaDelta そして RMSProp 最適化メソッドをサポートしています。SGD はこの特定のモデルでのこのタスク上では貧弱な性能を示すようなので AdaDelta か RMSProp を使用することを推奨します。

論文

このチュートリアルを使用する場合、次の論文を引用してください。

LSTM モデルへのイントロ :

  • [pdf] Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780.

LSTM モデルへの忘却ゲートの追加 :

  • [pdf] Gers, F. A., Schmidhuber, J., & Cummins, F. (2000). Learning to forget: Continual prediction with LSTM. Neural computation, 12(10), 2451-2471.

より最近の LSTM 論文 :

  • [pdf] Graves, Alex. Supervised sequence labelling with recurrent neural networks. Vol. 385. Springer, 2012.

Theano に関連する論文 :

  • [pdf] Bastien, Frédéric, Lamblin, Pascal, Pascanu, Razvan, Bergstra, James, Goodfellow, Ian, Bergeron, Arnaud, Bouchard, Nicolas, and Bengio, Yoshua. Theano: new features and speed improvements. NIPS Workshop on Deep Learning and Unsupervised Feature Learning, 2012.
  • [pdf] Bergstra, James, Breuleux, Olivier, Bastien, Frédéric, Lamblin, Pascal, Pascanu, Razvan, Desjardins, Guillaume, Turian, Joseph, Warde-Farley, David, and Bengio, Yoshua. Theano: a CPU and GPU math expression compiler. In Proceedings of the Python for Scientific Computing Conference (SciPy), June 2010.
 

References

  • Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780.
  • Gers, F. A., Schmidhuber, J., & Cummins, F. (2000). Learning to forget: Continual prediction with LSTM. Neural computation, 12(10), 2451-2471.
  • Graves, A. (2012). Supervised sequence labelling with recurrent neural networks (Vol. 385). Springer.
  • Hochreiter, S., Bengio, Y., Frasconi, P., & Schmidhuber, J. (2001). Gradient flow in recurrent nets: the difficulty of learning long-term dependencies.
  • Bengio, Y., Simard, P., & Frasconi, P. (1994). Learning long-term dependencies with gradient descent is difficult. Neural Networks, IEEE Transactions on, 5(2), 157-166.
  • Maas, A. L., Daly, R. E., Pham, P. T., Huang, D., Ng, A. Y., & Potts, C. (2011, June). Learning word vectors for sentiment analysis. In Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies-Volume 1 (pp. 142-150). Association for Computational Linguistics.
 

以上