博客 / 詳情

返回

吳恩達深度學習課程五:自然語言處理 第一週:循環神經網絡 (六)長短期記憶 LSTM

此分類用於記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:

  1. 原課程視頻鏈接:[雙語字幕]吳恩達深度學習deeplearning.ai
  2. github課程資料,含課件與筆記:吳恩達深度學習教學資料
  3. 課程配套練習(中英)與答案:吳恩達深度學習課後習題與答案

本篇為第五課的第一週內容,1.10的內容以及一些相關基礎的補充。


本週為第五課的第一週內容,與 CV 相對應的,這一課所有內容的中心只有一個:自然語言處理(Natural Language Processing,NLP)
應用在深度學習裏,它是專門用來進行文本與序列信息建模的模型和技術,本質上是在全連接網絡與統計語言模型基礎上的一次“結構化特化”,也是人工智能中最貼近人類思維表達方式的重要研究方向之一。
這一整節課同樣涉及大量需要反覆消化的內容,橫跨機器學習、概率統計、線性代數以及語言學直覺。
語言不像圖像那樣“直觀可見”,更多是抽象符號與上下文關係的組合,因此理解門檻反而更高
因此,我同樣會儘量補足必要的背景知識,儘可能用比喻和實例降低理解難度。
本篇的內容關於長短期記憶 LSTM,它和 GRU 一樣,是成功緩解 RNN 的長距離依賴問題且流行至今的技術。

1. 什麼是 LSTM(Long Short-Term Memory)?

在 GRU 中,我們已經看到:通過門控機制對信息流進行選擇性控制,確實可以顯著緩解傳統 RNN 的長距離依賴問題
無論是更新門對歷史信息的保留,還是重置門對當前輸入的強調,本質上都是在回答同一個問題:哪些信息值得被繼續傳遞,哪些可以被遺忘。

然而,從更長時間跨度的建模需求來看,GRU 仍然存在一個結構上的侷限:它依然只有單一的隱藏狀態來同時承擔“短期計算結果”和“長期記憶載體”這兩種角色。
這意味着,即便引入了門控機制,不同時間尺度的信息仍然被迫混合在同一條狀態通道中傳遞,在極長序列或精細時序控制的場景下,這種耦合仍可能限制模型的表達能力。

LSTM便能應對這類問題,早在 1997 年,Hochreiter 和 Schmidhuber 在論文:Long Short-Term Memory中,便從理論層面系統性地分析了 RNN 中梯度消失的問題,並給出了一種結構性解決方案:通過顯式引入一條專門用於長期信息傳遞的記憶單元(cell state),並配合精細設計的門控結構,使得關鍵信息可以在長時間跨度內幾乎不受干擾地向前傳播。

這裏要説明一點,你會發現:從時間順序上看,LSTM 的提出早於 GRU
LSTM 是最早從結構層面系統性解決 RNN 長距離依賴問題的門控循環單元。
在上一篇我們説 GRU 可以看作 LSTM 的一種簡化形式,正是因為它在 LSTM 的基礎上合併了部分門控結構,取消了顯式的記憶單元,用更緊湊的形式實現了相似的建模目標。

也正因為這種簡化,GRU 在參數數量、計算開銷以及工程實現複雜度上都更為友好。
因此,在許多實際任務中,當序列長度並未極端拉長,或對長期記憶的精細控制要求不高時,GRU 往往能夠以更低的成本獲得與 LSTM 接近的性能。這也是為什麼,儘管 LSTM 在理論上具備更強的表達與記憶能力,結構更簡單的 GRU 仍然在大量 NLP 與時序建模場景中被廣泛採用

同樣簡單過了過歷史,下面我們來展開介紹。

1.1 GRU 的理論侷限

在 GRU 中,我們已經看到:通過引入更新門和重置門,模型不再被動地“記住一切”,而是學會了選擇性保留與選擇性使用歷史信息
這使得 RNN 在長序列建模中的表現得到了顯著改善。

但如果我們繼續追問一個問題:這些被“精心篩選”的歷史信息,到底被存放在哪裏?
答案是:仍然在同一個隱藏狀態裏。

