RNN/LSTM/GRU/seq2seq公式推導


  概括:RNN 適用於處理序列數據用於預測,但卻受到短時記憶的制約。LSTM 和 GRU 采用門結構來克服短時記憶的影響。門結構可以調節流經序列鏈的信息流。LSTM 和 GRU 被廣泛地應用到語音識別、語音合成和自然語言處理等。

1. RNN

  RNN 會受到短時記憶的影響。如果一條序列足夠長,那它們將很難將信息從較早的時間步傳送到后面的時間步。 因此,如果你正在嘗試處理一段文本進行預測,RNN 可能從一開始就會遺漏重要信息。在反向傳播期間,RNN 會面臨梯度消失的問題。 梯度是用於更新神經網絡的權重值,消失的梯度問題是當梯度隨着時間的推移傳播時梯度下降,如果梯度值變得非常小,就不會繼續學習。

 

(1)圖中的 U W V三種權重參數是共享的;

(2)S_t = f(U*Xt + W*St-1),此處沒有寫b,有的地方還需要加一個b,f函數一般為tanh;

(3)Ot = softmax(V*St)

隨后就是帶入數據,更新權重。但這里有一個問題W與U使用bp更新時會有St-1的輸入於是乎就有了BPTT的更新算法


 圖:RNN 的工作模式, 第一個詞被轉換成了機器可讀的向量,然后 RNN 逐個處理向量序列。

(1)逐一處理矢量序列

處理時,RNN 將先前隱藏狀態傳遞給序列的下一步。 而隱藏狀態充當了神經網絡記憶,它包含相關網絡之前所見過的數據的信息.

(2)計算隱藏狀態

首先,將輸入和先前隱藏狀態組合成向量, 該向量包含當前輸入和先前輸入的信息。 向量經過激活函數 tanh之后,輸出的是新的隱藏狀態或網絡記憶.

 

 
  激活函數 Tanh:激活函數 Tanh 用於幫助調節流經網絡的值。 tanh 函數將數值始終限制在 -1 和 1 之間.  

 

BPTT算法(Back Propagation Through Time) 

BPTT其實就是因為輸入變量為時間序列所以需要進行進一步的迭代。核心原理還是bp的鏈式法則。對w的推導:

 

 

  最終就是我們的權重更新公式。

  從上面的權重更新公式中,我們會發現里面有非常多的連乘。那么這就會帶來一個很大的問題:梯度彌散 / 梯度消失. 這也意味着像DNN一樣,隨着層次增多,它的訓練效率會急劇降低。為了解決梯度消失,於是乎就有LSTM;梯度爆炸 需要用另外的技術來處理,技術上相比梯度消失好解決,因此,很少有人大篇幅去論證這個問題。

 

2. LSTM

 

  LSTM 和 GRU 是解決短時記憶問題的解決方案,它們具有稱為“門”的內部機制,可以調節信息流。

  LSTM 的核心概念在於細胞狀態以及“門”結構。細胞狀態相當於信息傳輸的路徑,讓信息能在序列連中傳遞下去。你可以將其看作網絡的“記憶”。理論上講,細胞狀態能夠將序列處理過程中的相關信息一直傳遞下去。其實,LSTM 的記憶能力也沒有很高,好像也就 100 來個單詞的樣子。

門的激活函數:Sigmoid

門結構中包含着 sigmoid 激活函數。Sigmoid 激活函數與 tanh 函數類似,不同之處在於 sigmoid 是把值壓縮到 0~1 之間而不是 -1~1 之間。這樣的設置有助於更新或忘記信息,因為任何數乘以 0 都得 0,這部分信息就會剔除掉。同樣的,任何數乘以 1 都得到它本身,這部分信息就會完美地保存下來。這樣網絡就能了解哪些數據是需要遺忘,哪些數據是需要保存。

