RNNとLSTM — 時間を記憶するネットワーク

文章・音声・株価 — 「順番」に意味があるデータを扱うには、過去を覚えるしくみが要る。ループする隠れ状態、遠い記憶が消えていく勾配消失、そしてゲートで記憶を守る LSTM まで、動かしながら理解します。

1. ループを展開する — 隠れ状態のバケツリレー

普通のニューラルネットは入力を 1 回で処理しますが、RNN(再帰型ニューラルネット)は系列を1 ステップずつ読みます。各ステップで「今の入力 xt」と「直前までの要約 ht−1」を混ぜて、新しい隠れ状態 ht を作り、それを次の時刻の自分に渡す — これがループの正体です。

下のデモの左は「ループを持つセル 1 個」、右はそれを時間方向に展開した図。どちらも同じ計算です。文字が 1 つ入るたびに、隠れ状態(4 本の色バー)が更新されて右へ流れていくのを追ってください。

ループの展開 — 「こんにち」を 1 文字ずつ読む RNN
4 本の色バー=隠れ状態ベクトル h(上向き=正、下向き=負)。左のセルと右の 4 つのセルは同一のセルで、同じ重み W, U を全時刻で使い回しています。最後の h₄ に「こんにち」全体の情報が圧縮されます。
ht = tanh( Wx xt + Wh ht−1 + b ) 全時刻で同じ W を使い回す = 時間方向の重み共有。CNN が空間で行ったことを、RNN は時間で行う
POINT — 「状態」がすべて RNN の出力は入力だけでは決まらない。同じ入力でも、それまでに何を読んだか(h)で結果が変わる。この「状態を持つ」性質こそが系列処理の本質で、学習は展開図の上で誤差逆伝播する BPTT(Backpropagation Through Time)で行う。

2. 遠い記憶が消える — 勾配消失

では長い系列でもうまくいくのか? 下のデモでは、12 ステップの系列の先頭に大事な情報(★)を入れます。単純 RNN では h が毎ステップ tanh と重み行列を通るため、★の成分は指数的に薄まっていきます。

学習時はさらに深刻です。誤差の勾配は展開図を逆向きに流れ、1 ステップ戻るごとに 1 より小さい係数が掛かる。10 ステップも戻ればほぼゼロ — 勾配消失により、「遠い過去との関係」が学習できなくなります。

記憶の劣化と勾配消失 — 単純 RNN と LSTM の対比
上段=隠れ状態の中に残る★の成分(オレンジの濃さ)。下段=終端の損失 L から逆向きに流れる勾配の大きさ。LSTM に切り替えると、セル状態の「足し算の通り道」のおかげで情報も勾配もほぼ保たれます。
∂L/∂h1 ∝ ∏t=2T ∂ht/∂ht−1 1 より小さい係数の掛け算が続くと指数的に 0 へ(例: 0.7 を 11 回掛けると ≈ 0.02)。逆に 1 より大きいと爆発する
注意 — 消えるだけでなく「爆発」もする 係数が 1 より大きい方向では勾配は指数的に増大し、学習が発散する(勾配爆発)。こちらは勾配のノルムに上限を設ける勾配クリッピングという応急処置が効くが、勾配消失には効かない。消失問題の根本解決には構造の変更 — つまり LSTM が必要だった。

3. ゲートが記憶を守る — LSTM

LSTM(Long Short-Term Memory)は、隠れ状態とは別にセル状態 C という「記憶専用のベルトコンベア」を用意しました。C は毎ステップ重み行列を通されるのではなく、掛けて(忘却)・足す(追加)だけで流れていきます。この足し算の通り道が勾配のハイウェイになり、勾配消失を防ぎます。

流れを制御するのが 3 つのゲートです。下の操作盤でバルブを手動で開け閉めして、セル状態と出力がどう変わるか試してください。

LSTM ゲート操作盤 — セル状態の川をバルブで制御する
上=セル状態 C のベルトコンベア。一定間隔で新情報 C̃ が下から届き、C ← f·C + i·C̃ で更新、h = o·tanh(C) が出力される。下のグラフは C と h の履歴。f=1, i=0 にすると記憶が完全保存されるのを確かめてください。
Ct = ft ⊙ Ct−1 + it ⊙ C̃t ,    ht = ot ⊙ tanh( Ct ) 掛け算の連鎖ではなく「足し算の通り道」で C が流れる — これが勾配のハイウェイ
POINT — ゲートは学習で自動制御される 上のデモではバルブを手で動かしたが、実際の f, i, o はシグモイドを通した小さなネットワークの出力(0〜1)で、現在の入力 xt と直前の ht−1 から毎ステップ計算される。「何を忘れ、何を書き込み、何を見せるか」をデータから学習するのが LSTM の核心。ゲートを 2 つに簡略化した GRU もよく使われる。

4. まとめ

一歩先へ — RNN の遺伝子は生きている 現在の言語処理の主役は、系列を並列に処理できる Transformer に移った(RNN は 1 ステップずつしか計算できず並列化しにくい)。しかし「状態を圧縮して持ち運ぶ」という発想は、音声のストリーミング認識や、状態空間モデル(Mamba など)といった最新アーキテクチャの中に生き続けている。ゲートで情報の流れを制御するアイデアも、Transformer の各所に受け継がれた。