AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
33/100 第四週:📌 循環神經網路 RNN
33.梯度消失與長短期記憶 LSTM 💡 解決 RNN 的遺忘問題!
________________________________________
✅ 問題導入:RNN 忘太快了!
RNN 雖然能記住短時間內的資訊,但當序列太長時,就會出現:
• 梯度消失(Vanishing Gradient)
• 梯度爆炸(Exploding Gradient)
📌 結果就是:前面的資訊還沒處理完,就在學習過程中「淡忘」了!
________________________________________
📉 為什麼會梯度消失?
在反向傳播(BPTT)時,參數會不斷乘上導數(<1),
當序列長度一拉長,這些值就會變得極小:
δt=δt+1⋅W⋅f′(ht)
這條公式 描述了 RNN 在反向傳播時的梯度遞迴關係,是 BPTT(時間反向傳播)中的關鍵步驟。它表示當前時間步的誤差梯度 δt來自下一步的誤差 δt+1,經由遞迴權重 W 傳回,並乘上激活函數對隱藏狀態的導數 f′(ht)。這樣的誤差鏈條讓模型能夠逐步修正序列中的每個時間步,但也因此容易出現梯度消失或爆炸的問題,特別在處理長序列時,需要更穩定的單元如 LSTM 或 GRU 來改善。
❌ 結果:早期訊息的誤差幾乎傳不回去 → 模型「記不住久遠的記憶」。
________________________________________
💡 解法登場:LSTM!
LSTM(Long Short-Term Memory)是一種改良的 RNN 結構,
由 Hochreiter & Schmidhuber 於 1997 年提出,能記得長期資訊,又不遺忘短期關鍵!
________________________________________
🧠 LSTM 與 RNN 的最大不同:
RNN:只有一條「隱藏狀態 h」
LSTM:多了一條「記憶單元 c(Cell State)」,可以「帶著記憶走很久」
________________________________________
🧩 LSTM 結構簡圖(每個時間步 t):
┌────────────┐
xt ──►──►│ Forget │──────────┐
└────────────┘ ▼
┌────────────┐ ┌────────┐
xt ──►──►│ Input Gate │─►───│ Cell c │─────►─── ct
└────────────┘ └────────┘
┌────────────┐ │
xt ──►──►│ Output Gate │─────────┘
└────────────┘ → ht
這張圖示描繪的是 LSTM(長短期記憶網路)單元的結構流程圖,顯示 LSTM 如何透過三個核心「閘門」機制來控制資訊的流動與記憶的更新:
• Forget Gate(遺忘閘門):決定要遺忘多少先前單元狀態(ct−1)的資訊;
• Input Gate(輸入閘門):決定要將多少新輸入資訊(xt)寫入記憶單元 ct;
• Cell(記憶單元):保存並更新長期記憶狀態 ct ;
• Output Gate(輸出閘門):控制記憶的哪一部分要輸出作為當前時間步的隱藏狀態 ht。
透過這種設計,LSTM 能夠保留重要資訊、忽略不相關內容,並有效解決 RNN 在處理長序列時的梯度消失問題,廣泛應用於語音辨識、機器翻譯與時間序列預測等任務。
✅ 加法與乘法設計可避免梯度消失!
________________________________________
🏁 LSTM 的學習邏輯(每步摘要):
1. 忘記不重要的記憶(forget gate)
2. 選擇性接收新資訊(input gate)
3. 更新記憶(cell state)
4. 根據目前記憶輸出(output gate)
________________________________________
⚙️ TensorFlow / Keras 建立 LSTM 模型:
python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential([
LSTM(128, input_shape=(100, 64)), # 100 時間步、64 特徵
Dense(1, activation='sigmoid')
])
這段程式碼建立了一個以 LSTM(長短期記憶網路)為核心的序列模型,用於處理具有時間依賴性的資料。輸入資料的形狀為 (100, 64),代表每筆樣本是一個長度為 100 的序列,每個時間步包含 64 維特徵;LSTM(128) 表示使用 128 個記憶單元來學習序列中的時間模式與長期依賴;接著透過一個 Dense 全連接層並使用 sigmoid 激活函數輸出一個介於 0 和 1 的機率值,適合應用於二分類任務,如情感分析、異常偵測或趨勢預測等。
📌 可用於情感分析、股價預測、時間序列分類等。
________________________________________
🔄 LSTM vs RNN 比較表:
· 記憶範圍
· RNN:適合短期記憶
· LSTM:可兼顧長期與短期記憶
· 梯度消失問題
· RNN:容易發生梯度消失或爆炸
· LSTM:透過門控與記憶單元機制,幾乎解決此問題
· 結構複雜度
· RNN:結構簡單
· LSTM:包含輸入門、遺忘門、輸出門及記憶單元,結構較複雜
· 適用任務
· RNN:短文本、序列標記(如 POS tagging、簡單時間序列)
· LSTM:長文本、機器翻譯、語音辨識、時序預測等需長期依賴的任務
________________________________________
🎯 小結與啟示:
✅ RNN 容易忘記長期依賴 → 需要 LSTM 來強化記憶能力
✅ LSTM 透過三道門設計,有效控制哪些該記、該忘、該輸出
✅ 幾乎所有 NLP、語音、時序模型都用 LSTM 或其變種(GRU、BiLSTM)