概述
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}
ct−1 加上一些数值;而
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中各个数据的维度情况:
- 整个LSTM的output维度:output是一个三维的张量,第一维表示序列长度,第二维表示一批的样本数(batch),第三维是 hidden_size(隐藏层大小 or unit_num) * num_directions 。num_directions根据“是否为双向”取值为1或2。因此,我们可以知道,output第三个维度的尺寸根据是否为双向而变化,如果不是双向,第三个维度等于我们定义的隐藏层大小;如果是双向的,第三个维度的大小等于2倍的隐藏层大小。为什么使用2倍的隐藏层大小?因为它把每个time step的前向和后向的输出连接起来了。 output是最后一个layer上,序列中每个状态h的集合(若为双向则按位置拼接,输出维度2*hidden_size)
- h_n是一个三维的张量,注意
h
n
h_n
hn在上图中是最后一个时间步的!第一维是num_layers * num_directions,num_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的隐状态结果! - c_n与h_n一样!
- 输入数据中的input和output维度一样,c_0和h_0 和 c_n和h_n一样。
7 num_layers的图示
8. Pytorch实现LSTM较为标准的写法
最后
以上就是爱听歌麦片为你收集整理的LSTM全网最强大厂面试级深度的知识点整理(附代码)1 什么是LSTM2 深入LSTM结构3 总结4 补充5 LSTM为什么能够缓解梯度消失问题(重点)6 LSTM输入输出内部维度(unit_num)(重点)7 num_layers的图示8. Pytorch实现LSTM较为标准的写法的全部内容,希望文章能够帮你解决LSTM全网最强大厂面试级深度的知识点整理(附代码)1 什么是LSTM2 深入LSTM结构3 总结4 补充5 LSTM为什么能够缓解梯度消失问题(重点)6 LSTM输入输出内部维度(unit_num)(重点)7 num_layers的图示8. Pytorch实现LSTM较为标准的写法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复