深度学习之循环神经网络(2)循环神经网络原理
深度學習之循環(huán)神經(jīng)網(wǎng)絡(2)循環(huán)神經(jīng)網(wǎng)絡原理
- 1. 全連接層
- 2. 共享權值
- 3. 全局語義
- 4. 循環(huán)神經(jīng)網(wǎng)絡
?現(xiàn)在我們來考慮如何吃力序列信號,以文本序列為例,考慮一個句子:
“I dislike this boring movie”
通過Embedding層,可以將它轉換為shape為 [b,s,n][b,s,n][b,s,n]的張量, bbb為句子數(shù)量, sss為句子長度,n為向量長度。上述句子可以表示為shape為 [1,5,10][1,5,10][1,5,10]的張量,其中5代表句子單詞長度,10表示詞向量長度。
?接下來逐步探索能夠處理序列信號的網(wǎng)絡模型,為了便于表達,我們以情感分類任務為例,如下圖所示。情感分類任務通過分析給出的文本序列,提煉出文本數(shù)據(jù)表達的整體語義特征,從而預測輸入文本的感情類型: 正面評價或者負面評價。從分類角度來看,情感分類問題就是一個簡單的二分類問題,與圖片分類不一樣的是,由于輸入是文本序列,傳統(tǒng)的卷積神經(jīng)網(wǎng)絡并不能取得很好的效果。那么什么類型的網(wǎng)絡擅長處理序列數(shù)據(jù)呢?
情感分類任務
1. 全連接層
?首先我們想到的是,對于每個詞向量,分別使用一個全連接層網(wǎng)絡
o=σ(Wtxt+bt)\boldsymbol o=σ(\boldsymbol W_t \boldsymbol x_t+\boldsymbol b_t)o=σ(Wt?xt?+bt?)
提取語義特征,如下圖所示,各個單詞的詞向量通過sss個全連接層分類網(wǎng)絡1提取每個單詞的特征,所有單詞的特征合并,并通過分類網(wǎng)絡2輸出序列的類別概率分布,對于長度為sss的句子來說,至少需要sss個全網(wǎng)絡層。
這種方案的缺點有:
- 網(wǎng)絡參數(shù)量是相當可觀的,內存占用和計算代價較高,同時由于每個序列的長度sss并不相同,網(wǎng)絡結構是動態(tài)變化的;
- 每個全連接層子網(wǎng)絡Wi\boldsymbol W_iWi?和bi\boldsymbol b_ibi?只能感受當前詞向量的輸入,并不能感知之前和之后的語境信息,導致句子整體語義的缺失,每個子網(wǎng)絡只能根據(jù)自己的輸入來提取高層特征,有如管中窺豹。
2. 共享權值
?在介紹卷積神經(jīng)網(wǎng)絡時,我們就比較過,卷積神經(jīng)網(wǎng)絡之所以在處理局部相關數(shù)據(jù)時優(yōu)于全連接網(wǎng)絡,是因為它充分利用了權值共享的思想,大大減少了網(wǎng)絡的參數(shù)量,使得網(wǎng)絡訓練起來更加高效。那么,我們在處理序列信號的問題上,能否借鑒權值共享的思想呢?
?如下圖方案所示,sss個全連接層的網(wǎng)絡并沒有實現(xiàn)權值共享。我們嘗試將這s個網(wǎng)絡層參數(shù)共享,這樣其實相當于使用一個全連接網(wǎng)絡來提取所有單詞的特征信息,如下圖所示:
?通過權值共享后,參數(shù)量大大減少,網(wǎng)絡訓練變得更加穩(wěn)定高效。但是。這種網(wǎng)絡結構并沒有考慮序列之間的先后順序,將詞向量打亂次序仍然能獲得相同的輸出,無法獲取有效的全局語義信息。
3. 全局語義
?如何賦予網(wǎng)絡提取整體語義特征的能力呢?或者說,如何能夠讓網(wǎng)絡能夠按序提取詞向量的語義信息,并積累成整個句子的全局語義信息呢?我們想到了內存(Memory)機制。如果網(wǎng)絡能夠提供一個單獨的內存變量,每次提取詞向量的特征并刷新內存變量,直至最后一個輸入完成,此時的內存變量即存儲了所有序列的語義特征,并且由于輸入序列之間的先后順序,使得內存變量內容與序列順序緊密關聯(lián)。
?我們將上述Memory機制實現(xiàn)為一個狀態(tài)張量h\boldsymbol hh,如上圖所示,除了原來的Wxh\boldsymbol W_{xh}Wxh?參數(shù)共享外,這里額外增加了一個Whh\boldsymbol W_{hh}Whh?參數(shù),每個時間戳t上狀態(tài)張量h\boldsymbol hh刷新機制為:
ht=σ(Wxhxt+Whhht?1+b)\boldsymbol h_t=σ(\boldsymbol W_{xh} \boldsymbol x_t+\boldsymbol W_{hh} \boldsymbol h_{t-1}+\boldsymbol b)ht?=σ(Wxh?xt?+Whh?ht?1?+b)
其中狀態(tài)張量h0\boldsymbol h_0h0?為初始的內存狀態(tài),可以初始化為全0,經(jīng)過sss個詞向量的輸入后得到網(wǎng)絡最終的狀態(tài)張量hs\boldsymbol h_shs?,hs\boldsymbol h_shs?較好地代表了句子的全局語義信息,基于hs\boldsymbol h_shs?通過某個全連接層分類器即可完成情感分類任務。
4. 循環(huán)神經(jīng)網(wǎng)絡
?通過一步步地探索,我們最終提出了一種“新型”的網(wǎng)絡結構,如下圖所示,在每個時間戳ttt,網(wǎng)絡層接受當前時間戳的輸入xt\boldsymbol x_txt?和上一個時間戳的網(wǎng)絡狀態(tài)向量ht?1\boldsymbol h_{t-1}ht?1?,經(jīng)過
ht=fθ(ht?1,xt)\boldsymbol h_t=f_θ (\boldsymbol h_{t-1},\boldsymbol x_t)ht?=fθ?(ht?1?,xt?)
變換后得到當前時間戳的新狀態(tài)向量ht\boldsymbol h_tht?,并寫入內存狀態(tài)中,其中fθf_θfθ?代表了網(wǎng)絡的運算邏輯,θθθ為網(wǎng)絡參數(shù)集。在每個時間戳上,網(wǎng)絡層均有輸出產(chǎn)生ot\boldsymbol o_tot?,ot=g?(ht)\boldsymbol o_t=g_\text{\o} (\boldsymbol h_t)ot?=g??(ht?),即將網(wǎng)絡的狀態(tài)向量變換后輸出。
?上述網(wǎng)絡結構在時間戳上折疊,如下圖所示,網(wǎng)絡循環(huán)接受序列的每個特征向量xt\boldsymbol x_txt?,并刷新內部狀態(tài)向量ht\boldsymbol h_tht?,同時形成輸出ot\boldsymbol o_tot?。對于這種網(wǎng)絡結構,我們把它叫做循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,簡稱RNN)。
?更特別地,如果使用張量Wxh\boldsymbol W_{xh}Wxh?、Whh\boldsymbol W_{hh}Whh?和偏置b\boldsymbol bb來參數(shù)化fθf_θfθ?網(wǎng)絡,并按照
ht=σ(Wxhxt+Whhht?1+b)\boldsymbol h_t=σ(\boldsymbol W_{xh} \boldsymbol x_t+\boldsymbol W_{hh} \boldsymbol h_{t-1}+\boldsymbol b)ht?=σ(Wxh?xt?+Whh?ht?1?+b)
方式更新內存狀態(tài),我們把這種網(wǎng)絡叫做基本的循環(huán)神經(jīng)網(wǎng)絡,如無特殊說明,一般說的循環(huán)神經(jīng)網(wǎng)絡即指這種實現(xiàn)。在循環(huán)神經(jīng)網(wǎng)絡中,激活函數(shù)更多地采用tanh\text{tanh}tanh函數(shù),并且可以選擇不使用偏置b來進一步減少參數(shù)量。狀態(tài)向量ht\boldsymbol h_tht?可以直接用作輸出,即ot=ht\boldsymbol o_t=\boldsymbol h_tot?=ht?,也可以對ht\boldsymbol h_tht?做一個簡單的線性變換ot=Whoht\boldsymbol o_t=\boldsymbol W_{ho} \boldsymbol h_tot?=Who?ht?后得到每個時間戳上的網(wǎng)絡輸出ot\boldsymbol o_tot?。
總結
以上是生活随笔為你收集整理的深度学习之循环神经网络(2)循环神经网络原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宽带接入服务器的方式有哪些
- 下一篇: 深度学习之循环神经网络(3)梯度传播