循環神經網絡(Recurrent Neural Networks, RNN)介紹

目錄
1 什麼是RNNs
2 RNNs能幹什麼
  2.1 語言模型與文本生成Language Modeling and Generating Text
  2.2 機器翻譯Machine Translation
  2.3 語音識別Speech Recognition
  2.4 圖像描述生成 Generating Image Descriptions
3 如何訓練RNNs
4 RNNs擴展和改進模型
  4.1 Simple RNNsSRNs2
  4.2 Bidirectional RNNs3
  4.3 DeepBidirectionalRNNs4
  4.4 Echo State Networks5
  4.5 Gated Recurrent Unit Recurrent Neural Networks6
  4.6 LSTM Netwoorks7
  4.7 Clockwork RNNsCW-RNNs9
5 總結
6 參考博文
7 參考文獻html

  這篇文章不少內容是參考:http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/ ,在這篇文章中,加入了一些新的內容與一些本身的理解。python

  循環神經網絡(Recurrent Neural Networks,RNNs)已經在衆多天然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及普遍應用。可是,目前網上與RNNs有關的學習資料不多,所以該系列即是介紹RNNs的原理以及如何實現。主要分紅如下幾個部分對RNNs進行介紹:git

  1. RNNs的基本介紹以及一些常見的RNNs(本文內容);
  2. 詳細介紹RNNs中一些常用的訓練算法,如Back Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)、Extended Kalman Filter(EKF)等學習算法,以及梯度消失問題(vanishing gradient problem)
  3. 詳細介紹Long Short-Term Memory(LSTM,長短時記憶網絡);
  4. 詳細介紹Clockwork RNNs(CW-RNNs,時鐘頻率驅動循環神經網絡);
  5. 基於PythonTheano對RNNs進行實現,包括一些常見的RNNs模型。

  不一樣於傳統的FNNs(Feed-forward Neural Networks,前向反饋神經網絡),RNNs引入了定向循環,可以處理那些輸入之間先後關聯的問題。定向循環結構以下圖所示:github

該tutorial默認讀者已經熟悉了基本的神經網絡模型。若是不熟悉,能夠點擊:Implementing A Neural Network From Scratch進行學習。web

什麼是RNNs

  RNNs的目的使用來處理序列數據。在傳統的神經網絡模型中,是從輸入層到隱含層再到輸出層,層與層之間是全鏈接的,每層之間的節點是無鏈接的。可是這種普通的神經網絡對於不少問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,通常須要用到前面的單詞,由於一個句子中先後單詞並非獨立的。RNNs之因此稱爲循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式爲網絡會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點再也不無鏈接而是有鏈接的,而且隱藏層的輸入不只包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNNs可以對任何長度的序列數據進行處理。可是在實踐中,爲了下降複雜性每每假設當前的狀態只與前面的幾個狀態相關,下圖即是一個典型的RNNs:算法


From Nature網絡

  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個單詞的語句,那麼展開的網絡即是一個五層的神經網絡,每一層表明一個單詞。對於該網絡的計算過程以下:less

  • xt表示第t,t=1,2,3...步(step)的輸入。好比,x1爲第二個詞的one-hot向量(根據上圖,x0爲第一個詞);
    PS:使用計算機對天然語言進行處理,便須要將天然語言處理成爲機器可以識別的符號,加上在機器學習過程當中,須要將其進行數值化。而詞是天然語言理解與處理的基礎,所以須要對詞進行數值化,詞向量(Word Representation,Word embeding)[1]即是一種可行又有效的方法。何爲詞向量,即便用一個指定長度的實數向量v來表示一個詞。有一種種最簡單的表示方法,就是使用One-hot vector表示單詞,即根據單詞的數量|V|生成一個|V| * 1的向量,當某一位爲一的時候其餘位都爲零,而後這個向量就表明一個單詞。缺點也很明顯:
  1. 因爲向量長度是根據單詞個數來的,若是有新詞出現,這個向量還得增長,麻煩!(Impossible to keep up to date);
  2. 主觀性太強(subjective)
  3. 這麼多單詞,還得人工打labor而且adapt,想一想就恐
  4. 最不能忍受的一點即是很難計算單詞之間的類似性。
    如今有一種更加有效的詞向量模式,該模式是經過神經網或者深度學習對詞進行訓練,輸出一個指定維度的向量,該向量即是輸入詞的表達。如word2vec
  • st爲隱藏層的第t步的狀態,它是網絡的記憶單元。 st根據當前輸入層的輸出與上一步隱藏層的狀態進行計算。st=f(Uxt+Wst−1),其中f通常是非線性的激活函數,如tanhReLU,在計算s0時,即第一個單詞的隱藏層狀態,須要用到s−1,可是其並不存在,在實現中通常置爲0向量;
  • ot是第t步的輸出,以下個單詞的向量表示,ot=softmax(Vst).

