再帰ニューラルネットワーク (Recurrent Neural Network)[LSTM, GRUs, 双方向RNN]

0
  • [更新 2020/7/11] LSTMの3.1節の最後に,Understanding LSTM Networksの図についてのコメントと,当時と今のRNNに関する状況の比較コメントを追加.
  • [更新 2020/9/5] 3.1 LSTMの説明について,式の列挙だけだったものを,各ゲートを用いた更新の説明を追加し,詳細化.

1. 概要

この記事では,系列形式のデータをモデル化するために用いられる,深層学習向けのニューラルネットワークである再帰ニューラルネットワーク(Recurrent Neural Network)についてまとめる.基本的なRNNについて2節で解説したあと,3節でRNNの発展モデルとしてLSTM, GRUs, 双方向RNNについてとりあげる.

RNNは「時系列順に各フレームの特徴ベクトル同士が相互依存関係を持ちながら変化する」系列データ(の毎フレームの高次元特徴ベクトル)を対象として,系列の次フレームを予測するモデルを学習する仕組みである.RNNに入力する系列データの例としては,自然言語処理でのテキストデータや,環境音・音声などのオーディオデータや,あるいは動画処理でのアクション・イベントなどが上げられる. RNNはそのような系列全体の時間的変化を,時刻tの潜在変数ベクトル$\bm{h}_t$の変化として学習できる.

また,RNNは再帰(Recurrent)と名づけられている通り,フレーム間の隠れ状態$\bm{h}_t$と$\bm{h}_{t+1}$の変化が1つの関数(ニューラルネット)により表現されている再起更新型のモデルである.前ステップの潜在状態ベクトルと最新フレームの特徴ベクトルをもとに,次フレームにおける新たな潜在状態およびそれに対応した観測を予測することができるので,(長めの)系列の変化を学習するモデルでありながら,再起関数1つでコンパクトに済ませることができる.

1.1 RNNの特徴:過去の系列モデルとの違い

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

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

また,他の重要な利点として,RNNは可変長シーケンス表現を学習できる点があげられる.RNNでは回帰関数で潜在状態の変化が表現されているので,系列の長短が異なるサンプルでも,すべて同一の隠れ状態ベクトル空間$\bf{h}_{t}$へ射影できる.よって,長短の系列長が違うサンプル同士を$\bf{h}_{t}$上で比較することも可能である.

2. RNN の基本型

「1.概要」でも述べたように,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$における観測データの特徴ベクトルである.

RNNは系列長$L$回分,同じ操作を行う「再帰構造」を採用している.まず以下の図1にRNNの状態遷移図を示す.

図1:RNNのダイアグラム.左側は繰り返し方式でRNNの再帰構造を表現したもの,等号より右側は左側の表現を展開して,1ステップずつ個別に処理を表記したもの.青い丸は各ステップ$t$における隠れ状態ベクトル$h_t$を示す.

RNNでは,各ステップ$t$の観測に対し,それまでの全フレームの変遷の結果を表現する内部メモリに相当する潜在状態(hidden state)ベクトル$\bm{h}_t \in \mathbb{R}^d$を更新していくことで系列の変化を再起関数でモデル化する.各ステップ$t$では,(以前の全フレームのメモリである)潜在状態$\bm{h}_t$とステップ$t$の新規観測$\bm{x}_t$の2つを入力として用いて,再帰関数により新たな出力$\bm{o}_{t}$を予測する.すなわち,系列データにおいて,各フレームで予測$\bm{o}_{t}$が正しくなるように学習する(学習については次の2.2節).このあと述べるように,図1左側の繰り返し表現を,図1右側のように展開(unfold)することで,同一再帰関数$T$層から構成される再帰的ニューラルネットとして捉えることができる.

RNNの各ステップ$t$では,線形重みと非線形化層の$f$(ReLUやシグモイド,$\tanh$など)を用いて,以下の2式のように出力$\bm{o}_t $と潜在状態$\bm{h}_t$を順伝搬により更新する:

$$\bm{h}_t = f( \bm{U} \bm{x}_t + \bm{W} \bm{h}_{t-1}) $$

また,各フレームで出力の予測は,以下のように隠れ状態を$V$で線形変換し出力を得る

$$\bm{o}_t= \bm{V}\bm{h}_t $$

言語モデルのように,各フレームの出力をクラス確率ベクトル$\bm{y}_t$にしたい場合は,更にsoftmax関数によって$\bm{o}_t$をクラス確率へ変換する:

