聊聊RNN&LSTM

2023-10-30 12:00:41

RNN

用於解決輸入資料為,序列到序列(時間序列)資料,不能在傳統的前饋神經網路(FNN)很好應用的問題。時間序列資料是指在不同時間點上收集到的資料,這類資料反映了某一事物、現象等隨時間的變化狀態或程度,即輸入內容的上下文關聯性強。

整體結構

x、o為向量,分別表示輸入層、輸出層的值;U、V為權重矩陣,U是輸入層到隱藏層的權重矩陣,V是隱藏層到輸出層的權重矩陣,W 是上一次的值 S(t-1) 作為這一次的輸入的權重矩陣,S(t)是當前的隱藏層矩陣。

RNN層結構與計算公式

RNN層計算公式

RNN層正向傳播

MatMul表示矩陣乘積。

這裡的h也就是s,都是RNN層函數的輸出結果。RNN層的處理常式是tanh,輸出結果是h,因此RNN層具有"狀態",這也是其具有記憶性的原因。

RNN隱藏層的輸出結果,也被稱為隱藏狀態或是隱藏狀態向量,一般用h或s表示。

RNN層反向傳播

藍線表示反向傳播的線路圖

帶來的問題

由於啟用函數Tanh其反向傳播時,會導致梯度為0或趨於很大的數值,導致梯度消失或爆炸。

LSTM

通過引入輸入門、遺忘門和輸出門,解決RNN模型下帶來的梯度消失的問題。

整體結構

輸出門的結果用o來表示,其計算公式如下:

遺忘門的結果用f表示,其計算公式如下:

輸入門的結果用i表示,其計算公式如下:

遺忘門從上一時刻的記憶單元中刪除了應該忘記的東西,但需要新增一些應當記住的新資訊,新的記憶單元g,其計算公式如下:

要注意的是,不同的門輸出所代表的意義不一樣,因為其最後流向的地方不一樣,分別是轉換為了新的記憶單元c,新的隱藏狀態h。
最終彙總後的整體結構如下

反向傳播

藍線代表反向傳播路徑,記憶單元的反向傳播僅流過「+」和「×」節點。「+」節點將上游傳來的梯度原樣流出,所以梯度沒有變化(退化)。

優化

LSTM的優化可以從三個方面

  1. LSTM層的多層化
    1. 在使用RNN建立高精度模型時,加深LSTM層(疊加多個LSTM層)的方法往往很有效。之前我們只用了一個LSTM層,通過疊加多個層,可以提高語言模型的精度。
  2. 基於Dropout抑制過擬合
    1. 通過疊加LSTM層,可以期待能夠學習到時序資料的複雜依賴關係。換句話說,通過加深層,可以建立表現力更強的模型,但是這樣的模型往往會發生過擬合(overfitting)。
    2. Dropout隨機選擇一部分神經元,然後忽略它們,停止向前傳遞訊號。這種「隨機忽視」是一種制約,可以提高神經網路的泛化能力。
  3. 權重共用
    1. 共用權重可以減少需要學習的引數數量,從而促進學習。另外,引數數量減少,還能收穫抑制過擬合的好處。
    2. 繫結(共用)Embedding層和Affine層的權重的技巧在於權重共用。通過在這兩個層之間共用權重,可以大大減少學習的引數數量。