循環神經網絡(Recurrent Neural Network)
AI-第五期-DarkRabbit
這篇文章是對循環神經網絡的一個概念性總結,對應:
- 第十一周:(01)循環神經網絡
- 第十一周:(04)LSTM
- 維基百科(en):
- “Recurrent neural network” 詞條
- “Long short-term memory” 詞條
- “Backpropagation through time” 詞條
公式在CSDN的app中會顯示亂碼,請在其它方式閱讀
目錄
- 循環神經網絡(Recurrent Neural Network)
- 目錄
- 1 什麼是循環神經網絡
- 2 常用結構(Architectures)
- 2.1 基本結構(Basic)
- 2.2 簡單結構(Simple Recurrent (Neural) Networks,SR(N)N)
- 2.3 長短期記憶網絡(Long Short-Term Memory,LSTM)
- 3 基于時間的反向傳播算法(Backpropagation Trough Time,BPTT)
1 什麼是循環神經網絡
循環神經網絡是一種人工神經網絡(Artificial Neural Network),它的神經元間的連接配接沿序列(sequence)構成有向圖,這使得它能表現出動态時間行為,是以有些地方也稱為時間遞歸神經網絡。
2 常用結構(Architectures)
2.1 基本結構(Basic)
基本循環神經網絡結構(圖檔來自 Wikipedia):
從圖中可以看出( t t 為時間,除時間外所指均為向量或矩陣,下同):
- 輸入層(input):在 tt 時刻的輸入 xt x t 。
- 隐藏層(hidden):在 t t 時刻的值 htht ,它取決于權重為 U U 的 xtxt 與 權重為 V V 的 ht−1ht−1 。
- 輸出層(output):在 t t 時刻的輸出 otot ,它取決于權重為 W W 的 htht 。
-
用公式表示即是:
otht=σo(Wht)=σh(Uxt+Vht−1)(1)(2) o t = σ o ( W h t ) ( 1 ) h t = σ h ( U x t + V h t − 1 ) ( 2 )
其中 σ(⋅) σ ( ⋅ ) 為對應的激活函數。
從公式(2)表現為遞歸形式來看,輸出 ot o t 是受到之前所有輸入的影響( xt,xt−1,⋯ x t , x t − 1 , ⋯ )。展開式為:
ot=σo(Wht)=σo(W⋅σh(Uxt+Vht−1))=σo(W⋅σh(Uxt+V⋅σh(Uxt−1+Vht−2)))=σo(W⋅σh(Uxt+V⋅σh(Uxt−1+V⋅σh(Uxt−2+V⋅σh(⋯)))))(3) o t = σ o ( W h t ) = σ o ( W ⋅ σ h ( U x t + V h t − 1 ) ) = σ o ( W ⋅ σ h ( U x t + V ⋅ σ h ( U x t − 1 + V h t − 2 ) ) ) = σ o ( W ⋅ σ h ( U x t + V ⋅ σ h ( U x t − 1 + V ⋅ σ h ( U x t − 2 + V ⋅ σ h ( ⋯ ) ) ) ) ) ( 3 )
2.2 簡單結構(Simple Recurrent (Neural) Networks,SR(N)N)
簡單循環網絡(SRN)通常是指 Elman networks 與 Jordan networks 。
Elman 網絡的結構(圖檔來自 Wikipedia):
Elman 網絡是一個三層網絡(圖中 x,y,z x , y , z ),附帶一個“上下文單元”(context units,圖中 u u )。隐層與這些單元相連接配接,權重為1。
Jordan 網絡和 Elman 網絡非常相似。隻是這些“上下文單元”不是和隐層相連,而是與輸出層相連。這些“上下文單元”被稱為狀态層(state layer)。
它們的公式表示都為:
ytht=σy(Wyht+by)=σh(Whxt+Uhht−1+bh)(4)(5)yt=σy(Wyht+by)(4)ht=σh(Whxt+Uhht−1+bh)(5)
2.3 長短期記憶網絡(Long Short-Term Memory,LSTM)
LSTM 避免了梯度消失的問題。
LSTM 結構如下(圖檔來自 Wikipedia):
一個 LSTM 包含一個記憶細胞(memory cell,圖中 ct c t ),一個遺忘門(forget gate,圖中 σ,Ft σ , F t )一個輸入門(input gate,圖中 σ,It σ , I t )和一個輸出門(output gate,圖中 σ,Ot σ , O t )。
從圖中就可以看出,在 LSTM 有:
- 遺忘門:決定了上一時刻 ct−1 c t − 1 保留多少内容。
- 輸入門:決定了這一時刻 xt x t 保留多少内容。
- 輸出門:決定了這一時刻 ct c t 有多少内容輸出到 ht h t 。
- 輸入:在 t t 時刻的輸入 xtxt ,在 t−1 t − 1 時刻的輸出 ht−1 h t − 1 和 ct−1 c t − 1 。
- 輸出:在 t t 時刻的輸出 htht 和 ct c t 。
用公式表示即是:
FtItOtctht=sigmoid(WFxt+UFht−1+bF)=sigmoid(WIxt+UIht−1+bI)=sigmoid(WOxt+UOht−1+bO)=Ft∘ct−1+It∘tanh(Wcxt+Ucht−1+bc)=Ot∘tanh(ct)(6)(7)(8)(9)(10) F t = s i g m o i d ( W F x t + U F h t − 1 + b F ) ( 6 ) I t = s i g m o i d ( W I x t + U I h t − 1 + b I ) ( 7 ) O t = s i g m o i d ( W O x t + U O h t − 1 + b O ) ( 8 ) c t = F t ∘ c t − 1 + I t ∘ tanh ( W c x t + U c h t − 1 + b c ) ( 9 ) h t = O t ∘ tanh ( c t ) ( 10 )
其中 ∘ ∘ 是哈達馬乘積(Hadamard product)矩陣運算,也記作 ∗ ∗ ,部分文章也寫作 ⊙ ⊙ 。
3 基于時間的反向傳播算法(Backpropagation Trough Time,BPTT)
BPTT 是一種基于梯度的技術,可以用來計算 Elman 網絡。
具體的計算可以參考這篇文章
Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients