再帰型ニューラルネットワーク
定義1
$\overline{\sigma}$を成分ごとに作用する活性化関数としよう。すなわち、スカラー関数$\sigma : \mathbb{R} \to \mathbb{R}$に対して次のように定義されたベクトル関数である。
$$ \overline{\sigma}(\mathbf{z}) = \begin{bmatrix} \sigma(z_{1}) \\ \sigma(z_{2}) \\ \vdots \\ \sigma(z_{m}) \end{bmatrix} \qquad \text{where } \mathbf{z} = \begin{bmatrix} z_{1} \\ z_{2} \\ \vdots \\ z_{m} \end{bmatrix} $$
入力ベクトルの数列$(\mathbf{x}_{1}, \mathbf{x}_{2}, \dots, \mathbf{x}_{T})$ $(\mathbf{x}_{t} \in \mathbb{R}^{n})$が与えられたとしよう。$\mathbf{W} \in M^{m \times m}$、$\mathbf{U} \in M^{m \times n}$を重み、$\mathbf{b} \in \mathbb{R}^{m}$をバイアスとしよう。隠れ状態hidden state$\mathbf{h}_{t} \in \mathbb{R}^{m}$を次のように漸化式で定義するニューラルネットワークを再帰型ニューラルネットワークrecurrent neural network, RNNという。
$$ \mathbf{h}_{t} = \overline{\sigma}\left( \mathbf{W} \mathbf{h}_{t-1} + \mathbf{U} \mathbf{x}_{t} + \mathbf{b} \right), \qquad \mathbf{h}_{0} = \mathbf{0} $$
各時点$t$の出力$\mathbf{y}_{t} \in \mathbb{R}^{p}$は、隠れ状態に全結合層を合成して得る。$\mathbf{V} \in M^{p \times m}$を重み、$\mathbf{c} \in \mathbb{R}^{p}$をバイアスとすれば、
$$ \mathbf{y}_{t} = \mathbf{V} \mathbf{h}_{t} + \mathbf{c} $$
説明
多層パーセプトロンMLPがベクトル一つを入力として受け取りベクトル一つを出す関数であったのに対し、再帰型ニューラルネットワークはベクトルの数列sequenceを扱う関数である。自然言語の文、時系列、音声信号のように順序が意味を持つデータを処理するために考案された。
MLPや畳み込みニューラルネットワークのように、情報が入力から出力へ一方向にのみ流れ、戻ってくる結合がないニューラルネットワークを順伝播型ニューラルネットワークfeedforward neural networkという。この言葉は、隠れ状態が自分自身へフィードバックされる再帰構造を持つ再帰型ニューラルネットワークと対比するときに特によく使われる。初期には事実上MLPのみを指す言葉だったが、今では再帰型ニューラルネットワークでないニューラルネットワークを総称すると考えればよい。
再帰型ニューラルネットワークの核心は、隠れ状態$\mathbf{h}_{t}$が現在の入力$\mathbf{x}_{t}$と直前の隠れ状態$\mathbf{h}_{t-1}$に同時に依存するという点である。$\mathbf{h}_{t-1}$はさらに$\mathbf{h}_{t-2}$に依存するので、隠れ状態は過去の入力を要約して保持している一種の記憶memoryの役割を果たす。漸化式を展開して書けば、$\mathbf{h}_{t}$が時点$t$までのすべての入力の関数であることが明らかになる。
$$ \mathbf{h}_{t} = \overline{\sigma}\left( \mathbf{W} , \overline{\sigma}\left( \mathbf{W} , \overline{\sigma}\left( \mathbf{W} , \overline{\sigma}( \cdots ) + \mathbf{U} \mathbf{x}_{t-2} + \mathbf{b} \right) + \mathbf{U} \mathbf{x}_{t-1} + \mathbf{b} \right) + \mathbf{U} \mathbf{x}_{t} + \mathbf{b} \right) $$
重み共有
注目すべき点は、上の式に現れる重み$\mathbf{W}, \mathbf{U}$とバイアス$\mathbf{b}$がすべての時点で同一であるということだ。すなわち、時点ごとに異なるレイヤーを使うのではなく、一つのレイヤーを繰り返し適用する。畳み込み層がカーネル一つを空間全体にわたって共有するように、再帰型ニューラルネットワークはレイヤー一つを時間軸に沿って共有する。
おかげで再帰型ニューラルネットワークは、入力列の長さ$T$に関係なく固定された個数のパラメータだけを持つ。互いに異なる長さの入力を同じニューラルネットワークで処理できるのもこのためである。
勾配消失
再帰型ニューラルネットワークで隠れ状態を計算する過程では、同一の重み$\mathbf{W}$が繰り返し掛けられる。したがって逆伝播の過程で、勾配には$\mathbf{W}$に関連する項がおよそ$T$回繰り返し掛けられる形が現れる。この値は$\mathbf{W}$の大きさによって$0$へ指数的に減少して勾配消失が起こるか、発散する。その結果、基本形の再帰型ニューラルネットワークは時点が遠く離れた入力の間の関係を学習しにくい。この長期依存性の問題をゲートgate構造で緩和したのがLSTMとGRUであり、今日では系列データには再帰構造の代わりにアテンションベースのトランスフォーマーが主に使われる。
関連リンク
Ian Goodfellow. Deep Learning, p378-381. ↩︎
