らんだむな記憶

blogというものを体験してみようか!的なー

ゼロつく 2 (9)

LSTM に突入。ディープラーニングの場合「何でこういう式なの!?」と考えることにあまり意味はないと思っていて、その因子に関わる入力と出力だけが重要だと思っている。そして、入力と出力の間が一つ或は複数の線形層や畳み込み層と活性化関数で繋げられると。

output ゲート

output ゲート、つまり隠れ層の出力を制御する因子としてのゲートは時刻 $t$ での入力 $x_t$ と前回の時刻 $t-1$ での隠れ層の出力 $h_{t-1}$ が関わり、何らかの関数を通して

\begin{align*}
o = \mathrm{output}(x_t, h_{t-1})
\end{align*}

と計算される。

forget ゲート

forget ゲート、つまり記憶セルからの不要な記憶の忘却を制御する因子としてのゲートは時刻 $t$ での入力 $x_t$ と前回の時刻 $t-1$ での隠れ層の出力 $h_{t-1}$ が関わり、何らかの関数を通して

\begin{align*}
f = \mathrm{forget}(x_t, h_{t-1})
\end{align*}

と計算される。

新しい記憶セル

forget ゲートで忘れた情報に対し、新たに記憶する情報は時刻 $t$ での入力 $x_t$ と前回の時刻 $t-1$ での隠れ層の出力 $h_{t-1}$ が関わり、何らかの関数を通して

\begin{align*}
g = \mathrm{new\_info}(x_t, h_{t-1})
\end{align*}

と計算される。

input ゲート

input ゲート、つまり新たに記憶する情報の価値を制御する因子としてのゲートは時刻 $t$ での入力 $x_t$ と前回の時刻 $t-1$ での隠れ層の出力 $h_{t-1}$ が関わり、何らかの関数を通して

\begin{align*}
i = \mathrm{input}(x_t, h_{t-1})
\end{align*}

と計算される。

これらは結局実装としてはほとんど同じものになることが多いようだが、そういった実装の詳細はここでは気にしないことにして

\begin{align*}
c_{t} &= f \odot c_{t-1} + i \odot g \\
h_{t} &= o \odot \tanh(c_{t})
\end{align*}

で記憶セル $c_{t}$ と隠れ状態 $h_{t}$ を計算するのが LSTM ということになる。

実装の詳細については、大きい行列にまとめることでできるだけ多くの計算を 1 回で済ませられる GPU を活かす構造になっていると思っている。なので、全てのゲートは似通った実装の詳細になっていて、それを束ねることで大きな行列の積に落とし込めるのだろう。

p.245 まで完了。