2017年2月18日土曜日

LSTMをRNNと比較する

LSTMは、RNNの一種である。ただ、LSTMは、旧来の単純なRNNとは異なっている。ここでは、LSTMとかつてのRNNを比較してみようと思う。

かつてのRNN(以下、単にRNNと呼ぶことにする)は、次のような形をしていた。


両者の比較を図示すれば、次のようになる。

RNNでは、横の繋がり(展開形で)は、h層の一本だけだったのだが、LSTMでは、もう一本多く横のつながりを持つ。このc層は、LSTMで新たに付け加えられたものだ。あとで見るように、LSTMでは、この層が独自のとても大事な働きをすることになる。

この図では、入力は水色、出力は緑色で表されているのだが、RNNは、二つの入力 \(h_{t-1}\) 、\( x_t \) を持ち、二つの出力 \( h_t\) 、\( o_t \) を持つ。それに対して、LSTMは、三つの入力 \(h_{t-1}\) 、\( c_{t-1} \)、\( x_t \) を持ち、三つの出力 \( h_t\) 、\(c_t \)、\( o_t \) を持つ。


LSTMの内部を、簡単に見てみよう。(詳細な説明は、後にする。)基本的には、左の図に対応して、LSTMは、\( h_t \) を生成する層と、\( c_t \) を生成する層の二つからできている。

ここでは、次の二つのことに注意しよう。

第一に、LSTMの出力 \( o_t \)は、\( h_t \) と同じものである。先ほど、三つの出力があると書いたが、三つのうち二つは、同じ \( h_t \)である(右の図で、上方向と横方向の出力の \( h_t \) )。右と左の図を比べて、c層の位置とh層の位置が、上下反対のように見えるのは、h層が出力を行う層だからである。また、右図の大きな回り道は、\( h_t \) が、二箇所で利用されているからである。

第二に、それでは、情報の流れは、右の図の大きなノード間の、c層からh層への流れであって、左の図にあるような h層からc層の流れは、存在しないのであろうか? そうではない。h層への入力である \(h_{t-1}\)  は、入力 \( x_t \) と合流して、それがc層に流れている。ここでは、二つの入力を合流させるのに、二つのベクトルを横に繋げて連結するという方法を取っている。(右図の下の方)



連結する(concatanate)とは、次のような処理である。

\( h_{t-1} = (h_1, h_2, h_3. \ldots , h_m) \) で、\(x_t = ( x_1, x_2, x_3. \ldots , x_n) \) なら、\( [ h_{t-1} , x_t ] = ( h_1, h_2, h_3. \ldots , h_m, x_1, x_2, x_3. \ldots , x_n) \) になるということである。 


0 件のコメント:

コメントを投稿