再帰型ニューラルネットワーク(RNN)

1. 概要

再帰型ニューラルネットワーク(Recurrent Neural Network, RNN)は,可変長の系列形式データをモデル化するために用いられるニューラルネットワーク構造である.特に,自然言語処理や音響処理に音声認識・音声生成などの,「系列データの認識・生成」に用いられるようになった.

この記事では,RNNの基本形について2節で解説したのち,3節ではRNNの発展モデルとしてLSTM, GRU, 双方向RNNについてとりあげる.

RNNのダイアグラム
図1:RNNのダイアグラム.(a) 繰り返し方式でステップ$t$における再帰構造を表現した簡略形.(b) 簡略系を各ステップに展開し,1ステップずつ個別に処理を表記したもの.

RNNは再帰(Recurrent)と名づけられている通り,フレーム間の隠れ状態$\bm{h}_t$と$\bm{h}_{t+1}$の変化が1つの関数(ニューラルネット)により表現されている「同一再帰関数で何度も更を行う方式」のモデルである.つまり,RNNの肝となるアイデアは「同じ重み$\bm{W}$で,毎フレーム$\bm{h}^{(t)}$の更新を行う」点にある(図1).

前ステップの潜在状態ベクトルと最新フレームの特徴ベクトルをもとに,次フレームにおける新たな潜在状態およびそれに対応した観測を毎フレーム同じ重みで予測することができる.これにより,長めの系列の変化を学習するモデルでありながら,同一の再帰ブロック1つだけ学習し,それを毎ステップ $t$で繰り返すだけの,簡潔なモデル構造で済ませることができている(2.1節).

RNNに入力する系列データの例としては,自然言語処理でのテキストデータや,環境音・音声などのオーディオデータや,あるいは動画処理でのアクション・イベントなどが上げられる. RNNはそのような系列全体の時間的変化を,時刻$t$の潜在変数ベクトル$\bm{h}_t$の変化として学習できる.よって,再帰型ニューラル言語モデルや,seq2seqなど,系列モデリングが必須で相性のよい自然言語処理を中心に,広く系列データの認識・予測・生成の応用において,RNNは活用されている

1.1 従来の系列モデルとの違い

RNN登場以前は,自然言語処理や音声認識などの「系列ラベリング問題」や,動画行動認識などの「系列識別モデル」には,HMM(Hidden Markov Model:隠れマルコフモデル)CRF(Conditional Random Field:条件付き確率場)などの系列モデルがよく用いられていた.

HMMではフレーム間の潜在状態遷移にマルコフ連鎖を仮定しており,前フレームの潜在状態クラス$\bm{h}_{t-1}$の$K$クラスに対して,現フレームの状態が$K$クラスのどのクラスに遷移するかの「フレーム間における状態クラス間の遷移確率」がモデリングされていた.それに対し,RNNでは,再帰関数を用いて,ステップ$t$までに入力されたシーケンス全体の表現を,潜在状態ベクトル$\bf{h}_{t}$として埋め込み(embedding)を学習できる.

従来の系列予測モデルと同じRNNの特徴・利点として,可変長シーケンスを学習できる点がある.RNNでは,再帰関数を用いて潜在状態のフレーム間変化を学習しているので,系列の長短が異なるサンプルでも全て同一の隠れ状態ベクトル空間$\bf{h}_{t}$へ射影(埋め込み)できる.よって,長短の系列長が違うサンプル同士を$\bf{h}_{t}$上で比較することも可能であり,学習データの系列長は統一されていなくても良い.

そして,毎回の再帰を「ステップ $t$」と呼ぶが,これは再帰無しの普通のニューラルネットワークやCNNでの「$L$ 番目の層」に相当していると考えることで.RNNの構造を理解しやすくなる.ResNetなどの「カスケード構造型ネットワーク」の「$i$番目のブロック」とも同じである.ただし,RNNの場合は,各ステップで,同じ重みの層を最初から最後まで用いる点が異なる.学習済みの同じ層を毎ステップで繰り返し(=回帰し)つづけることにより,任意のステップ数$t$のデータに対応可能な「可変長データ対応のモデル」をRNNは実現している.深い$T$ステップのネットワークを再帰構造により学習できるので,RNNはディープニューラルネットワークに分類されている.

1.2 記事の構成

2節以降では,以下の順でRNNの基本モデルとその応用モデルを紹介する:

2 RNNの基本モデル

2節では,まずRNNの構成要素の再帰・繰り返し(Recurrence)記憶(Memory)を用いた,RNNの基本的な更新式について述べる(2.1節).その後,BPTTを用いたRNNの学習方法について簡単にだけ述べる(2.2節)

