Recurrent Neural Network系列1--RNN(循環神經網絡)概述

做者:zhbzz2007 出處:http://www.cnblogs.com/zhbzz2007 歡迎轉載,也請保留這段聲明。謝謝!html

本文翻譯自 RECURRENT NEURAL NETWORKS TUTORIAL, PART 1 – INTRODUCTION TO RNNSgit

Recurrent Neural Networks(RNNS) ,循環神經網絡,是一個流行的模型,已經在許多NLP任務上顯示出巨大的潛力。儘管它最近很流行,可是我發現可以解釋RNN如何工做,以及如何實現RNN的資料不多。這個系列將會涵蓋以下幾個主題,github

咱們將會實現一個 基於語言模型的循環神經網絡 。語言模型有兩個應用。第一,基於句子在真實世界中出現的可能性,語言模型可讓咱們對任意的句子進行打分。這個就給予咱們一種度量語法和語義正確性的方式。語言模型一般應用在機器翻譯系統中。第二,語言模型容許咱們生成新的文本(我認爲這是一個更酷的應用)。在莎士比亞的做品上訓練一個語言模型,容許咱們生成莎士比亞風格的文本。Andrej Karpathy所寫的 blog 顯示了基於RNN的字符級的語言模型的能力。web

我假設你已經在必定程度上熟悉基本的神經網絡。若是你對基本的神經網絡還不熟悉,你能夠先看這篇blog IMPLEMENTING A NEURAL NETWORK FROM SCRATCH IN PYTHON – AN INTRODUCTION , 它將會讓你理解非循環網絡背後的思想和具體實現。算法

1 什麼是循環神經網絡?

循環神經網絡背後的思想就是使用序列信息。在傳統的神經網絡中,咱們認爲全部的輸入(和輸出)彼此之間是互相獨立的。可是對於不少任務而言,這個觀點並不合適。若是你想預測句子中的下一個詞,你最好須要知道它以前的詞。循環神經網絡之因此稱之爲循環,就是由於它們對於序列中每一個元素都執行相同的任務,輸出依賴於以前的計算。另外一種思考循環神經網絡的方法是,它們有一個記憶,記憶能夠捕獲迄今爲止已經計算過的信息。理論上,循環神經網絡能夠利用任意長度序列的信息,可是,在實際中,它們僅能利用有限長步(具體緣由會在後續解釋)。下面就是一個典型的循環神經網絡。網絡

上圖展現了一個循環神經網絡展開爲全網絡。經過展開,咱們簡單的認爲咱們寫出了所有的序列。例如,若是咱們關心的序列是一個有5個詞的句子,那麼這個網絡就會展開爲5層的神經網絡,一層對應一個詞。循環神經網絡中管理計算的公式以下所示,架構

  • \(x_{t}\) 是時刻t的輸入。例如, \(x_{1}\) 能夠是一個one-hot向量,對應句子中第二個詞;
  • \(s_{t}\) 是時刻t的隱層狀態。它是網絡的記憶。\(s_{t}\) 基於前一時刻的隱層狀態和當前時刻的輸入進行計算, \(s_{t} = f(U x_{t} + W s_{t-1})\) 。函數f一般是非線性的,如tanh或者ReLU。\(s_{-1}\) 被要求爲計算第一個隱藏狀態,一般被初始化爲全0;
  • \(o_{t}\) 是時刻t的輸出。例如,若是咱們想預測句子a的下一個詞,它將會是一個詞彙表中的機率向量,\(o_{t} = softmax(Vs_{t})\)

這裏有一些注意事項,以下:函數

  • 你能夠將隱層狀態\(s_{t}\) 認爲是網絡的記憶。\(s_{t}\) 能夠捕獲以前全部時刻發生的信息。輸出 \(o_{t}\) 的計算僅僅依賴於時刻t的記憶。上面已經簡略提到,實際中這個過程有些複雜,由於 \(s_{t}\) 一般不能獲取以前過長時刻的信息;
  • 不像傳統的深度神經網絡,在不一樣的層使用不一樣的參數,循環神經網絡在全部步驟中共享參數(U、V、W)。這個反映一個事實,咱們在每一步上執行相同的任務,僅僅是輸入不一樣。這個機制極大減小了咱們須要學習的參數的數量;
  • 上圖在每一步都有輸出,可是根據任務的不一樣,這個並非必須的。例如,當預測一個句子的情感時,咱們可能僅僅關注最後的輸出,而不是每一個詞的情感。類似地,咱們在每一步中可能也不須要輸入。循環神經網絡最大的特色就是隱層狀態,它能夠捕獲一個序列的一些信息;

2 循環神經網絡能夠作什麼?

循環神經網絡在不少NLP任務中顯示出巨大的成功。在這裏,我須要提醒一下,大部分循環神經網絡是 LSTM ,它比普通的循環神經網絡能夠更好的捕獲長期依賴。不用擔憂,LSTM本質上依然是循環神經網絡,它僅僅是在計算隱層狀態時採用一種不一樣的方式,咱們將會在後續的文章中詳細介紹它。下面是一些循環神經網絡應用到NLP的例子。post

2.1 語言模型和文本生成

