
LSTMは「何を覚えて、何を忘れるか」を3つのゲートで賢く制御することで、
数百〜数千ステップ先の情報までちゃんと覚えていられるようにした天才的な仕組みです。
LSTMの内部構造(1時刻あたり)
入力:xₜ(今回の単語やデータ)
前時刻の隠れ状態:hₜ₋₁
前時刻の細胞状態(長期記憶):Cₜ₋₁
→ これらを使って以下の4つの値を作ります。
1–4. LSTMの4つの出力(すべて同じ形:隠れ状態と同じ次元)
| 名前 | 役割 | 数式(簡略版) |
|---|---|---|
| ① 忘却ゲート (Forget Gate) | 「前の長期記憶Cₜ₋₁のどれを忘れるか?」 | fₜ = σ(Wf·[hₜ₋₁, xₜ] + bf) |
| ② 入力ゲート (Input Gate) | 「今回の新しい情報をどれだけ取り込むか?」 | iₜ = σ(Wi·[hₜ₋₁, xₜ] + bi) |
| ③ 新規候補値 (Candidate) | 「今新しく覚えたい内容そのもの」 | C̃ₜ = tanh(Wc·[hₜ₋₁, xₜ] + bc) |
| ④ 出力ゲート (Output Gate) | 「今の内部状態をどれだけ外に出すか?」 | oₜ = σ(Wo·[hₜ₋₁, xₜ] + bo) |
σ = シグモイド(0〜1)→ ゲート開閉用
tanh = ハイパボリックタンジェント(-1〜1)→ 記憶内容用
5. 最終的に決まる2つの状態
(1) 新しい長期記憶(細胞状態)Cₜ
→ 過去の記憶を「忘却ゲートで消して」+「新しい情報を入力ゲートで足す」
Cₜ = fₜ ⊙ Cₜ₋₁ + iₜ ⊙ C̃ₜ
↑ ↑
前の記憶を 新しい記憶を
一部忘れる どれだけ追加するか
(2) 新しい隠れ状態(短期記憶)hₜ
→ 長期記憶を「出力ゲートでフィルタリング」して外に出す
hₜ = oₜ ⊙ tanh(Cₜ)
これが次の時刻に引き継がれます!
超重要ポイント:細胞状態Cₜは「加算」だけで伝わる!
普通のRNNは「hₜ = tanh(W hₜ₋₁ + …)」のように毎回tanhにかけるので勾配が消滅
→ LSTMはCₜ = fₜ×Cₜ₋₁ + iₜ×C̃ₜ の形で「足し算」がメイン
→ 忘却ゲートfₜが1.0に近い限り、勾配がほとんど減衰しない!
これが「長期間の記憶保持」の秘密です。
実際の例でイメージ(文章:「私は 昨日 渋谷 で 友達 と ご飯 を 食べた」)
| 時刻 | 忘却ゲート fₜ | 入力ゲート iₜ | 細胞状態Cₜに何が残るか |
|---|---|---|---|
| 「私」 | 0.9 | 0.8 | 話者が「私」であることを強く記憶 |
| 「昨日」 | 0.95 | 0.7 | 時間が「昨日」であることを追加 |
| 「渋谷で」 | 0.98 | 0.9 | 場所「渋谷」を強く記憶 |
| (中略) | ≈1.0 | ≈0 | 重要な情報をほぼ忘れずキープ |
| 最後の「食べた」 | 0.99 | 0.1 | ここで初めて「私」が主語だと遠く離れた場所から正しく参照可能! |
→ 普通のRNNだと「私」の情報はここまで届かず消えている
可視化図(1セルの中身)
xₜ
↑
┌──────────┬──┴──┬──────────┐
│ │ │ │
fₜ iₜ C̃ₜ oₜ
(忘却) (入力) (候補) (出力)
│ │ │ │
└────┬─────┴──┬──┘ │
│ Cₜ₋₁ ────────────┘
│ │
×│ │+
│ │
Cₜ ◄──────┘
│
tanh
│
× ───► hₜ (次の時刻へ)
↑
oₜ
まとめ:LSTMがすごい理由
- 細胞状態Cₜが「高速道路」のように情報を遠くまで運べる(加算パス)
- 3つのゲートで「忘れる」「覚える」「出力する」を完全にコントロール
- これ一つで「数十〜数百ステップ先の依存関係」も学習可能になった
→ だから2014〜2017年くらいまで、翻訳・音声認識・文章生成のほぼ全てがLSTMでした。今はTransformerが完全に取って代わりましたが、
「小さなデータ量」「リアルタイム性が必要」「メモリが少ない環境」では、
2025年でもまだLSTM/GRUが現役で使われています!
