lstm:long short term memory networks(長短時記憶模型)
傳統的rnns只能解決短期依賴的問題,比如我們想**這句話「the clouds are in the sky」的最後乙個詞"sky",我們不需要更多的資訊,前面的資訊已經足夠了,這種情況下,相關資訊之間的距離非常近,此時傳統的rnns可以處理此類問題。但當相關資訊距離非常遠時,比如我們要**「i grew up in france…i speak fluent french」這句話中的最後乙個詞「french」,我們需要之前的資訊「france」,對於這種長距離的依賴rnns是無法處理的,但是lstms可以解決此類問題。
第一幅圖是傳統的rnn的結構,每個迴圈單元中只有一層layer。傳統的rnn計算公式可以參看此鏈結
下圖是lstm的結構,每個迴圈單元中有四層layer。
將lstm迴圈單元進一步展開如下圖:
lstm迴圈單元包含三個門(gate),分別負責遺忘哪些歷史資訊(forget gate)、增加哪些歷史資訊(updating gate)、以及輸出門(output gate)
第乙個門((forget gate layer)):決定我們要扔掉哪些資訊(1)γf
⟨t⟩=
σ(wf
[a⟨t
−1⟩,
x⟨t⟩
]+bf
)\gamma_f^ = \sigma(w_f[a^, x^] + b_f)\tag
γf⟨t⟩
=σ(w
f[a
⟨t−1
⟩,x⟨
t⟩]+
bf)
(1)該公式計算出的值介於0-1之間(因為啟用函式是sigmoid),所以當該值與c
1>
c^{}
c1>
點乘操作時,值越大的位置相乘後得到的結果值也越大,即該位置保留的歷史資訊越多。
第二個門(updating gate):用來決定我們要增加哪些新的資訊(2)γu
⟨t⟩=
σ(wu
[a⟨t
−1⟩,
x]+b
u)\gamma_u^ = \sigma(w_u[a^, x^}] + b_u)\tag
γu⟨t⟩
=σ(w
u[a
⟨t−1
⟩,x]
+bu
)(2)
第三層layer的計算公式如下,用來與更新門點乘得到要增加的資訊:(3)c~
⟨t⟩=
tanh(
wc[a
⟨t−1
⟩,x⟨
t⟩]+
bc)\tilde^ = \tanh(w_c[a^, x^] + b_c)\tag
c~⟨t⟩=
tanh(w
c[a
⟨t−1
⟩,x⟨
t⟩]+
bc)
(3)最終該迴圈單元的c
<
t>
c^{}
c<
t>
,即用來儲存歷史資訊的輸出,用下面公式計算:(4)c⟨
t⟩=γ
f⟨t⟩
∗c⟨t
−1⟩+
γu⟨t
⟩∗c~
⟨t⟩c^ = \gamma_f^* c^ + \gamma_u^ *\tilde^ \tag
c⟨t⟩=γ
f⟨t⟩
∗c⟨
t−1⟩
+γu⟨
t⟩∗
c~⟨t
⟩(4)
第三個門(output gate),該門用來計算a
<
t>
a^{}
a<
t>
, 然後a
<
t>
a^{}
a<
t>
用來計算該單元的輸出y
yy(5)γo
⟨t⟩=
σ(wo
[a⟨t
−1⟩,
x⟨t⟩
]+bo
)\gamma_o^= \sigma(w_o[a^, x^] + b_o)\tag
γo⟨t⟩
=σ(w
o[a
⟨t−1
⟩,x⟨
t⟩]+
bo)
(5)(6)a⟨
t⟩=γ
o⟨t⟩
∗tanh(
c⟨t⟩
)a^ = \gamma_o^* \tanh(c^)\tag
a⟨t⟩=γ
o⟨t⟩
∗tanh(c
⟨t⟩)
(6)參考部落格及**:
MATLAB深度學習之LSTM
matlab深度學習之lstm 深度學習工具箱 net trainnetwork sequences,y,layers,options clc clear 訓練深度學習 lstm 網路,進行序列到標籤的分類。xtrain 是乙個包含 270 個不同長度序列的單元陣列,具有 12 個與 lpc cep...
資源 深度學習架構譜系
近幾年,深度學習高速發展,出現了大量的新模型與架構,以至於我們無法理清網路型別之間的關係。在這篇文章中,香港科技大學 hkust 助理教授金成勳總結了深度網路型別之間的譜系圖,以便於我們索引不同型別網路的傑出研究成果。完整圖 記憶網路 參考閱讀 卷積神經網路 cnn 如下所示,cnn 除了包含執行目...
資源 深度學習架構譜系
近幾年,深度學習高速發展,出現了大量的新模型與架構,以至於我們無法理清網路型別之間的關係。在這篇文章中,香港科技大學 hkust 助理教授金成勳總結了深度網路型別之間的譜系圖,以便於我們索引不同型別網路的傑出研究成果。完整圖 記憶網路 參考閱讀 卷積神經網路 cnn 如下所示,cnn 除了包含執行目...