RNN、LSTM、GRU


一、什么是循環神經網絡:

循環神經網絡(Rerrent Neural Network, RNN),RNN是神經網絡的一種,類似的還有深度神經網絡DNN,卷積神經網絡CNN,生成對抗網絡GAN,等等。

RNN的特點,RNN對具有序列特性的數據非常有效,它能挖掘數據中的時序信息以及語義信息,利用了RNN的這種能力,使深度學習模型在解決語音識別、語言模型、機器翻譯以及時序分析等NLP領域的問題時有所突破。

 

什么是序列特性,就是符合時間順序,邏輯順序,或者其他順序就叫序列特性,舉幾個例子:

  • 拿人類的某句話來說,也就是人類的自然語言,是不是符合某個邏輯或規則的字詞拼湊排列起來的,這就是符合序列特性
  • 語音,我們發出的聲音,每一幀每一幀的銜接起來,才湊成了我們聽到的話,這也具有序列特性
  • 股票,隨着時間的推移,會產生具有順序的一系列數字,這些數字也是具有序列特性
  • 再比如,用戶網購某個商品,在下單前的一系列瀏覽、關注、架構等動作也是序列化的

 


1 傳統的RNN

傳統的RNN也即BasicRNNcell單元。內部的運算過程為,(t-1)時刻的隱層輸出與w矩陣相乘,與t時刻的輸入乘以u之后的值進行相加,然后經過一個非線性變化(tanh或Relu),然后以此方式傳遞給下一個時刻。

傳統的RNN每一步的隱藏單元只是執行一個簡單的tanh或者Relu操作。

在RNN里面,如果網絡層次太深的話,此時會產生梯度消失或梯度下降問題。

為什么呢?首先想一個問題,RNN什么時候網絡層次比較深呢?

RNN如果有多個時刻輸入的時候,網絡層次比較深,此時反向傳播的路徑比較長。反向傳播是根據鏈式法則,如果開始的梯度小於1的話,則最后時刻的梯度幾乎為0,則可理解為梯度消失;反之,若開始的梯度大於1的話,則最后時刻的梯度則非常大,可理解為梯度爆炸。這種情況下,開始應用Relu激活函數。

為什么應用Relu函數呢?

Relu函數在小於0時的梯度為0,大於0的時候梯度為1。使用Relu的好處:1 梯度容易求解;2 不會產生梯度消失或梯度爆炸。

2 LSTM(long short term memory)

優點:

可以在解決梯度消失和梯度爆炸的問題,還可以從語料中學習到長期依賴關系。

圖中可以看出,t時刻有兩個輸出,上面代表長期輸出,下面代表短期輸出,用短期的輸出與矩陣v運算得到t時刻的輸出。

Tanh和sigmoid激活函數的優點?

首先tanh激活函數的范圍是(-1,1),負的部分可以減一些信息,也即來控制忘記還是記憶信息,而sigmoid激活函數是用來表示記住多少的信息。

LSTM內部結構詳解

LSTM中每個模塊由4層結構。

LSTM的關鍵是細胞狀態 [公式] ,一條水平線貫穿於圖形的上方,這條線上只有些少量的線性操作,信息在上面流傳很容易保持。(該層是長時記憶傳播)

第一層

第一層是個忘記層,決定細胞狀態中丟棄什么信息。把 [公式][公式] 拼接起來,傳給一個sigmoid函數,該函數輸出0到1之間的值,這個值乘到細胞狀態 [公式] 上去。sigmoid函數的輸出值直接決定了狀態信息保留多少。比如當我們要預測下一個詞是什么時,細胞狀態可能包含當前主語的性別,因此正確的代詞可以被選擇出來。當我們看到新的主語,我們希望忘記舊的主語。

第二層

上一步的細胞狀態 [公式] 已經被忘記了一部分,接下來本步應該把哪些信息新加到細胞狀態中呢?這里又包含2層:一個tanh層用來產生更新值的候選項 [公式] ,tanh的輸出在[-1,1]上,說明細胞狀態在某些維度上需要加強,在某些維度上需要減弱;還有一個sigmoid層(輸入門層),它的輸出值要乘到tanh層的輸出上,起到一個縮放的作用,極端情況下sigmoid輸出0說明相應維度上的細胞狀態不需要更新。在那個預測下一個詞的例子中,我們希望增加新的主語的性別到細胞狀態中,來替代舊的需要忘記的主語。

第三層

