①LSTMレイヤ
❓なぜRNNでは結果がうまくいかないのか
RNNは勾配消失が起こりやすく、長期記憶ができない
➡ 勾配消失を解決するために作られたのがLSTM
〇 第5章RNNとの比較
・RNNレイヤ
入力:$x_t$(入力データ)と$h_{t-1}$(1つ前の隠れ状態)
出力:$h_t$(現在の隠れ状態)
・LSTMレイヤ
入力:$x_t$と$h_{t-1}$に加えて、$c_{t-1}$(1つ前の記憶セル)
出力:$h_t$に加えて、$c_t$(現在の記憶セル)
〇 セル状態$c_t$の仕組み
・中に入っている情報は、加工や変形をせず、過去から未来へ渡っていく
・これは、他のレイヤには出力せず、LSTMレイヤ内だけで情報を伝えていくもの
❓記憶セル$c_t$と隠れ状態$h$の違いは?
LSTMで求める$h_t$は、新しく計算された記憶セル$c_t$を$tanh$関数に通したもの
❓LSTMレイヤの4つのゲートの意味
この4つのゲートは、テキストを読んでも分からなかったので、調べながら紙に書いて理解しました。4つのゲートの理解のステップをまとめます。
①忘却ゲート(forgetゲート)
➡ 1つ前の記憶$c_{t-1}$にforgetゲート「$f$」を要素ごとにかけ算する
$f$ $=$ $\sigma$$(x_tW_f + h_{t-1}W_h + b_f)$
次のステップへ残す記憶 $=$ $c_{t-1}$ $\odot$ $f$
<忘却ゲートの目的>
過去の記憶セルからいらなくなった情報を消去すること
②入力ゲート(inputゲート)
➡ 今回新しく沸き上がった記憶の種$g$に対し、入力ゲートを掛ける
➡ ①で求めた「次のステップへ残す記憶」に足して$tanh$に通す前の長期記憶$c_t$を作成する
$i$ $=$ $\sigma$$(x_tW_i + h_{t-1}W_h + b_i)$
$c_t$ $=$ $c_{t-1}$ $\odot$ $f$ $+$ $i$ $\odot$ $g$
<入力ゲートの目的>
新しく入ってきた情報をどれくらい追加するか
③出力ゲート(outputゲート)
➡長期記憶$c_t$に$tanh$を通す
$o$ $=$ $\sigma$$(x_tW_o + h_{t-1}W_h + b_o)$
$h_t$ = $tanh$$(c_t)$ $\odot$ $o$
<出力ゲートの目的>
長期記憶の中から必要な情報だけを厳選すること
これらのステップを通して、LSTMレイヤの出力である$C_t$と$h_t$を求めることができます。
最初に第6章をやった時、第5章のRNNを一通り理解してから、第6章のLSTMに入ったのですが、レイヤの出力が1つから2つに増えたことで、今までやってきたことと別物のように感じてしまい、実装に入る前のゲートの計算グラフから理解するのにとても苦労しました。
分からないまま進めるのではなく、一度第5章に戻り、RNNモデルの流れを紙に書きながら1つずつ整理する時間を設けた結果、二度目のLSTMの勉強では変数の意味に混乱することもなく、スムーズに流れを理解することができました。