LSTM全网最强大厂面试级深度的知识点整理(附代码)

1 什么是LSTM

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
在这里插入图片描述
在这里插入图片描述

2 深入LSTM结构

下面具体对LSTM的内部结构来进行剖析。
在这里插入图片描述
下面开始进一步介绍这四个状态在LSTM内部的使用。
在这里插入图片描述
在这里插入图片描述
下图是普通RNN前向传播公式
在这里插入图片描述
下图是LSTM前向传播公式
在这里插入图片描述

3 总结

在这里插入图片描述

4 补充

为什么RNN中的 h t h^t ht 对应于 LSTM中的 c t c^t ct
答:LSTM中的 c t c^t ct主要是用来保存先前节点的数据,而RNN起此作用的必然就是 h t h^t ht了。

为什么传递下去的 c t c^t ct 改变得很慢,通常输出的 c t c^t ct 是上一个状态传过来的 c t − 1 c^{t-1} ct1 加上一些数值;而 h t h^t ht 则在不同节点下往往会有很大的区别?
答:
c t c^t ct也就是cell state中的内容,可以理解为主线,主要是用来保存节点传递下来的数据的,每次传递会对某些维度进行“忘记”并且会加入当前节点所包含的内容,总的来说还是用来保存节点的信息,改变相对较小。
h t h^t ht则主要是为了和当前输入组合来获得门控信号,对于不同的当前输入,传递给下一个状态的 h t h^t ht区别也会较大。

5 LSTM为什么能够缓解梯度消失问题(重点)

在这里插入图片描述
下图为RNN中连乘的部分:
在这里插入图片描述
在这里插入图片描述

6 LSTM输入输出内部维度(unit_num)(重点)

在这里插入图片描述
在这里插入图片描述
上述是从单个LSTM Cell角度来进行解析的,我们从代码角度,即整体角度去进行解析LSTM中各个数据的维度情况:
在这里插入图片描述

  1. 整个LSTM的output维度:output是一个三维的张量,第一维表示序列长度第二维表示一批的样本数(batch),第三维是 hidden_size(隐藏层大小 or unit_num) * num_directionsnum_directions根据“是否为双向”取值为1或2。因此,我们可以知道,output第三个维度的尺寸根据是否为双向而变化,如果不是双向,第三个维度等于我们定义的隐藏层大小;如果是双向的,第三个维度的大小等于2倍的隐藏层大小。为什么使用2倍的隐藏层大小?因为它把每个time step的前向和后向的输出连接起来了。 output是最后一个layer上,序列中每个状态h的集合(若为双向则按位置拼接,输出维度2*hidden_size)
  2. h_n是一个三维的张量,注意 h n h_n hn在上图中是最后一个时间步的!第一维是num_layers * num_directionsnum_layers表示在竖直方向堆叠的多个相同个数单元的层数,和序列长度没有关系,num_directions在上面介绍过,取值为1或2,表示是否为双向LSTM。第二维表示一批的样本数量(batch)。第三维表示隐藏层的大小(unit_num)。第一个维度是h_n难理解的地方。首先我们定义当前的LSTM为单向LSTM,则第一维的大小是num_layers如果是双向LSTM,则第一维的大小是2 * num_layers
    举个例子,我们定义一个num_layers=3的双向LSTM,h_n第一个维度的大小就等于 6 (3 * 2),h_n[0]表示第一层前向传播最后一个time step的输出,h_n[1]表示第一层后向传播最后一个time step的输出,h_n[2]表示第二层前向传播最后一个time step的输出,h_n[3]表示第二层后向传播最后一个time step的输出,h_n[4]和h_n[5]分别表示第三层前向和后向传播时最后一个time step的输出。 也就是说,h_n只会输出最后1个time step的隐状态结果!
  3. c_n与h_n一样!
  4. 输入数据中的input和output维度一样,c_0和h_0 和 c_n和h_n一样。

7 num_layers的图示

在这里插入图片描述
在这里插入图片描述

8. Pytorch实现LSTM较为标准的写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xu_Wave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值