LSTM 网络

https://blog.csdn.net/Jerr__y/article/details/58598296
https://blog.csdn.net/xiaocao9903/article/details/78583953
https://blog.csdn.net/xuanyuansen/article/details/61913886

长短期记忆网络(Long Short Term Memory networks) - 通常叫做 “LSTMs” —— 是 RNN 中一个特殊的类型。由Hochreiter & Schmidhuber (1997)提出,广受欢迎,之后也得到了很多人们的改进调整。LSTMs 被广泛地用于解决各类问题,并都取得了非常棒的效果。

明确来说,设计 LSTMs 主要是为了避免前面提到的 长时期依赖 (long-term dependency )的问题。它们的本质就是能够记住很长时期内的信息,而且非常轻松就能做到。

所有循环神经网络结构都是由完全相同结构的(神经网络)模块进行复制而成的。在普通的RNNs 中,这个模块结构非常简单,比如仅是一个单一的 tanh 层。
在这里插入图片描述
fig4. 普通 RNNs 内部结构
LSTMs 也有类似的结构(译者注:唯一的区别就是中间部分)。但是它们不再只是用一个单一的 tanh 层,而是用了四个相互作用的层。
在这里插入图片描述
fig5. LSTM 内部结构
别担心,别让这个结构给吓着了,下面根据这个结构,我们把它解剖开,一步一步地来理解它(耐心看下去,你一定可以理解的)。现在,我们先来定义一下用到的符号:
在这里插入图片描述
fig6. 符号说明
在网络结构图中,每条线都传递着一个向量,从一个节点中输出,然后输入到另一个节点中。粉红色的圆圈表示逐点操作,比如向量相加;黄色的矩形框表示的是一个神经网络层(就是很多个神经节点);合并的线表示把两条线上所携带的向量进行合并(比如一个带 ht−1 ,另一个带 xt , 那么合并后的输出就是$[h_{t-1}, x_t] $); 分开的线表示将线上传递的向量复制一份,传给两个地方。

3.1 LSTMs 的核心思想
LSTMs 最关键的地方在于 cell(整个绿色的框就是一个 cell) 的状态 和 结构图上面的那条横穿的水平线。

cell 状态的传输就像一条传送带,向量从整个 cell 中穿过,只是做了少量的线性操作。这种结构能够很轻松地实现信息从整个 cell 中穿过而不做改变。(译者注:这样我们就可以实现了长时期的记忆保留了)
在这里插入图片描述
fig7. 传送带结构
若只有上面的那条水平线是没办法实现添加或者删除信息的。而是通过一种叫做 门(gates) 的结构来实现的。

门 可以实现选择性地让信息通过,主要是通过一个 sigmoid 的神经层 和一个逐点相乘的操作来实现的。

sigmoid 层输出(是一个向量)的每个元素都是一个在 0 和 1 之间的实数,表示让对应信息通过的权重(或者占比)。比如, 0 表示“不让任何信息通过”, 1 表示“让所有信息通过”。

每个 LSTM 有三个这样的门结构,来实现保护和控制信息。(译者注:分别是 “forget gate layer”, 遗忘门; “input gate layer”,传入门; “output gate layer”, 输出门)
在这里插入图片描述
3.2 逐步理解 LSTM
3.2.1 遗忘门
首先是 LSTM 要决定让那些信息继续通过这个 cell,这是通过一个叫做“forget gate layer ”的sigmoid 神经层来实现的。它的输入是$ h_{t-1} 和和 x_t $,输出是一个数值都在 0,1 之间的向量(向量长度和 cell 的状态 $ C_{t-1} $ 一样),表示让 $C_{t-1} $ 的各部分信息通过的比重。 0 表示“不让任何信息通过”, 1 表示“让所有信息通过”。

回到我们上面提到的语言模型中,我们要根据所有的上文信息来预测下一个词。这种情况下,每个 cell 的状态中都应该包含了当前主语的性别信息(保留信息),这样接下来我们才能够正确地使用代词。但是当我们又开始描述一个新的主语时,就应该把上文中的主语性别给忘了才对(忘记信息)。
在这里插入图片描述
fig9. 遗忘门 (forget gates)
3.2.2 传入门
下一步是决定让多少新的信息加入到 cell 状态 中来。实现这个需要包括两个 步骤:首先,一个叫做“input gate layer ”的 sigmoid 层决定哪些信息需要更新;一个 tanh 层生成一个向量,也就是备选的用来更新的内容,Ct˜ 。在下一步,我们把这两部分联合起来,对 cell 的状态进行一个更新。
在这里插入图片描述
fig10. 传入门 (input gates)
在我们的语言模型的例子中,我们想把新的主语性别信息添加到 cell 状态中,来替换掉老的状态信息。
有了上述的结构,我们就能够更新 cell 状态了, 即把$ C_{t-1} $更新为 $C_{t} $。 从结构图中应该能一目了然, 首先我们把旧的状态 $C_{t-1} 和和 f_t 相乘,把一些不想保留的信息忘掉。然后加上相乘,把一些不想保留的信息忘掉。然后加上 i_t * \tilde{C_{t}} $。这部分信息就是我们要添加的新内容。

