2017年2月19日日曜日

ダメだこりゃ。LSTMの図を書き直すの巻。

マルレクの準備で、図を書いているのだが、文章よりも図の方を先に書いていると、どうも、スライドがパラパラ漫画風になってしまう。ま、それは、楽しいし、そんなに悪いことではないと思っているのだが。

ただ、問題は、書いているうちに、前の図が気に食わなくなることがあること。文章の訂正は簡単だが、図の訂正は手間がかかる。その上、パラパラ漫画になっていると、同じような図が連続してたくさんあって、修正箇所も多くなる。うーん。

今回、でも、どうしても気に食わなくて、というか自分の認識不足があって、図を描き直そうと決心した。

実は、もっと深刻な問題もあって、講演の発表予定順に、スライドを準備しているわけではないので、後からの図の訂正は、実は、すでに完成している大量のスライドの図に影響が出る。自業自得なのだが、さあ、どうするか。

昨日、LSTMの形として、次のものを提示した。


今日になって、この図が、どうしても、気に入らなくなった。真ん中の丸の、「\(C_t\)を生成」の部分が気に入らないのだ。

この丸では、二つの演算が行われている。下から「tanh」の部分と、その上の「+」の部分だ。実際に、「\(C_t\)を生成」しているのは、「+」の部分だけだ。この丸は大きすぎる。

気に入らない、もう一つの理由は、LSTMの内部の演算は、全て、LSTM内部のGateと関連していることがある。図の一番左にあるGateは、この図では、ちょっと仲間外れにされている気がする。そうではなく、このGateは、演算「+」の仲間なのだ、

他にも問題がある。僕が、不都合に気づいたのは、実は、この図はLSTMの展開形なのだが、それをループを含む再帰形で表そうとして、うまくいかなかったからである。

修正版は、こちら。各ユニットが、一つの計算を行い、それぞれがGateに関連づけられているのが、見やすいのがわかると思う。


この展開形を、ループを含む再帰形で表したのが、こちらになる。図中の黒い四角は、データを変えることはないが、変数の添字の時間の部分だけを、一つ進めることを表している。




このように、LSTMの再帰形は、二つのループを含む。それは、LSTMの展開形が、横串二本で貫かれていたことから、想像できることだ。

本当は、この図のスタイルで、最後まで行くのがいいのだが、最初の泣き言で書いたように、この続きの図はもうできている。ということで、後半、LSTMの図のスタイル、元のままで行こうと思う。

以下に、二つの図を示す。この二つが、同じものであることを、各自確かめられたい。



これらの図には、「状態を生成」「記憶を生成」「入力を生成」といった新しい、ラベルがついている。それについては、後で詳しく述べる。特に「記憶を生成」に注目してほしい。LSTMは、「記憶」を持つRNNなのである。







0 件のコメント:

コメントを投稿