LSTM 有三種類型的門結構:遺忘門、輸入門和輸出門

  遺忘門

  遺忘門的功能是決定應丟棄或保留哪些信息。來自前一個隱藏狀態的信息和當前輸入的信息同時傳遞到 sigmoid 函數中去,輸出值介於 0 和 1 之間,越接近 0 意味着越應該丟棄,越接近 1 意味着越應該保留。

  輸入門

  輸入門用於更新細胞狀態。首先將前一層隱藏狀態的信息和當前輸入的信息傳遞到 sigmoid 函數中去。將值調整到 0~1 之間來決定要更新哪些信息。0 表示不重要,1 表示重要。

  其次還要將前一層隱藏狀態的信息和當前輸入的信息傳遞到 tanh 函數中去,創造一個新的侯選值向量。最后將 sigmoid 的輸出值與 tanh 的輸出值相乘,sigmoid 的輸出值將決定 tanh 的輸出值中哪些信息是重要且需要保留下來的。

  細胞狀態

  下一步,就是計算細胞狀態。首先前一層的細胞狀態與遺忘向量逐點相乘。如果它乘以接近 0 的值,意味着在新的細胞狀態中,這些信息是需要丟棄掉的。然后再將該值與輸入門的輸出值逐點相加,將神經網絡發現的新信息更新到細胞狀態中去。至此,就得到了更新后的細胞狀態。

  輸出門

  輸出門用來確定下一個隱藏狀態的值,隱藏狀態包含了先前輸入的信息。首先,我們將前一個隱藏狀態和當前輸入傳遞到 sigmoid 函數中,然后將新得到的細胞狀態傳遞給 tanh 函數。

  最后將 tanh 的輸出與 sigmoid 的輸出相乘,以確定隱藏狀態應攜帶的信息。再將隱藏狀態作為當前細胞的輸出,把新的細胞狀態和新的隱藏狀態傳遞到下一個時間步長中去。


具體公式:

下圖是Recurrent NN的結構圖

如果將每個時間步的網絡稱為A,並且每個網絡換成LSTM的gated cell,則得到以下兩個圖的LSTM結構。這里的LSTM cell指的是一層cells,即A;而不是MLP中的一個節點。

num_units指的是一層的output size(hidden size),可以不與xt的維度相等。因為LSTM cell

還會有一個非線性變換,即Wt的權重矩陣會變換input dim為output size,故權重矩陣使得在timestep t的x的dim變換為output hidden size。

LSTM的參數數量:以seq2seq的encoder-decoder結構的LSTM網絡為例

假設:encoder、decoder各只有一層LSTM

cell的units_num(hidden size)=1000

steps=2000

word embedding dim(x_dim)=500

vocab size=50000

(1)Embedding:word embedding dim*vocab size = 50,000*500=25M

(2)Encoder:(hidden size * (hidden size + x_dim) + hidden size) * 4 = (1000 * 1500 + 1000) * 4 = 8M (4組gate)           

          (hidden size + x_dim )這個即: [h_{t-1}, x_{t}] ,這是LSTM的結構所決定的,注意這里跟time_step無關,

(3)Decoder同encoder=8M

(4)outputWord embedding dim * Decoder output = Word embedding dim * Decoder hidden size = 50,000 * 1000 = 50M

所以總共有:25M + 8M + 8M + 50M = 91M

 

總結:

  • 權重的計算與time_step無關,LSTM權值共享.
  • (hidden size + x_dim )這個亦即:[h_{t-1}, x_{t}]  ,這是LSTM的結構所決定的,注意這里跟time_step無關
  • 參數權重的數量,占大頭的還是vocab size與embedding dim 以及output hidden size.
  • LSTM的參數是RNN 的 一層的4倍的數量。

3. GRU

兩個門:

(1)更新門

  更新門的作用類似於 LSTM 中的遺忘門和輸入門。它決定了要忘記哪些信息以及哪些新信息需要被添加。

(2)重置門

  重置門用於決定遺忘先前信息的程度。

  GRU 的張量運算較少,因此它比 LSTM 的訓練更快一下。很難去判定這兩者到底誰更好,研究人員通常會兩者都試一下,然后選擇最合適的。

 

具體公式:

 

 

4. seq2seq

 

 

 

 

參考文獻:

【1】關於LSTM和GRU的詳細圖解指南

【2】時間序列(六): 炙手可熱的RNN: LSTM

【3】LSTM與GRU

【4】Tensorflow學習筆記--RNN精要及代碼實現

【5】LSTM的參數問題?

【6】http://www.huaxiaozhuan.com/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/chapters/6_RNN.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM