概述
1.介绍
假设词向量长度为128,隐含层神经元个数为256。LSTM中引入3个门,即输入门、遗忘门、输出门;及其他组件:候选记忆细胞、记忆细胞。
2.时间t时候:各个组件(3个门+候选记忆细胞、记忆细胞)
如上图所示,对于每个组件有:
(1)
输入门:
I
t
I_t
It
I
t
=
σ
(
X
t
W
i
h
I
+
H
t
−
1
W
h
h
I
+
b
i
h
I
)
I_t = sigma (X_tW_{ih}^I+H_{t-1}W_{hh}^I+b_{ih}^I)
It=σ(XtWihI+Ht−1WhhI+bihI)
遗忘门:
F
t
F_t
Ft
F
t
=
σ
(
X
t
W
i
h
F
+
H
t
−
1
W
h
h
F
+
b
i
h
F
)
F_t = sigma (X_tW_{ih}^F+H_{t-1}W_{hh}^F+b_{ih}^F)
Ft=σ(XtWihF+Ht−1WhhF+bihF)
输出门:
O
t
O_t
Ot
O
t
=
σ
(
X
t
W
i
h
O
+
H
t
−
1
W
h
h
O
+
b
i
h
O
)
O_t = sigma (X_tW_{ih}^O+H_{t-1}W_{hh}^O+b_{ih}^O)
Ot=σ(XtWihO+Ht−1WhhO+bihO)
候选记忆细胞:
C
t
~
{widetilde{C_t} }
Ct
C
t
~
=
tanh
(
X
t
W
i
h
C
t
~
+
H
t
−
1
W
i
h
C
t
~
+
b
i
h
C
t
~
)
widetilde{C_t} = tanh (X_tW_{ih}^{widetilde{C_t}}+H_{t-1}W_{ih}^{widetilde{C_t}}+b_{ih}^{widetilde{C_t}})
Ct
=tanh(XtWihCt
+Ht−1WihCt
+bihCt
)
其中,
X
t
X_t
Xt为长度为128的向量;
W
i
h
W_{ih}
Wih为128x256的矩阵;
W
h
h
W_{hh}
Whh为256x256的矩阵;
b
i
h
b_{ih}
bih为长度为256的向量;以上每个组件的时间
t
t
t结果都是长度为256的向量(输入都是
X
t
X_t
Xt,最后都是加上
b
i
h
b_{ih}
bih后,经过激活函数)。
(2)
记忆细胞:
C
t
{C_t }
Ct
C
t
=
F
t
⊙
C
t
−
1
+
I
t
⊙
C
t
~
C_t = F_todot C_{t-1} + I_t odot widetilde{C_t}
Ct=Ft⊙Ct−1+It⊙Ct
其中,
⊙
odot
⊙是元素乘法符号,即左边2向量的每个元素相乘,右边2向量的每个元素相乘,都是256的向量,然后结果相加为新的256向量(时间
t
t
t时候,
C
t
{C_t }
Ct结果是长度为256的向量)。记忆细胞由:遗忘门
⊙
odot
⊙上一个记忆细胞、输入门
⊙
odot
⊙候选记忆细胞决定。
通过输出门控制从记忆细胞到隐藏状态的信息流动:
H
t
=
O
t
⊙
tanh
C
t
H_t = O_todot tanh C_{t}
Ht=Ot⊙tanhCt
隐含层由:输出门
⊙
odot
⊙ tanh 记忆细胞决定。
3.补充:多层的lstm及pytorch中的lstm
(1)多层的lstm:
以上为时间
t
t
t时候的计算流程,实际上,LSTM的输出为所有时间步的结果
h
0
,
h
1
,
.
.
.
,
h
t
h_0,h_1,...,h_t
h0,h1,...,ht,并且上面显示的是一个完整的lstm的过程的时间步t步骤,如果走完所有t则是一层的lstm。而多层的lstm指的是,假设是2层:在每个时间步t时候,第1层的输出结果都是作为输入进入第2层的lstm(即上图的虚线部分是第1层的输出结果,注意区别:上一个时间步t-1的情况),而网络最终的输出为第2层lstm的输出。
(2)在pytorch中的lstm:
nn.LSTM(词向量长度, 隐含层神经元个数, dropout(发生在
h
t
h_t
ht处,并且最后一个时间t不发生), num_layers(lstm的层数),batch_first=True(批量放在第1维度,这样输出的数据批量在第一维度)),并且以上的四个组件(输入门、遗忘门、输出门和候选记忆细胞)的参数等,如:
W
i
h
W_{ih}
Wih=128x256的矩阵被统一为一个,但是长度为原来的四倍,即
W
i
h
W_{ih}
Wih=128x1024=128x[256x4]。
参考
http://zh.gluon.ai/chapter_recurrent-neural-networks/lstm.html
https://discuss.pytorch.org/t/num-layers-in-nn-lstm/11664/3
最后
以上就是默默羊为你收集整理的LSTM网络结构的全部内容,希望文章能够帮你解决LSTM网络结构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复