LSTM & Bi-LSTM & GRU
1、LSTM簡介
基於RNN,與之不同的是一個是門控單元有所不同。
長短期記憶網絡將資訊存放在遞迴網路正常資訊流之外的門控單元中,這些單元可以儲存、寫入或讀取息就像計算機記憶體中的資料一樣。但願通過門的開關判定儲存哪些資訊,何時允許讀取、寫入或清除資訊。這些門是模擬的,包含輸出範圍全部在0~1之間的Sigmoid函式的逐元素相乘操作。這些門依據接收到的訊號開關,而且會用自身的權重集對資訊進行篩選,根據強度和輸入內容決定是否允許資訊通過。這些權重會通過遞迴網路的學習過程進行調整。
LSTM主要是為了解決長序列訓練過程中的梯度消失和梯度爆炸問題。簡單來說,就是相比普通的RNN,LSTM能夠在更長的序列中有更好的表現。
如上圖所示,RNN只有一個門:輸入門(輸入和輸出相當於一個門),而LSTM擁有三個門,分別為:遺忘門、輸入門、輸出門。
1.2、遺忘門
對上一個節點傳進來的輸入進行選擇性忘記。簡單來說就是會 “忘記不重要的,記住重要的”。
f
t
=
σ
(
W
f
⋅
[
h
t
−
1
,
x
t
]
+
b
f
)
f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f)
ft=σ(Wf⋅[ht−1,xt]+bf)
1.3、輸入門
將這個階段的輸入有選擇性地進行“記憶”。一個新的候選值,判斷是否將其加入到元胞狀態中。
i
t
=
σ
(
W
i
⋅
[
h
t
−
1
,
x
t
]
+
b
i
)
i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i)
it=σ(Wi⋅[ht−1,xt]+bi)
C
t
~
=
t
a
n
h
(
W
C
⋅
[
h
t
−
1
,
x
t
]
+
b
C
)
\tilde{C_t}=tanh(W_C\cdot[h_{t-1},x_t]+b_C)
Ct~=tanh(WC⋅[ht−1,xt]+bC)
C
t
=
f
t
∗
C
t
−
1
+
i
t
∗
C
t
~
C_t=f_t*C_{t-1}+i_t*\tilde{C_t}
Ct=ft∗Ct−1+it∗Ct~
1.4、輸出門
決定哪些將會被當成當前狀態的輸出。選擇重要的資訊作為元胞狀態的輸出。
o
t
=
σ
(
W
o
⋅
[
h
t
−
1
,
x
t
]
+
b
o
)
o_t=\sigma(W_o\cdot[h_{t-1},x_t]+b_o)
ot=σ(Wo⋅[ht−1,xt]+bo)
h
t
=
o
t
∗
t
a
n
h
(
C
t
)
h_t=o_t*tanh(C_t)
ht=ot∗tanh(Ct)
1.5、LSTM步驟如下:
- 決定從元胞狀態中扔掉哪些資訊。由叫做“遺忘門”的Sigmoid層控制。遺忘門會輸出0~1之間的數,1表示保留該資訊,0表示丟棄該資訊。 f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f) ft=σ(Wf⋅[ht−1,xt]+bf)
- 通過輸入門將有用的新資訊加入到元胞狀態。首先,將前一狀態和當前狀態的輸入輸入到Sigmoid函式中濾除不重要資訊。另外,通過tanh函式得到一個-1〜1之間的輸出結果。這將產生一個新的候選值,後續將判斷是否將其加入到元胞狀態中。
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i) it=σ(Wi⋅[ht−1,xt]+bi)
C t ~ = t a n h ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C_t}=tanh(W_C\cdot[h_{t-1},x_t]+b_C) Ct~=tanh(WC⋅[ht−1,xt]+bC) - 將上一步中Sigmoid函式和tanh函式的輸出結果相乘,並加上第一步中的輸出結果,從而實現保留的資訊都是重要資訊,此時更新狀態即可忘掉那些不重要的資訊。 C t = f t ∗ C t − 1 + i t ∗ C t ~ C_t=f_t*C_{t-1}+i_t*\tilde{C_t} Ct=ft∗Ct−1+it∗Ct~
- 最後,從當前狀態中選擇重要的資訊作為元胞狀態的輸出。首先,將前一隱狀態和當前輸入值通過Sigmoid函式得到一個0〜1之間的結果值。然後對第三步中輸出結果計算tanh函式的輸出值,並與得到的結果值相乘,作為當前元胞隱狀態的輸出結果,同時也作為下一個隱狀態的輸入值。
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t=\sigma(W_o\cdot[h_{t-1},x_t]+b_o) ot=σ(Wo⋅[ht−1,xt]+bo)
h t = o t ∗ t a n h ( C t ) h_t=o_t*tanh(C_t) ht=ot∗tanh(Ct)
1.6 LSTM訓練過程
1.7 多隱藏層的LSTM
左邊是2個隱藏層,右邊是3個隱藏層。
2、Bi-LSTM(Bi-directional Long Short-Term Memory)
LSTM只關注了"上文",有時候我們需要感知"上下文",特別是在自然語言處理中。
前向的LSTM與後向的LSTM結合成BiLSTM。
例如:前向的依次輸入“我”,“愛”,“中國”得到三個向量{
h
L
0
,
h
L
1
,
h
L
2
h_{L0},h_{L1},h_{L2}
hL0,hL1,hL2}。後向的依次輸入“中國”,“愛”,“我”得到三個向量{
h
R
0
,
h
R
1
,
h
R
2
h_{R0},h_{R1},h_{R2}
hR0,hR1,hR2}。最後將前向和後向的隱向量進行拼接得到{
[
h
L
0
,
h
R
0
]
,
[
h
L
1
,
h
R
1
]
,
[
h
L
2
,
h
R
2
]
[h_{L0},h_{R0}],[h_{L1},h_{R1}],[h_{L2},h_{R2}]
[hL0,hR0],[hL1,hR1],[hL2,hR2]},即:{
h
0
,
h
1
,
h
2
h_0,h_1,h_{2}
h0,h1,h2}。
3、GRU(Gate Recurrent Unit)
GRU是迴圈神經網路的一種,也是為了解決長期記憶和反向傳播中的梯度等問題而提出來的。為什麼用GRU?相比LSTM,使用GRU能夠達到相當的效果,並且相比之下更容易進行訓練,能夠很大程度上提高訓練效率,因此很多時候會更傾向於使用GRU。
門限迴圈單元本質上就是一個沒有輸出門的長短期記憶網路,因此它在每個時間步都會將記憶單元中的所有內容寫入整體網路。
GRU只有兩個門:重置門和更新門,將遺忘門和輸入門合併為更新門,將細胞狀態 與 隱藏層輸出 合併在一起。
將元胞狀態和隱狀態合併,更新門用於控制前一時刻的狀態資訊被帶入到當前狀態中的程度,更新門的值越大說明前一時刻的狀態資訊帶入越多。重置門用於控制忽略前一時刻的狀態資訊的程度,重置門的值越小說明忽略的越多。這個模型比長短期記憶網路更加簡化,也變得越來越流行。
來源:趙衛東《機器學習》
相關文章
- LSTM變種-GRU網路結構
- NLP教程(5) - 語言模型、RNN、GRU與LSTM模型RNN
- 十 | 門控迴圈神經網路LSTM與GRU(附python演練)神經網路Python
- 深度學習四從迴圈神經網路入手學習LSTM及GRU深度學習神經網路
- 三次簡化一張圖: 一招理解LSTM/GRU門控機制
- 深度學習中的序列模型演變及學習筆記(含RNN/LSTM/GRU/Seq2Seq/Attention機制)深度學習模型筆記RNN
- RNN、LSTMRNN
- LSTM理解
- Understanding LSTM Networks
- 雙向lstm原理
- 深度學習-LSTM深度學習
- lstm(一) 演化之路
- 開發Bidirectional LSTM模型的簡單教程 | 博士帶你學LSTM模型
- LSTM神經網路神經網路
- 原作者帶隊,LSTM捲土重來之Vision-LSTM出世
- LSTM:好理解的資源
- pytorch lstm原始碼解讀PyTorch原始碼
- 最後一期:如何更新LSTM模型?(附程式碼)| 博士帶你學LSTM模型
- 使用Keras進行深度學習:(六)LSTM和雙向LSTM講解及實踐Keras深度學習
- LSTM解決RNN梯度爆炸(消失)RNN梯度
- LSTM 長短期記憶網路
- LSTM - 長短期記憶網路
- RNN與LSTM網路簡述RNN
- 深度學習(三)之LSTM寫詩深度學習
- 利用LSTM自動生成中文文字
- 使用 LSTM 智慧作詩送新年祝福
- LSTM機器學習生成音樂機器學習
- 利用LSTM做語言情感分類
- 【Python】keras使用LSTM擬合曲線PythonKeras
- 基於LSTM模型的智慧選股策略模型
- 時間序列神器之爭:prophet VS lstm
- 機器閱讀理解Match-LSTM模型模型
- 使用LSTM模型做股票預測【基於Tensorflow】模型
- 基於GRU和am-softmax的句子相似度模型 | 附程式碼實現模型
- 深度學習——如何用LSTM進行文字分類深度學習文字分類
- LSTM捲土重來!xLSTM:一舉超越Mamba、Transformer!ORM
- 原作者帶隊,LSTM真殺回來了!
- NLP入門(十)使用LSTM進行文字情感分析