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

記事を共有する:

1. RNN (再帰型ニューラルネットワーク) とは [概要]

RNN (Recurrent Neural Network, 再帰型ニューラルネットワーク)は,繰り返し処理により簡潔な構造を目指した,「可変長の系列データ」の変化具合を,潜在変数モデルの遷移として学習するニューラルネットワークである.特に,自然言語処理や音響処理・音声認識・音声生成などの「系列データの認識・生成」に用いられるようになった.

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

この記事中では,RNNとその応用のみにフォーカスし,その後のRNNの応用や発展は説明対象として除外しているが,RNNはのちにRNN言語モデルや,そのEncoder-Decoder版である系列変換モデル (seq2seq with attention)にも使用されていく意味でも,RNNは非常に重要な技術だと言える.

RNNのダイアグラム
図1. RNNのダイアグラム

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

つまり,RNNの肝となるアイデアは「同じ重み$\bm{W}$で,毎フレーム$\bm{h}^{(t)}$の更新を行う」点にある(図1).のちの図2で,具体的に重みパラメータも表示している.再帰の存在しない順伝搬ニューラルネットワーク(FFNN)では,各層ごとに異なる重みを学習するが,RNNでは同じ重みを再利用する.

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

※ RNNは,各フレームで,重み共有が活用されている1例

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

ただし,Transformer登場後は,NLPなどトークン化するドメインでの系列モデリングの役割はTransformerが主役になっている.連続値データが対象の場合は,ひきつづきRNNが活躍する.

1.1 記事の構成

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

1.2 従来の系列モデルとRNNの違い

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の構造を理解しやすくなる.RNNに対して,再帰構造を用いないで,異なる層による順伝搬を直列に実行していくニューラルネットワークのことを順伝搬ニューラルネットワーク (Feed Forward Neural Network)と呼びわける.

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

2. RNNの基本モデル

2節では,まずRNNの構成要素である,再帰・繰り返し(Recurrence)記憶(Memory)を用いた,基本的な更新式について述べる(2.1節).その後,BPTTを用いた学習方法を,簡単にだけ述べる(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(再帰型ニューラルネットワーク) のダイアグラム(重み表示あり)
図2. RNN(再帰型ニューラルネットワーク)のダイアグラム(重み表示あり)

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は「各フレーム$t$の更新では,毎回同一のパラメータを共有しており,なんども同じことを繰り返す」という省パラメータ設計である.よって,学習するデータの系列長が長くとも,小規模なモデルで済ますことができる.もしも,各ステップ$t$で,別々の再帰関数を用意すると,モデルのパラメータ数が膨大になってしまい,学習できなくなる.

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

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

RNN基本モデルでは,図1-右図の展開図を元に,ステップの系列逆方向に沿って,3つのパラメータ行列$\bf{U}, \bf{W}, \bf{V}$に対する誤差の逆伝播を行う.このRNNの学習方法を,時間方向逆伝播(Back Propagation Through Time) と呼ぶ.

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

\[
\mathcal{L}_{CE}(\hat{\bm{y}^{(t)}}, \bm{y}^{(t)})= – \bm{y}^{(t)} \log \hat{\bm{y}}^{(t)} \tag{2.4}
\]

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

\[
\mathcal{L}(\hat{\bm{y}}, \bm{y}) = – \frac{1}{N} \sum_t^{T} L(\hat{\bm{y}^{(t)}}, \bm{y}^{(t)}) \tag{2.5}
\]

BPTTでは,式(2.5)の損失関数を用いて,系列の最後の$t=T$から$t=1$の逆方向に,ステップ$t$ごとに誤差$L(\hat{\bm{y}^{(t)}}, \bm{y}^{(t)})$の逆伝播を行う.

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

既に述べたように,RNN基本モデルでは,長い系列データが学習対象となるほどに,BPTTによる学習時に,途中で勾配消失・勾配爆発が起きやすい.よって「短めの系列変化しかうまく学習できない」という課題がある.

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

3. RNNの発展モデル

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

ちなみにTransformer登場前までの,NLP,機械翻訳,Vision and Languageなどにおいて,更に長期の系列変化をモデル化する目的で複数階層化をおこなった「階層化LTSM」を用いることも多かった.ただ,そのRNNの階層化については,この記事では触れないものとする.当時2014~2017年あたりの,「NLPにおけるRNN階層化」について知りたい方は,日本語の書籍だとこのテキストが一番参考になる.

3.1 LSTM (Long Short-Term Memory)

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

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

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

LSTMのブロック構造
図2:LSTMのブロック構造

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

3.2 GRU (ゲート付き再帰ユニット)

GRUブロック内の2種類のゲート
図3. GRUブロック内の2種類のゲート

Gated Recurrent Units (ゲート付き再帰ユニット) [Chung et al., 2014]は,LSTMを少し簡易化することで,計算効率化したモデルである.

LSTMのゲート機構は,パラメータ数も多く,ユニット内の経路数も複雑で多い.そのせいで,BPTTによる学習に,時間が結構かかってしまう難点もあった.そこでGRUでは,以下に列挙した点でLSTMを改良し,LSTMと同等以上の精度を保ちながらも,計算効率の向上を達成した:

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

各ステップ$t$の再帰モジュールをGated Recurrent Unit (ゲート付き再帰ユニット)と呼び,そのユニットを$t$ステップ分つなげたRNNのことを,GRU(s) もしくはGRU networkと呼ぶ.

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

※ 2022年1月追記.現在ではデータセットの規模が大きい系列系問題では,LSTMやGRUは用いずに,TransformerやBERTなどの巨大系列モデルで解くほうが良い.

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 RNN Language Model (再帰型ニューラル言語モデル)

再帰型ニューラル言語モデル
図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の階層化」については触れなかった.最後に,NLPでの応用である「再帰型ニューラル言語モデル」についても概要だけ触れた.

参考書籍

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.

外部参照リンク

関連記事