LSTM

RNN の再帰路を持つ隠れ層が LSTM Block というものに置き換えたネットワークです。



LSTM Block は以下のような構造をしています。

Gate

LSTM Block の中心にある c というマークがついているのは、セルと呼ばれるもので RNN 同様、内部の状態を記憶する役割を持ちます。
そのセルに対する入力には入力ゲート (input gate)、出力には出力ゲート (output gate)、再帰路には忘却ゲート (forget gate)という機構が追加されています。
このゲートは門のようにそこを通る値を取捨選択します。

図で青くマークした部分がゲートになります。

このゲートを通る値を取捨選択するという仕組みは以下のように実現されます。
まずゲートは現時点の入力と1つ前の時刻の出力を受け取ります。
+マークでそれらは足し合わせ、要素ごとにシグモイド関数を適用するので、出力は各値が 0.0 ~ 1.0 になります。
そして、✕マークの部分でこれとゲートを通ろうとする値の要素ごとの積が計算されます。
ゲートの値が0に近ければ、その値はほとんど通さず、1に近ければほぼ全部通すことになります。



順伝播

記号の準備

セルの状態 (state)を \(s_j^t\) で表します。
添字は \(j\) 番目のニューロンの時刻 \(t\) の状態であることを示しています。
同様に、
前の層から LSTM Block への入力値を \(u_j^t\)、
入力ゲートの入力値を \(u_j^{I,t}\)、出力値を \(g_j^{I,t}\)
出力ゲートの入力値を \(u_j^{O,t}\)、出力値を \(g_j^{O,t}\)、
忘却ゲートの入力値を \(u_j^{F,t}\)、出力値を \(g_j^{F,t}\)
で表します。添字は In, Out, Forget の頭文字をとりました。

LSTM Block 内には重みは8種類あります。
1つ前の層とセルとの結合の重みを \(w_{ji}^{in}\)、
1つ前の層と入力ゲート、出力ゲート、忘却ゲートとの結合の重みをそれぞれ \(w_{ji}^{I,in}\)、 \(w_{ji}^{O,in}\)、 \(w_{ji}^{F,in}\)、
LSTM の出力からの帰還路と入力ゲート、出力ゲート、忘却ゲートとの結合の重みをそれぞれ \(w_{ji}^{I,out}\)、 \(w_{ji}^{O,out}\)、 \(w_{ji}^{F,out}\)、
セルの出力からの帰還路の重みを \(W_F\) とします。



セルへの入力

では、セルへの入力をまず計算します。
\[
s_j^t = g_j^{F,t} s_j^{t – 1} + g_j^{I,t} \tanh (u_j^t)
\]

\(u_j^t\) は前の層からの入力 \(x_j^t\) 及び1つ前の時刻の出力 \(y_j^{t-1}\) を足し合わせたものになるので、
\[
u_j^t = \sum\limits_i {w_{ji}^Ix_i^t} + \sum\limits_j {w_{jj’}^Iy_{j’}^{t – 1}}
\]

忘却ゲートの出力値 \(g_j^{F,t}\) 及び入力ゲートの出力値 \(g_j^{I,t}\) は
\[\begin{gathered}
g_j^{F,t} = \sigma (u_j^{F,t}) = \sigma (\sum\limits_i {w_{ji}^{F,in}x_i^t} + \sum\limits_{j’} {w_{jj’}^{F,out}y_{j’}^{t – 1}} ) \hfill \\
g_j^{I,t} = \sigma (u_j^{I,t}) = \sigma (\sum\limits_i {w_{ji}^{I,in}x_i^t} + \sum\limits_{j’} {w_{jj’}^{I,out}y_{j’}^{t – 1}} ) \hfill \\
\end{gathered} \]

セルからの出力

セルからの出力は次のように計算されます。
\[y_j^t = g_j^{O,t}\tanh (s_j^t)\]

出力ゲートの出力値 \(g_j^{O,t}\) は
\[g_j^{O,t} = \sigma (\sum\limits_i {w_{ji}^{O,in}x_i^t} + \sum\limits_{j’} {w_{jj’}^{O,out}y_{j’}^{t – 1}} )\]