RNN(リカレントニューラルネットワーク)
Recurrent Neural Network (RNN)
概要
RNN(Recurrent Neural Network:リカレントニューラルネットワーク)は、時系列データや系列データを扱うために設計されたニューラルネットワークのアーキテクチャです。通常のフィードフォワードニューラルネットワークとは異なり、RNNは再帰的な結合(ループ構造)を持ち、過去の情報を「隠れ状態(Hidden State)」として保持しながら逐次的にデータを処理します。
この再帰構造により、RNNは可変長の入力系列を処理することができ、自然言語処理、音声認識、時系列予測など、データの順序や文脈が重要となるタスクに適しています。しかし、標準的なRNNには長い系列を処理する際に勾配消失問題が発生しやすいという課題があり、これを解決するためにLSTMやGRUなどの改良版が開発されました。
詳細解説
RNNの基本構造
RNNの基本的な計算は以下の流れで行われます。時刻tにおいて、現在の入力 x_t と前の時刻の隠れ状態 h_(t-1) を受け取り、新しい隠れ状態 h_t を計算します。この隠れ状態が次の時刻のRNNセルに渡されることで、過去の情報が伝播します。数式で表すと、h_t = f(W_h × h_(t-1) + W_x × x_t + b) となります(fは活性化関数、通常はtanh)。
隠れ状態(Hidden State)
隠れ状態はRNNの「記憶」に相当します。各時刻における隠れ状態は、その時点までの入力系列の情報を圧縮して保持しています。例えば、文章を1単語ずつ処理する場合、隠れ状態にはそれまでに読んだ単語の文脈情報が蓄積されます。ただし、標準的なRNNでは隠れ状態のサイズが固定されているため、長い系列の情報を効率的に保持することが困難です。
RNNの展開(Unfolding)
RNNのループ構造は、時間方向に展開して考えると理解しやすくなります。時刻1からTまでの系列を処理する場合、展開されたRNNはT個の層を持つフィードフォワードネットワークのように見えます。ただし、すべての時刻で同じ重みパラメータが共有される(重み共有)点がCNNの畳み込みと類似しています。
BPTT(Backpropagation Through Time:通時的逆伝播)
RNNの学習には、時間方向に展開したネットワークに対して誤差逆伝播法を適用するBPTT(通時的逆伝播)が使用されます。BPTTでは、最終時刻から逆方向に勾配を計算していきます。しかし、系列が長くなると勾配が何度も重み行列で乗算されるため、勾配が指数的に減衰する勾配消失問題や、逆に指数的に増大する勾配爆発問題が発生します。
勾配消失問題と勾配爆発問題
RNNにおける勾配消失問題は、長い系列を処理する際に過去の情報が徐々に失われていく現象として顕在化します。例えば、100単語の文章の先頭の単語の情報が最後の時刻までうまく伝わらなくなります。この問題は1991年にSepp Hochreiterにより詳細に分析されました。勾配爆発問題に対しては、勾配の大きさに上限を設ける勾配クリッピング(Gradient Clipping)が有効な対策です。勾配消失問題に対しては、LSTMやGRUといったゲート機構を持つアーキテクチャが開発されました。
RNNの入出力パターン
RNNは入力と出力の系列長の組み合わせにより、さまざまなパターンのタスクに対応できます。一対多(One-to-Many)は画像からの文章生成、多対一(Many-to-One)は文章の感情分類、多対多(Many-to-Many)は機械翻訳や音声認識に対応します。機械翻訳のような多対多のタスクでは、エンコーダ(入力を隠れ状態に変換)とデコーダ(隠れ状態から出力を生成)を組み合わせたSeq2Seq(Sequence-to-Sequence)モデルが使用されます。
双方向RNN(Bidirectional RNN)
標準的なRNNは過去から未来への一方向のみの情報伝播ですが、双方向RNNは過去から未来への順方向と、未来から過去への逆方向の2つのRNNを組み合わせたアーキテクチャです。これにより、各時刻において前後両方の文脈を考慮した表現が得られます。自然言語処理のタスクで特に有効です。
歴史・背景
RNNの概念は1980年代に遡ります。1986年にDavid Rumelhartらが誤差逆伝播法を発表した後、1990年にJeffrey Elmanが「Elman Network」として、前の時刻の隠れ状態を次の時刻に渡すシンプルなRNNを提案しました。同時期にMichael Jordanも別のタイプのリカレントネットワーク(Jordan Network)を提案しています。
1991年にSepp Hochreiterが博士論文で勾配消失問題を詳細に分析し、標準的なRNNの根本的な限界を明らかにしました。この問題を解決するために、1997年にHochreiterとSchmidhuberがLSTMを提案しました。2014年にはChoらがより単純な構造を持つGRUを提案しています。
2014年頃から、RNNをベースとしたSeq2Seq(Sequence-to-Sequence)モデルが機械翻訳で成功を収め、RNNの実用化が加速しました。しかし、2017年にTransformerが登場して以降、多くの自然言語処理タスクでRNNからTransformerへの移行が進んでいます。それでも、RNNの概念はディープラーニングの基礎として重要であり、一部のタスクでは依然として使用されています。
具体的な事例
- 自然言語処理:文章のテキスト分類(感情分析など)、品詞タグ付け、固有表現認識などのタスクにRNNが使用されてきました。単語を一つずつ処理し、文全体の意味を捉えます。
- 機械翻訳:Seq2Seqモデルを用いた機械翻訳では、エンコーダRNNが入力文を隠れ状態に変換し、デコーダRNNが目標言語の文を生成します。GoogleのNeural Machine Translation(GNMT)がその代表例です。
- 音声認識:音声波形を時系列データとして処理し、テキストに変換するタスクでRNNが活用されています。双方向RNNとCTCロスの組み合わせが広く使われました。
- 時系列予測:株価予測、気象予報、エネルギー需要予測など、過去のデータから未来の値を予測するタスクにRNNが応用されています。
- 音楽生成:音符の系列をRNNで学習し、新しい楽曲を自動生成するプロジェクトが複数存在します。Googleの「Magenta」プロジェクトはLSTMを用いた音楽生成を行っています。
G検定での出題ポイント
G検定では、RNNに関して以下のような内容が出題される傾向があります。
- RNNの再帰構造と隠れ状態の概念
- 時系列データ・系列データの処理に適していること
- 勾配消失問題が発生しやすいこと
- BPTT(通時的逆伝播)の概念
- LSTMやGRUが勾配消失問題への対策として開発されたこと
- Seq2Seq(エンコーダ・デコーダ)モデルの構造
- 双方向RNNの概念と利点
- RNNは「再帰構造(ループ)」により「時系列データ」を処理できるネットワークであることを理解する
- 隠れ状態が過去の情報を蓄積する「記憶」の役割を果たすことを押さえる
- 標準的なRNNは長い系列で勾配消失問題が発生し、長期的な依存関係を学習しにくいことを覚える
- BPTTは時間方向に展開したネットワークに対する誤差逆伝播法であることを理解する
- RNNの限界を解決するためにLSTM・GRUが開発され、さらにTransformerに発展した流れを把握する