$$ \bm{y}_t = softmax(\bm{o}_t)$$

以上がRNNの基本的な処理であるが,具体的な「言語処理」でのRNNでの用途の際に,各変数の役割をイメージしやすくなるよう,登場する3つの変数を具体化して以下にまとめておく:

  • $\bm{x}_t$:入力の特徴表現ベクトル.言語モデルとしてRNNを用いる場合は,単語を表すone-hotベクトル,もしくはword2vecやGloveなどの単語の分散表現ベクトルを用いることが多い.
  • $\bm{h}_t$:潜在変数ベクトル.$t-1$までの状態変化全てを蓄積したメモリーに相当.
  • $\bm{y}_t$ :出力のクラス確率.言語処理系のRNNでは,この出力で次の単語やその分散表現の予測ができる.生の単語one-hotベクトルだと膨大な語彙の超高次元ベクトルになってしまうので,$\bm{x}_t$と同じく分散表現ベクトルの方が好ましい(そうでないとロス関数の計算がつらい).

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

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

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

2.2 RNNの学習

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

ロス関数としては,まず毎フレーム$t$での誤差として,そのフレームでの予測$\hat{\bm{o}_t}$とGround Truth$\bm{o}_t$の間の,クロスエントロピー$E_t$を計算する.その$E_t$を全フレーム分だけ足した各サンプルの合計ロスを,学習データ$N$サンプルあるうち平均した$L$を,RNNのロス関数としても用いる

$$ L(\hat{\bm{y}_t}, \bm{y}_t)= – \bm{y}_t \log \hat{\bm{y}}_t $$

$$ L(\hat{\bm{y}}, \bm{y}) = – \frac{1}{N} \sum_t^{T} L(\hat{\bm{y}_t}, \bm{y}_t) $$

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

RNNの課題「長期記憶ができない」

RNNは長い系列データが対象になるほど勾配消失・勾配爆発が起きやすく,系列データの前半部分をうまく学習できないという課題がある.

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

3. RNNの発展モデル

RNNの基本的なモデルでは学習しづらい「少し長めの系列データ」を学習するためのゲート機構付き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)

ベクトル合成用の重みを入力の値に則して制御するゲート(gate)と呼ばれる変数間調整機構をRNNに追加することで,潜在変数(記憶)の長期伝達も可能にしたRNNの改良型がLSTM(Long-Short Term Memory)である.

RNNはこの長期記憶は勾配消失問題(vanishing gradient problem)のせいでうまくいかず,短い系列長のデータの変化しかうまくRNNには学習できなかった.

それをLSTMでは,RNNの基本形(2節)と同様に短期的な記憶$\bm{h}_t$を用いるのに加えて,記憶(memory) セル(cell)と呼ばれる「長期情報を保持する記憶」の$\bm{c}_t$も追加した.この長短の記憶間の依存関係の変化(調整に用いる係数)をゲート機構を利用して学習できるようになっている.

詳細な処理手順を述べる前に,まず以下の図2にLSTMのネットーワーク構造を示す:

図2:LSTMのステップ$t$におけるネットワーク構造図.緑のブロックは層による操作を表し,青ブロックは要素ごとの操作を表す(concatだけは,ベクトルの結合を示す).

LSTMのセルブロック内では,3種類のゲート(忘却ゲート,入力ゲート,出力ゲート)が図2のような入出力関係のもとで配置されている.各ステップ$t$では,短期記憶$\bm{h}_{t-1}$と観測ベクトル$\bm{x}_t$を結合したベクトル$[\bm{x}_{t},\bm{h}_{t-1}]$を入力に用いて,3つのゲートが調整係数であるゲート値の予測を行い,そのゲート係数を用いてセルのgating(忘却,入力,出力)を行う.

忘却ゲート$\bm{f}_t$ は,セル状態$\bm{c}_{t-1}$から,どのくらいの割合だけ情報を捨てるかを決める(0~1の値):

\begin{equation} \bm{f}_t = \sigma (\bm{W}_{f}[\bm{x}_{t},\bm{h}_{t-1}]+ \bm{b}_{f})\end{equation}

入力ゲート$\bm{i}_t$ は,どの新情報をセルに記憶するかを決定する.また入力ゲート値分だけセルに貯める新情報を$\tilde{\bm{c}}_t$として作成する(tanhにより$\tilde{\bm{c}}_t$は-1から1の値をとる):

