LSTM是RNN(循环神经网络)的变体,所以我们可以基于RNN来了解长短期记忆(Long Short-Term Memory, 简称 LSTM).
1.基础认知
什么是RNN:什么是循环神经网络 RNN (深度学习)?_哔哩哔哩_bilibili
什么是循环神经网络 RNN (深度学习)?_哔哩哔哩_bilibili
什么是长短时记忆网络LSTM?【知多少】_哔哩哔哩_bilibili
2.LSTM结构
理解LSTM网络:理解 LSTM 网络 - 简书
https://colah.github.io/posts/2015-08-Understanding-LSTMs/
自己的理解:
对于传统的神经网络而言,之前的训练结果对后期的训练并没有什么帮助,但是在经验主义的我们看来,过去的知识对于现在的问题的解决一定是有帮助的。那么,循环神经网络就是借助于先前理论来解决现在问题的一种思想,是不是很符合人类的思维。下图是循环神经网络的结构图。
RNN就可以看作同一神经网络的多次复制,每个神经网络模块把消息传给下一代。展开如下图。
但是对于短期记忆而言,RNN是有效的,但是长期记忆就没有那么有效。因此,引出了长短期神经网络LSTM,将长期记忆当作是默认行为,LSTM区别于RNN不同的是在于重复模块的结构。如下图所示。
接下来看LSTM的核心思想。(这里原文讲的话弄清楚)
门:让信息选择通过。LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid
神经网络层和一个按位的乘法操作。Sigmoid 层输出 0 到 1之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”!
LSTM 拥有三个门,来保护和控制细胞状态。
逐步理解LSTM。
1.忘记门层:决定我们从细胞中丢弃什么信息。该门会读取h(t-1) 和 ,输出一个在 到 之间的数值给每个在细胞状态 中的数字。
2.下一步是确定什么样的新信息被存放在细胞状态中。第一,sigmoid
层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh
层创建一个新的候选值向量,,会被加入到状态中。
3.更新旧信息。
4.决定输出什么值。
首先,我们运行一个 sigmoid
层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh
进行处理(得到一个在 -1 到 之间的值)并将它和 sigmoid
门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
这就是整个过程。总结一下就是,第一个门决定我们要忘记什么信息;第二个门决定什么样的信息新信息会被放入细胞中。然后进行替换。最后一个门决定输出。
具体的实现代码:TensorFlow中简单的LSTM代码实现_小码仔-CSDN博客_lstm代码实现
接下来我们来看看LSTM有什么延申之处。改动较大的变体是 Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。