須要注意的是:機器學習

  • 你能夠認爲隱藏層狀態st是網絡的記憶單元. st包含了前面全部步的隱藏層狀態。而輸出層的輸出ot只與當前步的st有關,在實踐中,爲了下降網絡的複雜度,每每st只包含前面若干步而不是全部步的隱藏層狀態;
  • 在傳統神經網絡中,每個網絡層的參數是不共享的。而在RNNs中,每輸入一步,每一層各自都共享參數U,V,W。其反應者RNNs中的每一步都在作相同的事,只是輸入不一樣,所以大大地下降了網絡中須要學習的參數;這裏並無說清楚,解釋一下,傳統神經網絡的參數是不共享的,並非表示對於每一個輸入有不一樣的參數,而是將RNN是進行展開,這樣變成了多層的網絡,若是這是一個多層的傳統神經網絡,那麼xt到st之間的U矩陣與xt+1到st+1之間的U是不一樣的,而RNNs中的倒是同樣的,同理對於s與s層之間的W、s層與o層之間的V也是同樣的。
  • 上圖中每一步都會有輸出,可是每一步都要有輸出並非必須的。好比,咱們須要預測一條語句所表達的情緒,咱們僅僅須要關係最後一個單詞輸入後的輸出,而不須要知道每一個單詞輸入後的輸出。同理,每步都須要輸入也不是必須的。RNNs的關鍵之處在於隱藏層,隱藏層可以捕捉序列的信息。

RNNs能幹什麼?

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

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

  給你一個單詞序列,咱們須要根據前面的單詞預測每個單詞的可能性。語言模型可以一個語句正確的可能性,這是機器翻譯的一部分,每每可能性越大,語句越正確。另外一種應用即是使用生成模型預測下一個單詞的機率,從而生成新的文本根據輸出機率的採樣。語言模型中,典型的輸入是單詞序列中每一個單詞的詞向量(如 One-hot vector),輸出時預測的單詞序列。當在對網絡進行訓練時,若是ot=xt+1,那麼第t步的輸出即是下一步的輸入。
  下面是RNNs中的語言模型和文本生成研究的三篇文章:

機器翻譯(Machine Translation)

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


RNN for Machine Translation. Image Source

  下面是關於RNNs中機器翻譯研究的三篇文章:

語音識別(Speech Recognition)

  語音識別是指給一段聲波的聲音信號,預測該聲波對應的某種指定源語言的語句以及該語句的機率值。
  RNNs中的語音識別研究論文:

圖像描述生成 (Generating Image Descriptions)

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


圖像描述生成中的深度視覺語義對比. Image Source

如何訓練RNNs

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

RNNs擴展和改進模型

  這些年,研究者們已經提出了多鍾複雜的RNNs去改進vanilla RNN模型的缺點。下面是目前常見的一些RNNs模型,後面會對其中使用比較普遍的進行詳細講解,在這裏進行簡單的概述。

Simple RNNs(SRNs)[2]

  SRNs是RNNs的一種特例,它是一個三層網絡,而且在隱藏層增長了上下文單元,下圖中的y即是隱藏層,u即是上下文單元。上下文單元節點與隱藏層中的節點的鏈接是固定(誰與誰鏈接)的,而且權值也是固定的(值是多少),實際上是一個上下文節點與隱藏層節點一一對應,而且值是肯定的。在每一步中,使用標準的前向反饋進行傳播,而後使用學習算法進行學習。上下文每個節點保存其鏈接的隱藏層節點的上一步的輸出,即保存上文,並做用於當前步對應的隱藏層節點的狀態,即隱藏層的輸入由輸入層的輸出與上一步的本身的狀態所決定的。所以SRNs可以解決標準的多層感知機(MLP)沒法解決的對序列數據進行預測的任務。
  SRNs網絡結構以下圖所示:

Bidirectional RNNs[3]

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

Deep(Bidirectional)RNNs[4]

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

