RNN中的門控循環單元GRU

1. RNN隱層單元結構可視化

下面是一個基本的RNN隱層單元結構:

在這裏插入圖片描述

其中,a是上一個時刻的激活函數輸出值,x是當前時刻的輸入,y是當前時刻的輸出。

要理解這個單元結構,需要注意2點:

  • a與x結合,通過激活函數的作用後,有兩個分支,一個分支作爲下一個時刻的輸入a
  • 另一個分支通過softmax作用後,作爲當前時刻的輸出y

2. GRU單元中的符號

GRU(Gated Recurrent Unit)是門控循環單元的簡稱。爲了理解GRU,我們一步一步引入一些記號:

  1. 符號c:代表memory cell(記憶細胞),提供了記憶能力

  2. c就等於t時刻激活函數輸出值a(這裏c=a,但在LSTM中他們並不相等)

  3. c~的值(如下),它會被用於更新c的值(本節6中會講到更新公式)

在這裏插入圖片描述

所以,c<t>的值,是01之間的小數,因爲tanh(x)在x大於0時,輸出是0~1之間的小數。

  1. sigma(符號類似6),代表sigmoid函數,所以"6(x)"的輸出值爲0~1之間的小數;而且大多數x輸入,輸出的值都非常接近0或者1。具體在5中可以看到這個符號。

  2. gamma(符號類似7鏡像過來),看起來像門的邊緣,所以門用gamma符號來表示。有時候也用Gate的G字母來表示(門)。門會決定是否要更新c值,門的作用就是決定什麼時候你會更新(記住)這個值。

在這裏插入圖片描述

  1. 最終,記憶細胞c的值,由下式決定

在這裏插入圖片描述

如果gamma=1,則用3中c~的值的更新c;否則,就不更新c,沿用上一時刻的值(c=c)。

因爲sigmoid函數的值比較容易爲0,所以大部分內容是不需要記憶的。

3. GRU單元原理舉例

我們舉個簡單的例子來說明GRU的工作原理:

給定一句話:The cat, which already ate …, was full.

GRU在處理時,t時刻處理到cat時,就會記住cat爲單數,所以記憶細胞c值爲1(假設單數就爲1)。

處理到was之前,發現記憶細胞c還是爲1,所以就知道是單數,我們需要用was。

門的作用,就是告訴我們哪些時刻需要更新c值(需要記住它),哪些時刻可以不更新(可以忘記它,不需要記憶這些內容)。所以處理到“The cat”時,更新c值,而後面的半句話(which already ate …)可以不需要記憶(可以忘記它了)。

注意,這裏舉例簡化了c的維度,實際上,c的值可能是高維的。並且實際使用中,gamma大多數情況下不會爲1或0,而是0~1之間的小數。

4. GRU單元結構可視化

首先說明,上面的公式,比這個結構圖好理解。具體的GRU單元結構可視化如下圖

在這裏插入圖片描述

它與1中講到的RNN隱層結構很類似,要理解這個單元結構,需要注意2點:

  • c與x結合,通過激活函數與門的作用後,有兩個分支,一個分支作爲下一個時刻的輸入c
  • 另一個分支通過softmax作用後,作爲當前時刻的輸出y

5. GRU如何改善梯度消失

我們再回看記憶細胞值更新的公式:

在這裏插入圖片描述

可見gamma(門控)的值,是比較容易接近0的,因爲sigmoid函數的作用。在sigmoid(x)中,在一個很大的參數區間(x<0)都等於0。

所以,gamma的值接近0時,c的值就會被維護住(c=c),這樣就不會因爲梯度消失而使c的值消失了。

回憶一下,梯度消失,會導致a的值,不能傳到後面時刻。這裏c=a(2.2中定義)。c能被記住,也就不存在梯度消失問題了。

這使得RNN能被運行在非常龐大的依賴詞上了。

6. 完整的GRU公式

上面講的是簡化了的GRU,完整的GRU,還需要加上一個門(一共兩個門),如下:

在這裏插入圖片描述

打印體公式(3個公式)是簡化的GRU的表達(上面講的內容),手寫體公式是完整GRU中被加上的另一個門gamma_r(符號類似7鏡像過來)。

r代表相關性,所以gamma_r表示計算出的下一個時刻的c值,與上一個時刻的c值有多大的相關性。

這4個公式,表示了完整的GRU。

7. 總結

研究者通過很多的實驗,證明了GRU再解決梯度消失問題上的有效性,也證明了GRU能讓神經網絡有更深的連接,能產生更長範圍的依賴,所以GRU是一個標準版本,是研究者們最常使用的一個版本,他是非常健壯和實用的。

參考

  • [1]. Andrew Ng Sequence Models video
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章