在之前的文章中,我們使用全連接神經網絡解決了很多的問題,但是,這種解決問題的神經網絡是不考慮順序的,對於漸進式的,有順序的數據,全連接神經網絡往往不如循環神經網絡的效果更好。
循環神經網絡的最初想法,就是在全連接網絡的基礎之上,考慮前一層的數據,我們知道,全連接神經網絡本質就是一堆非線性函數的疊加,其式子如下
若輸入爲128維的向量,下一層隱藏層爲64維,則U爲64*128的矩陣,其中128列與對應的128維相乘,64行中每一行的數值實際上就是128維與下一層第i行相連的權重向量。
循環神經網絡最初的想法,就是在這個基礎之上,加上上一層經過變換後的向量,即
其中是上一層隱藏層輸出的結果,是t時刻的輸入,假設輸入爲32維向量,隱藏層爲32維,則我們需要估計(32+1)*32+32*32=2080個參數。實際上這就是keras中SimpleRNN需要估計的參數個數,LSTM爲其4倍,GRU爲3倍。
RNN本質上也是一個神經網絡,傳統上,我們經常把橫軸作爲時間軸,實際上這個時間軸就是爲數據有序輸入而準備的,其畫法如下:
但實際上他就是一個循環利用上一層隱藏層的單個神經網絡,其豎直方向是傳統意義上的神經網絡。
在keras中,若想進行RNN的堆疊,則return_sequence參數必須設爲True,這樣返回的纔是一系列數據,如果後面不想接RNN,而是想對某句由多詞組合的句子進行進一步分析,則return_sequence可爲False。