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

1. RNNの概要

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

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

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

RNNのダイアグラム
図1:RNNのダイアグラム.
(a) 各ステップ$t$の繰り返したをまとめた簡略表示.
(b) 簡略系を,各ステップに展開してきちんと表記したもの.

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は,各フレームで,重み共有が活用されている例).

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

1.1 従来の系列モデルと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つとして分類される.

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 のダイアグラム(重みパラメータあり)
図2 RNNのダイアグラム(重みパラメータあり).各フレームで,同じ重みパラメータ$\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やGRU)や,アテンション機構やメモリー機構などの「DNN・RNNを拡張する,各種仕組み」を用いることで,弱点の解決を図ることになる.逆に言うと,RNN基本モデルは,短くて分岐のない系列データにしか適用しづらいモデルである.

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

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の課題:長期記憶がうまく行えない.

既に述べたように,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が主役になっている).

基本形の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のゲート機構はパラメータも多く,ユニット内の経路数も複雑で多い.そのせいで,BPTTによる学習に,時間が結構かかってしまう難点もあった.

そこで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者の使い分け意識を持つことは大事である.(※ 2022年1月追記.現在ではデータセットの規模が大きい系列系問題では,LSTMやGRUは用いずに,TransformerやBERTなどの巨大系列モデルで解くほうが良い)

以下の図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 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.

外部参照リンク

関連記事

↓ ためになった方は,記事をSNSでシェアをしてくださると,管理人の記事執筆モチベーションが上がります