機器學習篇:循環神經網絡RNN


0 前言

  1. 卷積神經網絡DNN和CNN

  2. 循環神經網絡RNN

  3. 神經網絡發展歷史

  4. 自然語言處理 NLP

循環神經網絡想要整理的內容包括:

  1. 循環神經網絡結構

  2. 經典循環神經網絡

  3. 循環神經網絡的變體

1 循環神經網絡結構

1.1 循環神經網絡

神經網絡可以當作可以擬合任何函數的盒子,而全連接神經網絡存在參數過多的維數災難,卷積神經網絡通過使用卷積核作為特征提取做到了局部連接、權值共享。

而針對序列數據,如文本、語音、視頻、氣象觀測數據、股票交易數據等,經典神經網絡存在兩個問題:

  1. 輸入和輸出不固定。樣本數據,如文本中,我們並不能限制每個句子長度一致。

  2. 特征無法復用,導致參數規模龐大產生維數災難。譬如說卷積神經網絡利用卷積核進行特征提取就做到了特征復用,參數共享。

所以引入了循環神經網絡(Recurrent neural network, RNN),循環神經網絡是一類擴展的人工神經網絡,它是為了對序列數據進行建模而產生的。循環神經網絡針對對象是序列數據,其核心思想:

  • 樣本間存在順序關系,每個樣本和它之前的樣本存在關聯。

  • 通過神經網絡在時序上的展開,我們能夠找到樣本之間的序列相關性。

 

 

1.2 循環神經網絡結構

卷積神經網絡通過卷積核來達到參數共享,而循環神經網絡是針對的時間序列,時間序列的下一個序列的計算參數由上一個序列計算得出,這樣子時間序列的每一個輸入都會受到之前輸入的影響。循環神經網絡RNN的結構如下所示:

 

 

 

其中X是輸入的時間序列或者說是一個向量,O也是一個向量,是輸出層,S也是一個向量,是隱藏層。U是輸入層到隱藏層的權重矩陣,V是隱藏層到輸出層的權重矩陣。從下圖可以看出,隱藏層的值St不僅僅取決於當前的輸入X,還取決於上一次隱藏層的值St-1,權重W矩陣W就是上一次的值作為這一次的輸出的權重。

 

用公式表示如下:

 

1.2.1 循環神經網絡的常見結構包含

one to one:也即是原始神經網絡

 

one to many:譬如說圖像描述

 

many to one:譬如說情感分類,通過一個輸入的句子中多個詞來獲取情感類別,但是存在上下文、長時間的序列損失的缺點。

 

many to many I:機器翻譯,文字序列生成文字序列

 

 

many to many II:命名實體識別

 

1.2.2 網絡內部計算過程

前面有簡單地了解一下循環神經的網絡結構,可得到公式:

 

 

 
 

 

其中的Ot是輸出,St是傳遞到下一時間序列並施加影響的向量。但是在這里要提一下激活函數的概念。

之前有提到過,神經網絡幾乎可以擬合任何函數,但是如果如下所示,僅僅是權重相乘並添加偏置,無論如何,擬合的結果Y'都只會是線性,那么網絡的逼近能力就相當有限。所以便引入了非線性函數作為激活函數(激勵函數),這樣深層神經網絡表達能力就更加強大。

 

 

 

早期研究神經網絡主要采用sigmoid函數或者tanh函數,輸出有界,很容易充當下一層的輸入。近些年Relu函數及其改進型(如Leaky-ReLU、P-ReLU、R-ReLU等)在多層神經網絡中應用比較多。

 

在添加了激勵單元后,將循環神經網絡的計算單元內部展開可以得到如下的結果:

 
 

 

 

 

也即是:

 
 

 

 

 

 

1.2.3 循環神經網絡遇到的問題

當網絡層次越來越深的時候(序列越來越長)就可能產生:梯度爆炸和梯度消失。所謂梯度消失是指,在我們訓練模型的過程中,需要按照反向傳播來不斷訓練模型的參數,但是隨着網絡層次越來越深,反向傳播的值無法傳到淺層,數據不再變化,無法再訓練。

梯度消失和梯度爆炸的本質上上一樣的,都是因為網絡層數太深而引發的梯度反向轉筆中的連乘效應。當我們對sigmoid函數求導,其導數取值范圍在0至0.25之間,而我們初始化的網絡權值|W|通常都小於1,因此,當層數增多時,小於0的值不斷相乘,最后就導致梯度消失的情況出現。同理,梯度爆炸就是當權值|W|過大時,導致|sigmoid'(z)W|>1,最后大於1的值不斷相乘,就會產生梯度爆炸。

同時,對於某些進行正確預測可能依賴於很久之前的某些信息的序列,循環神經網絡的預測可能不夠准確,因為RNN的預測受到的主要影響是較為靠近的輸入。如:

The Cat, which already ate apples banana ..., was full The Cats, which already ate apples banana ..., were full

解決方法

  1. 梯度爆炸:進行梯度修剪,也即是設置一個剪切閾值,如果更新梯度時,梯度超過了這個閾值,那么將其強制限制在這個范圍之內。這樣可以防止梯度爆炸。

  2. 梯度消失:1) 改變激活函數,將tanh激活函數更改為ReLU。2)修改網絡結構,如GRU和LSTM。作為目前最廣為使用的RNN變體,LSTM和GRU通過門控機制很大程度上緩解了RNN的梯度消失問題,但是它們的內部結構看上去十分復雜,使得初學者很難理解其中的原理所在。

2、經典循環神經網絡

前最廣為使用的RNN變體就是上面所說的LSTM和GRU,相對而言比較復雜。

 

2.1 LSTM 長短時記憶網絡

