Deep Learning 101

Taiwan’s pioneering and highest deep learning meetup, launched on 2016/11/11 @ 83F, Taipei 101

AI是一條孤獨且充滿惶恐及未知的旅程,花俏絢麗的收費課程或活動絕非通往成功的捷徑。
衷心感謝當時來自不同單位的AI同好參與者實名分享的寶貴經驗;如欲移除資訊還請告知。
TonTon Huang Ph.D. 發起,及其當時任職公司(台灣雪豹科技)無償贊助場地及茶水點心。

Deep Learning 101 Buy Me A Coffee

YouTube | Facebook | 回 GitHub Pages | 網站 | Hugging Face Space

2017/05/05, Recurrent and Recursive Nets @ Deep Learning Book Chapter 10

循環神經網路與遞歸網路

探討處理序列數據的RNN、LSTM、GRU及其挑戰與應用

什麼是RNN?為什麼需要RNN? What & Why RNN?

循環神經網路 (Recurrent Neural Network, RNN) 是一種能夠處理序列數據的神經網路架構。與傳統神經網路 (如前饋網路 FFN 和卷積網路 CNN) 不同,RNN 具有循環結構,允許資訊在時間步之間傳遞。

RNN 的主要優勢在於能夠處理具有順序關係的數據。序列數據的含義往往取決於元素的順序,傳統網路難以捕捉這種順序的重要性及跨越較長距離的依賴關係

  • FFN 在不同位置使用不同權重,參數量隨序列長度顯著增加,且難以捕捉遠距離依賴。
  • CNN 使用小型滑動窗口,主要捕捉局部關係 (如鄰近詞彙或像素),難以捕捉跨越較大距離的依賴。
  • RNN 透過在時間步之間傳遞資訊,能夠處理可變長度的序列在序列的不同位置共享知識

RNN 的參數共享 Parameter Sharing

參數共享是 RNN 的一個關鍵特性。在處理序列的不同時間步時,RNN 使用相同的權重集和相同的更新規則。例如,連接 $h^{(t-1)}$ 到 $h^{(t)}$ 的權重矩陣 $W$ 在所有時間步是共享的。

參數共享的好處 Benefits of Sharing

  • 處理可變長度的序列: 由於每個時間步的計算模塊相同,RNN 可以靈活處理任意長度的輸入序列。
  • 在時間上共享統計強度: 模型可以在序列的不同位置和不同長度的序列之間泛化學到的模式。
  • 減少模型參數: 避免了參數隨序列長度線性增長的問題,顯著減少了總參數量,使得模型更高效且不容易過擬合。

RNN的訓練: BPTT Training via BPTT

通過時間反向傳播 (Backpropagation Through Time, BPTT) 是將標準的反向傳播算法應用於展開後的循環神經網路計算圖,用於計算損失函數關於 RNN 參數的梯度。

工作原理 How BPTT Works

  1. 前向傳播 (Forward Pass): 沿著時間序列對 RNN 進行前向計算,得到每個時間步的隱藏狀態、輸出和總損失。
  2. 反向傳播 (Backward Pass): 從最終時間步的損失開始,沿著展開的計算圖從後向前反向傳播梯度
  3. 梯度累加 (Gradient Accumulation): 共享參數的總梯度是其在每個時間步產生的局部梯度的總和 ($\frac{\partial L}{\partial W} = \sum_t \frac{\partial L}{\partial W^{(t)}}$)。

RNN 的變種與挑戰 Variants & Challenges

雙向 RNN (BiRNN) Bidirectional RNN

優點: 能夠在每個時間步利用輸入序列的完整過去和未來上下文資訊,對於需要理解全局依賴的任務 (如機器翻譯編碼器、NER) 很有幫助。

局限性: 需要一次性獲得整個輸入序列,不適用於實時預測任務。計算成本約為單向 RNN 的兩倍。BiRNN 是一個 RNN 模型,這與 Seq2Seq 模型中的 Encoder 和 Decoder 是兩個**分開的** RNN 不同。

遞歸神經網路 (Recursive NN) Recursive Neural Network

遞歸網路通過在輸入的樹狀結構上遞歸應用一個相同的神經網路模塊來學習和傳播資訊。資訊通常從葉節點向根節點傳播 (自底向上)。

RNN 可以看作是遞歸網路的一個特殊情況,即處理的樹結構退化為一個線性鏈。遞歸網路更擅長處理具有明顯層次化結構的數據。

