循環神經網絡 RNN
recurrent neural networks
-
RNN序列處理能力(RNN核心作用)
RNN處理序列數據,相比“Vanilla”神經網絡(僅支持一對一映射),RNN支持多種序列映射模式:
- 一對一:傳統分類
- 一對多:如圖像captioning:圖像→文字序列
- 多對一:如情感分析:文字序列→情感標簽
- 多對多:如機器翻譯:文字序列→文字序列
- 時序多對多:視頻幀分類
-
RNN非序列數據的序列處理
例如通過瞥視序列分類圖像,或逐部分生成圖像
-
RNN的數學定義與計算圖
-
前向傳播公式
狀態更新:
ht:t時刻的隱藏狀態;xt:t時刻的輸入
ht=fw(ht?1,xt) h_t = f_w(h_{t-1},x_t) ht?=fw?(ht?1?,xt?)
vanilla RNN具體公式:
ht=tanh(Whhht?1+Wxhxt),輸出yt=Whyht h_t = tanh(W_{hh}h_{t-1}+W_{xh}x_t),輸出y_t = W_{hy}ht ht?=tanh(Whh?ht?1?+Wxh?xt?),輸出yt?=Why?ht -
計算圖結構
時間步共享參數W,隱藏狀態ht依賴于前一時刻ht-1,形成循環結構
不同映射模式的計算圖:
- 多對多:每個時間步輸出
- 多對一:最后時間步輸出
- 一對多:單輸入生成序列
-
序列到序列模型 Sequence to Sequence模型
由 多對一編碼器(將輸入序列編碼為向量)和 一對多解碼器(從向量生成輸出序列)組成,用于機器翻譯等任務
-
-
RNN反向傳播
- 通過時間的反向傳播(BPTT):前向計算整個序列的損失后(每個時間步loss的和),反向傳播梯度至所有時間步,更新共享參數
- 截斷BPTT:將長序列分割為子序列,僅在子序列內反向傳播,避免計算量過大,同時保留隱藏狀態的時序傳遞
-
RNN的可解釋性分析
通過可視化RNN隱藏單元,發現部分單元具有特定功能:
引號檢測單元:對引號內文本敏感
行位置敏感單元:跟蹤文本在句中的位置
代碼深度單元:跟蹤代碼塊嵌套深度
-
圖像captioning與注意力機制
-
圖像captioning基本框架
結合CNN(提取圖像特征)和RNN(生成文字序列),CNN輸出圖像特征向量,去掉最后兩層全連接層,作為RNN的初始輸入,RNN逐步生成序列
-
注意力機制
RNN生成每個單詞時,會關注圖像的不同區域(比如生成straw時關注帽子的straw部分),通過加權特征向量Z=Σpivi實現(pi為注意力權重,vi為圖像特征)
-
-
視覺問答 VQA
任務定義:給定圖像和問題,RNN結合CNN特征和問題序列,輸出答案
注意力機制應用:RNN在處理問題時,會關注圖像中與問題相關的區域
-
RNN的梯度問題與LSTM
-
vanilla RNN的梯度問題
反向傳播時,梯度需要經過多個矩陣乘法(W的連乘),若W的最大奇異值>1,梯度爆炸;若W的最小奇異值<1,梯度消失,導致長序列依賴難以學習
解決方法:梯度裁剪(梯度范數超過閾值時縮放)緩解爆炸;改進架構(如LSTM)緩解消失
-
LSTM:長短期記憶網絡
核心公式:通過輸入門(i),遺忘門(f),輸出門(o),門之門(g:寫多少到細胞里)和細胞狀態(c)控制信息流動:
梯度優勢:細胞狀態ct通過元素乘法傳遞梯度(無矩陣連乘),實現”不間斷梯度流“,類似ResNet的殘差連接
-
-
RNN變體 GRU
-
GRU(門控循環單元)
簡化LSTM,合并輸入門和遺忘門為更新門(z),保留重置門(r):
-
其他RNN變體:如MUT1/2/3等,通過調整門控機制優化性能
-