1、循环神经网络 RNN
循环神经网络是一个自身构成循环的网络,网络块A的输入为X_t,输出为h_t。

循环神经网络可以被认为是同一个网络的多份拷贝,每一个网络传递信息到下一个网络。如果展开RNN,可以看到如下图所示:

RNN的一大亮点是它能够连接之前的信息到当前的任务,比如,在一个视频中,可以根据之前的图像帧,预测当前的帧。或者是根据一句话中之前的单词,预测下一个出现得单词。RNN可以学习过去的信息:

但是在某些情况下,我们需要更多背景信息。 考虑尝试预测文本“我在法国长大……我会说流利的法语”中的最后一个词。根据最近的信息表明,下一个词可能是一种语言的名称,但是如果我们想缩小哪种语言的范围,我们需要“法国”的背景,来自更前面的信息。 相关信息与需要扩大的点之间的差距完全可能。
然而,随着差距的扩大,RNN变得无法学习连接信息。

那如何解决RNN遇到的问题呢?
》》》》》 LSTM 来啦 》》》》》
2、LSTM 网络
LSTM , Long Short Term Memory networks, 长短期记忆网络,一类特殊的RNN网络。
LSTM被明确设计为避免长期依赖问题。 长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!
所有的RNN都具有神经网络的重复模块链的形式。 在标准RNN中,此重复模块(Repeating modules)将具有非常简单的结构,例如单个tanh层。

LSTMs 也有类似结构的链,但是,重复模块有不同的结构。
LSTM不是只有一个神经网络层,而是有四个以非常特殊的方式进行交互的网络层。

下图是对一些标志进行解释:

每条线都包含一个向量,从一个节点的输出到另一节点的输入。 粉色圆圈表示逐点操作,例如向量加法,而黄色框表示学习的神经网络层。 合并的行表示串联,而分叉的行表示其内容正在复制,并且副本将到达不同的位置。
3、LSTMs的核心理念
LSTM的关键是cell状态,水平线贯穿图的顶部。
cell状态有点像传送带。 它沿着整个链条一直沿直线运动,只有一些小的线性相互作用。 信息不加改变地流动非常容易。

LSTM确实具有删除或向单元状态添加信息的能力,这些功能由称为门(gates)的结构精心调节。
Gates是一种选择性地让信息通过的方式。 它们由Sigmoid神经网络层和逐点乘法运算组成。

Sigmoid层输出介于零和一之间的数字,描述每个组件应允许通过多少。 值为零表示“不让任何内容通过”,而值为1表示“让所有内容通过!”
LSTM具有这些gates中的三个,以保护和控制cell状态。
4、一步一步来详解LSTM的3个部分
第一步就是在LSTM中,决定从cell状态中扔掉哪类信息。而这个决定是由被称为“遗忘门”层的sigmoid层来做出的。输入为h_t-1 和 xt,输出为cell状态C_t-1中的0或1。“1”代表完全保留,“0”代表完全丢弃。
回到我们的语言模型示例,该模型试图根据所有先前的单词来预测下一个单词。 在这样的问题中,cell状态可能包括当前主语的词性,从而可以使用正确的代词。 看到新的主语时,我们想忘记旧的主语的词性。

下一步是确定要在cell状态下存储哪些新信息。 这包括两个部分。 首先,称为“输入门层”的sigmoid层决定了我们将更新哪些值。 接下来,tanh层创建一个新候选值的向量,该向量可以添加到状态中。 在下一步中,我们将两者结合起来以创建状态更新。
在我们的语言模型示例中,我们希望将新主语的词性添加到cell状态中,以替换我们遗忘的旧主语。

接下来,更新旧的cell状态Ct-1,形成新的状态C_t。

紧接着,就是输出。sigmoid决定将输出cell的哪一部分。然后,将这个cell通过tanh,与sigmoid的输出相乘。