給定一個詞序列,咱們想要預測每一個詞在給定前面的詞的條件機率。語言模型容許咱們度量一個句子的可能性,這是機器翻譯的重要輸入(高几率的句子一般是正確的)。預測下一個詞的副產品就是咱們能夠獲得一個生成模型,這容許咱們經過在輸出機率中採樣來生成下一個文本。依賴於咱們的訓練數據,咱們能夠生成 各類類型的文本 。在語言模型中,咱們的輸入一般是一個詞序列(例如,編碼爲one-hot向量),輸出就是待預測的詞序列。當訓練網絡時,咱們設置 \(o_{t} = x_{t+1}\) ,由於,咱們想要時刻t的輸出爲正確的下一個詞。學習

下面是一些關於語言模型和文本生成的文獻,

Recurrent neural network based language model

Extensions of Recurrent neural network based language model

Generating Text with Recurrent Neural Networks

2.2 機器翻譯

機器翻譯相似於語言模型,輸入是一個源語言的詞序列(例如,德語)。咱們想輸出一個目標語言的詞序列(例如,英語)。關鍵的區別就是咱們的輸出只能在咱們已經看見整個輸入以後開始,由於,咱們翻譯句子的第一個詞可能須要從整個輸入句子獲取信息。

下面是一些關於機器翻譯的文獻,

A Recursive Recurrent Neural Network for Statistical Machine Translation

Sequence to Sequence Learning with Neural Networks

Joint Language and Translation Modeling with Recurrent Neural Networks

2.3 語音識別

給定一個聲學信號的輸入序列,咱們能夠預測語音段序列以及它們的機率。

下面是一些關於語音識別的文獻,

Towards End-to-End Speech Recognition with Recurrent Neural Networks

2.4 生成圖像描述

結合卷積神經網絡,循環神經網絡也做爲模型的一部分,用於對無標註圖像 生成描述。讓人驚訝的是它是如何工做的。組合模型甚至能夠將生成的文字與圖像上的特徵進行對齊。


針對生成圖像描述的深度圖像-語義對齊,來源:http://cs.stanford.edu/people/karpathy/deepimagesent/

3 循環神經網絡的訓練

循環神經網絡的訓練相似於傳統神經網絡的訓練。咱們也使用反向傳播算法,可是有所變化。由於循環神經網絡在全部時刻的參數是共享的,可是每一個輸出的梯度不只依賴當前時刻的計算,還依賴以前時刻的計算。例如,爲了計算時刻 t = 4 的梯度,咱們還須要反向傳播3步,而後將梯度相加。這個被稱爲Backpropagation Through Time(BPTT)。若是你不能徹底理解這個,不要擔憂,咱們會在後面的文章詳細地介紹它。如今,咱們僅僅須要瞭解到利用BPTT算法訓練出來的普通循環神經網絡很難學習長期依賴(例如,距離很遠的兩步之間的依賴),緣由就在於梯度消失/發散問題。目前已經有一些機制來解決這些問題,特定類型的循環神經網絡(如LSTM)專門用於規避這些問題。

4 循環神經網絡的擴展

近年來,研究者已經提出了更加複雜的循環神經網絡,用以解決普通循環神經網絡的缺陷。咱們將會在後續的文章中詳細介紹,可是,我想在這部分大體介紹一些,以便大家能夠熟悉這些模型。

4.1 雙向循環神經網絡

Bidirectional RNNs(雙向循環神經網絡)基於這樣一種思想,時刻t的輸出不只依賴序列中以前的元素,也依賴於後續的元素。例如,要預測序列中缺失的詞,你會看一下左邊和右邊的上下文。雙向循環神經網絡很是簡單。它們僅僅是兩個循環神經網絡堆在一塊兒。輸出是基於兩個循環神經網絡的隱層狀態進行計算的。

雙向循環神經網絡的結構以下所示。

4.2 深度(雙向)循環神經網絡

Deep (Bidirectional) RNNs(深度(雙向)循環神經網絡)很是相似於雙向循環神經網絡,區別在於,每一時刻,網絡有多層。實際上,這個可讓網絡具有更強的學習能力(固然,也須要更多的訓練數據)。

深度循環神經網絡的結構以下所示。

4.3 LSTM

最近,LSTM網絡很是流行,咱們以前已經簡單提到。LSTM在架構上與循環神經網絡並無本質的不一樣,可是它們計算隱層狀態的函數會有所不一樣。LSTM中的記憶稱爲cell,你能夠將它視爲以以前的狀態 \(h_{t-1}\) 和當前的輸入 \(x_{t}\) 做爲輸入的一個黑盒。在內部,cell決定記憶中哪些保留(哪些刪除)。而後,以前的狀態,當前的記憶和輸入進行組合。這類單元在捕獲長期依賴上被證實是很是有效的。剛開始,LSTM會使人感到困惑,可是,若是你感興趣,你能夠看這篇博客 Understanding LSTM Networks

5 結論

到目前爲止,我但願你已經對什麼是循環神經網絡以及它們可以作什麼有一個基本的瞭解。在下一篇文章中,咱們將會使用Python和Theano實現循環神經網絡語言模型的第一個版本。

6 Reference

RECURRENT NEURAL NETWORKS TUTORIAL, PART 1 – INTRODUCTION TO RNNS

The Unreasonable Effectiveness of Recurrent Neural Networks

相關文章
相關標籤/搜索