為了解決梯度消失(Gradient Vanish)的問題,Hochreiter&Schmidhuber 在論文“Long short-term memory, 1997”中提出了 LSTM(Long Short-Term Memory)。原始的LSTM只有輸入門(Input Fate)和輸出門(Output Gate),后面由 Gers 在"Learning to Forget: Continual Prediction with LSTM, 2000"中提出了改進版本,添加了遺忘門(Forget Gate)。后來,在"LSTM Recurrent Networks Learn Simple Context Free and Context Sensitive Languages, 2001"中 Gers 又加入了 窺視孔連接(Peephole Connection) 的概念。同時,現在常用的深度學習框架 Tensorflow、Pytorch 等在實現 LSTM 上也有一些細微的區別。以上所說的雖然本質都是 LSTM,但結構上還是有所區別,在使用時需要注意一下。

LSTM中重復單元的內部計算如下圖所示:

 

 

公式如下所示:

 

 

決定丟棄信息確定更新信息當前的記憶更新細胞狀態,長期的記憶更新輸出信息

其中,

  • 遺忘門(forget gate):它決定上一時刻的單元狀態C<t-1>(長期記憶)有多少信息保留到當前時刻C<t>可以保存很久很久之前的信息,解決RNN網絡中的長依賴問題。

  • 輸入門(input gate):它決定當前時刻的網絡輸入x<t>有多少信息保存到單元狀態C<t>可避免當前無關緊要的內容進入記憶。

  • 輸出門(output gate):控制單元狀態C<t>有多少輸出到LSTM的當前輸出值h<t>控制了長期記憶對當前輸出的影響。

在我們訓練LSTM模型的過程中,目標則是學習8組參數,如下圖所示:

 

2.2 GRU 門控循環單元

LSTM有很多變體,其中較大改動的是Gated Recurrent Unit(GRU),這是由Cho,et al.(2014)提出。它將遺忘門與輸入門合成了一個單一的更新門,僅有兩個門:更新門(Update Gate)和重置門(reset Gate)。同樣還混合了細胞狀態和隱藏狀態,以及一些其他的改動。最終的模型比標准的LSTM模型要簡單。效果和LSTM差不多,但是參數少了1/3,不容易過擬合。作為LSTM的變體,GRU也可以解決RNN網絡中的長依賴問題。

 

GRU中的重置門$ R_t$和更新門$Z_t$的輸入均為當前時間的輸入$x_t$與上一時間的隱藏狀態$h_{t-1}$進行權重及偏置計算后,在經由激活函數sigmoid后計算得到。

 

 

 

候選隱藏狀態$\widetilde{h}_t$,GRU將計算候選隱藏狀態來輔助稍后的隱藏狀態的計算,將當前時間重置門與上一時間隱藏狀態做按元素乘法(若重置門的元素值接近0,則意味着丟棄上一時間的隱藏狀態,接近1則表示保留上一時間的隱藏狀態。),然后將結果與當前時間輸入連結,在經由激活函數tanh后計算得出候選隱藏狀態,其所有元素的值域為[-1,1]。

 

 

 

 

候選隱藏狀態$\widetilde{h}t$只是為了更新新的隱藏狀態$h_t$,而並不是隱藏狀態,所以$h_t$計算需要使用當前時間的更新門$z_t$來對上一步的隱藏狀態$h{t-1}$和當前時間步的候選隱藏狀態$\widetilde{h}_t$做組合。

 

 

 

3、循環神經網絡的變體

這里會涉及循環神經網絡RNN的兩個變體雙向循環網絡(Bi-directional RNNs)和深層循環網絡(Multi-layer RNNs)。

3.1 雙向循環網絡(Bi-directional RNNs)

標准的RNN在時刻t的狀態只能從過去的序列以及當前的輸入中捕獲信息,無法使用到后面序列的信息。

BRNN結合時間上從序列起點開始移動的RNN和另一個時間上從序列末尾開始移動的RNN。這允許輸出單元能夠計算同時依賴於過去和未來且對時刻t的輸入值最敏感的表示。

BRNN在每個時刻增加一個隱藏單元,如下圖所示(圖源:深度學習)

 

其中隱藏單元h在時間上向前傳播,隱藏單元g在時間上向后傳播。

BRNN的缺點是必須獲取了所有時刻后的輸入之后,才能進行每個時刻的輸出。從其結構上來看,適合進行自然語言處理,能夠克服標准RNN不能處理上下文的缺陷。

3.2 深層循環網絡(Deep RNNs)

在標准的RNN中,我們在每一個時刻對該時刻的輸入$x_t$的處理都只包含一個隱藏層。而DRNN是由多個隱藏層疊加而成,如下圖所示:

 

DRNN中較低的層起到了將原始輸入轉化為對更高層的隱藏狀態更適合的表示的作用。

一般來說,多層神經網絡隨着層數增加,其擬合能力會更好。但是增加深度會帶來優化困難,而且因為RNN在時間維度上很大,所以一般不會構建很深的RNN。

 

參考

一文搞懂RNN(循環神經網絡)基礎篇

Hopfield Network 霍普菲爾德網絡入門

循環神經網絡常見的結構(學習筆記)

常用激活函數(激勵函數)理解與總結

深度學習中常用的激勵函數

梯度消失和梯度爆炸問題詳解

RNN & LSTM & GRU 的原理與區別

理解 LSTM 網絡

深度學習之GRU網絡

Word Embedding/RNN/LSTM

LSTM原理——輸入門、遺忘門、輸出門

GRU(門控循環單元)--學習筆記

花書+吳恩達深度學習(十六)序列模型之雙向循環網絡 BRNN 和深度循環網絡 Deep RNN

深層循環神經網絡(DRNN)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM