迴圈神經網路(RNN,Recurrent Neural Networks)介紹

universe_ant發表於2016-10-20

迴圈神經網路(RNN,Recurrent Neural Networks)介紹

迴圈神經網路(Recurrent Neural Networks,RNNs)已經在眾多自然語言處理(Natural Language Processing,NLP)中取得了巨大成功以及廣泛應用。


不同於傳統的FNNs(Feed-forward Neural Networks,前向反饋神經網路),RNNs引入了定向迴圈,能夠處理那些輸入之間前後關聯的問題。定向迴圈結構如下圖所示:

該tutorial預設讀者已經熟悉了基本的神經網路模型。

什麼是RNNs?

RNNs的目的是用來處理序列資料。在傳統的神經網路模型中,,是從輸入層到隱含層再到輸出層,層與層之間是全連線的,每層之間的節點是無連線的。但是這種普通的神經網路對於很多問題卻無能為力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNNs之所以成為迴圈神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的資訊進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連線而是有連線的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNNs能夠對任何長度的序列資料進行處理。但是在實踐中,為了降低複雜性往往假設當前的狀態只與前面的幾個狀態相關,下圖便是一個典型的RNNs:

RNNs包含輸入單元(Input units),輸入集標記為{x0,x1,...,xt,xt+1,...},而輸出集單元(Output units)的輸出集則被標記為{y0,y1,...,yt,yt+1.,..}。RNNs還包含隱藏單元(Hidden units),我們將其輸出集標記為{s0,s1,...,st,st+1,...},這些隱藏單元完成了最為主要的任務。你會發現,在圖中,有一條單向流動的資訊流是從輸入單元到達隱藏單元的,與此同時另一條單向流動的資訊流從隱藏單元到達輸出單元。在某些情況下,RNNs會打破後者的限制,引導資訊從輸出單元返回隱藏單元,這些被稱為“Back Projections”,並且隱藏層的輸入還包括上一隱藏層的狀態,即隱藏層內的節點可以自連也可以互連。

上圖將迴圈神經網路進行展開成一個全神經網路。例如,對一個包含5個單詞的語句,那麼展開的網路便是一個五層的神經網路,每一層代表一個單詞。對於該網路的計算過程如下:

  • xt表示第t(t = 1, 2, 3, ...)步的輸入。
  • st為隱藏層的第t步的狀態,它是網路的記憶單元。st根據當前輸入層的輸出與上一步隱藏層的狀態進行計算。st=f(Uxt+Wst1),其中f一般是非線性的啟用函式,如tanh或ReLU,在計算第一個st時,其前一個隱藏層狀態並不存在,在實現中一般置為0向量。
  • ot是第t步的輸出。如下個單詞的向量表示,ot=softmax(Vst)
需要注意的是:
  • 你可以認為隱藏層狀態st是網路的記憶單元.st包含了前面所有步的隱藏層狀態。而輸出層的輸出ot只與當前步的st有關,在實踐中,為了降低網路的複雜度,往往st只包含前面若干步而不是所有步的隱藏層狀態;
  • 在傳統神經網路中,每一個網路層的引數是不共享的。而在RNNs中,每輸入一步,每一層各自都共享引數U,V,W。其反應RNNs中的每一步都在做相同的事,只是輸入不同,因此大大地降低了網路中需要學習的引數。再解釋一下,傳統神經網路的引數是不共享的,並不是表示對於每個輸入有不同的引數,如果這是一個多層的傳統神經網路,那麼xtst之間的U矩陣與xt+1st+1之間的U是不同的,而RNNs中的卻是一樣的,同理對於ss層之間的Ws層與o層之間的V也是一樣的。
  • 上圖中每一步都會有輸出,但是每一步都要有輸出並不是必須的。比如,我們需要預測一條語句所表達的情緒,我們僅僅需要關係最後一個單詞輸入後的輸出,而不需要知道每個單詞輸入後的輸出。同理,每步都需要輸入也不是必須的。RNNs的關鍵之處在於隱藏層,隱藏層能夠捕捉序列的資訊。

RNNs能幹什麼?

RNNs已經被在實踐中證明對NLP是非常成功的。如詞向量表達、語句合法性檢查、詞性標註等。在RNNs中,目前使用最廣泛最成功的模型便是LSTM(Long Short-Term Memory,長短時記憶模型),該模型通常比普通RNNs能夠更好地對長短時依賴進行表達,該模型相對於一般的RNNs,只是隱藏層做了手腳。對於LSTM,後面會進行詳細介紹。下面對RNNs在NLP中的應用進行簡單的介紹。

語言模型與文字生成(Language Modeling and Generating Text)

給定一個單詞序列,我們需要根據前面的單詞預測每一個單詞的可能性。語言模型能夠表達一個語句正確的可能性,這是機器翻譯的一部分,往往可能性越大,語句越正確。另一個應用便是使用生成模型預測下一個單詞的概率,從而生成新的文字。語言模型中,典型的輸入是單詞序列中每個單詞的詞向量(如One-Hot Vector),輸出是預測的單詞序列。

機器翻譯(Machine Translation)

機器翻譯是將一種源語言語句變成意思相同的另一種源語言語句,如將英語語句變成同樣意思的中文語句。與語言模型關鍵的區別在於,需要將源語言語句序列輸入後,才進行輸出,即輸出第一個單詞時,便需要從完整的輸入序列中進行獲取。機器翻譯如下圖所示:

語音識別(Speech Recognition)

語音識別是指給一段聲波的聲音訊號,預測該聲波對應的某種指定源語言的語句以及該語句的概率值。

影像描述生成(Generating Image Descriptions)

和卷積神經網路(convolutional Neural Networks, CNNs)一樣,RNNs已經在對無標影像描述自動生成中得到應用。將CNNs與RNNs結合進行影像描述自動生成。這是一個非常神奇的研究與應用。該組合模型能夠根據影像的特徵生成描述。如下圖所示:

如何訓練RNNs

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



轉載文章地址

相關文章