1. 程式人生 > >【論文閱讀筆記3】序列模型入門之LSTM和GRU

【論文閱讀筆記3】序列模型入門之LSTM和GRU

本文只是吳恩達視訊課程關於序列模型一節的筆記。

參考資料:

吳恩達深度學習工程師微專業之序列模型

博文——理解LSTM

吳恩達本來就是根據這篇博文的內容來講的,所以 個人認為 認真學習過吳恩達講的那個課程後可以不用再看那篇博文了,能獲得的新的知識不多,另外網上的博文基本也都是根據那篇博文寫的。

一、序列模型

       我們知道,卷積神經網路(CNN)主要是處理影象的。那麼迴圈神經網路(RNN)呢?主要是用來處理序列的。

       那麼,什麼是序列呢?序列是排成一列的事件或物件,比如一段語音是一個時間序列,某一個時刻點的語音訊號的幅值就是這個序列的一個物件;再比如一段視訊是一個序列,視訊的每一幀就是一個物件;一段話是一個序列,話裡的每個單詞或每個漢字就是一個物件。序列一個明顯的特徵

是它是有先後順序的,它是一維的。下圖是序列的一些例子(中間一列是輸入的序列,右邊一列是輸出,輸出不一定是序列)

二、一個標準的RNN

1、RNN要解決的問題

        為什麼不用一個標準的神經網路呢?

  •         對於全連線網路,輸入輸出的單元數是固定的。但是實際情況中,輸入輸出的不同序列長度不一定相同。比如機器翻譯,輸入的不同句子長度一般是不同的,輸出的也一樣。    (1)
  •         標準的神經網路中,輸入序列的不同位置是彼此獨立的,不共享特徵。(2)

2、一個標準的RNN

  注意每個時間步的引數W、b是共享的,也就是說圖中的神經網路是迴圈利用的,只是每次迭代的輸入不一樣而已。 

3、RNN相關問題與解決辦法

     可以看到,通過將上一個步長的啟用值傳給下一個時間步,使得序列的不同位置彼此關聯,從而解決了問題(2)

     但是還存在一個問題是,每一個時刻的輸出之和之前的時刻相關,而和之後的時刻無關。這個問題可以通過雙向RNN解決。

     至於問題(1),可以通過轉變RNN的結構解決,這一點可以看視訊1.5節,在此略過。

     事實上,對於問題(2),RNN並沒有完全解決,這裡存在一個長期依賴的問題,什麼是長期依賴呢?

    長期依賴可以理解為一段序列中相隔很遠的兩個物件間存在的依賴關係。而標準的RNN恰好是不能很好解決這種依賴關係的。

    拿機器翻譯距離,如果一句話中兩個單詞離得很近,那麼RNN能夠將兩個單詞關聯起來,或者說將前一個單詞的特徵傳遞給處理後一個單詞的網路層。但是如果兩個單詞離得很遠呢?那就說不好了。為什麼呢?因為梯度消失,在反向傳播的過程中,由於梯度消失的存在,使得相離較遠的兩個單詞間的依賴關係很弱,這是我們不想要的。

   那麼如何解決這個長期依賴的問題呢?所以LSTM提出來了,而GRU是LSTM的一個簡易版的變種。

三、GRU

        先看一個標準的RNN單元是如何表示的

我們將這個RNN單元做一些改動:

這裡我覺得主要有兩個概念,一個是記憶細胞,一個是門函式。在GRU中,所謂的記憶細胞c實際上就是標準RNN中的啟用值a,它從左到右依次傳遞,作用是儲存之前的時間步的特徵。而門函式我覺得是理解的關鍵點,門函式是一個sigmoid層,它的輸出範圍是0~1,門函式決定了是否要更新記憶細胞,1為更新,0為不更新,這一點看公式很容易理解。

個人覺得這種思路和CNN中的ResNet殘差網路有異曲同工之處,其核心思想都是通過一種同等對映關係來將前面層與後面層緊密連線起來,而中間的網路層是稀疏的,從而解決梯度消失的問題。

四、LSTM

   LSTM比GRU更加複雜,但核心思想還是一樣的,畢竟GRU是從LSTM衍生出來的。LSTM和GRU的區別在於它多了兩個門,分別是遺忘門和輸出門。它用遺忘門代替了GRU的1-更新門。使得記憶細胞的更新過程更加靈活,當然這也意味著需要學習的引數更多。另外新增的輸出門增加了一個輸出,使得a不再等同於c,同樣增添了網路的複雜度。

   功能上比較,GRU更簡單,更容易搭建網路。LSTM更靈活,更強大。