RNN網絡詳解

一、RNN網絡簡介
  RNN網絡的目的是用來處理序列數據,保存前後序列之間的前後關係,讓網絡對於信息具有記憶能力。對於傳統的神經網絡模型,它是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網絡對於一些問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因爲一個句子中前後單詞並不是獨立的,再比如你要判斷一個人說話的情感,肯定也需要用到全局前後詞的信息來進行判斷。
  在這個背景下,爲了記憶前後序列之間的關係,RNN網絡被提出。RNN叫循環神經網路,在該網絡中一個序列當前的輸出與前面的輸出有關。具體的表現形式爲網絡會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN網絡能夠對任何長度的序列數據進行處理。但是在實踐中,爲了降低複雜性往往假設當前的狀態只與前面的幾個狀態相關,下圖便是一個典型的RNN網絡:

這裏寫圖片描述

這裏寫圖片描述

  RNN網絡包含輸入單元(Input units),輸入集標記爲{x0,x1,…,xt,xt+1,…},而輸出單元(Output units)的輸出集則被標記爲{o0,o1,…,ot,ot+1,…}。RNN網絡還包含隱藏單元(Hidden units),我們將其輸出集標記爲{s0,s1,…,st,st+1,…},這些隱藏單元完成了最爲主要的工作。在上圖中:有一條單向流動的信息流是從輸入單元到達隱藏單元的,與此同時另一條單向流動的信息流從隱藏單元到達輸出單元。在某些情況下,RNN網絡會打破後者的限制,引導信息從輸出單元返回隱藏單元,這些被稱爲“Back Projections”,並且隱藏層的輸入還包括上一隱藏層的狀態,即隱藏層內的節點可以自連也可以互連。
  上圖將循環神經網絡進行展開成一個全神經網絡。例如,對一個包含5個單詞的語句,那麼展開的網絡便是一個五層的神經網絡,每一層代表一個單詞。對於該網絡的計算過程如下:
  (1)xt表示第t,t=1,2,3…步(step)的輸入。比如,x1爲第二個詞的one-hot向量(根據上圖,x0爲第一個詞);
  註釋:使用計算機對自然語言進行處理,便需要將自然語言處理成爲機器能夠識別的符號,加上在機器學習過程中,需要將其進行數值化。而詞是自然語言理解與處理的基礎,因此需要對詞進行數值化,詞向量(Word Representation,Word embeding)便是一種可行又有效的方法。何爲詞向量,即使用一個指定長度的實數向量v來表示一個詞。有一種種最簡單的表示方法,就是使用One-hot vector表示單詞,即根據單詞的數量|V|生成一個|V| * 1的向量,當某一位爲一的時候其他位都爲零,然後這個向量就代表一個單詞。缺點也很明顯:
  (a)由於向量長度是根據單詞個數來的,如果有新詞出現,這個向量還得增加,麻煩;
  (b)主觀性太強(subjective);
  (c)這麼多單詞,還得人工打labor並且adapt,想想就恐;
  (d)最不能忍受的一點便是很難計算單詞之間的相似性。
