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. 發起,及其當時任職公司(台灣雪豹科技)無償贊助場地及茶水點心。
去 YouTube 訂閱 | Facebook | 回 GitHub Pages | 到 GitHub 點星 | 網站 | 到 Hugging Face Space 按愛心
大語言模型 | 語音處理 | 自然語言處理 | 電腦視覺 |
Large Language Model | Speech Processing | Natural Language Processing, NLP | Computer Vision |
用 AI 懂 AI
AI 技術 體驗/分享
手把手帶你一起踩 AI 坑:https://www.twman.org/AI
- 白話文手把手帶你科普 GenAI:淺顯介紹生成式人工智慧核心概念,強調硬體資源和數據的重要性。
- 大型語言模型直接就打完收工?:回顧 LLM 領域探索歷程,討論硬體升級對 AI 開發的重要性。
- 檢索增強生成(RAG)不是萬靈丹之優化挑戰技巧:探討 RAG 技術應用與挑戰,提供實用經驗分享和工具建議。
- 大型語言模型 (LLM) 入門完整指南:原理、應用與未來:探討多種 LLM 工具的應用與挑戰,強調硬體資源的重要性。
- 解析探索大型語言模型:模型發展歷史、訓練及微調技術的 VRAM 估算:探討 LLM 的發展與應用,硬體資源在開發中的作用。
- Diffusion Model 完全解析:從原理、應用到實作 (AI 圖像生成);深入探討影像生成與分割技術的應用,強調硬體資源的重要性。
- ASR/TTS 開發避坑指南:語音辨識與合成的常見挑戰與對策:探討 ASR 和 TTS 技術應用中的問題,強調數據質量的重要性。
- 那些 NLP 踩的坑:分享 NLP 領域的實踐經驗,強調數據質量對模型效果的影響。
- 那些語音處理踩的坑:分享語音處理領域的實務經驗,強調資料品質對模型效果的影響。
- 手把手學深度學習安裝環境:詳細介紹在 Ubuntu 上安裝深度學習環境的步驟,分享實際操作經驗。
AI 技術 開源/試用
第十章 序列建模:循環和遞歸網路
2017/05/05, Recurrent and Recursive Nets @ Deep Learning Book Chapter 10
循環神經網路及其相關架構與挑戰
本摘要根據您提供的資料來源,匯整了關於循環神經網路 (RNN) 及其相關概念的重點。
什麼是 RNN?為什麼需要 RNN?
- 循環神經網路 (RNN) 是一種能夠處理序列數據的神經網路架構。
- 與傳統神經網路 (如前饋網路 FFN 和卷積網路 CNN) 不同,RNN 具有循環結構,允許資訊在時間步之間傳遞。
- RNN 的主要優勢在於能夠處理具有順序關係的數據。序列數據的含義往往取決於元素的順序,傳統網路難以捕捉這種順序的重要性及跨越較長距離的依賴關係。
- FFN 在不同位置使用不同權重,參數量隨序列長度顯著增加,且難以捕捉遠距離依賴。
- CNN 使用小型滑動窗口,主要捕捉局部關係 (如鄰近詞彙或像素),難以捕捉跨越較大距離的依賴。
- RNN 透過在時間步之間傳遞資訊,能夠處理可變長度的序列並在序列的不同位置共享知識。
RNN 的參數共享
- 參數共享是 RNN 的一個關鍵特性。在處理序列的不同時間步時,RNN 使用相同的權重集和相同的更新規則。例如,連接
h^(t-1)
到h^(t)
的權重矩陣W
在所有時間步是共享的。 - 參數共享帶來的好處包括:
- 處理可變長度的序列: 由於每個時間步的計算模塊相同,RNN 可以靈活處理任意長度的輸入序列。
- 在時間上共享統計強度: 模型可以在序列的不同位置和不同長度的序列之間泛化學到的模式。
- 減少模型參數: 參數共享避免了參數隨序列長度線性增長的問題,顯著減少了總參數量,使得模型更高效且不容易過擬合。
RNN 的訓練:通過時間反向傳播 (BPTT)
- 通過時間反向傳播 (BPTT) 是將標準的反向傳播算法應用於展開後的循環神經網路計算圖,用於計算損失函數關於 RNN 參數的梯度。
- 工作原理:
- 前向傳播: 沿著時間序列對 RNN 進行前向計算,得到每個時間步的隱藏狀態、輸出和總損失。這相當於在展開圖上進行一次完整的前向傳播。
- 反向傳播: 從最終時間步的損失開始,沿著展開的計算圖從後向前反向傳播梯度。計算損失關於每個時間步的輸出和隱藏狀態的梯度,以及關於共享參數的局部梯度。
- 梯度累加: 由於參數是共享的,損失函數關於共享參數的總梯度是其在每個時間步產生的局部梯度的總和 (
∂L/∂W = Σ_t ∂L/∂W^(t)
)。在反向傳播中計算出每個局部梯度後,將它們累加得到最終梯度。
RNN 的變種與挑戰
雙向 RNN (BiRNN)
- 優點: 能夠在每個時間步利用輸入序列的完整過去和未來上下文資訊,對於需要理解全局依賴的任務 (如機器翻譯編碼器、NER、情感分析) 很有幫助,通常性能優於單向 RNN。
- 局限性: 需要一次性獲得整個輸入序列才能計算反向 RNN 的狀態,不適用於需要對正在輸入的序列進行實時預測 (online task) 的任務 (如實時語音識別)。計算成本約為單向 RNN 的兩倍。
- BiRNN 是一個 RNN 模型,這與 Seq2Seq 模型中的 Encoder 和 Decoder 是兩個分開的 RNN 不同。
遞歸神經網路 (Recursive Neural Network)
- 遞歸網路通過在輸入的樹狀結構上遞歸應用一個相同的神經網路模塊來學習和傳播資訊。
- 資訊通常從葉節點向根節點傳播 (自底向上)。葉節點先轉為向量表示,非葉節點的表示則通過將其子節點的表示作為輸入,送入共享神經網路層計算得到。根節點的表示常用於代表整個輸入樹的語義或結構資訊。
- 也可以設計自頂向下傳播資訊的遞歸網路。
- RNN 可以看作是遞歸網路的一個特殊情況,即處理的樹結構退化為一個線性鏈。遞歸網路更擅長處理具有明顯層次化結構的數據 (如句子的語法結構)。
序列到序列 (Sequence to Sequence, Seq2Seq) 模型
- Seq2Seq 模型常用於處理輸入和輸出都是序列的任務,如機器翻譯和對話生成。
- 典型架構包含一個 Encoder 和一個 Decoder,通常使用 RNN (如 GRU 或 LSTM)。Encoder 將輸入序列編碼為一個固定長度的上下文向量,Decoder 則根據這個向量生成輸出序列。
- Google 的機器翻譯模型曾使用 GRU 作為核心單元,並嘗試將輸入句子反轉以改善效果。解釋是反轉後,輸入序列開頭的詞與輸出序列開頭的詞在序列中的距離變近,有助於模型學習。
- 在對話生成中的應用:Google 曾使用 Seq2Seq 模型進行通用聊天和客服系統對話。訓練資料來源包括電影腳本和客服系統記錄。
- Seq2Seq 模型訓練的資料準備:需要整理對話資料對 (輸入對應輸出)。中文需要先進行斷詞。將詞彙建立索引並建立詞彙表。可能需要處理低頻詞或未知詞,將其替換為特殊符號 (
UNK
)。 - 訓練時為提高效率,常使用 mini-batch,將長度相似的序列分到同一 batch,不足長度的部分用 padding 補齊。
- 困惑度 (Perplexity) 是衡量語言模型預測能力的指標。困惑度越低表示模型預測下一個符號的不確定性越小,模型學得越好。
- Dual Encoder (雙編碼器) 模型:一種用於提升檢索式對話系統排名的模型。它將輸入 (context) 和潛在的回應 (response) 分別通過兩個 Encoder 編碼為向量,然後計算它們的相似度 (如 cosine 相似度),希望好的對話對的向量相似度高。可用於對檢索到的多個回應進行排序。
外部記憶網路 (External Memory Network)
- 如神經圖靈機 (NTM) 或可微神經計算機 (DNC),包含 控制器 (通常是 RNN)、外部記憶 (二維矩陣) 和 讀寫頭。
- 讀寫頭通過注意力機制與外部記憶交互。
- 基於內容的尋址 (Content-based addressing): 根據查詢向量與記憶內容的相似性決定讀寫位置。
- 基於位置的尋址 (Location-based addressing): 控制器直接指定讀寫位置,或基於先前位置確定。
- 現代外部記憶網路常結合使用這兩種尋址方式。
梯度消失與梯度爆炸問題 (Vanishing/Exploding Gradient Problem)
- 這是訓練 RNN 的主要挑戰,特別是在處理長序列時。
- 在 BPTT 過程中,由於使用鏈式法則,梯度需要通過多個時間步連續相乘。
- 如果乘數 (通常是權重矩陣和激活函數的梯度) 的值持續小於 1,梯度會指數級減小,導致遠距離時間步的梯度變得微不足道,模型難以學習長距離依賴,稱為梯度消失。
- 如果乘數值持續大於 1,梯度會指數級增大,導致訓練不穩定,稱為梯度爆炸。
長短期記憶網路 (LSTM) 與門控循環單元 (GRU)
- LSTM 和 GRU 是 RNN 的變體,旨在解決標準 RNN 的梯度消失問題。
- LSTM 引入了 記憶單元 (Cell State) 和三個門 (Gates):遺忘門 (Forget Gate)、輸入門 (Input Gate) 和輸出門 (Output Gate)。這些門控制著資訊如何在記憶單元中流動和更新。
- 記憶單元的更新包含加法操作 (前一個記憶單元的內容加上新的輸入內容,受遺忘門和輸入門控制)。這種加法的結構是 LSTM 能夠緩解梯度消失的關鍵,因為梯度可以更容易地通過加法節點傳播,而不是僅僅依賴乘法鏈。
- GRU 是 LSTM 的簡化版本,參數較少。它將遺忘門和輸入門合二為一成為更新門 (Update Gate),並引入重置門 (Reset Gate)。GRU 也沒有單獨的記憶單元,直接在隱藏狀態中進行資訊傳遞和控制。
- GRU 和 LSTM 在許多任務上表現相似,且通常優於標準 RNN。
增加 RNN 深度
- 在 RNN 中堆疊多個 RNN 層可以增加模型的表達能力,學習更複雜的非線性函數和層次化的時間表示。
- 較低層可能捕捉局部、短期的模式,而較高層學習更全局、長期的結構。這類似於深度前饋或卷積網路。
RNN 的其他應用
除了序列到序列任務,RNN 還廣泛應用於:
- 語音識別
- 文本生成
- 情感分析
- 命名實體識別 (NER)
- 時序數據預測
- 圖像描述生成
- 影片分析
- 異常檢測
- 推薦系統
- 作為其他模型的組成部分 (如結合 CNN 的圖像描述模型)
- 在圖像處理中作為 CNN 的替代方法,將圖像視為序列處理。
提及的人物與組織
資料來源中提到了以下人物和組織,他們在 RNN 的發展、教學或應用中扮演了角色:
- Line 與未知講者: 本次報告的兩位講者。
- 李宏毅: 老師或研究者,其教學風格對講者理解 RNN 有幫助。
- Andrew Ng: 前百度首席科學家,在語音辨識領域有重要貢獻。
- Stanford CS224N 的課程: 講者提及的關於自然語言處理的課程。
- Google: 在機器翻譯和對話生成中應用 Seq2Seq 模型。
- 印度人老師: 製作了 LSTM 教學影片的老師。
- Karpathy (Andrej Karpathy): 部落格作者,其對 LSTM 的解釋清晰直觀。
- 教育部的國語辭典: 在中文斷詞討論中提及的資源。
- 中研院: 在中文斷詞和語料庫方面有工作。
- 百度: Andrew Ng 曾在此工作。
- Workshop on Statistical Machine Translation (WMT): 提供機器翻譯數據集的工作坊。
- PTT: 講者收集對話數據的來源之一。
- HDF format: 一種數據格式,在圖像數據處理中提及。
- jieba 斷詞器: 一種中文斷詞工具。
這些人物和組織的提及主要圍繞著 RNN 的理論、發展、挑戰及其在自然語言處理領域的應用。