Echo State Networks[5]

  ESNs(回聲狀態網絡)雖然也是一種RNNs,可是它與傳統的RNNs相差很大。ESNs具備三個特色:

  • 它的核心結構時一個隨機生成、且保持不變的儲備池(Reservoir),儲備池是大規模的、隨機生成的、稀疏鏈接(SD一般保持1%~5%,SD表示儲備池中互相鏈接的神經元佔總的神經元個數N的比例)的循環結構;
  • 其儲備池到輸出層的權值矩陣是惟一須要調整的部分;
  • 簡單的線性迴歸就可完成網絡的訓練。

  從結構上講,ESNs是一種特殊類型的循環神經網絡,其基本思想是:使用大規模隨機鏈接的循環網絡取代經典神經網絡中的中間層,從而簡化網絡的訓練過程。所以ESNs的關鍵是中間的儲備池。網絡中的參數包括:W爲儲備池中節點的鏈接權值矩陣,Win爲輸入層到儲備池之間的鏈接權值矩陣,代表儲備池中的神經元之間是鏈接的,Wback爲輸出層到儲備池之間的反饋鏈接權值矩陣,代表儲備池會有輸出層來的反饋,Wout爲輸入層、儲備池、輸出層到輸出層的鏈接權值矩陣,代表輸出層不只與儲備池鏈接,還與輸入層和本身鏈接。Woutbias表示輸出層的偏置項。
  對於ESNs,關鍵是儲備池的四個參數,如儲備池內部鏈接權譜半徑SR(SR=λmax=max{|W的特徵指|},只有SR <1時,ESNs才能具備回聲狀態屬性)、儲備池規模N(即儲備池中神經元的個數)、儲備池輸入單元尺度IS(IS爲儲備池的輸入信號鏈接到儲備池內部神經元以前須要相乘的一個尺度因子)、儲備池稀疏程度SD(即爲儲備池中互相鏈接的神經元個數佔儲備池神經元總個數的比例)。對於IS,若是須要處理的任務的非線性越強,那麼輸入單元尺度越大。該原則的本質就是經過輸入單元尺度IS,將輸入變換到神經元激活函數相應的範圍(神經元激活函數的不一樣輸入範圍,其非線性程度不一樣)。
  ESNs的結構以下圖所示:



Gated Recurrent Unit Recurrent Neural Networks[6]

  GRUs也是通常的RNNs的改良版本,主要是從如下兩個方面進行改進。一是,序列中不一樣的位置處的單詞(已單詞舉例)對當前的隱藏層的狀態的影響不一樣,越前面的影響越小,即每一個前面狀態對當前的影響進行了距離加權,距離越遠,權值越小。二是,在產生偏差error時,偏差多是由某一個或者幾個單詞而引起的,因此應當僅僅對對應的單詞weight進行更新。GRUs的結構以下圖所示。GRUs首先根據當前輸入單詞向量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的結合。

LSTM Netwoorks[7]

  LSTMs與GRUs相似,目前很是流行。它與通常的RNNs結構本質上並無什麼不一樣,只是使用了不一樣的函數去去計算隱藏層的狀態。在LSTMs中,i結構被稱爲cells,能夠把cells看做是黑盒用以保存當前輸入xt以前的保存的狀態ht−1,這些cells更加必定的條件決定哪些cell抑制哪些cell興奮。它們結合前面的狀態、當前的記憶與當前的輸入。已經證實,該網絡結構在對長序列依賴問題中很是有效。LSTMs的網絡結構以下圖所示。對於LSTMs的學習,參見 this post has an excellent explanation

LSTMs解決的問題也是GRU中所提到的問題,以下圖所示:

LSTMs與GRUs的區別如圖所示[8]:

從上圖能夠看出,它們之間很是相像,不一樣在於:

  • new memory的計算方法都是根據以前的state及input進行計算,可是GRUs中有一個reset gate控制以前state的進入量,而在LSTMs裏沒有這個gate;
  • 產生新的state的方式不一樣,LSTMs有兩個不一樣的gate,分別是forget gate (f gate)和input gate(i gate),而GRUs只有一個update gate(z gate);
  • LSTMs對新產生的state又一個output gate(o gate)能夠調節大小,而GRUs直接輸出無任何調節。