現在有一種更加有效的詞向量模式,該模式是通過神經網或者深度學習對詞進行訓練,輸出一個指定維度的向量,該向量便是輸入詞的表達。如word2vec。
  (2)st爲隱藏層的第t步的狀態,它是網絡的記憶單元。 st根據當前輸入層的輸出與上一步隱藏層的狀態進行計算。st=f(U*xt+W*st−1),其中f一般是非線性的激活函數,如tanh或Relu,在計算s0時,即第一個單詞的隱藏層狀態,需要用到s-1,但是其並不存在,在實現中一般置爲0向量;
  (3)ot是第t步的輸出,如下個單詞的向量表示,ot=softmax(V*st)。
  注意:(a)隱藏層狀態st是網絡的記憶單元。st包含了前面所有步的隱藏層狀態。而輸出層的輸出ot只與當前步的st有關,在實踐中,爲了降低網絡的複雜度,往往st只包含前面若干步而不是所有步的隱藏層狀態;
  (b)在傳統神經網絡中,每一個網絡層的參數是不共享的。而在RNN網絡中,每輸入一步,每一層各自都共享參數U,V,W。其反應RNN網絡中的每一步都在做相同的事,只是輸入不同,因此大大地降低了網絡中需要學習的參數;這裏並沒有說清楚,解釋一下,傳統神經網絡的參數是不共享的,並不是表示對於每個輸入有不同的參數,而是將RNN是進行展開,這樣變成了多層的網絡,如果這是一個多層的傳統神經網絡,那麼xt到st之間的U矩陣與xt+1到st+1之間的U是不同的,而在RNN網絡中的卻是一樣的,同理對於s與s層之間的W、s層與o層之間的V也是一樣的。
  (c)上圖中每一步都會有輸出,但是每一步都要有輸出並不是必須的。比如,我們需要預測一條語句所表達的情緒,我們僅僅需要關係最後一個單詞輸入後的輸出,而不需要知道每個單詞輸入後的輸出。同理,每步都需要輸入也不是必須的。RNN網絡的關鍵之處在於隱藏層,隱藏層能夠捕捉序列的信息。

二、RNN網絡的實際應用
  RNN網絡已經在實踐中被證明對NLP問題的實踐是非常成功的。如詞向量表達、語句合法性檢查、詞性標註、句子分類等。在RNN網絡中,目前使用最廣泛最成功的模型便是LSTMs(Long Short-Term Memory,長短時記憶模型)模型,該模型通常比vanilla RNNs能夠更好地對長短時依賴進行表達,該模型相對於一般的RNN網絡,只是在隱藏層做了手腳。對於LSTMs,後面會進行詳細地介紹。下面對RNN網絡在NLP中的應用進行簡單的介紹。
1、語言模型與文本生成
  給定一個詞的序列,我們想預測在前面的詞確定之後,每個詞出現的概率。語言模型可以度量一個句子出現的可能性,這可以作爲機器翻譯的一個重要輸入(因爲出現概率高的句子通常是正確的)。能預測下一個詞所帶來的額外效果是我們得到了一個生成模型,這可以讓我們通過對輸出概率採樣來生成新的文本。根據訓練數據的具體內容,我們可以生成任意東西。在語言模型中,輸入通常是詞的序列(編碼成one hot向量),輸出是預測得到的詞的序列。
2、機器翻譯
  機器翻譯是將一種源語言語句變成意思相同的另一種源語言語句,如將英語語句變成同樣意思的中文語句。與語言模型關鍵的區別在於,需要將源語言語句序列輸入後,才進行輸出,即輸出第一個單詞時,便需要從完整的輸入序列中進行獲取。機器翻譯如下圖所示:

這裏寫圖片描述

3、語音識別
  語音識別是指給一段聲波的聲音信號,預測該聲波對應的某種指定源語言的語句以及該語句的概率值。
4、圖像描述生成
  和卷積神經網絡(convolutional Neural Networks, CNNs)一樣,RNNs已經在對無標圖像描述自動生成中得到應用。將CNNs與RNNs結合進行圖像描述自動生成。這是一個非常神奇的研究與應用。該組合模型能夠根據圖像的特徵生成描述。如下圖所示:

這裏寫圖片描述

三、如何訓練RNN網絡
  對於RNN是的訓練和對傳統的ANN訓練一樣。同樣使用BP誤差反向傳播算法,不過有一點區別。如果將RNN網絡進行展開,那麼參數W,U,V是共享的,而傳統神經網絡卻不是的。並且在使用梯度下降算法中,每一步的輸出不僅依賴當前步的網絡,並且還以來前面若干步網絡的狀態。比如,在t=4時,我們還需要向後傳遞三步,後面的三步都需要加上各種的梯度。該學習算法稱爲Backpropagation Through Time (BPTT)。後面會對BPTT進行詳細的介紹。需要意識到的是,在vanilla RNN訓練中,BPTT無法解決長時依賴問題(即當前的輸出與前面很長的一段序列有關,一般超過十步就無能爲力了),這是因爲BPTT會帶來所謂的梯度消失或梯度爆炸問題(the vanishing/exploding gradient problem)。當然,有很多方法去解決這個問題,如LSTM便是專門應對這種問題的。

四、RNN的改進模型
4.1 雙向RNN網絡
  Bidirectional RNN(雙向網絡)的改進之處便是,假設當前的輸出(第t步的輸出)不僅僅與前面的序列有關,並且還與後面的序列有關。例如:預測一個語句中缺失的詞語那麼就需要根據上下文來進行預測。Bidirectional RNN是一個相對較簡單的RNN網絡,是由兩個RNN網絡上下疊加在一起組成的。輸出由這兩個RNN網絡的隱藏層的狀態決定的。如下圖所示:

這裏寫圖片描述

4.2 Deep(Bidirectional)RNN網絡
  Deep(Bidirectional)RNN與Bidirectional RNN相似,只是對於每一步的輸入有多層網絡。這樣,該網絡便有更強大的表達與學習能力,但是複雜性也提高了,同時需要更多的訓練數據。Deep(Bidirectional)RNN的結構如下圖所示:

這裏寫圖片描述

4.3 Gated Recurrent Unit Recurrent Neural Networks(GRU)
  GRU是一般的RNN的改良版本,主要是從以下兩個方面進行改進。一是,序列中不同的位置處的單詞(以單詞舉例)對當前的隱藏層的狀態的影響不同,越前面的影響越小,即每個前面狀態對當前的影響進行了距離加權,距離越遠,權值越小。二是,在產生誤差error時,誤差可能是由某一個或者幾個單詞而引發的,所以應當僅僅對對應的單詞weight進行更新。GRU的結構如下圖所示。GRU首先根據當前輸入單詞向量word vector和前一個隱藏層的狀態hidden state計算出update gate和reset gate。再根據reset gate、當前word vector以及前一個hidden state計算新的記憶單元內容(new memory content)。當reset gate爲1的時候,new memory content忽略之前的所有memory content,最終的memory是之前的hidden state與new memory content的結合。

這裏寫圖片描述

4.4 LSTM網絡
  RNN是深度學習領域用於解決序列問題的神器,從理論的上來說,RNN是可以實現長時間記憶的。然而RNN反向求導會出現梯度彌散或者梯度爆炸,導致我們很難訓練網絡,對於長時刻記憶總不盡人意,於是就誕生了LSTM。
  LSTM與GRU類似,目前非常流行。它與一般的RNN結構本質上並沒有什麼不同,只是使用了不同的函數去計算隱藏層的狀態。在LSTM中,i結構被稱爲cells,可以把cells看作是黑盒用以保存當前輸入xt和之前的保存的狀態ht-1,這些cells加一定的條件決定哪些cell抑制哪些cell興奮。它們結合前面的狀態、當前的記憶與當前的輸入。如今已經證明,該網絡結構在對長序列依賴問題中非常有效。LSTMs的網絡結構如下圖所示:

這裏寫圖片描述

具體的變化過程如下圖所示:

這裏寫圖片描述

  具體的計算公式如下所示:

這裏寫圖片描述

上面的計算公式也可以通過下面二個圖來進行理解:

這裏寫圖片描述

這裏寫圖片描述

4.5 LSTM與GRU的區別

這裏寫圖片描述

  從上圖可以看出,LSTM和GRU之間非常相像,都能通過各種Gate將重要特徵保留,保證其在long-term 傳播的時候也不會被丟失,不同在於:
  (1)new memory的計算方法都是根據之前的state及input進行計算,但是GRU中有一個reset gate控制之前state的進入量,而在LSTM裏沒有這個gate;
  (2)產生新的state的方式不同,LSTM有兩個不同的gate,分別是forget gate (f gate)和input gate(i gate),而GRU只有一個update gate(z gate);
  (3)LSTM對新產生的state有一個output gate(o gate)可以調節大小,而GRU直接輸出無任何調節。

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