Bootstrap

LSTM介绍

说明

本项目包含:
1.LSTM简介,主体翻译自这个英文文章,稍微加了一些个人理解

LSTM介绍

长期短期记忆网络 - 通常简称为“LSTM” 是一种特殊的RNN,能够学习长期依赖关系。它们由Hochreiter&Schmidhuber(1997)引入,并在随后的工作中被许多人完善和推广.它们在各种各样的问题上工作的非常好,现在被广泛使用。

LSTM 被明确设计为避免长期依赖问题。长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!

所有RNN都具有神经网络的链式重复模块。在标准RNN中,这个重复模块将具有非常简单的结构,例如单个tanh层。

Image Name

LSTM也有类似的链式模块,但是这些模块有不同的结构,且并非是单个的神经网络层,而是四个以特殊方式相互作用的网络层。

Image Name

下面是符号介绍

Image Name

上图中,每条线代表一个完整的向量,从一个节点的输出到其他节点的输入
粉色的圆圈代表逐点运算,比如向量加法
黄色框代表被学习的神经网络层
两个向量聚合并表示拼接,而行分叉表示其内容被复制并且副本将转到不同的位置。

LSTM背后的核心思想

LSTM 的关键是单元状态,即贯穿图表顶部的水平线。
细胞状态有点像传送带。它直接沿着整个链条向下运行,只有一些轻微的线性相互作用。信息很容易原封不动地沿着它流动。
意思是信息经过一些简单的线性变换就可以输出。
如下图黑色线条所示:

Image Name
LSTM能够通过“门”结构去删除或添加信息到细胞状态。
门是一种选择性地让信息通过的方式。它们由 sigmoid 神经网络层和逐点乘法运算组成。

Image Name

sigmoid 层输出介于 0 和 1 之间的数字,描述每个组件应通过多少信息。值为0表示“不让任何信息通过”,而值为1表示“让所有信息都通过“

LSTM 具有三个这样的门结构,用于保护和控制单元状态。

分步骤拆解LSTM

第一步

LSTM 的第一步是决定我们要从细胞状态中丢弃哪些信息。
这个决定是由一个称为“遗忘门层”的sigmoid层做出的。它查看前一个输出 h t − 1 h_{t−1} ht1 和当前输出 x t x_{t} xt,并为细胞状态 C t − 1 C_{t−1} Ct1中的每个数字输出一个介于 0 和 1 之间的数字。1 表示“完全保留”,而 0 表示“完全丢弃”。
即,分量输入被sigmoid压缩,如果该分量压缩后输出为0,就完全抛弃,为1就全部接收。这样就可以达到”遗忘“不重要信息,记住重要信息的效果

Image Name

第二步

第二步决定我们将在单元格状态中存储哪些新信息。
首先,称为“输入门层”的 sigmoid 层决定我们将更新哪些值。
接下来,tanh 层创建一个新的候选值 C t ~ \widetilde{C_{t}} Ct 的向量,可以将其添加到状态中。
在下一步中,我们将结合这两者来创建状态更新。

简单来说,这一步
用tanh函数层将现在的向量中的有效信息提取出来,然后使用sigmoid函数层来控制这些记忆要放“多少”进入单元状态
Image Name

第三步

第三步是将旧的细胞状态 C t − 1 C_{t−1} Ct1更新为新的细胞状态 C t C_{t} Ct
我们将旧状态乘以 f t f_t ft,忘记了我们之前决定忘记的信息。然后我们添加 i t ∗ C t ~ i_{t}∗\widetilde{C_{t}} itCt 。这是新的候选值,按我们决定更新每个状态值的程度进行缩放。

Image Name

其实这一步就是将上述的一二步作用结合起来

第四步

第四步,我们需要决定要输出什么。
首先,我们运行一个 sigmoid 层,它决定我们要输出细胞状态的哪些部分。
(输出层会先将当前输入值与上一时刻输出值整合后的向量用sigmoid函数提取其中的信息,即图中的 o t o_{t} ot)
然后,我们将单元格状态通过tanh(将值推到−1和1之间)并将其乘以sigmoid门的输出,这样我们只输出我们决定的部分。
(将当前的单元状态通过tanh函数压缩,输出为 h t h_t ht)

Image Name

往期文章可以关注我的CSDN
也可以关注我的和鲸社区专栏
下巴同学的数据加油小站
会不定期分享数据挖掘、机器学习、风控模型、深度学习、NLP等方向的学习项目

;