概述
前言
Tip:
该博客里的内容是博主学习的一些心路历程,期间也会查阅一些其他博客和文献,还有一些自己的理解,可能会存在一些理解不正确的地方。如果阅读这篇博客请带着学习和质疑两种心态。如有问题,欢迎指出。
LSTM理论
1.LSTM介绍
LSTM(Long Short-Term Memory)是一种 RNN 的特殊类型,它可以学习长期依赖信息。通过引入了自循环,以产生梯度长时间持续流动的路径,解决RNN梯度消失的问题。它在RNN的基础上添加了输入门、遗忘门、输出门和细胞状态。
2.LSTM结构图
通过RNN和LSTM的结构图对比,可以直观地感受到LSTM在结构上的变化。
下面看一下LSTM每个门控的结构图和公式,这样可能会容易理解一些。
①细胞状态:
我理解细胞状态应该代表的就是前些时刻的信息。它直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
②遗忘门:
通过字面意思就可以感觉到,遗忘门就是决定会从细胞状态中丢弃什么信息。遗忘门的输入是
ht−1
h
t
−
1
和
xt
x
t
,输出一个在 0 到 1 之间的数值给每个在细胞状态
Ct−1
C
t
−
1
中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
②输入:
输入门决定什么样的新信息可以存入到细胞状态中,它由2个部分组成,一部分使用sigmoid激活函数,它是输入门,最后输出为
it
i
t
。另一部分使用了tanh激活函数输出为
C~t
C
~
t
。
③细胞状态更新:
在确定了丢失哪些信息和更新哪些信息之后,就可以对细胞状态进行更新了。首先把旧状态
Ct−1
C
t
−
1
和遗忘门
ft
f
t
相乘,丢弃一些需要丢弃的信息。然后把
C~t
C
~
t
和
it
i
t
相乘,选出新的信息。最后把这2个结果相加就是新的细胞状态。
④输出:
更新完细胞状态之后,我们就可以求输出了。这里输出也包括2部分:一部分使用sigmoid激活函数,它是输出门,最后输出为
ot
o
t
。另一部分使用了tanh激活函数激活刚才求得的细胞状态
Ct
C
t
。最后将它们相乘,就是隐藏层的输出
ht
h
t
了。
3.疑点扩充
①RNN为什么不用Relu解决长期依赖问题:
这个问题我也困惑了很久,直到我看到知乎上的一个答案知乎上的一个答案,感觉可以做一个解释。
②LSTM为什么可以解决长期依赖问题:
LSTM与RNN最大的不同就是LSTM在结构上的改变,LSTM增加了门控结构。LSTM通过门控单元从根本上改变了循环网络的前向传播方式,从叠乘变成了叠加(参考上述公式),这样就解决了RNN叠乘所导致的长期依赖问题。
最后
以上就是干净黑猫为你收集整理的LSTM原理的全部内容,希望文章能够帮你解决LSTM原理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复