(Day 26) 最小生成樹 (Minimum Spanning Tree)
在前幾天,我們學習了最短路徑問題 (Shortest Path),例如 Dijkstra、Bellman-Ford、Floyd-Warshall、A*,今天要介紹的則是圖論中的另一個核心問題 —— 最小生成樹 (Minimum Spanning Tree, MST)
在前一篇,我們介紹了循環神經網路 (RNN),並指出了它在處理序列資料時的強大之處:透過「隱藏狀態」將前後資訊連結起來。然而,我們同時也看到了 RNN 的最大瓶頸——梯度消失與梯度爆炸,使得它在長距離依賴 (long-term dependency) 的學習上表現不佳。
為了解決這個問題,1997 年 Sepp Hochreiter 和 Jürgen Schmidhuber 提出了 長短期記憶網路 (LSTM)。LSTM 是 RNN 的改良版本,透過特殊的「記憶單元 (Memory Cell)」與「門控機制 (Gating Mechanism)」,大幅減緩了梯度消失的問題,成為自然語言處理 (NLP) 與序列建模的經典架構之一。
LSTM 的設計目標是:
它在傳統 RNN 的基礎上,加入了兩個關鍵設計:
一個 LSTM 單元 (cell) 主要包含三個門與一個記憶單元:
遺忘門 (Forget Gate)
$$ f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) $$
輸入門 (Input Gate)
$$ i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) $$
$$ \tilde{C}t = \tanh(W_C \cdot [h{t-1}, x_t] + b_C) $$
更新記憶單元 (Cell State Update)
$$ C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t $$
輸出門 (Output Gate)
$$ o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) $$
$$ h_t = o_t \odot \tanh(C_t) $$
其中:
這樣的設計,讓 LSTM 能精確控制「要記住什麼、要忘掉什麼、要輸出什麼」。
可以把 LSTM 想成一個「高級筆記本」:
這樣一來,LSTM 就能在長序列中保持「重要資訊」,而不會像傳統 RNN 那樣很快就遺忘。
特性 | RNN | LSTM |
---|---|---|
記憶方式 | 單一隱藏狀態 $h_t$ | 記憶單元 $C_t$ + 隱藏狀態 $h_t$ |
長期依賴 | 容易梯度消失 | 能有效捕捉長距離依賴 |
訓練穩定性 | 差 | 較好 |
計算成本 | 較低 | 較高 (參數更多) |
常見應用 | 短序列 | 長序列、語言模型、翻譯 |
長短期記憶網路 (LSTM) 是序列建模領域的一個重大突破,它在 RNN 的基礎上引入記憶單元與門控機制,解決了梯度消失的難題,使得模型能夠捕捉長距離依賴。
雖然今天 Transformer 已經在 NLP 等領域逐漸取代 LSTM,但在許多應用中(如時間序列、邊緣運算環境),LSTM 依舊有不可忽視的價值。對深度學習的學習者來說,LSTM 是一個必經的里程碑,因為它不僅解釋了「如何記住過去」,也揭示了「如何選擇性遺忘」的重要性。