Clockwork RNNs(CW-RNNs)[9]

  CW-RNNs是較新的一種RNNs模型,其論文發表於2014年Beijing ICML。在原文[8]中做者表示其效果較SRN與LSTMs都好。
  CW-RNNs也是一個RNNs的改良版本,是一種使用時鐘頻率來驅動的RNNs。它將隱藏層分爲幾個塊(組,Group/Module),每一組按照本身規定的時鐘頻率對輸入進行處理。而且爲了下降標準的RNNs的複雜性,CW-RNNs減小了參數的數目,提升了網絡性能,加速了網絡的訓練。CW-RNNs經過不一樣的隱藏層模塊工做在不一樣的時鐘頻率下來解決長時間依賴問題。將時鐘時間進行離散化,而後在不一樣的時間點,不一樣的隱藏層組在工做。所以,全部的隱藏層組在每一步不會都同時工做,這樣便會加快網絡的訓練。而且,時鐘週期小的組的神經元的不會鏈接到時鐘週期大的組的神經元,只會週期大的鏈接到週期小的(認爲組與組之間的鏈接是有向的就行了,表明信息的傳遞是有向的),週期大的速度慢,週期小的速度快,那麼即是速度慢的連速度快的,反之則不成立。如今還不明白沒關係,下面會進行講解。
   CW-RNNs與SRNs網絡結構相似,也包括輸入層(Input)、隱藏層(Hidden)、輸出層(Output),它們之間也有向前鏈接,輸入層到隱藏層的鏈接,隱藏層到輸出層的鏈接。可是與SRN不一樣的是,隱藏層中的神經元會被劃分爲若干個組,設爲g,每一組中的神經元個數相同,設爲k,併爲每個組分配一個時鐘週期Ti∈{T1,T2,...,Tg},每個組中的全部神經元都是全鏈接,可是組j到組i的循環鏈接則須要知足Tj大於Ti。以下圖所示,將這些組按照時鐘週期遞增從左到右進行排序,即T1<T2<...<Tg,那麼鏈接即是從右到左。例如:隱藏層共有256個節點,分爲四組,週期分別是[1,2,4,8],那麼每一個隱藏層組256/4=64個節點,第一組隱藏層與隱藏層的鏈接矩陣爲64 * 64的矩陣,第二層的矩陣則爲64 * 128矩陣,第三組爲64 * (3 * 64)=64 * 192矩陣,第四組爲64 (4 64)=64 * 256矩陣。這就解釋了上一段的後面部分,速度慢的組連到速度快的組,反之則不成立。
  CW-RNNs的網絡結構以下圖所示:

在傳統的RNN中,按照下面的公式進行計算:

st=fs(Wst−1+Winxt)

ot=fo(Woutst)

  其中,W爲隱藏層神經元的自鏈接矩陣,Win爲輸入層到隱藏層的鏈接權值矩陣,Wout是隱藏層到輸出層的鏈接權值矩陣 ,xt是第t步的輸入,st−1爲第t−1步隱藏層的輸出,st爲第t步隱藏層的輸出,ot爲第t步的輸出,fs爲隱藏層的激活函數,fo爲輸出層的激活函數。
  與傳統的RNNs不一樣的是,在第t步時,只有那些知足(tmodTi)=0的隱藏層組纔會執行。而且每一隱藏層組的週期{T1,T2,...,Tg}均可以是任意的。原文中是選擇指數序列做爲它們的週期,即Ti=2i−1i∈[1,...,g]。
  所以W與Win將被劃分爲g個塊。以下:
W=⎡⎣⎢W1...Wg⎤⎦⎥

Win=⎡⎣⎢Win1...Wing⎤⎦⎥

