RNN
Recurrent Neural Network / 再帰型ニューラルネットワーク
隠れ状態を介して過去の情報を保持しながら系列データを逐次処理するニューラルネットワーク
概要
RNNは、時系列やテキストなど系列データを扱うために設計されたニューラルネットワーク。各タイムステップで入力を受け取ると同時に、直前までの情報を圧縮した「隠れ状態(hidden state)」を保持・更新しながら出力を生成する。この再帰的な構造により、可変長の系列データを扱え、過去の文脈を考慮した予測が可能になる。音声認識・機械翻訳・時系列予測など、Transformer登場以前のNLP・時系列タスクにおける主流アーキテクチャだった。
背景
通常のフィードフォワード型ニューラルネットワークは固定長の入力しか扱えず、系列の順序情報も明示的にはモデル化できない。RNNは同じ重みを時間方向に繰り返し適用する再帰構造により、可変長の系列とその順序依存性を扱えるように設計された。
歴史
1980年代: RNNの基本概念が提案される。1997年: LSTM(Long Short-Term Memory)が長期依存問題を緩和するゲート構造として登場。2014年: LSTMを簡略化したGRU(Gated Recurrent Unit)が提案される。2017年: Transformerの登場により、並列化が難しいRNNは主要タスクで徐々に置き換えられていった。
アーキテクチャ
各タイムステップで入力x_tと直前の隠れ状態h_{t-1}を受け取り、重みを共有した変換を適用して新しい隠れ状態h_tを計算する。単純なRNNは長い系列で勾配消失・爆発を起こしやすく、これを緩和するゲート機構を持つLSTMやGRUが広く使われる。
ワークフロー
系列データを1タイムステップずつ入力 → 隠れ状態を更新 → 各ステップまたは最終ステップで出力を生成 → BPTT(Backpropagation Through Time)により誤差を逆伝播して重みを更新。
コード例
PyTorchでの基本的なRNN層
import torch.nn as nn
rnn = nn.RNN(input_size=10, hidden_size=20, batch_first=True)
output, hidden = rnn(input_sequence)利点
- 可変長の系列データを自然に扱える
- パラメータ数が系列長に依存せず一定(重み共有)
- 時系列の順序情報を明示的にモデル化できる
欠点
- 逐次処理のため学習・推論を並列化しにくい
- 単純なRNNは長い系列で勾配消失・爆発が起きやすい
- 長距離依存の学習がTransformerと比べて弱い
比較
- Transformer — TransformerはRNNの逐次処理によるボトルネックを解消し、並列学習を可能にしたアーキテクチャ
- ニューラルネットワーク — RNNはニューラルネットワークの一種で、系列データの処理に特化した再帰構造を持つ
- Attention — AttentionはRNNが抱える長距離依存の情報損失を補うために導入された
関連用語
よくある質問
RNNとTransformerはどちらを使うべき?
現在の大規模タスクでは並列学習が可能なTransformerが主流。ただし低リソース環境や単純な時系列予測では、LSTM・GRUなどRNN系が今も使われる。
参考文献
- DocumentationPyTorch: torch.nn.RNN