【深度學習筆記整理-6.2】循環神經網絡:SimpleRNN

在之前的文章中,我們使用全連接神經網絡解決了很多的問題,但是,這種解決問題的神經網絡是不考慮順序的,對於漸進式的,有順序的數據,全連接神經網絡往往不如循環神經網絡的效果更好。

循環神經網絡的最初想法,就是在全連接網絡的基礎之上,考慮前一層的數據,我們知道,全連接神經網絡本質就是一堆非線性函數的疊加,其式子如下

\sigma \left ( ...\sigma( ...\sigma \left ( UX+b\right )X+b \right )X+b \right )...+b)X+b...)

若輸入爲128維的向量,下一層隱藏層爲64維,則U爲64*128的矩陣,其中128列與對應的128維相乘,64行中每一行的數值實際上就是128維與下一層第i行相連的權重向量。

循環神經網絡最初的想法,就是在這個基礎之上,加上上一層經過變換後的向量,即

\sigma \left ( ...\sigma( ...\sigma \left ( UX_{t}+Vh_{t-1}+b\right )X+b \right )X+b \right )...+b)X+b...)

其中h_{t-1}是上一層隱藏層輸出的結果,X_{t}是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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章