\begin{equation}\bm{i}_t = \sigma ( \bm{W}_{i}[\bm{x}_{t},\bm{h}_{t-1}]+ \bm{b}_{i} ) \end{equation}

\begin{equation} \tilde{\bm{c}}_t = \tanh(\bm{W}_{h}[\bm{x}_{t},\bm{h}_{t-1}]+ \bm{b}_{h})\end{equation}

忘却ゲート値と入力ゲート値を用いて,セルの長期記憶$\bm{c}_t$を「忘却量 (長期記憶)+入力量(短期記憶の予測値)」の重み付け和によって更新する:

\begin{equation} \bm{c}_{t} = \bm{i}_{t} \circ \tilde{\bm{c}}_t+ \bm{f}_{t} \circ \bm{x}_{t} \end{equation}

($\circ$はアダマール積で,要素ごとの積)

出力ゲートでは,セルから新情報のうち何を出力すべきかの重み係数を決定する.出力ゲートの値を用いて,次フレームの$\bm{h}_t$の予測を行う:

\begin{equation} \bm{o}_t = \sigma ( \bm{W}_{o}[\bm{x}_{t},\bm{h}_{t-1}]+\bm{b}_{o})\end{equation}

\begin{equation} \bm{h}_t = \bm{o}_t \circ \tanh(\bm{c}_t)\end{equation}

以上がLSTMの順伝搬におけるステップ$t$での挙動である.ゲート機構の導入で長期記憶を更新する際に,どういうタイミングにどのくらいのバランスで短期記憶と長期記憶がインタクションするかが学習される.これにより,短期記憶しか保持できないRNNと比べて,LSTMではやや長い系列の変化も「2つの潜在変数(長期記憶と短期記憶)+3つのゲート関数」を用いて学習させることができる.

[2020/7/12 追記] LTSMのブロック図については,2015年に公開されたcolah’s blogの記事「 Understanding LSTMs」による美しい図による詳細な説明が有名であり,その後はこの記事の図示の方式に習ったRNN/LSTMの図解がとても多い.ただ,LSTMはこの頃はこのような詳細な説明の需要が高かったものの,今となってはこの記事の当時ほどハードルが高い技術ではなく標準知識や標準APIとなり,この記事のレベルほどに中身をつぶさに知る必要はなくなっている.

3.2 Gated Recurrent Units (GRU)

Gated Recurrent Units (GRU) は, LSTMを少し簡易したモデルである.LSTMのゲート機構はパラメータも多く,学習に時間がかかる原因ともなる.そこで,LSTMの各ゲートを結合して単純化し,セルも用いずに$h$だけで似たようなモデルを達成できるようにし,計算効率性を向上させたものがGRUである.各ステップ$t$でのモジュールをGated Recurrent Unitと呼び,それを$t$ステップ分つなげたものなので,GRUsもしくはGRU network と呼ぶ.

動画認識や言語処理など,中~高次元の特徴ベクトルを使う場合にはGRUが効率が良いが,1次元の生波形をそのまま特徴化しないで解析する場合など,入力特徴ベクトルが低~中次元ベクトルでかつシーケンス長もあまり長くない対象であれば,LSTMで十分である.また,GRUだとLSTMよりも長期記憶性能がよくないので,GRUで性能が出ない場合にLSTMのほうが予測性能がよくなる場合もあるので,2者の使い分け意識はが大事である.

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

図3GRU

GRUネットワークでは,以下のようにリセット(reset) ゲート更新(update)ゲートの2つのゲートを用いて,毎ステップ$t$における潜在状態$\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 &= (1 -\bm{z}_t) \circ \tilde{\bm{h}} + \bm{z}_t \circ \bm{h}_{t-1} \end{align}

最後の行がGRUのメインの仕組みに相当しており,ここでは予測された次ステップの潜在ベクトルの候補状態$\tilde{\bm{h}}$と前ステップの潜在ベクトル$\bm{h}_{t-1}$を,更新ゲート値$\bm{z}_t$により比率を決定することで両者を合成して次ステップの$\bm{h}_t $を予測する.すなわち,異なる時間スケール間での依存関係を,適応的に取得できるようになっている.

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

3.3 双方向RNN

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

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

図4 双方向RNN.

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

4. まとめ

系列モデル化のためのニューラルネットワークである,再帰ニューラルネットワークの,基本原理を紹介した.また,RNNの「短い系列しかうまく学習できない」という弱点を補うための派生系である「LSTM・GRUs」や「双方向RNN」について述べた.

References

外部リンク

0