迴圈神經網路入門

banq發表於2016-08-13
迴圈神經網路,也稱遞迴神經網路(Recurrent Neural Networks (RNNs))是越來越流行的深度學習模型,本文以淺顯易懂文字描述而非一條算術公式講解了什麼是RNN。

RNN建立於1980年代,只是最近才開始流行,並廣泛應用於圖形影像處理領域,對於序列資料特別有用,因為每個神經元或單元能使用其內部記憶體維護前一個輸入的資訊,這對於語言非常重要,比如“I had washed my house”明顯不同於“I had my house washed”,這能夠讓神經網路對語句有一個深度理解。

即使作為人類,能夠讀通一句語句是非常重要,你需要注意每個單詞的前後上下文,來龍去脈。

[img index=1]

一個RNN包含迴圈在其中,能夠在讀取輸入同時,這種迴圈讓資訊跨神經元傳遞。圖中,x_t是某個輸入,A是RNN的一部分,h_t是輸出,你能喂入一段語句的詞語甚至字串的字元作為x_t輸入,透過RNN它會從h_t輸出。

使用h_t作為輸出,然後和你的測試資料比較,這個測試資料通常是原始資料的一個小子集,你會得到錯誤比率,將輸出和測試資料比較完畢後,現在有了錯誤比率,你能使用一種技術稱為透過時間的反向傳播( Back Propagation Through Time BPTT),BPTT後播會透過網路檢查,基於你的錯誤比率調整權重,這種調整會使得神經網路學習得越來越好。

理論上,RNN能夠從語句的開始處理上下文,能在語句結束時有更精確的預測,在實踐中,這對於vanilla RNN反而不是必然為真的,也就是實踐中不一定像理論這樣做到精確預測,這也是為什麼RNN曾經在實踐中消失一段時間,直至長短時記憶(Long Short Term Memory LSTM)在神經網路中使用,增加LSTM到神經網路就像增加能夠記住輸入最初開始的上下文場景的記憶體單元。

這種小小的記憶體單元能夠讓RNN更加精確,變成目前最流行的模型,這些記憶體單元能夠跨輸入記住上下文,這些單元今天廣泛被應用的分為兩種: LSTMs 和 Gated Recurrent Units(GRU),
後者門控性單位更為有效,因為花費更少計算機記憶體。

有許多不同的RNN應用,一個偉大應用是在自然語言處理Natural Language Processing (NLP)領域,RNNs已經被很多人建立為代表語言的模型,這些語言模型能夠處理類似莎士比亞詩歌語句的輸入,訓練完成這些模型以後,這些模型會自己創作莎士比亞詩歌,而且與原來的非常不同。

RNN輸入文字資料集以後,它是一個個字母地讀取,令人驚奇的是神經網路在比較喂入這些單詞以後,神經網路能夠創造自己唯一的單詞,這些詞彙並沒有在你訓練它們的資料集中出現過。

[img index=2]

上圖是解釋模型如何預測“hello”,hell四個單詞從下面輸入,從上面輸出為"ello",這是一個很形象的案例,說明這些網路如何獲取一個字字元然後預測下一個可能的字元。

RNNs另外一個驚奇的應用是機器翻譯,這種方法有趣點在於同時執行兩個RNNs,兩個輸入是一對不同語言的語句,比如你餵給網路一句英語語句,再餵給相應的法語翻譯語句,經過足夠的訓練以後,當你再輸入一條英文語句以後,神經網路就能翻譯成法語,這個模型稱為Sequence 2 Sequences模型 或 Encoder Decoder模型。

RNN支援庫包:
Tensorflow — Googles 機器學習框架的 RNN example: https://www.tensorflow.org/versions/r0.10/tutorials/recurrent/index.html

Keras — 一種執行於 Tensorflow 或 Theano高階別機器學習庫包: https://keras.io

Torch — Facebook 使用LUA編寫的機器學習框架: http://torch.ch


原文:

Recurrent Neural Networks for Beginners — Medium

[該貼被banq於2016-08-13 10:20修改過]

相關文章