LSTMをRNNと比較する

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

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


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

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

この図では、入力は水色、出力は緑色で表されているのだが、RNNは、二つの入力 ht1xt を持ち、二つの出力 htot を持つ。それに対して、LSTMは、三つの入力 ht1ct1xt を持ち、三つの出力 htctot を持つ。


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

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

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

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



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

ht1=(h1,h2,h3.,hm) で、xt=(x1,x2,x3.,xn) なら、[ht1,xt]=(h1,h2,h3.,hm,x1,x2,x3.,xn) になるということである。 


コメント

このブログの人気の投稿

初めにことばありき

宇宙の終わりと黒色矮星

Google翻訳での日本語の点数の低さについて