1. 程式人生 > >使用Keras進行深度學習:RNN

使用Keras進行深度學習:RNN

RNN---迴圈神經網路,在這裡主要將它用在處理與預測序列資料方面.

1.RNN網路結構與原理詳解:

  

該圖的左邊是未展開的RNN模型,展開後的RNN模型在右邊詳細的進行了展示.RNN網路的最為重要的一點就是其具有時序性,該時序性在網路的具體的體現就是hi的一系列引數的設定,這些引數的含義就是在i時刻(對應時刻的記憶)的記憶.

輸入層到隱含層:

用公式表示RNN當前時刻的記憶為:


你會通過這個公式發現,其hi就是在i時刻的記憶,他的計算具體是由兩個部分組成的,其中前面的部分是輸入的值與權值的乘積,後面一個部分是權值與前一個時刻記憶的乘積。構成了當前時刻的輸出值.

隱含層到輸出層:

在隱含層到輸出層,我們使用softmax函式作為啟用函式,這個函式的作用就是預測每一個詞出現的概率,然後選擇其中最大的那一個值(有時候還常常與交叉熵結合使用).


通過上面的處理過程,RNN就可以有效的處理時序資料,對每一個輸入保留重要的資訊,理論上就能夠得到所有重要的資訊,進而綜合考慮所有的輸入去預測輸出.

2.雙向RNN網路結構及原理詳解:

實際上,為什麼會產生雙向的RNN,這裡可以形象的說一下,如果我們把RNN的過程比作一部電視劇,那麼如果我們突然的從中間挑出一集來看,肯定會看的一頭霧水,因為我們並不知道其前面的背景,所以會很不理解,這就可以比作RNN神經網路,我們從頭開始看電視劇,把其中的重要的資訊儲存下來,這樣隨著劇請的發展,我們就可以看懂了所有的劇情,並且有時候還可以根據劇情來進行預測.

但是吧,單向的RNN只能夠往一個方向流動,恰好此時你又挑了一集電視劇,但是這個人是啥性格,下場咋樣,單從前面的訊息是不能夠進行預測的,但是如果你知道後面的劇情,那麼就非常容易了,這就是為啥引出雙向RNN。。


在上圖中,黃色的實線是從前向後流動的重要資訊,而黃色的虛線就是從後向前的重要資訊。

3.深層RNN網路結構:

 深層的RNN結構,就是多了幾個隱藏層,當重要的資訊一次無法體現的時候,我們就可以採用增加隱藏層的方式,試圖使其變得更加複雜,那麼其就有了更加良好的表示資訊的能力.

4.Keras對RNN的支援:

Keras對RNN模型進行了封裝,呼叫起來是十分的方便。

Keras在layers包的recurrent模組中實現了RNN相關層模型的支援,並在wrapper模型上實現雙向的RNN包裝器.

recurrent模組中的RNN模型包含RNN,LSTM,GRU等模型。

RNN:全連線RNN模型

SimpleRNN(units,activation='tanh',dropout=0.0,recurrent_dropout=0.0,return_sequences=False)

wrapper模組實現雙向RNN模型:

Bidirectional(layer,merge_mode='concat',weights=None)