在这里插入图片描述
fig11. 更新 cell 状态
3.2.3 输出门
最后,我们需要来决定输出什么值了。这个输出主要是依赖于 cell 的状态$ C_t$,但是又不仅仅依赖于 $C_t ,而是需要经过一个过滤的处理。首先,我们还是使用一个sigmoid层来(计算出)决定,而是需要经过一个过滤的处理。首先,我们还是使用一个sigmoid层来(计算出)决定 C_t 中的哪部分信息会被输出。接着,我们把中的哪部分信息会被输出。接着,我们把 C_t $通过一个 tanh 层(把数值都归到 -1 和 1 之间),然后把 tanh 层的输出和 sigmoid 层计算出来的权重相乘,这样就得到了最后输出的结果。

在语言模型例子中,假设我们的模型刚刚接触了一个代词,接下来可能要输出一个动词,这个输出可能就和代词的信息相关了。比如说,这个动词应该采用单数形式还是复数的形式,那么我们就得把刚学到的和代词相关的信息都加入到 cell 状态中来,才能够进行正确的预测。
在这里插入图片描述
fig12. cell 输出

为了直观地表示整个计算过程,在参考神经网络计算图的基础上,LSTM的计算图如图4所示,从计算图上面可以清晰地看出LSTM的forward propagation和back propagation过程。如图,H(t-1)的误差由H(t)决定,且要对所有的gate layer传播回来的梯度求和,c(t-1)由c(t)决定,而c(t)的误差由两部分,一部分是h(t),另一部分是c(t+1)。所以在计算c(t)反向传播误差的时候,需要传入h(t)和c(t+1),而h(t)在更新的时候需要加上h(t+1)。这样就可以从时刻T向后计算任一时刻的梯度,利用随机梯度下降完成权重系数的更新。
在这里插入图片描述

  1. LSTM 的变种 GRU
    原文这部分介绍了 LSTM 的几个变种,还有这些变形的作用。在这里我就不再写了。有兴趣的可以直接阅读原文。

下面主要讲一下其中比较著名的变种 GRU(Gated Recurrent Unit ),这是由 Cho, et al. (2014) 提出。在 GRU 中,如 fig.13 所示,只有两个门:重置门(reset gate)和更新门(update gate)。同时在这个结构中,把细胞状态和隐藏状态进行了合并。最后模型比标准的 LSTM 结构要简单,而且这个结构后来也非常流行。
在这里插入图片描述
fig13. GRU结构
其中, rt 表示重置门,zt 表示更新门。**重置门决定是否将之前的状态忘记。当 rt 趋于 0 的时候,前一个时刻的状态信息 ht−1 会被忘掉,隐藏状态 ht˜ 会被重置为当前输入的信息。更新门决定是否要将隐藏状态更新为新的状态$ \tilde{h_t}$ (作用相当于合并了 LSTM 中的遗忘门和传入门)。

和 LSTM 比较一下:

(1) GRU 少一个门,同时少了细胞状态 Ct 。
(2) 在 LSTM 中,通过遗忘门和传入门控制信息的保留和传入;GRU 则通过重置门来控制是否要保留原来隐藏状态的信息,但是不再限制当前信息的传入。
(3) 在 LSTM 中,虽然得到了新的细胞状态 $C_t $,但是还不能直接输出,而是需要经过一个过滤的处理: ht=ot∗tanh(Ct); 同样,在 GRU 中, 虽然 (2) 中我们也得到了新的隐藏状态 $ \tilde{h_t}$, 但是还不能直接输出,而是通过更新门来控制最后的输出: ht=(1−zt)∗ht−1+zt∗ht˜ 。

5、Peephole LSTM

Peephole LSTM由Gers和Schmidhuber在2000年提出[8],Peephole的含义是指允许当前时刻的门限Gate“看到”前一时刻cell的状态,这样在计算输入门限,遗忘门限和输出门限时需要加入表示前一时刻cell状态的变量。同时,另外一些Peephole LSTM的变种会允许不同的门限“看到”前一时刻cell的状态。
在这里插入图片描述
不同的研究者提出了许多LSTM的改进,然而并没有特定类型的LSTM在任何任务上都能够由于其他变种,仅能在部分特定任务上取得最佳的效果。更多LSTM算法的改进可以参考《Deep Learning》一书中的第10.10章节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值