也就是説,在 GRU 中:隱藏狀態既承擔當前計算結果,又承擔長期記憶載體
這樣做的結果就是我們剛剛提到的:所有信息,無論時間尺度長短,最終都要“擠”在同一個向量中傳遞,可能限制模型的表達能力。

在多數任務中,這已經足夠有效,但在極長序列、精細時序控制或長期語義一致性要求很高的場景下,這種“混合存儲”仍然可能成為瓶頸。
image.png

1.2 LSTM 的記憶細胞

實際上,LSTM 的設計就能很好的解決剛剛的混合存儲問題。
它引入了一個結構層面的改變不再讓同一個狀態同時負責“長期記憶”和“短期計算”。

為此,LSTM 明確區分了兩條信息通道:

  • 細胞狀態(cell state) \(c^{}\) → 專門負責長期信息的存儲與傳遞。
  • 隱藏狀態(hidden state) \(a^{}\) → 負責當前時刻的輸出與短期計算。

你可以把它理解為:

隱藏狀態是“當前腦子裏在想什麼”,
細胞狀態是“一條几乎不被打擾的長期備忘錄”。

這也是 LSTM 名字中 Long Short-Term 的含義: 長期信息(Long-Term)和短期信息(Short-Term)在結構上被顯式區分了。
image.png
打個比方來總結 GRU 和 LSTM 的差別:GRU像是在一張紙上反覆修改內容,LSTM則像是單獨準備了一本筆記本

1.3 LSTM 的門控機制

既然引入了專門的記憶細胞來作為 LSTM 中的長期記憶通道,新的問題自然出現了:這條記憶,什麼時候該保留? 什麼時候該更新?什麼時候該輸出給當前計算使用?

答案依然是:門控機制
簡單來説,LSTM 通過三道門來精細控制長期記憶:

  1. 遺忘門(Forget Gate):決定舊記憶保留多少。
  2. 輸入門(Input Gate):決定新信息寫入多少。
  3. 輸出門(Output Gate):決定當前時刻對外暴露多少記憶。

image.png

也正是因為這些門的存在, cell state 才能夠在時間維度上穩定流動,而不被頻繁改寫
有了 GRU 的基礎後,我們就不再單獨逐個展開每道門的語義了,在下面的實現部分再來詳細展開它們的作用邏輯。

2. 如何實現 LSTM?

在之前的 GRU 中,我們已經看到:門控的本質不是增加複雜度,而是為“信息是否繼續存在”提供可學習的選擇權。

LSTM 在這個思想上更進一步:它不再試圖讓同一個狀態同時承擔“長期記憶”和“當前計算”, 而是顯式引入了一條几乎線性傳播的長期記憶通道——細胞狀態 \(c^{\langle t \rangle}\),並通過遺忘門,輸入門和輸出門來控制細胞狀態。
瞭解了基本原理後,現在就來看看,在一個時間步 \(t\),一個標準 LSTM 單元是如何實現的。
實際上,它只是比 GRU 多了些步驟,在有了 GRU 的基礎後,LSTM 的實現並不難理解,先擺出它的單元結構圖如下:
image.png
要強調的還是我們介紹的計算順序是邏輯上的先後順序,實際上很多步驟都是可以同步計算的。

2.1 計算遺忘門(Forget Gate)

LSTM 的第一步,是計算 遺忘門 \(f^{\langle t \rangle}\)

它的作用就相當於 GRU 的重置門:對上一時刻的細胞狀態 \(c^{\langle t-1 \rangle}\) 進行“按比例保留”。
但要注意,這裏是“細胞狀態” 而不是 ”隱藏狀態“。
過程如下:
image.png
計算公式還是是線性組合:

\[f^{\langle t \rangle} = sigmoid\big( W_{xf} x^{\langle t \rangle} + W_{af} a^{\langle t-1 \rangle} + b_f \big) \]

