全連線神經網路能夠很好地擬合複雜的樣本特徵,卷積神經網路能很好地建模區域性與全域性特徵的關係。但它們都只能處理定長的輸入、輸出,而自然語言的處理物件一般是變長的語句,句子中各元素出現的順序先後暗含著時序關係,迴圈神經網路(recurrent neural network,下稱rnn)能夠較好地處理這種關係。
rnn的基本思想是:將處理物件在時序上分解為具有相同結構的單元,單元間有著時序關聯,即本單元接收上一時序對應單元的輸出,並把計算結果輸出到下一時序對應的單元。網路結構由這樣一系列的單元構成,能夠在時序上進行展開。
可以看到每一時刻,隱層不僅接收輸入,還接收了上一時刻隱層的輸出,綜合計算得到該時刻的隱層輸出。公式化過程如下: ht
=∂hk
∂u∂ j∂
u=∑t
=1t∂
jt∂h
t∑k=
1t∂h
k∂u由於
w w
也在f' role="presentation" style="position: relative;">f
f函式中,類似於
u u
,我們可以得到: ∂j
∂w=∑
t=1t
∂jt∂
ht∑k
=1t∂
hk∂w
' role="presentation" style="position: relative;">∂j∂
w=∑t
t=1∂
jt∂h
t∑tk
=1∂h
k∂w∂
j∂w=
∑t=1
t∂jt
∂ht∑
k=1t
∂hk∂
w可以看到,∂j
∂u∂ j∂
u和∂j
∂w∂ j∂
w兩部分都涉及到了連乘,當連乘項數很多,且乘子ut
u
t<1時,梯度便會接近於0;而當乘子ut
u
t>1時,梯度便會接近於無窮,這就是rnn的梯度消失/梯度**的問題。這導致rnn只能學習到短週期的關係,當週期過長(連乘項很多),便會導致學習過程出問題,因此也叫長期依賴問題。
長短時記憶神經網路(long short-term memory neural network,下稱lstm)是rnn的乙個變體,可以有效地解決簡單迴圈神經網路的梯度消失/**問題。lstm 模型的關鍵是引入了一組記憶單元(memory units),允許網路學習何時遺忘歷史資訊,何時用新資訊更新記憶單元。在時刻 t 時,記憶單元ct
c
t記錄了到當前時刻為止的所有歷史資訊,並受三個「門」控制:輸入門 it
i
t, 遺忘門ft
f
t和輸出門ot
o
t。三個門的元素的值在[0, 1] 之間。lstm與原始rnn對比如下:
可以直觀感受到,原始rnn中,梯度流向的路線是相對單一的,而在lstm中通過三個門的控制,使得梯度流向更加得複雜,公式如下: ft
=σ(w
fxt+
ufht
−1+b
f)it
=σ(w
ixt+
uiht
−1+b
i)ot
=σ(w
oxt+
uoht
−1+b
o)ct
−=ta
nh(w
cxt+
ucht
−1)c
t=ft
⊙ct−
1+it
⊙ct−
ht=o
t⊙ta
nh(c
t)f t=
σ(wf
xt+u
fht−
1+bf
)it=
σ(wi
xt+u
iht−
1+bi
)ot=
σ(wo
xt+u
oht−
1+bo
)ct−
=tan
h(wc
xt+u
cht−
1)ct
=ft⊙
ct−1
+it⊙
ct−h
t=ot
⊙tan
h(ct
)遺忘門ft
f
t控制每乙個記憶體單元需要遺忘多少資訊,輸入門it
i
t控制每乙個記憶體單元需要加入多少新的資訊,輸出門ot
o
t控制每乙個記憶體單元輸出多少資訊,
σ σ
是logsitic函式。那麼這樣改進有什麼好處呢?以∂h
∂u∂ h∂
u為例,轉化為求∂h
∂c∂ h∂
c和∂h
∂o∂ h∂
o。ct
c
t是由兩部分求和構成,避免了在求導連乘時過大或過小的情況,ot
o
t同理。通過引入門控制,將梯度分流到了不同的部分,也就極大地降低了梯度消失/**出現的風險。
可是lstm在實際使用過程中帶有大量的引數,且其中門的功能多少有重疊。既想要在保持效果的基礎上加快訓練速度,又要杜絕梯度消失/**的出現。於是就有了lstm的簡化版本——門限迴圈單元(gated recurrent unit,下稱gru)。gru將輸入門和遺忘門合併成乙個門:更新門(update gate),同時還合併了記憶單元ct
c
t和隱層輸出ht
h
t,更新門zt
z
t控制當前的狀態需要遺忘多少歷史和接收多少新資訊。重置門rt
r
t用來控制接收資訊中有多少時來自於歷史資訊。gru檢視與公式如下:
基於rnn模型基礎單元衍生出的lstm、gru,能夠很好地服務於上文提到的幾種架構。在解決了梯度消失/**的問題後,rnn-based模型能夠很好地處理較長的序列。本篇到此為止,就不再細緻講具體應用了。
迴圈神經網路(RNN)筆記總結
本文僅為學習筆記,不做任何商業用途 首先對於乙個簡單的迴圈神經網路如下所示,它由輸入層 隱藏層以及輸出層組成。由上圖我們可以看到,rnn與傳統神經網路有很大的不同,它的隱藏層神經單元a不僅與輸入和輸出有關,而且自身也存在迴路,說明上乙個時刻的網路狀態資訊會對下一時刻的網路狀態產生影響。將上圖展開,得...
迴圈神經網路
原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...
迴圈神經網路
原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...