2.1 フレーム単位での繰り返し更新

RNNの入力である系列データ(音声,テキストなどの各フレームの特徴ベクトル系列)を,$\bm{X} = (\bm{x}^{(1)}, \bm{x}^{(2)}, \ldots, \bm{x}^{(T)} ) $と定義する.$T$は入力系列の長さであり,$\bm{x}^{(t)} $はフレーム$t$における観測データの$K$次元特徴ベクトルである(※ 全フレームで固定長の$D$次元特徴ベクトルを入力する,ここの長さは可変にはできない).

RNNは系列長の$T$回分,同じ操作を行う再帰(recurrent)構造を採用したディープニューラルネットワークである.図2は,RNNのダイアグラムである図1に,重みパラメータ$\bm{U}, \bm{W}, \bm{V}$の適用位置も追加して示したものである:

RNNのダイアグラム(重みパラメータあり)
図2RNNのダイアグラム(重みパラメータあり).各フレームで,毎回同じ重みパラメータ$\bm{U}, \bm{U}, \bm{V}$が使用され,再帰的に処理されていることがわかる.

RNNでは,各ステップ$t$の観測に対し,それまでの全フレームの変遷の結果を表現する内部記憶に相当する潜在状態(hidden state)ベクトル$\bm{h}^{(t)} \in \mathbb{R}^D$を更新していくことで,系列の変化を再帰的にモデル化する.各ステップ$t$では(以前の全フレームの全記憶を表す)潜在状態$\bm{h}^{(t)}$と,ステップ$t$の新規観測$\bm{x}_{(t)}$の2つを入力として用いて,再帰関数により新たな出力$\bm{o}^{(t)}$を予測する(図2).

つまり,系列データにおいて,各フレームの予測$\bm{o}^{(t)}$が正しく予測されるように,RNNを学習する (学習手続きについては,次の2.2節).図1-左側の繰り返し表現を,図1-右側のように展開(unfold)することで,RNNを「同一の再帰関数$T$層の繰り返しから構成される再帰的なニューラルネット」として捉えることができる.

RNNの各ステップ$t$の出力$\bm{o}^{(t)} $と潜在状態$\bm{h}^{(t)}$の間では,全結合層と活性化関数$f(\cdot)$(ロジスティックシグモイド関数,$\tanh$など)を用いて,順伝搬により値を更新する:

\begin{equation}
\bm{h}^{(t)} = f(\bm{U}\bm{x}^{(t)} + \bm{W}\bm{h}^{(t)} )\tag{2.1}
\end{equation}

また,各フレームにおける出力\bm{o}^{(t)}の予測は,以下のように隠れ状態を重みパラメータ$\bm{V}$で線形変換して行う:

\begin{equation}
\bm{o}^{(t)}= \bm{V}\bm{h}^{(t)} \tag{2.2}
\end{equation}

言語モデルなどのターゲットがone-hotベクトル$\bm{y}^{(t)}$であるデータセットの場合,各フレームの出力を$K$クラス確率ベクトル$\hat{\bm{y}}^{(t)} \in \mathbb{R}^{K}$にしたい場合は,$\bm{o}^{(t)}$に対数確率値を想定するので,更に$\text{softmax}$関数を用いて最終的なクラス確率ベクトル$\hat{\bm{y}}^{(t)}$へと変換する:

\begin{equation}
\hat{\bm{y}}^{(t)} = \text{softmax}(\bm{o}^{(t)}) \tag{2.3}
\end{equation}

以上がRNNの基本的な処理である.

2.1.1 NLPでの例

ここで,具体的な各変数の役割をイメージしやすくなるように,「自然言語処理(NLP)でのRNNによる文章予測」における3つの変数例を以下に提示してみる:

  • $\bm{x}^{(t)}$:入力の特徴表現ベクトル.ニューラル言語モデルとしてRNNを用いる場合は,元の単語を低次元ベクトルに埋め込んだword2vecGloVeなどの,単語の埋め込みベクトル(分散表現)を用いることが多い.
  • $\bm{h}^{(t)}$:潜在変数ベクトル.系列の最初から$t$フレームまでの,潜在状態の変化全てを蓄積した記憶に相当する.つまり系列全体のデータの情報を状態変数として保持しているものであるが,RNNだとあまり昔のフレームの記憶までは保持できていない.LSTMGRUなどでは,少し長期の状態まで記憶している.
  • $\bm{o}^{(t)}$:出力のベクトル.出力が連続値のスカラーやベクトルの場合は,これが最終的な各フレームでの予測出力となる.
  • $\hat{\bm{y}}^{(t)}$ :出力のクラス確率.自然言語処理系や音声認識・音声生成のRNNでは,次のフレーム$t$の単語クラス確率を予測する(語彙サイズが$K$の場合).

