LSTMをRNNと比較する
LSTMは、RNNの一種である。ただ、LSTMは、旧来の単純なRNNとは異なっている。ここでは、LSTMとかつてのRNNを比較してみようと思う。
かつてのRNN(以下、単にRNNと呼ぶことにする)は、次のような形をしていた。
かつてのRNN(以下、単にRNNと呼ぶことにする)は、次のような形をしていた。
両者の比較を図示すれば、次のようになる。
RNNでは、横の繋がり(展開形で)は、h層の一本だけだったのだが、LSTMでは、もう一本多く横のつながりを持つ。このc層は、LSTMで新たに付け加えられたものだ。あとで見るように、LSTMでは、この層が独自のとても大事な働きをすることになる。
この図では、入力は水色、出力は緑色で表されているのだが、RNNは、二つの入力 ht−1 、xt を持ち、二つの出力 ht 、ot を持つ。それに対して、LSTMは、三つの入力 ht−1 、ct−1、xt を持ち、三つの出力 ht 、ct、ot を持つ。
LSTMの内部を、簡単に見てみよう。(詳細な説明は、後にする。)基本的には、左の図に対応して、LSTMは、ht を生成する層と、ct を生成する層の二つからできている。
ここでは、次の二つのことに注意しよう。
第一に、LSTMの出力 otは、ht と同じものである。先ほど、三つの出力があると書いたが、三つのうち二つは、同じ htである(右の図で、上方向と横方向の出力の ht )。右と左の図を比べて、c層の位置とh層の位置が、上下反対のように見えるのは、h層が出力を行う層だからである。また、右図の大きな回り道は、ht が、二箇所で利用されているからである。
第二に、それでは、情報の流れは、右の図の大きなノード間の、c層からh層への流れであって、左の図にあるような h層からc層の流れは、存在しないのであろうか? そうではない。h層への入力である ht−1 は、入力 xt と合流して、それがc層に流れている。ここでは、二つの入力を合流させるのに、二つのベクトルを横に繋げて連結するという方法を取っている。(右図の下の方)
連結する(concatanate)とは、次のような処理である。
ht−1=(h1,h2,h3.…,hm) で、xt=(x1,x2,x3.…,xn) なら、[ht−1,xt]=(h1,h2,h3.…,hm,x1,x2,x3.…,xn) になるということである。
コメント
コメントを投稿