RNN(Recurrent Neural Network, 再帰型ニューラルネットワーク)は、時系列データや自然言語など順序のあるデータを処理するために設計されたニューラルネットワーク。
RNNの基本概念
-
時系列データの処理:
RNNは、テキスト、音声、時系列データなど、順序や時間的な依存関係のあるデータを扱うのに適する -
隠れ状態(hidden state):
過去の情報を記憶し、現在の予測に利用される -
パラメータの共有:
同じパラメータを時間ステップごとに再利用することで、モデルのサイズを抑えつつ、可変長の入力を処理できる
RNNの構造
基本的なRNNは以下の要素で構成される:
- 入力層(Input layer)
- 隠れ層(Hidden layer)
- 出力層(Output layer)
各時間ステップ $t$ において、RNNは以下の計算を行う:
- 隠れ状態の計算:$$h_t = tanh(W_{hh} * h_{t-1} + W_{xh} * x_t + b_h)$$
- 出力の計算:$$y_t = W_{hy} * h_t + b_y$$
ここで、
- $x_t$: 時間tでの入力
- $h_t$: 時間tでの隠れ状態
- $y_t$: 時間tでの出力
- $W_{hh}$, $W_{xh}$, $W_{hy}$: 重み行列
- $b_h$, $b_y$: バイアスベクトル
RNNの問題点
- 時間的な依存関係があるため、並列処理が難しく、学習に時間がかかる
- 長い時間間隔の依存関係を学習するのが難しい(「長期依存性」)
改良版・拡張版
ゲート付きRNN
ゲート機構を導入することで長期依存性の学習を改善し、勾配消失問題を軽減
- LSTM (Long Short-Term Memory)
- GRU (Gated Recurrent Unit)
双方向RNN (Bidirectional RNN)
英→日翻訳など先の情報が助けとなるタスクにおいて、過去と未来の両方の文脈を考慮する
計算:
-
前方向の隠れ状態計算 Forward Hidden State:
$$h_t^{(f)} = \tanh(W_{hh}^{(f)}h_{t-1}^{(f)} + W_{xh}^{(f)}x_t + b_h^{(f)})$$$W_{hh}^{(f)}$ : 前の隠れ状態を新しい隠れ状態に変換するための前方向の重み行列
$W_{xh}^{(f)}$ : 現在の入力を新しい隠れ状態に変換するための前方向の重み行列
$b_h^{(f)} : $は前方向のバイアス項
-
後方向の隠れ状態計算 Backward Hidden State
$$h_t^{(b)} = \tanh(W_{hh}^{(b)}h_{t+1}^{(b)} + W_{xh}^{(b)}x_t + b_h^{(b)})$$$W_{hh}^{(b)}$ : 次の隠れ状態を新しい隠れ状態に変換するための後方向の重み行列
$W_{xh}^{(b)}$ : 現在の入力を新しい隠れ状態に変換するための後方向の重み行列
$ b_h^{(b)}$ : 後方向のバイアス項
-
出力の計算
$$y_t = W_{hy}^{(f)}h_t^{(f)} + W_{hy}^{(b)}h_t^{(b)} + b_y$$$W_{hy}^{(f)}$ : 前方向の隠れ状態を出力に変換するための重み行列
$W_{hy}^{(b)}$ : 後方向の隠れ状態を出力に変換するための重み行列
$b_y$ : バイアス項
補足
最近では、特に自然言語処理タスク分野ではTransformerなどの新しいアーキテクチャがRNNに取って代わりつつある。
具体的には、
- 機械翻訳
- テキスト生成(GPT)
- Q&A
- 感情分析
- 音声認識
などの分野