1. rnn
rnn能夠處理一定的短期依賴,但無法處理長期依賴問題。因為當序列較長時,序列後部的梯度很難反向傳播到前面的序列,這就產生了梯度消失問題。當然,rnn也存在梯度**問題,但這個問題一般可以通過梯度裁剪(gradient clipping)來解決。
rnn網路結構如下:
ht為timestep t的隱藏層狀態值,x
tx_t
xt為輸入,h
th_t
ht實際上還要經過softmax或者別的函式處理得到輸出y^t
\widehat_t
yt
。上圖中rnn單元的計算公式為:
h t=
tanh
(wh.
[ht−
1,xt
]+bh
)h_t=tanh(w_h.[h_,x_t]+b_h)
ht=ta
nh(w
h.[
ht−1
,xt
]+b
h)2. lstm
lstm的網路結構相比於rnn複雜了很多。從微觀上看,lstm引入了細胞狀態,並使用輸入門、遺忘門、輸出門三種門來保持和控制資訊。
具體的,lstm某個timstep t的計算公式如下所示:ft=
σ(wf
.[ht
−1,x
t]+b
f)f_t=\sigma(w_f.[h_, x_t]+b_f)
ft=σ(
wf.
[ht−
1,x
t]+
bf)
i t=
σ(wi
.[ht
−1,x
t]+b
i)i_t=\sigma(w_i.[h_, x_t]+b_i)
it=σ(
wi.
[ht−
1,x
t]+
bi)
c ~t
=tan
h(wc
.[ht
−1,x
t]+b
c)\widetilde_t=tanh(w_c.[h_, x_t]+b_c)
ct=ta
nh(w
c.[
ht−1
,xt
]+b
c)ct=
ft×c
t−1+
it×c
~tc_t=f_t \times c_+i_t\times\widetilde_t
ct=ft
×ct
−1+
it×
ctot=
σ(wo
.[ht
−1,x
t]+b
o)o_t=\sigma(w_o.[h_, x_t]+b_o)
ot=σ(
wo.
[ht−
1,x
t]+
bo)
h t=
ot×t
anh(
ct)h_t=o_t\times tanh(c_t)
ht=ot
×ta
nh(c
t)上述公式中,f
tf_t
ft為遺忘門、i
ti_t
it 為輸入門、o
to_t
ot為輸出門、c
tc_t
ct為細胞狀態、c~t
\widetilde_t
ct為細胞狀態候選值、h
th_t
ht為隱藏層狀態值、w
ww和b
bb為權重和偏置。
rnn沒有細胞狀態;lstm通過細胞狀態記憶資訊。
rnn啟用函式只有tanh;lstm通過輸入門、遺忘門、輸出門引入sigmoid函式並結合tanh函式,新增求和操作,減少梯度消失和梯度**的可能性。
rnn只能夠處理短期依賴問題;lstm既能夠處理短期依賴問題,又能夠處理長期依賴問題。
LSTM及RNN簡單總結
rnn可以記住之前的資訊,將當前資訊聯絡到之前的資訊,比如 the cloud are in the sky 最後的詞,我們並不需要其他的上下文就能知道是sky,這種場景中,相關資訊和 距離比較近,因此rnn可以有效利用先前的資訊。但是當資訊距離比較長,比我我們看的一些電影,在前部份埋下伏筆,最後破...
RNN系列之六 LSTM
lstm的基本結構如下圖 包含三個門控,乙個更新門 輸入門 u,乙個遺忘門 f,乙個輸出門 o 更新門 將新的資訊選擇性的更新到細胞狀態中。遺忘門 將細胞狀態中的資訊選擇性的遺忘。輸出門 確定細胞狀態與輸入的哪個部分將輸出出去。具體數學表示式為 在很多lstm版本中,幾個門值的計算不只取決於輸入x ...
LSTM為什麼比RNN好
來自知乎大佬towser的回答,比較深刻,也加了點自己的注釋,侵刪 lstm 能解決梯度消失 梯度 是對 lstm 的經典誤解,rnn 中的梯度消失 梯度 和普通的 mlp 或者深層 cnn 中梯度消失 梯度 的含義不一樣。mlp cnn 中不同的層有不同的引數,各是各的梯度 而 rnn 中同樣的權...