現在可以讓舊的細胞狀態 [公式][公式] (f是forget忘記門的意思)相乘來丟棄一部分信息,然后再加個需要更新的部分 [公式] (i是input輸入門的意思),這就生成了新的細胞狀態 [公式]

第四層

最后該決定輸出什么了。輸出值跟細胞狀態有關,把 [公式] 輸給一個tanh函數得到輸出值的候選項。候選項中的哪些部分最終會被輸出由一個sigmoid層來決定。在那個預測下一個詞的例子中,如果細胞狀態告訴我們當前代詞是第三人稱,那我們就可以預測下一詞可能是一個第三人稱的動詞。

3 GRU

GRU(Gated Recurrent Unit)是LSTM最流行的一個變體,比LSTM模型要簡單。

4 LSTM和GRU區別

1. 對memory 的控制

LSTM: 用output gate 控制,傳輸給下一個unit

GRU:直接傳遞給下一個unit,不做任何控制

2. input gate 和reset gate 作用位置不同

LSTM: 計算new memory c^(t)c^(t)時 不對上一時刻的信息做任何控制,而是用forget gate 獨立的實現這一點

GRU: 計算new memory h^(t)h^(t) 時利用reset gate 對上一時刻的信息 進行控制。

3. 相似

最大的相似之處就是, 在從t 到 t-1 的更新時都引入了加法。

這個加法的好處在於能防止梯度彌散,因此LSTM和GRU都比一般的RNN效果更好。



 


2.RNN,LSTM,GRU的優缺點

2.1 為什么LSTM能解決RNN不能長期依賴的問題

(1)RNN的梯度消失問題導致不能“長期依賴”

RNN中的梯度消失不是指損失對參數的總梯度消失了,而是RNN中對較遠時間步的梯度消失了。RNN中反向傳播使用的是back propagation through time(BPTT)方法,損失loss對參數W的梯度等於loss在各時間步對w求導之和。用公式表示就是:

[公式]

上式中 [公式] 計算較復雜,根據復合函數求導方式連續求導。

[公式]

[公式] 是當前隱狀態對上一隱狀態求偏導。

[公式]

假設某一時間步j距離t時間步相差了(t-j)時刻。則

[公式]

如果t-j很大,也就是j距離t時間步很遠,當 [公式] 時,,會產生梯度爆炸問題,當 [公式] 時,會產生梯度消失問題。而t-j很小時,也就是j是t的短期依賴,則不存在梯度消失/梯度爆炸的問題。一般會使用梯度裁剪解決梯度爆炸問題。所以主要分析梯度消失問題。

loss對時間步j的梯度值反映了時間步j對最終輸出 [公式] 的影響程度。就是j對最終輸出 [公式] 的影響程度越大,則loss對時間步j的梯度值也就越大。loss對時間步j的梯度值趨於0,就說明了j對最終輸出 [公式] 幾乎沒影響。

綜上:距離時間步t較遠的j的梯度會消失,說明j對最終輸出 [公式] 沒影響。也就是說RNN中不能長期依賴。

(2)LSTM如何解決梯度消失

LSTM設計的初衷就是讓當前記憶單元對上一記憶單元的偏導為常數。如在1997年最初版本的LSTM,記憶細胞更新公式為:

[公式]

后來為了避免記憶細胞無線增長,引入了“遺忘門”。更新公式為:

[公式]

此時連續偏導的值為:

[公式]

雖然 [公式] 是一個[0,1]區間的數值,不在滿足當前記憶單元對上一記憶單元的偏導為常數。但通常會給遺忘門設置一個很大的偏置項,使得遺忘門在多數情況下是關閉的,只有在少數情況下開啟。回顧下遺忘門的公式,這里我們加上了偏置b。

[公式]

趨向於1時,遺忘門關閉,趨向於0,時,遺忘門打開。通過設置大的偏置項,使得大多數情況下遺忘門的值趨於1。也就緩解了由於小數連乘導致的梯度消失問題。

2.2 相較於LSTM,GRU的優勢

GRU的參數量少,減少過擬合的風險

LSTM的參數量是Navie RNN的4倍(看公式),參數量過多就會存在過擬合的風險,GRU只使用兩個門控開關,達到了和LSTM接近的結果。其參數量是Navie RNN的三倍

 
 


鏈接:https://zhuanlan.zhihu.com/p/149819433
鏈接:https://zhuanlan.zhihu.com/p/123211148

 

很好的講解GRU和LSTM的文章:

GRU:https://zhuanlan.zhihu.com/p/32481747

LSTM:https://zhuanlan.zhihu.com/p/32085405


免責聲明!

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



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