RNN
中文名稱:循環神經網路 英文名稱:Recurrent Neural Network
定義(Definition)
- 一種會「記住過去狀態」的神經網路,逐步處理序列資料,輸出會受前一步影響,適合時間序列、語音、文本等有順序的任務。
- 專為處理序列數據而設計的深度學習模型,其關鍵特性是網路中存在 循環連接,使得模型可以記憶序列中之前的資訊。
原理與技術
工作原理
- RNN 的每個節點不僅接收當前的輸入,還會記住前一時刻的狀態,這使得 RNN 能夠捕捉數據的時間依賴關係。
- RNN 每個時間步輸入 x_t,加上前一步隱狀態 h_{t-1},經非線性得到 h_t,再輸出 y_t。這種 參數共享 讓模型能處理任意長度序列,但訓練時梯度需沿時間回傳,易出現 梯度消失/爆炸。
- 網路的輸出取決於當前輸入和前面的上下文,適合處理語音、文本等具有時間序列特性的數據。
優點
- 能夠有效捕捉序列數據中的長期依賴關係。
- 支持變長序列的處理,適用於多種場景。
缺點
- 訓練過程容易出現梯度消失或梯度爆炸問題。
- 在處理長序列數據時,計算效率較低。
改良方式
- 長短期記憶網路(Long Short-Term Memory, LSTM) 透過引入遺忘門(forget gate)、輸入門(input gate)和輸出門(output gate),有效解決了梯度消失問題。
- 門控循環單元(Gated Recurrent Unit, GRU): 結構比 LSTM 更簡單,但在大多數應用中效果相近。
- 梯度裁剪:控制爆炸。
- 截斷 BPTT:限制回傳長度以降低計算。
- 正規化:LayerNorm/ Dropout,減少過擬合並穩定狀態分佈。
- 雙向 RNN:同時讀前後文,提升語言任務表現,但不適合嚴格因果的即時預測。
- 注意力機制:在編碼器-解碼器結構中,Attention 讓模型聚焦重要位置,緩解長距依賴問題。
- 序列平行化替代:若需要高並行與更長依賴,可改用 Transformer;但小型序列、低算力裝置仍可用 RNN/GRU。
應用領域
- 語音與語言:語音辨識前端特徵建模、早期機器翻譯、情感分析、命名實體辨識,常用 BiRNN/LSTM。
- 時間序列預測:需求、流量、感測器數據,使用 RNN/GRU 預測未來值或偵測異常;需要處理季節性可加外生變數。
- 序列生成與標註:聊天機器人、字幕生成、音樂序列生成,常用編碼器-解碼器 RNN,加注意力提升品質。
- 邊緣裝置:關鍵字喚醒、行為偵測,小型 GRU 參數少、延遲低。
- 序列配對/相似度:對話匹配、句子相似度,使用 Siamese RNN 產生序列嵌入。 共通重點:處理長序列時要防梯度問題、控制延遲;資料標記需維持時間順序,評估時要觀察序列長度分佈與延遲需求。
3 題模擬練習題
- RNN 為何容易梯度消失?
- A. 沒有 ReLU
- B. 梯度要沿時間相乘,長序列會衰減
- C. 參數太多
- D. 沒有學習率
- 正確答案:B;解析:連乘的鏈式法則讓梯度在長序列上迅速縮小,需門控或正規化。
- 需要雙向資訊但非即時的 NLP 任務常用?
- A. 單向 RNN
- B. 雙向 RNN/BiLSTM
- C. CNN
- D. 只用全連接層
- 正確答案:B;解析:BiRNN 能同時讀前後文,提升理解,但無法用於即時流式。
- 想降低 RNN 計算與延遲,可選擇?
- A. 增加層數
- B. 用 GRU 或更小的隱層維度
- C. 強制長序列不截斷
- D. 關閉梯度裁剪
- 正確答案:B;解析:GRU 結構簡化、參數較少;減小隱維度亦可減算力,仍需梯度裁剪。