標籤:

機器學習系列:遞歸神經網路

前言

BP 神經網路,訓練的時候,給定一組輸入和輸出,不斷的對權值進行訓練,使得輸出達到穩定。但 BP 神經網路並不是適合所有的場景,並不真正的體現出某些場景的真正特點。回到經典的概率論問題,拋硬幣問題,假設你已經拋了100次的,90次是正面的,10次是反面的,問現在繼續在拋一次,出現正面的概率是多少?如果沒有前面幾次的經驗,很正常的會認為再次出現正面的概率是50%,但由於我們之前有對這個進行了實驗,即有了經驗了,按照貝葉斯定律,出現正面的概率肯定會大於50%。BP 神經網路也少了對前面結果的一種反饋。

常見,易懂的受到前位影響的演算法,加法演算法。十位的結果,所到個位結果的影響,因為可能有進位,同樣,百位的結果所到十位的影響。

這種受到前位影響的演算法非常的常見,而經典 BP 神經網路並不能很好的反映這種演算法的特性,需要就經典的BP神經網路進行優化和改造,也就是引進前位,歷史數據對網路的影響,使其具備時序性。通過歷史數據的關聯來推測後續的事情。

遞歸神經網路RNN

從前面加法演算法的動態圖中,對現有的 BP 神經網路進行改造,也就是加入前位的結果對於後續網路的影響。

這裡把 BP 神經網路設計成上圖的形式,很形象的揭示了遞歸神經網路的特點,前向的結果,作為下一個輸入,影響下一個網路的結果。遞歸神經網路,在很多方向已經取得了很好的成果。而一種特殊的遞歸神經網路 Long Short Term 網路(LSTM),取到的結果最為璀璨,是這個方向的明星。

來看看 LSTM 的實現。

LSTM 網路

1997年 Hochreiter & Schmidhuber 提出了Long Short Term 網路,它是一種 RNN 的實現形式,在很多問題上,LSTM 取得了相當大的成功,在許多的領域上都有很好的成果。

最簡單的 LSTM 網路:

把前位的輸出結果當成後位的輸入,經過 tanh 層,相當於擴充了原來BP神經網路的另一個輸入。這樣一次的進行訓練。

在簡化一點的方式如下圖:

如果去掉 layer1 層,那麼就是一個最簡單的 BP神經網路了。這裡引入了 layer1 層,使得經典的 BP 神經網路多了一個輸入,layer_1 層在加法演算法中,表示的是前一個輸入就可以反映出加法演算法的特性,從結構來看,這個 LSTM 的變形並不是非常的複雜,但現在就重要的就是如何計算出各個層次的增量,然後進行迭代了。

這裡主要需要解決導數問題 python 的代碼實現:

變數的更新:

其中 layer1delta 變數為兩個變數的和:

完整的迭代過程在:

Anyone Can Learn To Code an LSTM-RNN in Python (Part 1: RNN)

在遞歸神經網路中,跟經典的 BP 神經網路在結構上並沒有太多的不同,最關鍵的點,還是在求解增量,進行迭代。

回頭再想,如果僅僅用 BP 神經網路的演算法能不能實現出加法演算法,我覺得是可以的,但是速度和準確性不會有 LSTM 高。因此,LSTM 的結構也是可以改進演算法,不同的結構方式可以避免演算法的很多缺陷。

更一般的 LSTM 結構:

演算法的迭代過程在:

Simple LSTMnicodjimenez/lstm: Minimal, clean example of lstm neural network training in python, for learning purposes.

演算法跟BP神經網路沒有太大的不同,但要注意的還是各個變數的增量和迭代問題。

遞歸神經網路的應用

遞歸神經網路跟BP神經網路,最大的不同是引進了時序,可以根據以往的數據來推測未來的事件。這是現在比較熱門的一個方向。比較多的應用實在語音和文本的處理上,網上有相當多的關於遞歸神經網路的應用,比如寫出像汪峰一樣的歌詞,默寫唐詩,寫冷段子等。但要寫出像樣的歌詞和詩詞,還需要做很多的處理,如果把遞歸神經網路應用在推薦系統里,也會得到不錯的效果。

參考

人人都能用Python寫出LSTM-RNN的代碼![你的神經網路學習最佳起步] - 博客頻道 - CSDN.NET[譯] 理解 LSTM 網路Simple LSTMnicodjimenez/lstm: Minimal, clean example of lstm neural network training in python, for learning purposes.blog.csdn.net/longxinchml/article/details/51253526 karpathy/char-rnn: Multi-layer Recurrent Neural Networks (LSTM, GRU, RNN) for character-level language models in Torchblog.csdn.net/vjuly_v/article/details/52796239

推薦閱讀:

基於TensorFlow一次簡單的RNN實現
勘誤與科普:如何在飛鳥的背後,捕捉到飛行|張崢談人工智慧
數據學習之路---每周好文分享(第一期)
面向數據科學家的兩門課:Data8 和 DS100
智能單元專欄目錄

TAG:机器学习 |