系列データを扱うための基本アーキテクチャであるRNNを学ぶ項目です。隠れ状態を再帰的に更新する順伝播、時間方向に展開して勾配を流すBPTT、系列の前後両方向の文脈を使う双方向RNNを理解します。
📖 概要
テキスト・音声・時系列データのように、要素の並び順に意味があるデータを扱うには、過去の入力の情報を保持しながら逐次的に処理する仕組みが必要です。リカレントニューラルネットワーク(RNN)は、各時刻の入力に加えて、1時刻前の自分自身の隠れ状態を入力として受け取る「再帰的な結合」を持つネットワークです。隠れ状態が過去の情報の要約(記憶)として働くため、可変長の系列を同じ重みで処理できます。
本項目のポイントは3つです。まず順伝播の計算では、隠れ状態の更新式と、すべての時刻で同じ重みが共有されるという構造を押さえます。次に逆伝搬の計算(BPTT)では、RNNを時間方向に展開した深いネットワークとみなして誤差逆伝播を適用する方法と、そこで生じる勾配消失・勾配爆発の問題を理解します。最後に双方向RNNでは、過去から未来への処理に加えて未来から過去への処理を並置し、各時刻で前後両方の文脈を利用する拡張を学びます。
🔍 キーワード解説
順伝播の計算
RNNの 順伝播の計算 は、時刻 t の入力 x_t と1時刻前の隠れ状態 h_(t-1) から、新しい隠れ状態 h_t を計算する再帰式で表されます。
h_t = f(W_x * x_t + W_h * h_(t-1) + b) y_t = g(W_y * h_t + c)
f には tanh などの活性化関数、g にはタスクに応じてソフトマックス関数などが使われます。重要なのは、重み W_x(入力から隠れ状態)、W_h(隠れ状態から隠れ状態)、W_y(隠れ状態から出力)がすべての時刻で共有されることです。これにより、系列の長さによらず同じパラメータで処理でき、パラメータ数も系列長に依存しません。隠れ状態 h_t は「時刻 t までの入力系列の要約」として機能し、初期状態 h_0 にはゼロベクトルなどが与えられます。出力の形態はタスクにより柔軟で、各時刻に出力するもの(系列ラベリング)、最終時刻のみ出力するもの(系列分類)などがあります。
逆伝搬の計算(Back Propagation Through Time; BPTT)
逆伝搬の計算(Back Propagation Through Time; BPTT) は、RNNの学習に使われる誤差逆伝播のアルゴリズムです。再帰結合を持つRNNを時間方向に展開(unroll)すると、同じ重みを共有した層が系列長のぶんだけ連なった深い順伝播型ネットワークとみなせます。この展開したネットワークに通常の誤差逆伝播法を適用し、時間を遡って勾配を伝えるのがBPTTです。重みは全時刻で共有されているため、各時刻で計算された勾配を合算して1つの重みの勾配とします。
BPTTでは、勾配が時刻を遡るたびに W_h の乗算と活性化関数の微分の乗算を繰り返し受けます。このため長い系列では、勾配が指数的に小さくなる勾配消失や、逆に指数的に大きくなる勾配爆発が起こりやすく、離れた時刻間の依存関係(長期依存)の学習が困難になります。実務上の対策として、一定の時刻数で展開を打ち切るTruncated BPTT(計算量削減と勾配問題の緩和)や、勾配のノルムに上限を設ける勾配クリッピング(勾配爆発対策)が用いられます。勾配消失への根本的な対処は、次項目のLSTM・GRUといったゲート機構につながります。
双方向RNN
双方向RNN (Bidirectional RNN) は、系列を先頭から末尾へ処理する順方向のRNNと、末尾から先頭へ処理する逆方向のRNNを並置し、各時刻で両方の隠れ状態を結合して出力を計算する構造です。通常のRNNは時刻 t までの過去の情報しか使えませんが、双方向RNNでは時刻 t より後の(未来の)文脈も利用できます。
たとえば文中の単語の品詞や固有表現を判定するタスクでは、その単語より後に続く語が判断の手がかりになることが多く、前後両方向の文脈を使える双方向RNNが有効です。一方で、出力の計算に系列全体が必要になるため、入力を最後まで受け取ってからでないと処理できず、逐次的に未来を予測するオンラインの生成タスクには適さない点に注意が必要です。
📝 試験でのポイント
- 順伝播の更新式 h_t = f(W_x x_t + W_h h_(t-1) + b) の穴埋めと、「全時刻で重みが共有される」という性質は最頻出です
- BPTTの定義(時間方向に展開して誤差逆伝播を適用する)と、重み共有のため各時刻の勾配を合算する点を押さえましょう
- 長い系列で勾配消失・勾配爆発が起こる理由(同じ重み行列と活性化関数の微分が繰り返し乗算される)を説明できるようにしてください
- 対策の対応関係も整理を。勾配爆発 → 勾配クリッピング、計算量・勾配問題の緩和 → Truncated BPTT、勾配消失の構造的対策 → LSTM/GRU(次項目)
- 双方向RNNは「未来の文脈も使える」利点と「系列全体の入力が必要」という制約をセットで覚え、リアルタイム予測に不向きな理由まで答えられるようにしましょう
📚 まとめ
RNNは、隠れ状態を再帰的に更新することで系列データを可変長のまま処理するネットワークで、重みは全時刻で共有されます。学習は時間方向に展開して誤差逆伝播を行うBPTTで行いますが、長い系列では勾配消失・勾配爆発が生じ、クリッピングやTruncated BPTT、さらにはゲート機構による対策が必要です。双方向RNNは順方向と逆方向のRNNを組み合わせ、前後両方の文脈を活用する拡張です。
