RNN の限界と LSTM・GRU のゲート機構
なぜ素のRNNは長い文脈を忘れるのか。その答えは勾配の繰り返し積にあり、ゲートとセル状態がそれを断ち切ります。長期依存を保つ仕組みを原理から掴めます。
- 1.素のRNNはBPTTで同じ重み行列を時刻ぶん繰り返し掛けるため、勾配が指数的に消失・爆発し、数十ステップ離れた依存を学べない。これが構造的な限界の正体。
- 2.LSTMはセル状態という「情報の高速道路」を持ち、忘却・入力・出力の3ゲートで書き込み/保持/読み出しを制御する。セル状態の更新が加算的なため、勾配が掛け算で潰れにくい。
- 3.GRUはセル状態を廃しゲートを更新・リセットの2つに統合した軽量版。パラメータが少なく学習が速い一方、表現力はLSTMにわずかに劣る場面もあり、タスク次第で使い分ける。
素の RNN は何を計算しているか
再帰型ニューラルネット(RNN)は、系列を先頭から1ステップずつ処理し、各時刻で「過去の要約」である隠れ状態 h_t を更新します。基本形は次の1本の漸化式に尽きます。
h_t = tanh(W_h · h_{t-1} + W_x · x_t + b)
y_t = W_y · h_t + b_y
ここで決定的に重要なのは、同じ重み行列 W_h を全時刻で共有して繰り返し適用する点です。h_t は h_{t-1} を通じて h_{t-2}、さらに過去へと依存し、理論上は系列のどこまでも文脈を運べます。RNN の前提となる再帰構造は CNN と RNN で整理しています。ところがこの「同じ行列の繰り返し掛け算」こそが、長期依存を学べない構造的な限界を生みます。
BPTT と勾配消失——限界の数理
RNN の学習は、時間方向に展開したネットワークへ誤差逆伝播を適用する BPTT(Backpropagation Through Time) で行います。時刻 t の損失を遠い過去の h_k(k が t 未満)で微分するとき、連鎖律により隠れ状態どうしのヤコビアンが時刻ぶん積み重なります。
∂h_t/∂h_k = Π (∂h_j/∂h_{j-1}) # j = k+1 .. t、(t-k) 個の積
∂h_j/∂h_{j-1} = diag(tanh'(z_j)) · W_h
問題は、この積が (t-k) 個の項の掛け算になることです。各項は W_h と活性化の微分を含むため、おおまかに W_h のスペクトル半径(最大固有値の大きさ)を ρ とすると、勾配の大きさは ρ^(t-k) 程度で振る舞います。tanh' は最大でも 1(多くの領域で1未満)なので減衰側に働きます。
ρ が 1 未満なら勾配は遠い過去ほど指数的に 0 へ縮む(勾配消失)、1 を超えれば指数的に発散する(勾配爆発)。どちらも「同じ行列の繰り返し積」という RNN 固有の構造から必然的に生じます。同じ現象を層方向で論じたのが 誤差逆伝播法の数理 です。爆発はノルムの上限で抑える勾配クリッピングで対処できますが、消失は勾配そのものが消えるため、クリッピングでは救えません。
勾配消失の実害は明快です。遠い過去 h_k に対する勾配がほぼ 0 になると、「20 ステップ前の単語が今の予測に効く」といった長距離の依存関係を、重みが学習できなくなる。素の RNN が実用上せいぜい 10〜20 ステップ程度の文脈しか保てないのは、このためです。
LSTM のセル状態——勾配の高速道路
LSTM(Long Short-Term Memory)の核心は、隠れ状態 h_t とは別に セル状態 c_t という長期記憶専用の経路を設けたことです。c_t の更新式を見ると、限界を突破した理由が一目で分かります。
c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
⊙ は要素ごとの積です。注目すべきは、c_{t-1} から c_t への主経路が 行列積ではなく加算とゲートによる要素積である点です。∂c_t/∂c_{t-1} = f_t(忘却ゲートの値)となり、勾配は遠い過去まで f_t を掛け続けるだけ。忘却ゲートが 1 に近ければ勾配はほぼ減衰せず、セル状態は文字どおり情報を素通しさせる高速道路として機能します。素の RNN のように W_h を繰り返し掛けて潰す構造を、加算的更新で断ち切ったわけです。
3 つのゲートが制御するもの
セル状態への書き込み・保持・読み出しを制御するのが、0 から 1 の開度を出力する 3 つのゲートです。各ゲートは現在の入力 x_t と前の隠れ状態 h_{t-1} から、シグモイド σ で開度を決めます。
f_t = σ(W_f · [h_{t-1}, x_t] + b_f) # 忘却ゲート:c_{t-1} をどれだけ残すか
i_t = σ(W_i · [h_{t-1}, x_t] + b_i) # 入力ゲート:新情報をどれだけ書き込むか
g_t = tanh(W_g · [h_{t-1}, x_t] + b_g) # 候補値:書き込む内容そのもの(-1..1)
o_t = σ(W_o · [h_{t-1}, x_t] + b_o) # 出力ゲート:c_t をどれだけ読み出すか
h_t = o_t ⊙ tanh(c_t)
役割を分解すると——忘却ゲート f_t は前のセル状態のどの成分を捨て、どれを残すかを決めます(f_t=1 で完全保持)。入力ゲート i_t は新たな候補 g_t のうち何を書き込むかを選び、両者の積 i_t ⊙ g_t がセルへ加算されます。出力ゲート o_t は更新後の c_t のうち、今この時刻の隠れ状態として外に出す成分を選びます。
ゲートが σ(0〜1)なのは「開度=何割通すか」を表すため、要素積でマスクとして働かせる狙いです。一方、書き込む内容 g_t と読み出し tanh(c_t) が tanh(-1〜1)なのは、情報の符号と大きさを表現するため。役割が「制御」と「内容」で分かれている点を押さえると、4 本の式の意味が一気に整理されます。
GRU——ゲートを 2 つに統合した軽量版
GRU(Gated Recurrent Unit)は、LSTM の発想を保ちつつセル状態を廃して隠れ状態 h_t に一本化し、ゲートを更新・リセットの 2 つに減らした軽量モデルです。
z_t = σ(W_z · [h_{t-1}, x_t]) # 更新ゲート
r_t = σ(W_r · [h_{t-1}, x_t]) # リセットゲート
h~_t = tanh(W · [r_t ⊙ h_{t-1}, x_t]) # 候補状態
h_t = (1 - z_t) ⊙ h_{t-1} + z_t ⊙ h~_t
更新ゲート z_t が、LSTM の忘却ゲートと入力ゲートの役割を 1 つで兼ねます。(1 - z_t) で過去を残し、z_t で新情報を書く——保持と書き込みが補完的に連動するのが特徴です。リセットゲート r_t は、候補状態を作るときに過去 h_{t-1} をどれだけ参照するかを制御し、不要になった過去を一時的に無視できます。出力ゲートに相当するものはなく、h_t がそのまま出力されます。
| 観点 | LSTM | GRU |
|---|---|---|
| 状態 | セル状態 c と隠れ状態 h の2系統 | 隠れ状態 h の1系統のみ |
| ゲート数 | 忘却・入力・出力の3つ | 更新・リセットの2つ |
| パラメータ量 | 多い(ゲート4組) | 約3/4で少ない |
| 長所 | 表現力が高く長期依存に強い | 学習が速く小データで過学習しにくい |
| 向く場面 | 長い系列・複雑な依存 | 短〜中程度の系列・計算資源が限られる場合 |
どちらが優れているかはタスク依存で、両者は多くのベンチマークで拮抗します。一般には、まず軽い GRU を試し、長期依存が要で精度が伸び悩むなら LSTM へ、という順序が実務的です。
- 限界の正体:BPTT で
W_hを時刻ぶん繰り返し掛けるため勾配がρ^(t-k)で消失・爆発する。クリッピングは爆発のみ救う。 - LSTM が効く理由:
c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_tの加算的更新で∂c_t/∂c_{t-1}=f_tとなり、勾配が掛け算で潰れない。 - 3ゲートの役割:忘却=保持量、入力=書き込み量、出力=読み出し量。ゲートは
σ、候補はtanh。 - GRU との差:GRU はセル状態なし・2ゲート。更新ゲートが忘却+入力を兼ねる。パラメータが少なく高速。
まとめ:限界とその突破を一枚で
最後に原理を圧縮します。素の RNN の限界は「アルゴリズムの未熟さ」ではなく、同じ重み行列を繰り返し掛けるという再帰構造そのものの帰結でした。LSTM と GRU はこの掛け算の連鎖を、ゲート制御つきの加算的な状態更新へ置き換えることで勾配の通り道を確保し、長期依存の学習を可能にしました。
| 論点 | 実態 | そこから言えること |
|---|---|---|
| RNNの限界 | BPTTでの W_h の繰り返し積 | 勾配消失で長距離依存が学べない |
| 突破の鍵 | セル状態の加算的更新(∂c/∂c=f) | 勾配が掛け算で潰れず素通しできる |
| 制御の主役 | 0〜1のゲートで保持・書込・読出を調整 | 必要な記憶だけを選択的に残せる |
| LSTM対GRU | 3ゲート+セル状態 対 2ゲート一本化 | 表現力と計算コストのトレードオフ |
もっとも、ゲート機構をもってしても RNN 系は逐次処理を免れず、長い系列での並列化と超長距離依存にはなお弱点が残ります。この限界を再帰の放棄と注意機構で乗り越えたのが Transformer であり、その計算原理は Self-Attention の計算 へ続きます。深層化が抱える勾配問題の全体像は ディープラーニング も併せて押さえると、系列モデルの設計判断がより立体的になります。
AI/機械学習 Article
RNN の限界と LSTM・GRU のゲート機構を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
RNN
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
LSTMはセル状態という「情報の高速道路」を持ち、忘却・入力・出力の3ゲートで書き込み/保持/読み出しを制御する。セル状態の更新が加算的なため、勾配が掛け算で潰れにくい。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「RNN / LSTM」に近いか確認する。
- 強みである「素のRNNはBPTTで同じ重み行列を時刻ぶん繰り返し掛けるため、勾配が指数的に消失・爆発し、数十ステップ離れた依存を学べない。これが構造的な限界の正体。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。