詳細展示RNN的網路結構

hearthougan發表於2018-09-17

下面簡單介紹一下RNN的結構,如果簡略地去看,RNN結構很簡單,根本沒有CNN那麼複雜,但是要具體實現,還是需要仔細思考一下,希望本篇部落格能把RNN結構說的明白。

迴圈神經網路(Recurrent Neural Network,RNN)DNN以及CNN在對樣本提取特徵的時候,樣本與樣本之間是獨立的,而有些情況是無法把每個輸入的樣本都看作是獨立的,比如NLP中的此行標註問題,ASR中每個音素都和前一個音素是相關的,這類問題可以看做一種帶有時序序列的問題,無法將樣本看做是相互獨立的,因此單純的DNN和CNN解決這類問題就比較棘手。此時RNN就是一種解決這類問題很好的模型。

 由上圖可以看出,RNN的結構是一個重複的過程,且權重W,U,V是共享的,這也是借鑑了CNN的思想,可以減少引數量,從而減少計算的複雜度。t時刻隱藏層的輸出需要t-1時刻的隱藏層的輸出,RNN以此來實現資訊的傳遞。如果上圖計算不清晰,就請看下面的兩幅圖片。

 看到這兩幅圖已經很清晰地展示了RNN的整體結構,但是在具體實現的時候,或者你需要了解每一個細節,我們知道在影象處理的時候,我們的每一個影象被拉成一個向量,每一個畫素其實就是輸入層的一個神經元。並且對於隱藏層每個神經元同樣相當於一個特徵圖所構成向量的一個畫素值。所以,上述的隱藏層並不是一個單一的神經元,它是一個包含多個神經元的隱藏層,如下圖所示。這才是RNN的真正的結構。

好了,上面只是RNN的圖形描述,現在用公式的形式來對RNN的前向傳播進行描述,以下圖的符號進行描述,很容易就可以寫出前向傳播的公式。

公式符號表
符號 含義

K

輸入向量的大小(one-hot長度,也是詞典大小)

T

輸入的每一個序列的長度

H

隱藏層神經元的個數

X=\left \{ x_{1},x_{2},x_{3}....,x_{T} \right \}

樣本集合

x_{t}\epsilon \mathbb{R}^{K\times 1}

t時刻的輸入

y_{t}\epsilon \mathbb{R}^{K\times 1}

t時刻經過Softmax層的輸出。

\hat{y}_{t}\epsilon \mathbb{R}^{K\times 1}

t時刻輸入樣本的真實標籤

L_{t}

t時刻的損失函式,使用交叉熵函式,

L_t=-\hat{y}_t^Tlog(y_t)

L

序列對應的損失函式:

L=\sum\limits_t^T L_t

RNN的反向傳播是每處理完一個樣本就需要對引數進行更新,因此當執行完一個序列之後,總的損失函式就是各個時刻所得的損失之和。

s_{t}\epsilon \mathbb{R}^{H\times 1}

t個時刻RNN隱藏層的輸入。

h_{t}\epsilon \mathbb{R}^{H\times 1}

第t個時刻RNN隱藏層的輸出。

z_{t}\epsilon \mathbb{R}^{H\times 1}

輸出層的輸入,即Softmax函式的輸入

W\epsilon \mathbb{R}^{H\times K}

輸入層與隱藏層之間的權重。

U\epsilon \mathbb{R}^{H\times H}

上一個時刻的隱藏層 與 當前時刻隱藏層之間的權值。

V\epsilon \mathbb{R}^{K\times H}

隱藏層與輸出層之間的權重。

RNN的前向傳播過程:  

                                                                             \begin{matrix} \: \: \: \: \: \: \: \: \; \; \; \; \; \; \; \; \; \; \; \; \; s_t=Uh_{t-1}+Wx_t+b\\ \\ h_t=\sigma(s_t)\\ \\ \; \; \; \; z_t=Vh_t+c\\ \\ \; \; \; \; \; \; \; \; \; \; y_t=\mathrm{softmax}(z_t) \end{matrix}

但是RNN,與CNN或者DNN相比,其引數更新是如何實現的呢?這是訓練RNN的一個核心問題。請看下篇BPTT。

 

參考:

        李宏毅老師課件

相關文章