此分類用於記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:
- 原課程視頻鏈接:[雙語字幕]吳恩達深度學習deeplearning.ai
- github課程資料,含課件與筆記:吳恩達深度學習教學資料
- 課程配套練習(中英)與答案:吳恩達深度學習課後習題與答案
本篇為第五課的第一週內容,1.11到1.12的內容,同時也是本週理論部分的最後一篇。
本週為第五課的第一週內容,與 CV 相對應的,這一課所有內容的中心只有一個:自然語言處理(Natural Language Processing,NLP)。
應用在深度學習裏,它是專門用來進行文本與序列信息建模的模型和技術,本質上是在全連接網絡與統計語言模型基礎上的一次“結構化特化”,也是人工智能中最貼近人類思維表達方式的重要研究方向之一。
這一整節課同樣涉及大量需要反覆消化的內容,橫跨機器學習、概率統計、線性代數以及語言學直覺。
語言不像圖像那樣“直觀可見”,更多是抽象符號與上下文關係的組合,因此理解門檻反而更高。
因此,我同樣會儘量補足必要的背景知識,儘可能用比喻和實例降低理解難度。
本篇的內容關於雙向 RNN 與深層 RNN,是對基礎 RNN 結構的一些補充。
1. 雙向 RNN(Bidirectional RNN)
在前面對 RNN、GRU 與 LSTM 的討論中,我們始終默認了一個前提:序列只能沿時間軸單向展開,模型在當前時刻只能利用已經出現的歷史信息。
這種設定在一些簡單任務中是合理的,但在大量序列理解與標註任務中,卻隱藏着一個結構性限制: 當前時刻的語義或狀態,往往同時依賴於過去和未來的上下文信息。
舉個課程裏的例子:
於是,問題出現了:如果未來信息才是判定當前狀態的重要依據,該怎麼辦?
正是在這樣的背景下,雙向 RNN(Bidirectional Recurrent Neural Networks) 被提出。
早在 1997 年,Bidirectional Recurrent Neural Networks 這篇論文中就指出:對於序列標註與整體理解任務,僅依賴過去上下文會造成信息利用上的先天不足,因此有必要在模型結構層面同時建模正向與反向的時間依賴關係。
需要強調的是,雙向 RNN 並不是一種新的循環單元設計。
它並不改變 RNN、LSTM 或 GRU 內部的計算形式,而是通過在時間維度上引入前向與後向兩條獨立的狀態傳播鏈路,使模型在每一個時間步都能夠融合歷史與未來的上下文信息。
也正因為這種“結構獨立於單元”的特性,雙向 RNN 可以自然地與 LSTM、GRU 結合,形成 Bi-LSTM、Bi-GRU,成為提升上下文建模能力的標準配置。
它的實現邏輯並不複雜,這裏引用一張比較清晰易懂的傳播圖:(出處)
這樣,你就會發現,同一序列被 正向(藍色) 和 反向(綠色) 兩條 RNN 同時建模,每個時間步 \(t\) 都能“看到”正向的歷史上下文和反向的未來上下文,最終輸出 \(\hat y^{\langle t\rangle}\) 由兩個方向的信息共同決定。
在實踐中,雙向 RNN 更常採用拼接方式保留來自兩個時間方向的完整信息,而逐元素相加則是一種更緊湊、但表達能力受限的折中選擇。
最後,再打個比方:把序列比作一座要建的橋,雙向 RNN 就像是兩隊工人從兩側同時施工並不斷交流進度,確保精準,但同時,施工隊伍翻倍,整體成本也隨之上升。
2. 深層 RNN
深層 RNN 的概念同樣不難理解。
在最開始引入 循環神經網絡 時,我們説明過,默認使用單層 RNN 來進行演示:
在每一個時間步 \(t\),輸入 \(x^{(t)}\) 經過一次循環計算,得到對應的隱藏狀態 \(a^{(t)}\),並沿時間軸不斷傳遞。
但從模型表達能力的角度來看,這種結構存在限制:每個時間步內部,只進行了一次非線性變換。
這意味着,無論序列本身有多複雜,在“同一時刻”對輸入信息的處理深度都是有限的。
到這裏,就和之前的全連接、卷積網絡相通了:
如果我們希望模型在每一個時間步上,也具備類似深度前饋網絡、卷積網絡那樣的層級表達能力,該怎麼辦?
答案自然就是:在時間維度之外,再引入層級維度。
在深層 RNN 中,循環結構不再只有一層,而是在同一時間步上堆疊多層 RNN 單元。
它的傳播圖是這樣的:
關於深度的邏輯和之前都是相同的,深層 RNN 通過在同一時間步上的堆疊,讓模型可以進行更復雜的非線性變換,增強了其表達能力。但同樣也會增加計算成本,帶來梯度問題與過擬合風險,這些都是我們的老生常談了。
於此同時,和雙向 RNN 類似,深層結構同樣獨立於具體的循環單元設計。 而且在工程實踐中,深度、方向性和門控機制往往是可以同時疊加的,例如:
- 多層 Bi-LSTM
- 多層 Bi-GRU
我們把各個組件組合或創新,便形成了深度學習 NLP 中紛繁複雜的諸多模型。
最後,如果繼續沿用前面的比喻:
雙向 RNN 像是從橋的兩端同時施工。
那麼 深層 RNN 更像是: 每一個施工點上,不只是鋪一層路面,而是一層層打地基、加結構、再鋪表層。 這樣結構更穩、表達更強,但施工流程更復雜,成本和訓練難度也隨之上升。
3.總結
| 概念 | 原理 | 比喻 |
|---|---|---|
| 雙向 RNN(Bidirectional RNN) | 在時間維度上引入正向和反向兩條獨立狀態鏈路,每個時間步同時利用過去和未來上下文信息。適用於序列標註與整體理解任務。可以與 RNN/LSTM/GRU 結合,形成 Bi-RNN、Bi-LSTM、Bi-GRU。 | 序列比作橋,兩隊工人從兩端同時施工並交流進度,確保精準,但施工隊伍翻倍,成本增加。 |
| 深層 RNN(Deep RNN) | 在同一時間步上堆疊多層 RNN 單元,增加每個時間步內部的非線性表達能力,從而增強模型的表示能力。可與門控機制和雙向結構疊加,形成多層 Bi-LSTM、Bi-GRU 等。 | 每個施工點上不是隻鋪一層路面,而是一層層打地基、加結構、再鋪表層,結構更穩、表達更強,但施工流程複雜,成本和訓練難度增加。 |