遺忘門值的含義是這樣的:

  • \(f^{\langle t \rangle}_i \approx 1\):第 \(i\) 個記憶單元幾乎完全保留
  • \(f^{\langle t \rangle}_i \approx 0\):第 \(i\) 個記憶單元被主動遺忘

這裏出現了新的內容需要説明:細胞狀態 \(c^{\langle t \rangle}\) 與隱藏狀態 \(a^{\langle t \rangle}\) 在維度上是一致的
若隱藏狀態是一個 \(d\) 維向量,那麼細胞狀態同樣包含 \(d\)記憶單元
因此,遺忘門 \(f^{\langle t \rangle}\) 的每一個分量 \(f_i^{\langle t \rangle}\),並不是控制“一整段記憶”,而是獨立控制第 \(i\) 個記憶單元在時間維度上的保留比例

再結合一下 GRU ,你會發現,這段邏輯在GRU中以重置門的形式完整保留了。

2.2 計算輸入門(Input Gate)

LSTM 的第二步,是計算 輸入門 \(i^{\langle t \rangle}\)

它的作用是:決定當前步生成的新信息有多少可以寫入細胞狀態 \(c^{\langle t \rangle}\)
換句話説,它控制了“新記憶更新比例”,在功能上類似 GRU 的更新門,但在 LSTM 中,它只負責 新信息寫入,而歷史信息保留由遺忘門控制。

過程如下:
image.png
公式表示為:

\[i^{\langle t \rangle} = sigmoid\big( W_{xi} x^{\langle t \rangle} + W_{ai} a^{\langle t-1 \rangle} + b_i \big) \]

輸入門值的語義同樣清晰:

  • \(i_i^{\langle t \rangle} \approx 1\):第 \(i\) 個記憶單元幾乎全部接收新信息
  • \(i_i^{\langle t \rangle} \approx 0\):第 \(i\) 個記憶單元幾乎不寫入新信息

同樣地,輸入門 \(i^{\langle t \rangle}\) 與細胞狀態 \(c^{\langle t \rangle}\) 的維度一致,每個分量獨立控制對應記憶單元的寫入比例。
這樣做可以保證 長期記憶在時間維度上既保留重要信息,又按需更新新內容,實現更精細的記憶管理。

2.3 計算候選細胞狀態(Candidate Cell State)

還是要先強調一點,這是“候選細胞狀態”,不是“候選隱藏狀態”。到這一步,隱藏狀態還沒有出場。

在計算完輸入門 \(i^{\langle t \rangle}\) 之後,LSTM 的下一步是生成 候選細胞狀態 \(\tilde{c}^{\langle t \rangle}\)
它的作用是:表示當前步的新信息內容,由當前輸入 \(x^{\langle t \rangle}\) 和上一時刻隱藏狀態 \(a^{\langle t-1 \rangle}\) 共同決定,但尚未寫入細胞狀態 \(c^{\langle t \rangle}\)
換句話説,候選細胞狀態就是 準備好可以寫入的“新記憶”
計算過程如下:
image.png

公式表示為:

\[\tilde{c}^{\langle t \rangle} = \tanh\big( W_{xc} x^{\langle t \rangle} + W_{ac} a^{\langle t-1 \rangle} + b_c \big) \]

到後下一步你就會發現:候選狀態本身並不直接影響最終輸出,它只是表示“有多少新記憶”,而輸入門 \(i^{\langle t \rangle}\) 才決定“寫入多少新記憶“。
這段設計不同於 GRU:LSTM 將“新信息生成”和“新信息寫入”明確分離,方便通過門控精細控制記憶更新。

2.4 更新細胞狀態

現在我們已經有了這樣東西:

  • 上一時刻的細胞狀態 \(c^{\langle t-1 \rangle}\)(舊長期記憶)
  • 遺忘門 \(f^{\langle t \rangle}\)(保留比例)
  • 輸入門 \(i^{\langle t \rangle}\) 與候選記憶 \(\tilde{c}^{\langle t \rangle}\)(新信息)
    LSTM 會用下面這個核心公式來更新長期記憶:

