有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?
剛好畢設相關,論文寫完順手就答了
先給出一個最快的了解+上手的教程:
直接看theano官網的LSTM教程+代碼:LSTM Networks for Sentiment Analysis
但是,前提是你有RNN的基礎,因為LSTM本身不是一個完整的模型,LSTM是對RNN隱含層的改進。一般所稱的LSTM網絡全叫全了應該是使用LSTM單元的RNN網絡。教程就給了個LSTM的圖,它只是RNN框架中的一部分,如果你不知道RNN估計看不懂。
比較好的是,你只需要了解前饋過程,你都不需要自己求導就能寫代碼使用了。
補充,今天剛發現一個中文的博客:LSTM簡介以及數學推導(FULL BPTT)
不過,稍微深入下去還是得老老實實的好好學,下面是我認為比較好的
完整LSTM學習流程:
我一直都覺得了解一個模型的前世今生對模型理解有巨大的幫助。到LSTM這里(假設題主零基礎)那比較好的路線是MLP->RNN->LSTM。還有LSTM本身的發展路線(97年最原始的LSTM到forget gate到peephole再到CTC )
按照這個路線學起來會比較順,所以我優先推薦的兩個教程都是按照這個路線來的:
還有一個最新的(今年2015)的綜述,《A Critical Review of Recurrent Neural Networks for Sequence Learning》不過很多內容都來自以上兩個材料。
其他可以當做教程的材料還有:
《From Recurrent Neural Network to Long Short Term Memory Architecture Application to Handwriting Recognition Author》
《Generating Sequences With Recurrent Neural Networks》(這個有對應源碼,雖然實例用法是錯的,自己用的時候還得改代碼,主要是摘出一些來用,供參考)
然后呢,可以開始編碼了。除了前面提到的theano教程還有一些論文的開源代碼,到github上搜就好了。
順便安利一下theano,theano的自動求導和GPU透明對新手以及學術界研究者來說非常方便,LSTM拓撲結構對于求導來說很復雜,上來就寫LSTM反向求導還要GPU編程代碼非常費時間的,而且搞學術不是實現一個現有模型完了,得嘗試創新,改模型,每改一次對應求導代碼的修改都挺麻煩的。
其實到這應該算是一個階段了,如果你想繼續深入可以具體看看幾篇經典論文,比如LSTM以及各個改進對應的經典論文。
還有樓上提到的《LSTM: A Search Space Odyssey》?通過從新進行各種實驗來對比考查LSTM的各種改進(組件)的效果。挺有意義的,尤其是在指導如何使用LSTM方面。
不過,玩LSTM,最好有相應的硬件支持。我之前用Titan 780,現在實驗室買了Titan X,應該可以說是很好的配置了(TitanX可以算頂配了)。但是我任務數據量不大跑一次實驗都要好幾個小時(前提是我獨占一個顯卡),(當然和我模型復雜有關系,LSTM只是其中一個模塊)。
===========================================
如果想玩的深入一點可以看看LSTM最近的發展和應用。老的就不說了,就提一些比較新比較好玩的。
LSTM網絡本質還是RNN網絡,基于LSTM的RNN架構上的變化有最先的BRNN(雙向),還有今年Socher他們提出的樹狀LSTM用于情感分析和句子相關度計算《Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks》(類似的還有一篇,不過看這個就夠了)。他們的代碼用Torch7實現,我為了整合到我系統里面自己實現了一個,但是發現效果并不好。我覺的這個跟用于建樹的先驗信息有關,看是不是和你任務相關。還有就是感覺樹狀LSTM對比BLSTM是有信息損失的,因為只能使用到子節點信息。要是感興趣的話,這有一篇樹狀和線性RNN對比《(treeRNN vs seqRNN )When Are Tree Structures Necessary for Deep Learning of Representations?》。當然,關鍵在于樹狀這個概念重要,感覺現在的研究還沒完全利用上樹狀的潛力。
今年ACL(2015)上有一篇層次的LSTM《A Hierarchical Neural Autoencoder for Paragraphs and Documents》。使用不同的LSTM分別處理詞、句子和段落級別輸入,并使用自動編碼器(autoencoder)來檢測LSTM的文檔特征抽取和重建能力。
還有一篇文章《Chung J, Gulcehre C, Cho K, et al. Gated feedback recurrent neural networks[J]. arXiv preprint arXiv:1502.02367, 2015.》,把gated的思想從記憶單元擴展到了網絡架構上,提出多層RNN各個層的隱含層數據可以相互利用(之前的多層RNN多隱含層只是單向自底向上連接),不過需要設置門(gated)來調節。
記憶單元方面,Bahdanau Dzmitry他們在構建RNN框架的機器翻譯模型的時候使用了GRU單元(gated recurrent unit)替代LSTM,其實LSTM和GRU都可以說是gated hidden unit。兩者效果相近,但是GRU相對LSTM來說參數更少,所以更加不容易過擬合。(大家堆模型堆到dropout也不管用的時候可以試試換上GRU這種參數少的模塊)。這有篇比較的論文《(GRU/LSTM對比)Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》
應用嘛,寬泛點來說就是挖掘序列數據信息,大家可以對照自己的任務有沒有這個點。比如(直接把畢設研究現狀搬上來(。・?・)ノ゙):
先看比較好玩的,
圖像處理(對,不用CNN用RNN):
《Visin F, Kastner K, Cho K, et al. ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks[J]. arXiv preprint arXiv:1505.00393, 2015》
4向RNN(使用LSTM單元)替代CNN。
使用LSTM讀懂python程序:
《Zaremba W, Sutskever I. Learning to execute[J]. arXiv preprint arXiv:1410.4615, 2014.》
使用基于LSTM的深度模型用于讀懂python程序并且給出正確的程序輸出。文章的輸入是短小簡單python程序,這些程序的輸出大都是簡單的數字,例如0-9之內加減法程序。模型一個字符一個字符的輸入python程序,經過多層LSTM后輸出數字結果,準確率達到99%
手寫識別:
《Liwicki M, Graves A, Bunke H, et al. A novel approach to on-line handwriting recognition based on bidirectional long short-term memory》
機器翻譯:
《Sutskever I, Vinyals O, Le Q V V. Sequence to sequence learning with neural networks[C]//Advances in neural information processing systems. 2014: 3104-3112.》
使用多層LSTM構建了一個seq2seq框架(輸入一個序列根據任務不同產生另外一個序列),用于機器翻譯。先用一個多層LSTM從不定長的源語言輸入中學到特征v。然后使用特征v和語言模型(另一個多層LSTM)生成目標語言句子。
《Cho K, Van Merri?nboer B, Gulcehre C, et al. Learning phrase representations using rnn encoder-decoder for statistical machine translation[J]. arXiv preprint arXiv:1406.1078, 2014.》
這篇文章第一次提出GRU和RNN encoder-decoder框架。使用RNN構建編碼器-解碼器(encoder-decoder)框架用于機器翻譯。文章先用encoder從不定長的源語言輸入中學到固定長度的特征V,然后decoder使用特征V和語言模型解碼出目標語言句子
以上兩篇文章提出的seq2seq和encoder-decoder這兩個框架除了在機器翻譯領域,在其他任務上也被廣泛使用。
《Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.》
在上一篇的基礎上引入了BRNN用于抽取特征和注意力信號機制(attention signal)用于源語言和目標語言的對齊。
對話生成:
《Shang L, Lu Z, Li H. Neural Responding Machine for Short-Text Conversation[J]. arXiv preprint arXiv:1503.02364, 2015.》
華為諾亞方舟實驗室,李航老師他們的作品。基本思想是把對話看成是翻譯過程。然后借鑒Bahdanau D他們的機器翻譯方法(encoder-decoder,GRU,attention signal)解決。訓練使用微博評論數據。
《VINYALS O, LE Q,.A Neural Conversational Model[J]. arXiv:1506.05869 [cs], 2015.》
google前兩天出的論文(2015-6-19)。看報道說結果讓人覺得“creepy”:Google's New Chatbot Taught Itself to Be Creepy。還以為有什么NB模型,結果看了論文發現就是一套用seq2seq框架的實驗報告。(對話可不是就是你一句我一句,一個序列對應產生另一序列么)。論文里倒是說的挺謹慎的,只是說純數據驅動(沒有任何規則)的模型能做到這樣不錯了,但還是有很多問題,需要大量修改(加規則唄?)。主要問題是缺乏上下文一致性。(模型只用對話的最后一句來產生下一句也挺奇怪的,為什么不用整個對話的歷史信息?)句法分析:
《Vinyals O, Kaiser L, Koo T, et al. Grammar as a foreign language[J]. arXiv preprint arXiv:1412.7449, 2014.》
把LSTM用于句法分析任務,文章把樹狀的句法結構進行了線性表示,從而把句法分析問題轉成翻譯問題,然后套用機器翻譯的seq2seq框架使用LSTM解決。
信息檢索:
《Palangi H, Deng L, Shen Y, et al. Deep Sentence Embedding Using the Long Short Term Memory Network: Analysis and Application to Information Retrieval[J]. arXiv preprint arXiv:1502.06922, 2015.》
使用LSTM獲得大段文本或者整個文章的特征向量,用點擊反饋來進行弱監督,最大化query的特性向量與被點擊文檔的特性向量相似度的同時最小化與其他未被點擊的文檔特性相似度。
圖文轉換:
圖文轉換任務看做是特殊的圖像到文本的翻譯問題,還是使用encoder-decoder翻譯框架。不同的是輸入部分使用卷積神經網絡(Convolutional Neural Networks,CNN)抽取圖像的特征,輸出部分使用LSTM生成文本。對應論文有:
《Karpathy A, Fei-Fei L. Deep visual-semantic alignments for generating image descriptions[J]. arXiv preprint arXiv:1412.2306, 2014.》
《Mao J, Xu W, Yang Y, et al. Deep captioning with multimodal recurrent neural networks (m-rnn)[J]. arXiv preprint arXiv:1412.6632, 2014.》
《Vinyals O, Toshev A, Bengio S, et al. Show and tell: A neural image caption generator[J]. arXiv preprint arXiv:1411.4555, 2014.》
就粘這么多吧,呼呼~復制粘貼好爽\(^o^)/~
其實,相關工作還有很多,各大會議以及arxiv上不斷有新文章冒出來,實在是讀不過來了。。。
然而我有種預感,說了這么多,工作之后很有可能發現:
這些東西對我工作并沒有什么卵用 (>﹏<=
編輯于 2015-06-2437 條評論感謝 分享 收藏?沒有幫助?舉報?禁止轉載 146贊同 反對,不會顯示你的姓名 余思勰,暫無描述 146 人贊同 我是這樣初步了解RNN和LSTM的,希望能有幫助:1. 看牛津大學的Nando de Freitas教授的deep learning課程中關于RNN和LSTM的視頻和講義。Machine Learning
我覺得他的課程優點有這些:
1.1 配合著 Torch7(https://torch.ch),一邊講RNN和LSTM的內部結構,一邊動手寫代碼。寫完就了解RNN與LSTM的工作原理了。并且我自己覺得Torch7的Lua代碼要比Theano的代碼容易理解。
1.2 他的課程中關于BPTT( back-propagation through time )的講解很清楚。我按照他的推薦計算了一個two time steps的rnn的bp,然后對BPTT算法的了解比原來要好一些。這是他課程的slides,里面有關于BPTT的推倒。https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/lecture11.pdf
1.3 他的課程配合有一個github上的項目:oxford-cs-ml-2015/practical6 · GitHub參考著他提供的對LSTM的實現的源代碼能夠加速理解。并且看懂了以后還能做一些自己的小擴展。
2. Stanford大學Feifei Li博士生Andrej Karpathy基于前面提到的nando教授的LSTM實現做了一個有趣的項目:char-rnn (karpathy/char-rnn · GitHub)。他在Nando版本基礎上又加了對multi-layer,gpu的支持,還有一些其他deep learning里的小trick。推薦這個項目的原因是如果你看懂了nando的版本,那么Karpathy的版本也很容易看懂。并且馬上就可以提供自己的數據做運用。比如:我把python的tornado,flask,django框架的代碼合成了一個30萬行的文件喂給這個LSTM。然后它就能寫出貌似正確的python代碼了。他還寫過一篇博客講解RNN和LSTM:The Unreasonable Effectiveness of Recurrent Neural Networks
4. CVPR15有一個關于Torch7和deep learning的tutorial,從這個tutorial里面能夠快速入門torch7:Torch | Applied Deep Learning for Computer Vision with Torch
5. 如果以上都完成了,還想找一些機會讀paper,自己實現,看別人的實現,那么在這個論壇上經常會有人提供一些新的paper的實現,比如:DeepMind的atari,DeepMind的DRAW,Google的BatchNorm等;torch/torch7
6. Torch7的郵件列表:Google 網上論壇
7. 最后,Alex Grave有一份文檔很詳細地講解他自己生成sequence的方法。http://arxiv.org/abs/1308.0850 編輯于 2015-06-1810 條評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 84贊同 反對,不會顯示你的姓名 李丕績,Text Mining, Computer Vision, Machine … 84 人贊同 我自己實現了一個,總結了一下。發現想學會lstm只要看看這張圖就行了,你會發現除了矩陣多了些,沒啥新東西。另外theano、torch都有現成的,可以直接拿來用。至于bptt,想自己寫,就自己求一遍導,或者如果你對于nn bp很熟練,直接按照圖中的箭頭逆序bptt就可以了。至于調參,可以借鑒已有的大量工作,省心了不少。
代碼:
java:lipiji/JRNN · GitHub
theano:lipiji/rnn-theano · GitHub
圖的pdf:bptt-2.pdf_免費高速下載
圖中的鏈接:
A Note on BPTT for LSTM LM
http://www.slideshare.net/tmasada/a-note-on-bptt-for-lstm-lm(我基本上就是照著這個以及上圖實現的bptt)
Fig ref:dophist/kaldi-lstm · GitHub
當然,Colah的blog那是寫的很贊的:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
. 編輯于 2015-11-078 條評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 30贊同 反對,不會顯示你的姓名 知乎用戶,Computational Biology and Machine Lear… 30 人贊同 Alex Graves的Supervised Sequence Labelling with Recurrent Neural Networks(http://www.cs.toronto.edu/~graves/preprint.pdf)
Schmidhuber的一個LSTM教程 :Long Short-Term Memory: Tutorial on LSTM Recurrent Networks
Schmidhuber等人還寫了這篇關于LSTM的文章 LSTM: A Search Space Odyssey:http://arxiv.org/pdf/1503.04069v1.pdf,也不錯
至于動手寫代碼,題主可以再參考Deep Learning Tutorials里RNN和LSTM的部分了 編輯于 2015-06-104 條評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 37贊同 反對,不會顯示你的姓名 榮雨墨,intern in AI 37 人贊同 正好這兩天在學習RNN和LSTM,下面根據我自己學習的路線,來回答一下這個問題
首先,對于沒有RNN基礎的同學,強烈建議先看一下下面這篇論文
A Critical Review of Recurrent Neural Networks for Sequence Learning
里面的數學符號定義清楚,非常適合沒有任何基礎的童鞋對RNN和LSTM建立一個基本的認識。
然后,看完這篇論文以后,可以接著看下面這篇博客
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
里面對LSTM結構為什么這樣設計,做了一步步的推理解釋,非常的詳細。
看完上面兩個tutorial, 你對LSTM的結構已經基本了解了。如果希望對于如何訓練LSTM, 了解BPTT算法的工作細節,可以看Alex Graves的論文
Supervised Sequence Labelling with Recurrent Neural Networks
這篇論文里有比較詳細的公式推導,但是對于LSTM的結構卻講的比較混亂,所以不建議入門就看這篇論文。
看完了上面篇論文/教程以后,對于LSTM的理論知識就基本掌握了,下面就需要在實踐中進一步加深理解,我還沒有去實踐,后面的答案等實踐完以后回來再補上。
不過根據有經驗的學長介紹,使用Theano自己實現一遍LSTM是一個不錯的選擇 編輯于 2015-10-025 條評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 128贊同 反對,不會顯示你的姓名 程引,愛折騰 128 人贊同 聲明:本譯文與另一譯者(劉翔宇)的版本(理解長短期記憶網絡(LSTM NetWorks)-CSDN.NET)互為獨立,特此向另一位譯者道歉。
譯自博客
Understanding LSTM Networks
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
中文版見
理解LSTM網絡
理解不到位之處歡迎指正,譯文如下:
# 理解LSTM網絡
## 周期神經網絡(Recurrent Neural Networks)
人類并非每一秒都在從頭開始思考問題。當你閱讀這篇文章時,你是基于之前的單詞來理解每個單詞。你并不會把所有內容都拋棄掉,然后從頭開始理解。你的思考具有持久性。
傳統的神經網絡并不能做到這一點,這似乎是其一個主要的缺點。例如,想象你要把一部電影里面每個時間點所正在發生的事情進行分類。并不知道傳統神經網絡怎樣才能把關于之前事件的推理運用到之后的事件中去。
周期神經網絡解決了這個問題。它們是一種具有循環的網絡,具有保持信息的能力。
**如上圖**所示,神經網絡的模塊*A*輸入為,輸出為。模塊*A*的循環結構使得信息從網絡的上一步傳到了下一步。
這個循環使周期神經網絡看起來有點神秘。然而,如果你仔細想想就會發現它與普通的神經網絡并沒有太大不同。周期神經網絡可以被認為是相同網絡的多重復制結構,每一個網絡把消息傳給其繼承者。如果我們把循環體展開就是這樣,**如圖所示**:
這種鏈式屬性表明,周期神經網絡與序列之間有著緊密的聯系。這也是運用這類數據最自然的結構。
當然它們已經得到了應用!過去幾年中,RNNs已經被成功應用于各式各樣的問題中:語音識別,語言建模,翻譯,圖像標注…等等。RNNs取得的各種矚目成果可以參看Andrej Karpathy的博客:[The Unreasonable Effectiveness of Recurrent Neural Networks](The Unreasonable Effectiveness of Recurrent Neural Networks)。確實效果讓人非常吃驚。
取得這項成功的一個要素是『LSTMs』,這是一種非常特殊的周期神經網絡,對于許多任務,比標準的版本要有效得多。幾乎所有基于周期神經網絡的好成果都使用了它們。本文將著重介紹LSTMs。
## 長期依賴問題(The Problem of Long-Term Dependencies)
RNNs的一個想法是,它們可能會能夠將之前的信息連接到現在的任務之中。例如用視頻前一幀的信息可以用于理解當前幀的信息。如果RNNs能夠做到這些,那么將會非常使用。但是它們可以嗎?這要看情況。
有時候,我們處理當前任務僅需要查看當前信息。例如,設想又一個語言模型基于當前單詞嘗試著去預測下一個單詞。如果我們嘗試著預測『the clouds are i n the *sky*』的最后一個單詞,我們并不需要任何額外的信息了-很顯然下一個單詞就是『天空』。這樣的話,如果目標預測的點與其相關信息的點之間的間隔較小,RNNs可以學習利用過去的信息。
但是也有時候我們需要更多的上下文信息。設想預測這句話的最后一個單詞:『I grew up in France… I speak fluent *French*』。最近的信息表明下一個單詞似乎是一種語言的名字,但是如果我們希望縮小確定語言類型的范圍,我們需要更早之前作為France 的上下文。而且需要預測的點與其相關點之間的間隔非常有可能變得很大,**如圖所示**:
不幸的是,隨著間隔增長,RNNs變得難以學習連接之間的關系了,**如圖所示**:
理論上來說,RNNs絕對能夠處理這種『長期依賴』。人們可以小心選取參數來解決這種類型的小模型。悲劇的是,事實上,RNNs似乎并不能學習出來這些參數。這個問題已經在[Hochreiter (1991) [German]](http://people.idsia.ch/~juergen/SeppHochreiter1991ThesisAdvisorSchmidhuber.pdf)與[Bengio, et al. (1994)](http://www-dsi.ing.unifi.it/~paolo/ps/tnn-94-gradient.pdf)中被深入討論,他們發現了為何RNNs不起作用的一些基本原因。
幸運的是,LSTMs可以解決這個問題!
## LSTM網絡
長短時間記憶網絡(Long Short Term Memory networks)——通常成為『LSTMs』——是一種特殊的RNN,它能夠學習長時間依賴。它們由[Hochreiter & Schmidhuber (1997)](http://deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf)提出,后來由很多人加以改進和推廣。他們在大量的問題上都取得了巨大成功,現在已經被廣泛應用。
LSTMs是專門設計用來避免長期依賴問題的。記憶長期信息是LSTMs的默認行為,而不是它們努力學習的東西!
所有的周期神經網絡都具有鏈式的重復模塊神經網絡。在標準的RNNs中,這種重復模塊具有非常簡單的結構,比如是一個tanh層,**如圖所示**:
LSTMs同樣具有鏈式結構,但是其重復模塊卻有著不同的結構。不同于單獨的神經網絡層,它具有4個以特殊方式相互影響的神經網絡層,**如圖所示**:
不要擔心接下來涉及到的細節。我們將會一步步講解LSTM的示意圖。下面是我們將要用到的符號,**如圖所示**:
在上圖中,每一條線代表一個完整的向量,從一個節點的輸出到另一個節點的輸入。粉紅色圓形代表了逐點操作,例如向量求和;黃色方框代表學習出得神經網絡層。聚攏的線代表了串聯,而分叉的線代表了內容復制去了不同的地方。
## LSTMs背后的核心思想
LSTMs的關鍵在于細胞狀態,在圖中以水平線表示。
細胞狀態就像一個傳送帶。它順著整個鏈條從頭到尾運行,中間只有少許線性的交互。信息很容易順著它流動而保持不變。**如圖所示**:
LSTM通過稱之為門(gates)的結構來對細胞狀態增加或者刪除信息。
門是選擇性讓信息通過的方式。它們的輸出有一個sigmoid層和逐點乘積操作,**如圖所示**:
Sigmoid 層的輸出在0到1之間,定義了各成分被放行通過的程度。0值意味著『不讓任何東西過去』;1值意味著『讓所有東西通過』。
一個LSTM具有3種門,用以保護和控制細胞狀態。
## 逐步講解LSTM
LSTM的第一步是決定我們要從細胞中拋棄何種信息。這個決定是由叫做『遺忘門』的sigmoid層決定的。它以和為輸入,在細胞輸出一個介于0和1之間的數。其中1代表『完全保留』,0代表『完全遺忘』。
讓我們回到之前那個語言預測模型的例子,這個模型嘗試著根據之前的單詞學習預測下一個單詞。在這個問題中,細胞狀態可能包括了現在主語的性別,因此能夠使用正確的代詞。當我們見到一個新的主語時,我們希望它能夠忘記之前主語的性別。**如圖所示**:
下一步是決定細胞中要存儲何種信息。它有2個組成部分。首先,由一個叫做『輸入門層』的sigmoid層決定我們將要更新哪些值。其次,一個tanh層創建一個新的候選向量,它可以加在狀態之中。在下一步我們將結合兩者來生成狀態的更新。
在語言模型的例子中,我們希望把新主語的性別加入到狀態之中,從而取代我們打算遺忘的舊主語的性別,**如圖所示**:
現在我們可以將舊細胞狀態更新為了。之前的步驟已經決定了該怎么做,我們現在實際操作一下。
我們把舊狀態乘以,用以遺忘之前我們決定忘記的信息。然后我們加上。這是新的候選值,根據我們決定更新狀態的程度來作為放縮系數。
在語言模型中,這里就是我們真正丟棄關于舊主語性別信息以及增添新信息的地方,**如圖所示**:
最終,我們可以決定輸出哪些內容。輸出取決于我們的細胞狀態,但是以一個過濾后的版本。首先,我們使用sigmoid層來決定我們要輸出細胞狀態的哪些部分。然后,把用tanh處理細胞狀態(將狀態值映射到-1至1之間)。最后將其與sigmoid門的輸出值相乘,從而我們能夠輸出我們決定輸出的值。**如圖所示**:
對于語言模型,在預測下一個單詞的例子中,當它輸入一個主語,它可能會希望輸出相關的動詞。例如,當主語是單數或復數時,它可能會以相應形式的輸出。
## 各種LSTM的變化形式
目前我所描述的都是普通的LSTM。然而并非所有的LSTM都是一樣的。事實上,似乎每一篇使用LSTMs的文章都有些細微差別。這些差別很小,但是有些值得一提。
其中一個流行的LSTM變化形式是由[Gers & Schmidhuber (2000)](ftp://ftp.idsia.ch/pub/juergen/TimeCount-IJCNN2000.pdf)提出,增加了『窺視孔連接(peephole connections)』。**如圖所示**:
在上圖中,所有的門都加上了窺視孔,但是許多論文中只在其中一些裝了窺視孔。
另一個變種是使用了配對遺忘與輸入門。與之前分別決定遺忘與添加信息不同,我們同時決定兩者。只有當我們需要輸入一些內容的時候我們才需要忘記。只有當早前信息被忘記之后我們才會輸入。**如圖所示**:
LSTM一個更加不錯變種是 Gated Recurrent Unit(GRU),是由[Cho, et al. (2014)](http://arxiv.org/pdf/1406.1078v3.pdf)提出的。這個模型將輸入門與和遺忘門結合成了一個單獨的『更新門』。而且同時還合并了細胞狀態和隱含狀態,同時也做了一下其他的修改。因此這個模型比標準LSTM模型要簡單,并且越來越收到歡迎。**如圖所示**:
這些僅僅只是LSTM的少數幾個著名變種。還有很多其他的種類,例如由[Yao, et al. (2015)](http://arxiv.org/pdf/1508.03790v2.pdf) 提出的Depth Gated RNNs 。以及處理長期依賴問題的完全不同的手段,如[Koutnik, et al. (2014)](http://arxiv.org/pdf/1402.3511v1.pdf)提出的Clockwork RNNs。
那種變種是最好的?這些不同重要嗎?[Greff, et al. (2015)](http://arxiv.org/pdf/1503.04069.pdf) 將各種著名的變種做了比較,發現其實基本上是差不多的。[Jozefowicz, et al. (2015)](http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf) 測試了超過一萬種RNN結構,發現了一些在某些任務上表現良好的模型。
## 結論
最開始我提到的杰出成就都是使用RNNs做出的。本質上所有這些成果都是使用了LSTMs。在大多數任務中,它們的表現確實非常優秀!
以公式的形式寫下來,LSTMs看起來非常令人膽怯。然而通過本文的逐步講解使得LSTM變得平易近人了。
LSTMs 是我們使用RNNs的重要一步。我們很自然地想到:還有下一步嗎?研究者的普遍觀點是:『有!下一大步就是「注意力」(Attention)。』其基本思想就是讓RNN的每一步從更大范圍的信息中選取。例如,假設你為圖片打標簽,它可能會為它輸出的每一個詞語選取圖片的一部分作為輸入。事實上,[Xu, et al. (2015)](http://arxiv.org/pdf/1502.03044v2.pdf)就是這么做的——如果你想探索『注意力』的話,這是個有趣的引子!已經有大量使用『注意力』得到的良好成果,而且似乎更多的陳果也將要出現......
『注意力』并非是RNN研究中唯一一個激動人心的方向。例如,[Kalchbrenner, et al. (2015)](http://arxiv.org/pdf/1507.01526v1.pdf)做出的Grid LSTMs 似乎很有前途。在生成模型中使用RNNs-例如[Gregor, et al. (2015)](http://arxiv.org/pdf/1502.04623.pdf),[Chung, et al. (2015)](http://arxiv.org/pdf/1506.02216v3.pdf)以及[Bayer & Osendorfer (2015) ](http://arxiv.org/pdf/1411.7610v3.pdf)-似乎也很有趣。過去幾年是RNN激動人心的階段,未來幾年將會更加如此! 編輯于 2016-04-1412 條評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 8贊同 反對,不會顯示你的姓名 知乎用戶 8 人贊同 我印象中寫的最為簡潔的就是"A Critical Review of Recurrent Neural Networks for Sequence Learning",然后還能配合一些中文的博客就能把RNN主要的網絡結構弄明白;然后如果想看RNN的訓練方法,可以選擇"A tutorial on training recurrent neural networks, covering BPPT, RTRL, EKF and the "echo state network" approach",這篇文章講的很細,如果你對ESN不敢興趣,后半部分跳過也沒用影響;另外,"A Guide to Recurrent Neural Networks and Backpropagation"也是一篇很基礎的文章,也可以輔助的看看;
補充一點:我也是基于前幾個答案,然后自己看文章總結的經驗,隨便謝謝排名靠前的幾個答案給我提供的文章 編輯于 2015-08-29添加評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 2贊同 反對,不會顯示你的姓名 花京華,文本挖掘,NLPer,機器學習/傳統文化擁護者 2 人贊同 其實就是在普通的神經網絡上加入了時序參數,在訓練的時候按照時序進行學習,保證輸出y=F(x,t) 發布于 2015-09-29添加評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 11贊同 反對,不會顯示你的姓名 Zaikun Xu,機器學習從業者 11 人贊同 這個絕對要看。http://colah.github.io/posts/2015-08-Understanding-LSTMs/andhttps://www.youtube.com/watch?v=56TYLaQN4N8 編輯于 2015-09-192 條評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 王沖,知之為知之,不知為不知,是知也 3 人贊同 分為幾個部分。
1. 理解RNN里面的數學。我是讀這個教程入門的。Recurrent Neural Network Tutorial, Part 4前提是有UFLDL的基礎或者至少是習慣了用矩陣方法來求導。否則Part 2和Part 3的代碼你不知道是怎么推出來的。
2. 上面那個tutorial里面的東西太naive了,很多trick都沒有。另外我也想看看真正的代碼是怎么實現的。所以就簡單的讀了一下GitHub - lisa-groundhog/GroundHog: Library for implementing RNNs with Theano
當時我還好奇一個問題,為什么RNN原理非常簡單,用keras跑RNN也很簡單,為什么GroundHog的代碼卻那么大。我總擔心keras漏了什么。所以做了下面這個統計表格。最后發現,確實,如果考慮Library部分可以用keras等庫替代,groundhog真正核心的模型構建部分也就1000多行。完全可以接受。
3. 最后我就放心大膽的用RNN了。為了確保我做的是對的,我用用keras repro了GitHub - stanfordnlp/treelstm: Tree-structured Long Short-Term Memory networks (http://arxiv.org/abs/1503.00075)一開始keras跑出來的結果總比github上的結果差,哪怕模型的結構都一樣。后來發現就是因為我偷懶,沒有用Glove embedding初始化結構。 編輯于 2016-04-13添加評論感謝 分享 收藏?沒有幫助?舉報?作者保留權利 2贊同 反對,不會顯示你的姓名 龔禹pangolulu,http://pangolulu.github.io 2 人贊同 寫了一個tutorial,一步一步實現RNN,采用計算圖和自動求導,無需手推BPTT,代碼也非常靈活,定義了RNNLayer,只要修改RNNLayer就能變成LSTM或GRU等,激活函數(tanh或ReLu)和輸出層(softmax)也可以指定。例子使用了rnnlm,訓練RNN語言模型。感興趣的請移步:
GitHub - pangolulu/rnn-from-scratch: Implementing Recurrent Neural Network from Scratch
事實上只要理解了RNN的網絡結構,其實訓練RNN和正常的多層神經網絡沒有差別。另外參考:如何理解神經網絡里面的反向傳播算法? - 龔禹的回答
from: http://www.zhihu.com/question/29411132
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉和模式识别领域SCI期刊介绍
- 下一篇: Visio中插入mathtype公式,解