[ディープラーニング] RNN

RNN

リカレントニューラルネットワーク (Recurrent Neural Network) とは、帰還路を持つニューラルネットワークです。簡単に言うと、あるニューロンの出力が時間差で自身への入力として戻ってくる伝播が存在するネットワークです。



RNNが有効なタスク

以下の図は CNN に犬、鳥の画像を順番に与えて、クラス分類を行う様子を表しています。
鳥の画像を与えられたとき、1つ前の時点で犬の画像を与えられたことをネットワークは知りませんが、個々の入力データは独立しているので、過去の情報がなくとも支障はありません。



もう1つ、単語「お腹」「が」まで与えられた時点で、次に出現する単語を予測する問題を考えます。
このとき、単語「が」だけで次の単語を予測するのは難しく、1つ前に「お腹」という単語が与えられたという情報が必要です。
しかし、再帰型でないネットワークでは以前にどんな情報が与えられたかを記憶できないため、この問題を解くことはできません。



この種の与えられる入力が時系列的な関連を持っており、ある出力を計算するのに過去に与えられた入力も必要とする問題を解きたい場合、RNN は有効な手段です。
なぜなら、RNN は再帰構造により過去の情報も保持しておくことができるからです。

RNN の情報伝播の流れ

次の隠れ層に再帰構造を持つ RNN の情報伝播の流れを見ていきます。



順伝播型のニューラルネットワーク同様、矢印の方向に情報が伝播していくのですが、隠れ層の出力値は、次の時刻で自身に戻ってきます。
時刻 \(\tau\) の入力を \(x_\tau\)、出力を \(y_\tau\)、隠れ層の入力及び出力をそれぞれ \(u_\tau^{(2)}\)、\(y_\tau^{(2)}\) とします。



時刻 \(\tau=2\) のとき、隠れ層の入力 \(u_2^{(2)}\) は入力層から受け取る \(x_2\) と時刻 \(\tau=1\) の隠れ層の出力 \(y_1^{(2)}\) を受け取り、次のように計算します。
\[u_2^{(2)} = f(W^{(2)} x_2 + W y_1^{(2)} + b^{(2)})\] ただし、\(W^{(2)}\)、\(b^{(2)}\)は第1層と第2層との結合の重み及びバイアス、\(W\) は帰還路の重みです。
これらのパラメータは逆伝播による更新が行われるまで、各時刻で変化しません。



同様に時刻 \(\tau=3\) のとき、隠れ層の入力 \(u_3^{(2)}\) は入力層から受け取る \(x_3\) の他、時刻 \(t=2\) の隠れ層の出力 \(y_2^{(2)}\) から計算します。
時刻 \(\tau=3\) のときの出力 \(y_3\) から矢印を逆に辿っていくと、過去のすべての入力の情報 \(x_1, x_2, x_3\) が使われていることがわかるでしょう。
これが RNN が過去の情報を記憶できるということになります。



RNN の逆伝播

\(T\) 個の時系列データ \(x_1, x_2, \cdots, x_T\) を入力していき、出力 \(y_1, y_2, \cdots, y_T\) を得ることができたとします。
この時点でこれまでのネットワークを書くと以下のようになるでしょう。
このネットワークに対して、逆伝播を行います。



勾配消失問題

層を深くした場合に逆伝播法による学習がうまくいかない勾配消失問題が同様に発生します。
なので、理論上は長期間に渡る過去のデータを利用できるはずですが、実際は3時刻分ぐらいが限界です。
これだと文章など数十時刻分の過去の情報が必要な時系列データなどにはとても適用できません。この問題を解決した RNN ネットワークが LSTM です。
LSTM についてはまた別の記事で紹介します。

コメントを残す

メールアドレスが公開されることはありません。