\[c^{\langle t \rangle} = f^{\langle t \rangle} \odot c^{\langle t-1 \rangle} + i^{\langle t \rangle} \odot \tilde{c}^{\langle t \rangle} \]

image.png

這個公式的意義也非常直觀:

  • 第一項:保留多少舊記憶
  • 第二項:寫入多少新記憶
    也正是因為這裏存在一條近似“直通”的路徑,讓梯度可以直接從 \(c^{\langle t \rangle}\) 回傳到 \(c^{\langle t-1 \rangle}\)細胞狀態才能在時間維度上穩定傳播,梯度也不容易衰減。

3.5 計算輸出門(Output Gate)

需要特別強調的是: 細胞狀態並不直接作為模型輸出。
在之前幾步完成了對細胞狀態的更新,我們到這裏才開始進行與模型輸出相關的隱藏狀態計算

在更新完細胞狀態 \(c^{\langle t \rangle}\) 之後,LSTM 的下一步是計算 輸出門 \(o^{\langle t \rangle}\)
輸出門的作用是:控制細胞狀態中的信息有多少被“暴露”給下一層或下一時間步使用
換句話説,輸出門決定了“長期記憶通道中的信息如何影響當前計算”。

計算過程已經看了很多遍了:
image.png
門的計算都是相同的,公式為:

\[o^{\langle t \rangle} = sigmoid\big( W_{xo} x^{\langle t \rangle} + W_{ao} a^{\langle t-1 \rangle} + b_o \big) \]

  • \(o_i^{\langle t \rangle} \approx 1\) 時,第 \(i\) 個記憶單元的長期信息幾乎全部暴露給隱藏狀態。
  • \(o_i^{\langle t \rangle} \approx 0\) 時,第 \(i\) 個記憶單元的長期信息幾乎完全屏蔽

3.6 更新隱藏狀態

有了輸出門 \(o^{\langle t \rangle}\) 和更新後的細胞狀態 \(c^{\langle t \rangle}\) 後,就可以生成當前時刻的隱藏狀態 \(a^{\langle t \rangle}\),這也是 LSTM 的實際輸出,用於傳遞到下一時間步或下一層網絡。
image.png

生成公式為:

\[a^{\langle t \rangle} = o^{\langle t \rangle} \odot \tanh(c^{\langle t \rangle}) \]

最終,輸出門與細胞狀態、隱藏狀態維度一致,每個分量獨立控制對應記憶單元的輸出,實現對長期記憶的選擇性讀取
最後,看到長期記憶,你可能會再次想到 GRU 中不僅有長期記憶,還有短期記憶,那 LSTM 的短期記憶被隱含在哪一步了?
實際上,在 LSTM 中,短期記憶 就是當前步的隱藏狀態 \(a^{\langle t \rangle}\),它會傳給下一時間步或下一層參與計算,而不像 GRU 那樣把長期記憶和短期記憶合併在同一狀態中。

至此,一個 LSTM 單元計算就完成了。

3.7 小結:LSTM 的完整計算流程

在時間步 \(t\),一個標準 LSTM 單元的計算順序可以總結為:

  1. 遺忘門:決定舊記憶保留多少。

\[ f^{\langle t \rangle} = \sigma(W_{xf} x^{\langle t \rangle} + W_{af} a^{\langle t-1 \rangle} + b_f) \]

  1. 輸入門:決定新信息寫入多少。

\[ i^{\langle t \rangle} = \sigma(W_{xi} x^{\langle t \rangle} + W_{ai} a^{\langle t-1 \rangle} + b_i) \]

  1. 候選記憶:生成新記憶內容。

\[ \tilde{c}^{\langle t \rangle} = \tanh(W_{xc} x^{\langle t \rangle} + W_{ac} a^{\langle t-1 \rangle} + b_c) \]

  1. 更新細胞狀態:長期記憶融合。

\[ c^{\langle t \rangle} = f^{\langle t \rangle} \odot c^{\langle t-1 \rangle} + i^{\langle t \rangle} \odot \tilde{c}^{\langle t \rangle} \]

  1. 輸出門與隱藏狀態:生成當前輸出。