2.1.2 RNN基本モデルの長所と課題

RNNは同じ順伝播を毎ステップで繰り返すが,この構造の利点として「パラメータ共有によるモデルの効率化」が挙げられる.RNNは「各フレーム$t$の更新では,毎回同一のパラメータで再帰するのみ」という省パラメータ設計であるので,学習するデータの系列長が長くとも小規模なモデルで済ますことができる(もし各ステップ$t$で,別々の再帰関数を用意すると,モデルが膨大になってしまい学習できなくなる).

一方で,このRNN基本モデルはシンプル過ぎるので,表現力が限られてしまっており,長期間の系列のモデリングや,より複雑で散発的だったり変動的だったりする時間依存を学習するのには向かない.そこで,3節に述べる発展モデル (LSTMやGRUs)や,アテンション機構やメモリー機構などの,「RNNを拡張する各種仕組み」を用いることで,弱点の解決を図ることになる.(逆に言うと,ナイーブなRNN基本モデルは,短くて分岐のないシーケンスにしか適用しづらいモデルである)

2.2 RNNの学習 (BPTT:時間方向逆伝播)

RNNでは、図1-右図の展開図を元に,ステップの系列逆方向に沿って3つのパラメータ行列$\bf{U}, \bf{W}, \bf{V}$に対して誤差逆伝播を行う.

ロス関数としては,まず毎フレーム $t$ での損失として,そのフレームでの予測 $\hat{\bm{o}_t} $と正解 $\bm{o}_t$ の間の,交差エントロピー損失 $\mathcal{L}_{CE}^{(t)}$を計算する.

\begin{equation} \mathcal{L}_{CE}(\hat{\bm{y}^{(t)}}, \bm{y}^{(t)})= – \bm{y}^{(t)} \log \hat{\bm{y}}^{(t)} \end{equation}

これを,全フレーム分だけ足した各サンプルの合計損失を,全学習データ $N$ サンプルで平均した損失を,RNNの損失関数として用いる:

\begin{equation} \mathcal{L}(\hat{\bm{y}}, \bm{y}) = – \frac{1}{N} \sum_t^{T} L(\hat{\bm{y}^{(t)}}, \bm{y}^{(t)}) \end{equation}

RNNの学習では,上記のロス関数を用いて,系列の最後の$t=T$から$t=1$の逆方向に,ステップ$t$ごとに誤差$L(\hat{\bm{y}^{(t)}}, \bm{y}^{(t)})$の逆伝播を行う.このRNNの学習方法を,時間方向逆伝播(Back Propagation Through Time) と呼ぶ.

2.3 RNN の課題:長期記憶がうまく行えない.

RNNは長い系列データが学習対象になるほど,学習時に勾配消失・勾配爆発が起きやすく,「短めの系列変化しかうまく学習できない」という課題がある.

そこでRNNのネットワーク構造を改良することで「ゲート機構を用いた,長期記憶も保持可能な工夫」が追加されたLSTMGRU(LSTMの簡易版)が提案された(3節).長めの系列データの変化を学習する際にはLSTMやGRUが使われるようになった.また,系列データの持つ意味を順方向だけでなく逆方向からも辿って表現したいので「双方向RNN」が登場した.

3 RNN の発展モデル

RNNの基本モデル(2節)では学習しづらい「少し長めの系列データ」を学習するためのゲート機構付きRNN(Gated RNN)であるLSTM(3.1節)とその簡略化改善版のGRU(3.2節)について紹介する.また順-逆両方の系列モデリングを同時に行うRNNの双方向RNN(3.3節)も紹介する.

ちなみにVision and Language周辺において,更に長期の系列変化をモデル化する目的で「2階層LTSM」を用いることも多いが,RNNの階層化については本記事では触れない. 

3.1 LSTM (Long Short-Term Memory)

LSTM (Long-Short Term Memory) [Hochreiter and Schmidhuber, 1997]は,ベクトル合成用の重みを入力の値に則して制御するゲート(gate)と呼ばれる変数間調整機構をRNNに追加することで,潜在変数(記憶)の長期伝達も可能にしたRNNの改良型である.特に2014~2017年ごろに,自然言語処理や機械翻訳,音声合成や音響処理界隈で,流行した技術である(その後の系列モデリングでは,TransformerやBERTが主役になっている).

