LSTM网络结构

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+Ht1WhhI+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+Ht1WhhF+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+Ht1WhhO+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 +Ht1WihCt +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_t\odot C_{t-1} + I_t \odot \widetilde{C_t} Ct=FtCt1+ItCt
其中, ⊙ \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_t\odot \tanh C_{t} Ht=OttanhCt
隐含层由:输出门 ⊙ \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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值