外部記憶網路 External Memory Network

如神經圖靈機 (NTM) 或可微神經計算機 (DNC),包含 控制器 (通常是 RNN)、外部記憶 (二維矩陣) 和 讀寫頭

讀寫頭通過注意力機制與外部記憶交互,包括基於內容和基於位置的尋址。

序列到序列 (Seq2Seq) 模型 Sequence-to-Sequence Models

Seq2Seq 模型常用於處理輸入和輸出都是序列的任務,如機器翻譯對話生成。典型架構包含一個 Encoder 和一個 Decoder,通常使用 RNN (如 GRU 或 LSTM)。

應用與技巧 Applications & Techniques

  • Google 的機器翻譯模型曾使用 GRU,並嘗試將輸入句子反轉以改善效果。
  • 對話生成:Google 用於通用聊天和客服系統,訓練數據源自電影腳本和客服記錄。
  • 數據準備:需整理對話資料對,中文需斷詞,建立詞彙表,處理低頻詞 (`UNK`)。
  • 訓練效率:使用 mini-batch,長度相似的序列同批,不足用 padding 補齊。
  • 評估指標:困惑度 (Perplexity) 越低,模型預測能力越好。

Dual Encoder 模型 Dual Encoder Model

一種用於提升檢索式對話系統排名的模型。將輸入 (context) 和潛在的回應 (response) 分別通過兩個 Encoder 編碼為向量,然後計算它們的相似度,希望好的對話對相似度高。

梯度消失與爆炸 Vanishing/Exploding Gradients

這是訓練 RNN 的主要挑戰,特別是在處理長序列時。在 BPTT 過程中,由於使用鏈式法則,梯度需要通過多個時間步連續相乘

梯度消失 Vanishing Gradient

如果乘數 (權重矩陣和激活函數的梯度) 的值持續小於 1,梯度會指數級減小,導致遠距離時間步的梯度變得微不足道,模型難以學習長距離依賴。

梯度爆炸 Exploding Gradient

如果乘數值持續大於 1,梯度會指數級增大,導致訓練不穩定。

LSTM 與 GRU Long Short-Term Memory & Gated Recurrent Unit

LSTM 和 GRU 是 RNN 的變體,旨在解決標準 RNN 的梯度消失問題。

長短期記憶網路 (LSTM) Long Short-Term Memory

引入了 記憶單元 (Cell State) 和三個門 (Gates):遺忘門 (Forget Gate)、輸入門 (Input Gate) 和輸出門 (Output Gate)。這些門控制著資訊如何在記憶單元中流動和更新。記憶單元的更新包含加法操作,這是 LSTM 能夠緩解梯度消失的關鍵。

門控循環單元 (GRU) Gated Recurrent Unit

LSTM 的簡化版本,參數較少。它將遺忘門和輸入門合二為一成為更新門 (Update Gate),並引入重置門 (Reset Gate)。GRU 也沒有單獨的記憶單元,直接在隱藏狀態中進行資訊傳遞和控制。

GRU 和 LSTM 在許多任務上表現相似,且通常優於標準 RNN。

增加 RNN 深度 Increasing RNN Depth

在 RNN 中堆疊多個 RNN 層可以增加模型的表達能力,學習更複雜的非線性函數和層次化的時間表示。較低層可能捕捉局部、短期的模式,而較高層學習更全局、長期的結構。

RNN 的其他應用 Other Applications of RNNs

除了序列到序列任務,RNN 還廣泛應用於:

  • 語音識別
  • 文本生成
  • 情感分析
  • 命名實體識別 (NER)
  • 時序數據預測
  • 圖像描述生成
  • 影片分析
  • 異常檢測
  • 推薦系統
  • 圖像處理 (替代 CNN)

提及的人物與組織 Mentioned Figures & Organizations

資料來源中提到了以下人物和組織,他們在 RNN 的發展、教學或應用中扮演了角色:

  • Line 與未知講者
  • 李宏毅
  • Andrew Ng
  • Stanford CS224N
  • Google
  • 印度人老師 (LSTM 教學影片)
  • Karpathy (Andrej Karpathy)
  • 教育部的國語辭典
  • 中研院
  • 百度
  • WMT (Workshop on Statistical Machine Translation)
  • PTT
  • jieba 斷詞器

這些提及主要圍繞著 RNN 的理論、發展、挑戰及其在自然語言處理領域的應用。