基本形のRNN(2節)では,長い系列長のデータセットにより長期記憶を行おうとしても,勾配消失問題(vanishing gradient problem)のせいでうまくいかず,短い系列長のデータの変化しかうまく学習できなかった.それに対しLSTMでは,RNNの持つ短期的な記憶 $\bm{h}_t$ に加えて,記憶セル(memory cell) と呼ばれる基本繰り返しブロック内に,短期情報を長く保持する記憶$\bm{c}_t$ も追加した「RNNより長期間の状態変化も記憶できる改善型RNN」である.

LSTMはセルブロック内の3つゲート機構を利用して「長短の記憶間の依存関係の変化(調整に用いる係数)」を学習できる.以下の図2にLSTMのネットーワーク構造(各ステップ$t$におけるブロック構造)を示す:

LSTMのブロック構造
図2:LSTMのブロック構造.黄色のブロックは活性化層による操作を表し,丸型のピンク色ブロックは「要素ごとの演算」を表す.「concat」は「ベクトル同士の結合」を示す.

LSTMのステップ$t$におけるブロック内では,3種類のゲート(忘却ゲート,入力ゲート,出力ゲート)が,図2のような入出力関係のもとで配置されている.長期記憶を担当するセル$\bm{c}_t$の「忘れる度合い/ 無視する度合い/保持する度合い」を3ゲートの出力値がそれぞれ調整することにより,長期記憶の情報をセルに保持しながら再帰を続けることができる.

各ステップ$t$では,短期記憶$\bm{h}_{t-1}$と観測ベクトル$\bm{x}_t$を結合したベクトル$[\bm{x}_{t},\bm{h}_{t-1}]$を入力に用いて,3つのゲートが調整係数であるゲート値の予測を行う.そして,そのゲート係数を用いてセルのゲート(忘却,入力,出力)を行い,このブロック処理を再帰するのがLSTMの処理である(図2):

\begin{align}
\bm{f}^{(t)} &= \sigma (\bm{W}_{f}[\bm{x}^{(t)},\bm{h}^{(t-1)}]+ \bm{b}_{f})\\
\bm{i}^{(t)} &= \sigma ( \bm{W}_{i}[\bm{x}^{(t)},\bm{h}^{(t-1)}]+ \bm{b}_{i})\\
\tilde{\bm{c}}^{(t)} &= \tanh(\bm{W}_{h}[\bm{x}^{(t)},\bm{h}^{(t-1)}])\\
\bm{c}^{(t)} &= \bm{f}_t \circ \bm{c}^{(t-1)} + \bm{i}_t \circ \tilde{\bm{c}}^{(t)}\\
\bm{o}^{(t)} &= \sigma ( \bm{W}_{o}[\bm{x}^{(t)},\bm{h}^{(t-1)}]+\bm{b}_{o})\\
\bm{h}^{(t)} &= \bm{o}^{(t)} \circ \tanh(\bm{c}^{(t)})
\end{align}

3.2 Gated Recurrent Units(GRU)

Gated Recurrent Units (GRU) [Chung et al., 2014]は, LSTMを少し簡易することで計算効率化したモデルである.

LSTMのゲート機構はパラメータも多く,学習に時間がかかる原因ともなる.そこでGRUでは,以下に列挙した点でLSTMを改良することにより,LSTMと同等以上の精度を保ちながら計算効率向上も達成した:

  • LSTMの入力ゲートと忘却ゲートを更新ゲートに統合した.
  • 更新ゲートの補助としてリセットゲートを使用する.
  • セル状態$\bm{c}^{(t)}$は用いないことにし,(長期記憶も含めて)$\bm{h}^{(t)}$だけに記憶を保持するようにした.

各ステップ$t$の再帰モジュールをGated Recurrent Unitと呼び,それを$t$ステップ分つなげたRNNを,GRUもしくはGRU networkと呼ぶ.

動画認識や言語処理などにおいて,中~高次元の特徴ベクトルを使う場合にはGRUの方が効率が良い.しかし,1次元の生波形をそのまま特徴化しないで解析する場合など,入力特徴ベクトルが低~中次元ベクトルであり,なおかつ系列長もあまり長くない対象であればLSTMで十分でもある.

またGRUは,省略前のLSTMほどの長期記憶性能は持ち合わせいないので,GRUだと性能が出ない場合には,LSTMのほうが予測性能が良くなる場合もある.2者の使い分け意識を持つことは大事である.

以下の図3に,GRUのステップ $t$におけるネットワーク構造を示す.

