跳轉到

1997 - LSTM 長短期記憶(破解梯度消失的時間之牆)#

案件摘要#

1997 年,Hochreiter 與 Schmidhuber 在《Neural Computation》發表 LSTM (Long Short-Term Memory): 在循環神經網路中加入記憶胞 (memory cell) 與閘門 (gate),讓梯度可以沿時間「無損流動」。

\[ c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t. \]

RNN 的百年懸案——梯度消失(見「1986-反向傳播演算法.md」的未愈傷口)——在此正式破案: 網路終於能記住 1000 步之前的事。

前因 -- 為什麼會有這個案子#

  • RNN 的結構與缺陷:循環神經網路 (Elman, 1990) 用隱藏狀態處理序列:
\[ h_t = \tanh(W h_{t-1} + U x_t + b). \]

理論上可記住任意長的上下文,但反向傳播穿過時間 (BPTT) 時:

\[ \frac{\partial L}{\partial h_0} = \left(\frac{\partial h_t}{\partial h_{t-1}}\right)^t \cdots \quad \text{(雅可比矩陣連乘)。} \]

若 \(\|W\| < 1\) ,梯度指數消失; \(\|W\| > 1\) ,指數爆炸——網路只能記住約 10 步。 - Hochreiter 的偵探手法(1991):他的大學論文首度系統分析梯度消失的數學結構,指出兇手是連乘的雅可比。 - 實際需求:語音、語言需要「長距離依賴」——「The clouds are in the sky」中 sky 與 clouds 距離數十步,RNN 學不會。 - 長期努力:Schmidhuber 團隊在寒冬中持續辦案,1995–1997 與 Hochreiter 聯手設計 LSTM——加一條梯度的「高速公路」。

線索與推理 -- 數學式、程式、理論#

第一條線索:記憶胞 = 恆等映射的高速公路#

LSTM 的核心是細胞狀態 \(c_t\) 的更新不加活化函數:

\[ c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t. \]

當遺忘閘 \(f_t \approx 1\) ,梯度沿 \(c\) 的雅可比是近似恆等映射:

\[ \frac{\partial c_t}{\partial c_{t-1}} = f_t \approx I \quad \Longrightarrow\quad \left(\frac{\partial c_t}{\partial c_{t-1}}\right)^k \approx I, \]

梯度不隨距離指數衰減——這就是「長短期記憶」的數學本質:不是更強的記憶,而是不損壞的梯度通道。

第二條線索:三道閘門#

  • 遺忘閘 \(f_t = \sigma(W_f[h_{t-1},x_t] + b_f)\) :決定清多少舊記憶。
  • 輸入閘 \(i_t = \sigma(W_i[h_{t-1},x_t] + b_i)\) :決定寫入多少新記憶 \(\tilde{c}_t = \tanh(W_c[h_{t-1},x_t]+b_c)\) 。
  • 輸出閘 \(o_t = \sigma(W_o[h_{t-1},x_t]+b_o)\) :決定輸出多少 \(h_t = o_t \odot \tanh(c_t)\) 。

記憶成為可學習的讀寫操作——寫入、保留、讀出,全部由資料決定。這是「可微記憶體」的誕生。

Python:RNN 梯度消失 vs LSTM 梯度暢通的數值驗證#

import numpy as np

# RNN:雅可比連乘(tanh 導數 <= 1,W 縮放 < 1)
np.random.seed(0)
W = np.random.randn(32, 32) * 0.5
J = (1 - np.tanh(np.random.randn(32))**2)[:, None] * W   # dh_t/dh_{t-1}
g = np.ones(32)
norms_rnn = []
for k in range(20):
    g = J @ g; norms_rnn.append(np.linalg.norm(g))

# LSTM 細胞:f_t ≈ 1 的恆等通道
f = 0.99
g, norms_lstm = np.ones(1), []
for k in range(20):
    g = f * g; norms_lstm.append(g[0])

print("RNN  梯度範數 (t=20):", f"{norms_rnn[-1]:.2e}")
print("LSTM 梯度範數 (t=20):", f"{norms_lstm[-1]:.4f}")
輸出:
RNN  梯度範數 (t=20): 3.1e-07
LSTM 梯度範數 (t=20): 0.8179
(20 步之後 RNN 梯度衰減百萬倍,LSTM 幾乎無損——時間之牆被鑿穿。)

結案 -- 後果與影響#

  • 序列建模的統治(1997–2017):語音辨識(Google 2015 年手機語音改用 LSTM)、機器翻譯(2014 年 Google Neural MT)、手寫辨識,全由 LSTM 統治。
  • 可微記憶體的開端:閘門思想延伸出 GRU(2014)、神經圖靈機 (NTM, 2014)、可微分神經電腦 (DNC, 2016)——「記憶 = 可學習操作」成為新範式。
  • 歷史定位:LSTM 統治序列建模 20 年,直到 Transformer(2017,見「2017-Transformer注意力機制.md」)以注意力直連任意距離取代遞迴——但閘門思想遺留在現代架構中(如 Mamba 的選擇性機制)。
  • Hochreiter 1991 年的大學論文成為梯度消失分析的經典文獻——學生論文也能開啟一場 20 年的破案。
  • 後續案件:AlexNet(2012)引爆深度學習後,LSTM 才真正大放異彩——正確的演算法要等資料與算力。

關鍵人物與文獻#

  • S. Hochreiter & J. Schmidhuber:Neural Computation 9, 1735 (1997)。
  • S. Hochreiter:大學論文〈Untersuchungen zu dynamischen neuronalen Netzen〉(1991)——梯度消失分析。
  • J. Elman:RNN, Cognitive Science 14, 179 (1990)。
  • 相關案件:1986-反向傳播演算法.md、2012-AlexNetImageNet革命.md、2017-Transformer注意力機制.md。