以下の論文を読みます。
前回この論文を読もうとしたけど、RNN や LSTM の話をして、全く論文に入らなかった…。
ごめん…今回は論文の内容に入るね。でも、前回は LSTM は図を出しただけで、LSTM ってどんなものか全然話してなかったから、その話だけ先にしておきたいかな。LSTM の原論文は以下だよ。
前回と違って、一部線が太くなってる?
太い線の箇所だけみるとシンプルなRNN(シンプルな RNN のことを、Tensorized LSTM の論文では vanilla RNN と呼んでいるね)なんだ。LSTM は vanilla RNN にどんなパーツを付け加えたものかわかるようにしてみたよ。
バニラ…シンプルな味で、おいしそう。じゃなかった、vanilla RNN の周りに結構ごてごてパーツが付いてるんだ…わたしのPCみたい…でも、どうしてこんなに色々なパーツが?
絵理さん、PC自作だもんね。じゃなかった、vanilla RNN には以下の欠点があって、この前者を解決するのが上図の「記憶」のライン(原論文の constant error carrousel)、後者を解決するのが上図の Input Gate / Output Gate というように対応付いているよ。
- 勾配や発散や消滅することにより学習が不安定になる: これは前回も話したけど、誤差を時間ステップをさかのぼらせて伝播させる毎に各時間ステップの誤差が掛け合わさることで発散や消滅の恐れがある問題だね。これは RNN の再帰構造に起因する問題ではなくて、再帰しない多層ネットワークでも層をさかのぼる度に誤差が掛け合わさるんだけど、RNN では時間ステップの長いデータを処理したいときさかのぼる回数が多くなるのと、再帰ゆえに同じ重みを何度も通るパスが存在することから特にクリティカルになっているね。
- 重み係数のコンフリクトにより表現力が制限される: こちらは再帰構造ならではの悩みだね。ある入力パターンを受け取ったらその特徴を何ステップも保持したいとする。このとき、ある入力パターンから特徴を受け取るように学習しなければならないのはもちろんだけど、そうやって得た特徴がその後の入力によってかき消されないようにもしないといけない。あるときには受け取りたいけどあるときには受け取りたくない、これが Input 側のコンフリクト。他方、特徴があるパターンのときにだけ何か信号を出力したいとして、別のパターンのときにはそのような信号を出力しないようにしたいこともある。あるときには読み出したいけどあるときには読み出したくない、これが Output 側のコンフリクト。
パーツパーツに意味があるんだ。
前回話しそびれたのはここまでだよ。
ありがとう泉さん。いまの話で読みやすくなった…今回読む論文のイントロダクションでも「LSTM によって記憶の保持期間の長期化と、ゲートによる情報フローの制御ができるようになった」とある…それで次の課題は…どうやって LSTM のキャパシティを大きくする?
LSTM のキャパシティ?
うん…いくら記憶をずっと保持することができても…複雑な記憶をもつことができなければ LSTM の適用場面は限られる。LSTM のキャパシティを広げる1つの方向は、単に記憶の次元を増やす…これは、一度にもてる情報量を増やす。もう1つは…特徴抽出の深化(という表現はわたしが勝手にあてているけど…)。LSTM をいくつも積み重ねる(Stacked LSTM が既に提案されている)ことで、より高レベルな特徴を抽出できるようになる…深層学習がなぜ深層なのかという話でよく挙げられるように…ピクセルからエッジを、エッジから顔のパーツを、顔のパーツから人の顔を…。時系列なら音素、言葉、会話文とか…?Stacked LSTM の原論文は読んでない…ごめん…。
その2つの方向が、論文タイトルの Wider と Deeper ということかな?
うん。もちろん、記憶の次元を増やせば Wider になるし、LSTM をいくつもスタックすれば Deeper にはなる…。でも…前者は追加的なパラメータを…後者は実行時間を要する…。
そりゃあパラメータは必要になるでしょ…記憶の次元を だけ大きくするなら、必要な追加パラメータは…あ、2乗で効くんだね。
そう。もう一方の Stacked LSTM は実行時間もかかるし、それに、多層化によって LSTM が払拭したはずの勾配の発散や消滅の懸念がまた首をもたげてくる…。
それは確かに問題って感じがするね。