GRUのブロック構造
図3 GRUのブロック構造

GRUでは,以下のように,リセット(reset)ゲート更新(update)ゲートの2つのゲートを用いることにより,LSTMより簡素な計算数で,潜在状態 $\bm{h}^{(t)}$の回帰を行う:

\begin{align}
\bm{z}^{(t)} &= \sigma (\bm{W}_{z}[\bm{x}^{(t)}, \bm{h}^{(t-1)}]) \\
\bm{r}^{(t)} &= \sigma (\bm{W}_{r}[\bm{x}^{(t)}, \bm{h}^{(t-1)}]) \\
\tilde{\bm{h}}^{(t)} &= \tanh (\bm{W}_{h}[\bm{x}^{(t)}, \bm{h}^{(t-1)} \circ \bm{r}^{(t)})] \\
\bm{h}^{(t)} &= \bm{z}_t \circ \bm{h}^{(t)}+ (1 -\bm{z}^{(t)}) \circ \tilde{\bm{h}^{(t-1)}}
\end{align}

このうち,最後の行がGRUのメインの仕組みに相当している.ここでは予測された次ステップの候補状態$\tilde{\bm{h}}$と前ステップの$\bm{h}^{(t-1)}$の2つを,更新ゲート値 $\bm{z}^{(t)}$を用いた比率$(\bm{z}^{(t)}):(1-\bm{z}^{(t)})$で合成することで,次の$\bm{h}^{(t)} $を予測する.すなわち,異なる長短の時間スケール間での依存関係を,適応的に取得できる仕組みとなっている.

また,リセットゲートはLSTMの忘却ゲートと同じく「前フレームの潜在状態をどれだけ忘れるか(メモリ上から除去するか)」の役割を担当している.

3.3 双方向 RNN

双方向RNN (Bidirectional RNN) は,系列の最初のステップ$$から繰り返して順方向に予想することに加えて,系列の最後のステップ$t=T$からの逆方向の予測も行う「RNNを双方向型へ拡張したモデル」である.

以下の図4に双方向RNNのダイアグラムを示す.

双方向RNNのネットワーク構造
図4 双方向RNNのネットワーク構造.

双方向RNNも,毎フレーム$t$において観測$\bf{x}^{(t)}$を入力して潜在変数をもとに出力$\bf{o}^{(t)}$を予測するところは通常の単方向RNNと同じである.一方で,単方向RNNと異なる点は,潜在変数が順方向$\vec{\bf{h}}^{(t)}$と逆方向の$\cev{\bf{h}}^{(t)}$の2種類が使用される点である.これにより,双方向のコンテキストを集約した出力の予測が可能となる.もう少し正確に述べると,順方向側はステップ1からステップ$t-1$までのコンテキストを知っており,逆方向側はステップ2からステップ$t+1$までのコンテキストを双方向とも学習できた状態で,予測ができるようになる.

3.4 再帰型ニューラル言語モデル

再帰型ニューラル言語モデル
図5 再帰型ニューラル言語モデル.

RNNは,自然言語処理で使われるテキスト予測のモデル「言語モデル」をRNNで形成した再帰型ニューラル言語モデル(RNN言語モデル,RNN-LM) [Mikolov et al., 2010] に応用されている.

RNN-LMは,連鎖させることで1単語の予測だけでなく,テキスト1文全体の生成モデル化も可能になる.よって,音声認識やTTS(text-to-speech)に,機械翻訳や画像キャプション生成などにおいて,文章をエンコード・デコードする目的で幅広く使用されている.

4. まとめ

系列予測モデルのディープニューラルネットワークである「再帰ニューラルネットワーク(RNN)」の基本的な原理を紹介した.

また,RNN基本モデルの「短い系列しかうまく学習できない」弱点を補うための派生系である「LSTM」と,そのLSTMの簡素版である「GRU」について概要だけ述べた.また,RNNに逆方向の隠れ状態も追加した「双方向RNN」についても触れた.

References

  • [Chung et al., 2014] J. Chung, C. Gulcehre, K. Cho, and Y. Bengio. Empirical evaluation of gated recurrent neural networks on sequence modeling. arXiv preprint arXiv:1412.3555, 2014
  • [Hochreiter and Schmidhuber] S. Hochreiter and J. Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.
  • [Mikolov et al., 2010] T. Mikolov, M. Karafiat, L. Burget, J. Cernocky and S. Khudanpur. Recurrent neural network based language model. In INTERSPEECH, 2010.

外部参照リンク

参考書籍

関連記事