Re Reference AI

アーキテクチャ

RNNとは

Recurrent Neural Network / 再帰型ニューラルネットワーク

隠れ状態を介して過去の情報を保持しながら系列データを逐次処理するニューラルネットワーク

深層学習系列モデリング

ひとことで言うと

文章や音声のように順番が大事なデータを、前から順に読みながら処理するタイプのAIモデル。

概要

RNNは、時系列やテキストなど系列データを扱うために設計されたニューラルネットワーク。 各タイムステップで入力を受け取ると同時に、直前までの情報を圧縮した「隠れ状態(hidden state)」を保持・更新しながら出力を生成する。 この再帰的な構造により、可変長の系列データを扱え、過去の文脈を考慮した予測が可能になる。 音声認識・機械翻訳・時系列予測など、Transformer登場以前のNLP・時系列タスクにおける主流アーキテクチャだった。 ただし系列が長くなるほど勾配消失・爆発が起きやすく長期の依存関係を学習しにくいという課題があり、この弱点を克服するためLSTMGRUといった改良版が考案された。

背景

通常のフィードフォワード型ニューラルネットワークは固定長の入力しか扱えず、系列の順序情報も明示的にはモデル化できない。 RNNは同じ重みを時間方向に繰り返し適用する再帰構造により、可変長の系列とその順序依存性を扱えるように設計された。

歴史

1982年: Hopfieldがホップフィールドネットワークを発表し、再帰結合を持つニューラルネットワークの先駆けとなる。 1997年: LSTM(Long Short-Term Memory)が長期依存問題を緩和するゲート構造として登場。 2014年: LSTMを簡略化したGRU(Gated Recurrent Unit)が提案される。 2017年: Transformerの登場により、並列化が難しいRNNは主要タスクで徐々に置き換えられていった。

アーキテクチャ

各タイムステップで入力x_tと直前の隠れ状態h_{t-1}を受け取り、重みを共有した変換を適用して新しい隠れ状態h_tを計算する。 単純なRNNは長い系列で勾配消失・爆発を起こしやすく、これを緩和するゲート機構を持つLSTMGRUが広く使われる。

ワークフロー

系列データを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と比べて弱い

比較

  • TransformerTransformerはRNNの逐次処理によるボトルネックを解消し、並列学習を可能にしたアーキテクチャ
  • ニューラルネットワークRNNはニューラルネットワークの一種で、系列データの処理に特化した再帰構造を持つ
  • AttentionAttentionはRNNが抱える長距離依存の情報損失を補うために導入された
  • LSTMLSTMはRNNにゲート機構とセル状態を追加し、長期依存の学習困難を緩和したアーキテクチャ
  • BPTTBPTTは、RNNの重みを学習するための誤差逆伝播法の適用方法
  • GRUGRUは、RNNの勾配消失問題を緩和するために考案されたゲート付きユニットの一種

関連用語

TransformerニューラルネットワークAttentionLSTMBPTTGRU時系列データ隠れマルコフモデル

よくある質問

RNNとTransformerはどちらを使うべき?

現在の大規模タスクでは、並列学習可能なTransformerが主流。 ただし低リソース環境や単純な時系列予測では、LSTMGRUなどRNN系が今も使われる。

参考文献

関連Zenn記事