1 BPTTの基本原理
Backpropagation Through Time(BPTT)は、リカレントニューラルネットワーク(RNN)の学習に特化した勾配計算手法である。時系列データや逐次データを扱う際に、時間方向にネットワークを展開(unroll)し、標準的な誤差逆伝播法を適用することで、過去の情報と現在の出力との間の依存関係を学習する。BPTTはRNNの訓練において最も広く使われるアルゴリズムであり、その原理は「時間を通じた誤差逆伝播」という直感的な考え方に基づいている。
1.1 RNNの構造と時間展開
RNNは、隠れ状態(hidden state)が時間ステップごとに更新される再帰的な構造を持つ。各時刻 $t$ において、入力 $\mathbf{x}_t$ と前時刻の隠れ状態 $\mathbf{h}_{t-1}$ から、現在の隠れ状態 $\mathbf{h}_t$ が計算される: \[ \mathbf{h}_t = f(\mathbf{W}_{xh}\mathbf{x}_t + \mathbf{W}_{hh}\mathbf{h}_{t-1} + \mathbf{b}_h) \] ここで $f$ は活性化関数、$\mathbf{W}_{xh}$ と $\mathbf{W}_{hh}$ は重み行列、$\mathbf{b}_h$ はバイアスである。BPTTでは、この再帰構造を時間方向に「展開」する。すなわち、$T$ ステップ分のネットワークをコピーして連結し、各時刻の入力を順に与えるフィードフォワードネットワークとみなす。この展開により、各時刻の隠れ層と出力層が一つの大きな計算グラフとして表現され、標準的な逆伝播が適用可能となる。
1.2 順伝播と損失計算
順伝播では、時刻 $t=1$ から $T$ まで順に隠れ状態と出力を計算する。出力層では、各時刻の隠れ状態 $\mathbf{h}_t$ に基づいて出力 $\mathbf{y}_t$ が生成される(例:分類タスクではソフトマックス関数)。損失関数 $L$ は、各時刻の出力と目標値との誤差を累積したものとして定義される: \[ L = \sum_{t=1}^{T} L_t(\mathbf{y}_t, \mathbf{y}_t^*) \] ここで $L_t$ は時刻 $t$ における損失(例:クロスエントロピー)、$\mathbf{y}_t^*$ は目標値である。この総損失が後続の逆伝播の対象となる。
1.3 逆伝播における時間軸の考慮
逆伝播では、最終時刻 $T$ から開始し、各時刻の勾配を計算しながら時間を逆向きに進む。通常のフィードフォワードネットワークと異なり、同一の重み $\mathbf{W}_{hh}$ が複数の時間ステップで共有されているため、勾配は各時刻での影響を累積して計算する必要がある。具体的には、損失 $L$ に対する隠れ状態 $\mathbf{h}_t$ の勾配は、時刻 $t$ 自身の出力誤差からの寄与だけでなく、時刻 $t+1$ 以降のすべての時刻からの逆伝播された勾配の和として得られる。この「時間方向の誤差伝播」がBPTTの核心であり、長期依存関係の学習を可能にする一方で、後述する勾配消失・爆発の原因ともなる。
2 BPTTのアルゴリズム詳細
BPTTのアルゴリズムは、展開された計算グラフ上で連鎖律を適用することで、すべてのパラメータに対する損失の勾配を効率的に計算する。以下にその手順を分解して示す。
2.1 勾配の計算手順
まず、各時刻 $t$ における出力層の誤差 $\delta_t^{(out)} = \frac{\partial L_t}{\partial \mathbf{y}_t}$ を計算する。その後、この誤差を隠れ層に逆伝播し、さらに時間方向に伝播させる。
2.1.1 出力層から隠れ層への誤差伝播
時刻 $t$ における出力層の誤差 $\delta_t^{(out)}$ は、出力活性化関数の微分を介して隠れ層の誤差 $\delta_t^{(h)}$ に変換される。出力層がソフトマックス+クロスエントロピーの場合、$\delta_t^{(h)} = (\mathbf{y}_t - \mathbf{y}_t^*) \cdot \mathbf{W}_{hy}^T$ のような形になる(ただし $\mathbf{W}_{hy}$ は隠れ層から出力層への重み)。この $\delta_t^{(h)}$ は、時刻 $t$ の隠れ層における「現在の出力誤差」を表す。
2.1.2 隠れ層間の時間方向の誤差伝播
隠れ層の誤差は、時刻 $t$ から $t-1$ へと時間を逆行して伝播される。時刻 $t$ における隠れ状態の完全な誤差 $\epsilon_t$ は、出力誤差 $\delta_t^{(h)}$ と、次時刻からの逆伝播誤差 $\epsilon_{t+1}$ の合計として与えられる: \[ \epsilon_t = \delta_t^{(h)} + \epsilon_{t+1} \cdot \frac{\partial \mathbf{h}_{t+1}}{\partial \mathbf{h}_t} \] ここで $\frac{\partial \mathbf{h}_{t+1}}{\partial \mathbf{h}_t} = \mathbf{W}_{hh}^T \, \text{diag}(f'(\mathbf{a}_{t+1}))$ であり、$f'$ は活性化関数の導関数、$\mathbf{a}_{t+1}$ は活性化前の値である。最終時刻 $T$ では $\epsilon_{T+1}=0$ とする。この再帰計算により、各時刻 $t$ の $\epsilon_t$ が得られる。
2.2 パラメータ更新式
各パラメータの勾配は、すべての時刻における局所的な寄与を合計することで得られる。例えば、隠れ層間の重み $\mathbf{W}_{hh}$ の勾配は: \[ \frac{\partial L}{\partial \mathbf{W}_{hh}} = \sum_{t=1}^{T} \epsilon_t \cdot \mathbf{h}_{t-1}^T \] 同様に、入力から隠れ層への重み $\mathbf{W}_{xh}$ の勾配は: \[ \frac{\partial L}{\partial \mathbf{W}_{xh}} = \sum_{t=1}^{T} \epsilon_t \cdot \mathbf{x}_t^T \] 出力層の重み $\mathbf{W}_{hy}$ は各時刻の出力誤差から直接計算される。 これらの勾配を用いて、確率的勾配降下法(SGD)やAdamなどの最適化アルゴリズムでパラメータを更新する。
2.3 計算量とメモリ制約
BPTTの計算量は、時間ステップ数 $T$ に比例する。順伝播では各時刻で行列演算を行うため $O(T)$、逆伝播でも同様に $O(T)$ の時間がかかる。しかし、最も深刻なのはメモリ制約である。逆伝播を行うためには、順伝播時の各時刻の隠れ状態と活性化前の値をすべて保持しておく必要がある。そのため $O(T \times d)$ のメモリ($d$ は隠れ層の次元数)が必要となり、長い系列(例:文章全体や長時間の音声)に対しては実用的でない。この問題を緩和するために、後述する打ち切りBPTTが用いられる。
3 BPTTの課題と対策
BPTTは理論的には任意の長さの依存関係を学習できるが、実際にはいくつかの困難に直面する。主な課題は勾配の消失と爆発であり、これらはRNNの学習を不安定にする。
3.1 勾配消失問題
勾配消失問題は、時間が経つにつれて逆伝播される勾配が指数関数的に小さくなり、遠い過去の情報が学習に寄与しなくなる現象である。これは隠れ層間の再帰重み $\mathbf{W}_{hh}$ の特異値が1より小さい場合に発生する。
3.1.1 長期依存関係の学習困難
勾配消失により、ネットワークは「短期的な依存関係」(例:直前の単語の影響)は学習できても、「長期的な依存関係」(例:文頭の主語と文末の動詞の一致)を学習することが極めて難しくなる。例えば「I grew up in France... I speak French.」のような文では、「France」と「French」の関連を捉えるために多くの時間ステップを遡る必要があるが、勾配消失がこれを阻害する。
3.1.2 活性化関数の選択(tanh、ReLUなど)
活性化関数の選択は勾配消失に大きな影響を与える。伝統的に使われるtanh関数は、飽和領域での導関数がほぼ0になるため勾配消失を促進する。ReLU関数は正の領域で導関数が1であるため勾配の流れを改善するが、負の領域では勾配が0となり(dying ReLU問題)、RNNでは時間方向の勾配が急に途切れる問題が生じる。近年では、勾配消失対策としてLSTMやGRUといったゲート付きアーキテクチャが主流となっている。
3.2 勾配爆発問題
勾配爆発は、逆伝播時に勾配が指数関数的に増大し、パラメータ更新が発散する現象である。これは重みの特異値が1より大きい場合に起こる。
3.2.1 勾配クリッピング
最も簡単かつ効果的な対策は勾配クリッピングである。勾配のノルム(L2ノルム)があらかじめ設定した閾値を超えた場合、その閾値でスケーリングする: \[
| \mathbf{g} \leftarrow \min\left(1, \frac{\text{threshold}}{\|\mathbf{g}\|}\right) \mathbf{g} |
|---|
\] これにより、勾配爆発による発散を防ぎつつ、学習を安定させる。閾値は通常1〜10程度に設定される。
3.2.2 重み正則化
L2正則化や重み減衰(weight decay)を適用することで、重みの大きさを抑制し勾配爆発のリスクを低減する。また、再帰重みの初期値を単位行列付近に設定するというテクニックも知られている。
3.3 実装上の注意点
BPTTの実装では、計算資源の制約や学習の効率性を考慮する必要がある。
3.3.1 打ち切りBPTT(Truncated BPTT)
系列が非常に長い場合、全時間ステップでBPTTを実行するのはメモリと計算時間の面で非現実的である。打ち切りBPTTでは、系列を固定長のサブシーケンスに分割し、各サブシーケンス内でのみ逆伝播を行う。例えば、系列長1000のデータに対して、打ち切り長を100と設定し、100ステップごとに順伝播と逆伝播を繰り返す。この手法はメモリ使用量を劇的に削減するが、打ち切り長を超える依存関係は学習できなくなるというトレードオフがある。
3.3.2 ミニバッチ処理と並列化
BPTTでは、各系列の長さが異なる場合、パディングやバケット処理(同じ長さの系列をまとめる)が必要となる。ミニバッチ処理はGPUの並列計算能力を活用するために重要であり、複数の系列の順伝播と逆伝播を同時に行うことで高速化できる。また、打ち切りBPTTでは、各サブシーケンスが独立に処理できるため、並列化が容易になる。
4 BPTTの拡張と変種
BPTTは基本形のままでも強力だが、様々な拡張や変種が開発されている。
4.1 教師強制(Teacher Forcing)
教師強制は、RNNの訓練時に前時刻の真の出力(目標値)を次の時刻の入力として与える手法である。BPTTでは、順伝播の際にモデルの予測値ではなく真の値を用いることで、誤差の累積を防ぎ学習を安定化させる。ただし、テスト時にはモデル自身の予測を使うため、訓練とテストの分布が異なる「露出バイアス」問題が生じる。この問題に対しては、スケジューリングサンプリング(徐々に真の値から予測値へ切り替える)などの改良が提案されている。
4.2 BPTTと逐次教師あり学習
逐次教師あり学習では、各時刻に目標値が与えられる(例:品詞タグ付け)。BPTTはこの設定に自然に適合し、各時刻の損失を累積して勾配を計算する。一方、教師強制と組み合わせることで、特に初期の学習を促進できる。
4.3 双方向RNNへの適用
双方向RNNは、過去の情報だけでなく未来の情報も利用するため、各時刻で前方向と後方向の2つの隠れ状態を持つ。BPTTを双方向RNNに適用するには、前方向の系列に対して通常のBPTTを、後方向の系列に対して逆向きのBPTT(つまり時間を逆順に展開)を実行する。これら2つの勾配を独立に計算し、最終的にパラメータを更新する。双方向BPTTは自然言語処理のタスク(特に文全体を考慮する必要があるタスク)で効果を発揮する。
4.4 LSTM・GRUへの拡張
Long Short-Term Memory(LSTM)やGated Recurrent Unit(GRU)は、ゲート機構を導入することで勾配消失問題を大幅に緩和したアーキテクチャである。BPTTをLSTMに適用する場合、セル状態と隠れ状態の両方に対して時間方向の誤差伝播を行う。LSTMの内部構造は複雑だが、BPTTの基本原理は変わらず、展開された計算グラフ上で連鎖律を適用する。実際には、LSTMの自己ループ(セル状態)が勾配の流れを保つため、長期依存関係の学習が格段に容易になる。GRUも同様に、BPTTとの親和性が高い。
5 BPTTの応用分野
BPTTはRNNの訓練アルゴリズムとして、時系列データや逐次データを扱う多くの分野で利用されている。
5.1 自然言語処理
自然言語は本質的に逐次的であり、BPTTは以下のようなタスクに広く適用されている。
5.1.1 言語モデル
言語モデルは、与えられた単語列に対して次の単語を予測するタスクである。BPTTを用いてRNN言語モデルを訓練することで、文脈を考慮した確率的な単語生成が可能になる。著名な例として、char-rnn(文字レベルの言語モデル)やWord2Vecと組み合わせたモデルがある。
5.1.2 機械翻訳
Encoder-Decoderモデルでは、入力文をエンコーダ(RNN)で固定長ベクトルに変換し、デコーダ(別のRNN)で翻訳文を生成する。BPTTはエンコーダとデコーダの両方の訓練に用いられる。ただし、固定長ベクトルの情報ボトルネック問題を解決するため、後に注意機構(Attention)が導入され、BPTTと組み合わせて使われた。
5.2 音声認識
音声認識では、音響特徴量の系列から音素や単語の系列を推定する。BPTTを適用したRNN(特にLSTM)は、時間的変動のある音声信号のモデリングに優れており、従来のHMMベースの手法を大きく凌駕する性能を示した。Connectionist Temporal Classification(CTC)と組み合わせることで、入力と出力のアラインメントが不明な場合でもエンドツーエンドの学習が可能になる。
5.3 時系列予測
株価、天気、センサーデータなどの時系列予測において、BPTTで訓練されたRNNは非線形な時間パターンを捉えることができる。特に長期依存関係を必要とするタスク(例:数日先の電力需要予測)ではLSTMやGRUが有効であり、BPTTがその学習を支えている。
5.4 動的システム制御
ロボット制御や自動運転などの分野では、システムの状態が時間的に変化する。BPTTを用いたRNNは、過去の状態と行動から将来の状態を予測するモデル(モデルベース強化学習)の学習に利用される。また、微分可能なプランニングの枠組みでもBPTTが活用されている。
6 BPTTと他の学習アルゴリズムの比較
RNNの学習にはBPTT以外にもいくつかの手法が存在する。それぞれに長所と短所があり、用途に応じて選択される。
6.1 リアルタイムリカレント学習(RTRL)との比較
Real-Time Recurrent Learning(RTRL)は、各時刻で逐次的に勾配を計算するオンライン学習アルゴリズムである。BPTTは全系列を処理した後に逆伝播するオフライン学習であるのに対し、RTRLは時刻ごとに前方方向の感度を更新する。RTRLの利点はリアルタイム性とメモリ効率(過去の状態を保存する必要がない)だが、計算量が $O(n^4)$($n$ は隠れユニット数)と非常に大きいため、実用的には小規模なネットワークに限られる。一方、BPTTは $O(n^2 T)$ と効率的であり、大規模なRNNの訓練に適している。
6.2 拡張カルマンフィルタとの比較
拡張カルマンフィルタ(EKF)は、状態推定と学習を同時に行う手法であり、逐次的なパラメータ更新が可能である。EKFはBPTTよりも収束が速い場合があるが、計算量が $O(n^4)$ とRTRL同様に大きく、非線形性の強いRNNでは線形化誤差が問題となる。BPTTは計算効率に優れ、確率的勾配降下法と組み合わせることで大規模データセットにスケールできる。
6.3 進化的手法との比較
遺伝的アルゴリズムや進化戦略などの進化的手法は、勾配情報を必要とせず、ブラックボックス最適化としてRNNの重みを探索する。勾配消失に悩まされないという利点があるが、高次元のパラメータ空間では探索効率が悪く、学習に膨大な時間がかかる。BPTTは勾配情報を活用するため、局所最適解に陥るリスクはあるものの、大規模ネットワークの学習において圧倒的に高速である。現在の深層学習の実務では、BPTT(およびその派生手法)が事実上の標準であり、進化的手法は特殊なケース(例:勾配が利用できない環境)でのみ用いられる。