RNNの改良したLSTMがこちらになります。
皆さんこんにちは!
今日も張り切っていきましょう。
前回は自分たちの日本語のような時系列データを扱うことができる
ニューラルネットワーク「RNN」について書きました。
まだ見ていない方は参照して見てください。
皆さんはRNNの弱点を覚えていますか?軽く復習すると
RNNは時系列データを扱うのに特化したニューラルネットワークでしたね。
というのも中間層が再帰する形をしています。
そのため時間情報を反映できるようになり、自然言語などの時系列での情報を
うまく利用できるようになりました。
しかしながら、RNNは中間層が再帰しているので勾配消失問題が起きやすく、
また層を重ねるごとにデータ量が莫大になり長時間前のデータを利用することが
できなくなる弱点がありました。
今回はRNNの致命的な弱点を克服した
LSTM(Long short-term memory)について話していきます。
~今日の内容と参考文献〜
今日の参考文献 ・サイト
深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト
はじめてのディープラーニング -Pythonで学ぶニューラルネットワークとバックプロパゲーション- (Machine Learning)
LSTMとRNNの最大の違いとは?
先ほどもお話ししたようにRNNは中間層が再帰する形をとっていて
それにより過去のデータが引き継がれる形を過去のデータを必要とする自然言語などの処理が可能です。しかし長期記憶が得意ではありませんでした。
そこで登場したのがLSTM(Long short-term memory)
名前が示すように長期記憶も短期記憶もどっちもいけてしまうすごいやつです!
LSTMでなぜ長期記憶が可能になったのでしょうか。簡単にいうと・・
LSTMはRNNのように過去の情報を全て記憶するのではなくて
得られた情報を取捨選択して必要な情報だけを記憶します。
これにより長期記憶が可能となったのです。
まさしく情報の断捨離をしたのですね。
LSTM=「情報の断捨離」を行った。
ぜひ覚えていってください。
ではLSTMの情報の断捨離を支えているのは 、一体なんなのでしょうか?
見ていきましょう。
LSTMブロック!?気になるLSTMの構造とは?
LSTMとRNNの構造は基本的には大きく変わっておらず再帰する形をとっています。
しかしRNNの中間層と変わり、LSTMには
「LSTMブロック」というものが入っています。
LSTMの場合、隠れ層ではこのLSTMブロックが並んでいます。
このLSTMブロックがLSTMの情報の断捨離を支えているのです。
ではLSTMブロックの中身はどうなっているのでしょうか。
LSTMブロックには大きく4つのゲートが存在します。
- Output Gate(出力ゲート)
- Input Gate(入力ゲート)
- Forget Gate(忘却ゲート)
- memory cell(記憶セル)
それぞれの機能について簡単に説明していきます。
1OutputGate
OutputGateでは他からの無関係な出力を防いだり過去の出力を再帰入力します。
2InputGate
InputGateでは前のデータを受け取るか受け取らないかを判断します。
また必要な誤差だけを伝播する機能もあります。
3ForgetGate
ForgetGateでは記憶セルの内容をリセットしてスッキリさせます。
4Memory Cell
Memory CellではInputGateが受けとった 1つ前の時刻のデータを保持します。
これらのゲートを含むLSTMブロックによって
ネットワーク全体のアーキテクチャとは独立して
個々に記憶の保持やリセットができるようになったのです。
そのおかげで長期記憶にも対応できるようになったのですね!!
ちょっとおまけで・・
さらにLSTMが改良されてGRU(Gated recurrent unit)というものができました。
GRUとは2014年にChoらによって提案されたもので、特徴は・・
- 更新ゲート(Update gate)の導入
- リセットゲート(Reset gate)の導入
が挙げられます。
更新ゲートはLSTMの入力ゲートと忘却ゲートを統合したものです。
GRUは記憶セルと出力ゲートを持ち合わせておらず、その代わりに
リセットゲートを導入しています。
LSTMに比べてシンプルな構造になり、計算量がLSTMに比べ少なくなるのです。
LSTMを2つ組み合わせた??「BiRNN」
例えば時間の途中情報が抜け落ちていてそれが何かを予測したい場合、
過去の情報から順番に思い出して行くのもいいのですが
過去と未来の情報を使って両方向から予測したほうが効果的です。
そこで過去→未来へ学習するLSTMと未来→過去方向に学習するLSTMを
組み合わせたモデルそれが
BiRNN(Bidirectional RNN)
Bidirectional と言うように両方向のRNNなのです。
これは軽く覚えておく程度でいいと思います。