\[o^{\langle t \rangle} = \sigma(W_{xo} x^{\langle t \rangle} + W_{ao} a^{\langle t-1 \rangle} + b_o) \]

\[ a^{\langle t \rangle} = o^{\langle t \rangle} \odot \tanh(c^{\langle t \rangle}) \]

至此,這兩篇我們完成了對門控機制的一些相關技術的瞭解,你會發現,門控機制並沒有創新網絡本身的結構,而是通過網絡關係和計算邏輯為全連接層賦予了全新的語義:實現了對記憶的選擇性保留、更新與輸出
這種設計的巧妙之處在於:網絡可以自主決定哪些信息值得長期記憶,哪些信息只用於當前計算,使梯度在時間維度上穩定傳播,同時讓模型能夠精細管理短期與長期記憶,從而顯著提升序列數據建模的能力。
同時,也給了我們關於創新的新的靈感:不要一味增加複雜結構,而是賦予已有機制新的語義與控制能力。

3. 總結

概念 原理 比喻
LSTM(Long Short-Term Memory) 為了解決 RNN/GRU 在長序列中長期依賴的問題,引入顯式的記憶單元(cell state),並配合遺忘門、輸入門、輸出門進行精細控制,實現長期信息的穩定傳遞。 隱藏狀態像“當前腦子裏在想什麼”,細胞狀態像“一本幾乎不被打擾的長期備忘錄”。
GRU 的侷限 GRU 只有單一隱藏狀態,既承擔短期計算,又承擔長期記憶,使不同時間尺度的信息混合在同一向量中,長序列或精細時序場景可能受限。 GRU 像是在“一張紙上反覆修改內容”,長期與短期信息混合存儲。
細胞狀態(Cell State \(c^{\langle t \rangle}\) 專門存儲長期信息,可近似線性傳播,梯度不易消失。通過遺忘門控制保留,輸入門控制寫入。 “長期備忘錄”,可以長期保存關鍵信息,不被頻繁改寫。
隱藏狀態(Hidden State \(a^{\langle t \rangle}\) 表示當前時刻的輸出和短期計算結果,傳遞到下一時間步或下一層。 “腦子裏當前正在處理的內容”。
遺忘門(Forget Gate \(f^{\langle t \rangle}\) 決定舊記憶保留比例:\(f^{\langle t \rangle} \odot c^{\langle t-1 \rangle}\) “決定把哪些舊信息保留下來,哪些丟掉”。
輸入門(Input Gate \(i^{\langle t \rangle}\) 決定新信息寫入比例:\(i^{\langle t \rangle} \odot \tilde{c}^{\langle t \rangle}\) “決定新記憶寫入多少到長期備忘錄”。
候選細胞狀態(\(\tilde{c}^{\langle t \rangle}\) 當前步生成的新信息,由當前輸入與上一隱藏狀態計算,但尚未寫入細胞狀態。 “準備好可以寫入的新記憶”。
更新細胞狀態(\(c^{\langle t \rangle}\) 結合遺忘門與輸入門更新長期記憶:\(c^{\langle t \rangle} = f^{\langle t \rangle} \odot c^{\langle t-1 \rangle} + i^{\langle t \rangle} \odot \tilde{c}^{\langle t \rangle}\) “舊備忘錄保留多少 + 新信息寫入多少”。
輸出門(Output Gate \(o^{\langle t \rangle}\) 決定細胞狀態暴露給隱藏狀態的比例:\(a^{\langle t \rangle} = o^{\langle t \rangle} \odot \tanh(c^{\langle t \rangle})\) “決定長期記憶中哪些內容現在被使用”。
短期記憶 LSTM 的短期記憶即當前時刻的隱藏狀態 \(a^{\langle t \rangle}\),用於計算當前輸出和下一步傳遞。 “腦子裏當前想的東西”。
長期記憶 LSTM 的長期記憶即細胞狀態 \(c^{\langle t \rangle}\),穩定傳遞關鍵歷史信息,梯度不易消失。 “長期備忘錄”,可跨時間步保存信息。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.