其中W是一個上三角矩陣,每個組行Wi被劃分爲列向量{W1i,...,Wii,0(i+1)i,...,0gi}T,Wji,j∈[1,...,g]表示第i個組到第j個組的鏈接權值矩陣。在每一步中,W與Win只有部分組行處於執行狀態,其它的爲0:
Wi={Wi0,for(tmodTi)=0,otherwise

Wini={Wini0,for(tmodTi)=0,otherwise

  爲了使表達不混淆,將Win寫成Win。而且執行的組所對應的o纔會有輸出。處於非執行狀態下的隱藏層組仍保留着上一步的狀態。下圖是含五個隱藏層組在t=6時的計算圖:

  在CW-RNNs中,慢速組(週期大的組)處理、保留、輸出長依賴信息,而快速組則會進行更新。CW-RNNs的偏差後向傳播也和傳統的RNNs相似,只是偏差只在處於執行狀態的隱藏層組進行傳播,而非執行狀態的隱藏層組也複製其鏈接的前面的隱藏層組的後向傳播。即執行態的隱藏層組的偏差後向傳播的信息不只來自與輸出層,而且來自與其鏈接到的左邊的隱藏層組的後向傳播信息,而非執行態的後向傳播信息只來自於其鏈接到的左邊的隱藏層組的後向傳播數據。
  下圖是原文對三個不一樣RNNs模型的實驗結果圖:

  上圖中,綠色實線是預測結果,藍色散點是真實結果。每一個模型都是對前半部分進行學習,而後預測後半部分。LSTMs模型相似滑動平均,可是CW-RNNs效果更好。其中三個模型的輸入層、隱藏層、輸出層的節點數都相同,而且只有一個隱藏層,權值都使用均值爲0,標準差爲0.1的高斯分佈進行初始化,隱藏層的初始狀態都爲0,每個模型都使用Nesterov-style momentum SGD(Stochastic Gradient Descent,隨機梯度降低算法)[10]進行學習與優化。

總結

  到目前爲止,本文對RNNs進行了基本的介紹,並對常見的幾種RNNs模型進行了初步講解。下一步將基於Theano與Python實現一個RNNs語言模型並對上面的一些RNNs模型進行詳解。這裏有更多的RNNs模型

  後面將陸續推出:

  • 詳細介紹RNNs中一些常用的訓練算法,如Back Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)、Extended Kalman Filter(EKF)等學習算法,以及梯度消失問題(vanishing gradient problem)
  • 詳細介紹Long Short-Term Memory(LSTM,長短時記憶網絡);
  • 詳細介紹Clockwork RNNs(CW-RNNs,時鐘頻率驅動循環神經網絡);
  • 基於Python和Theano對RNNs進行實現,包括一些常見的RNNs模型;

  本系列將實現一個基於循環神經網絡的語言模型(recurrent neural network based language model)。該實現包含兩個方面:一是可以獲得任意語句在現實中成立的得分,其提供了判斷語法與語義的正確性的度量方式。該模型是機器翻譯中的典型應用。二是模型可以產生新的文本,這是一個很是棒的應用。好比,對莎士比亞的文章進行訓練,可以產生一個新的相似莎士比亞的文本,目前,這個有趣的想法已經被Andrew Karpathy基於RNNs的字符級別的語言模型實現了。

參考博文

http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

參考文獻

[1] Hinton G E. Learning Distributed Representations of Concepts[C]. Proceedings of the 8th Annual Conference of the Cognitive Science Society. 1986, 1: 12.
[2] Elman, J. L. Finding structure in time. CRL Technical Report 8801, Center for Research in Language, University of California, San Diego, 1988.
[3] Schuster M, Paliwal K K. Bidirectional recurrent neural networks[J]. Signal Processing, IEEE Transactions on, 1997, 45(11): 2673-2681.
[4] Graves A, Mohamed A R, Hinton G. Speech Recognition with Deep Recurrent Neural Networks[J]. Acoustics Speech & Signal Processing . icassp. international Conference on, 2013:6645 - 6649.
[5] Jaeger H, Haas H. Harnessing nonlinearity: Predicting chaotic systems and saving energy in wireless communication[J]. Science, 2004, 304(5667): 78-80.
[6] Cho K, Van Merrienboer B, Gulcehre C, et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation[J]. Eprint Arxiv, 2014.
[7] Hochreiter S, Schmidhuber J. Long short-term memory.[J]. Neural Computation, 1997, 9(8):1735-1780.
[8] Chung J, Gulcehre C, Cho K H, et al. Empirical evaluation of gated recurrent neural networks on sequence modeling[J]. arXiv preprint arXiv:1412.3555, 2014.
[9] Jan Koutnik, Klaus Greff, Faustino Gomez, Juergen Schmidhuber. A Clockwork RNN[J]. Proceedings of The 31st International Conference on Machine Learning, pp. 1863–1871, 2014.
[10] Sutskever, Ilya, Martens, James, Dahl, George E., and Hinton, Geoffrey E. On the importance of initialization and momentum in deep learning. In Dasgupta, Sanjoy and Mcallester, David (eds.), Proceedings of the 30th International Conference on Machine Learning (ICML-13), volume 28, pp. 1139–1147.

附:http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-2-implementing-a-language-model-rnn-with-python-numpy-and-theano/
http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/
http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-python-and-theano/

From: http://blog.csdn.net/heyongluoyao8/article/details/48636251

相關文章
相關標籤/搜索