RNN递归神经网络到底是啥

不同的训练batch之间有连续的前后关系,所以RNN需要输入的是序列化的数据。对于mnist数据集,一个batch是28x28像素点x5,并非序列数据,于是尝试按行切分,使其成为序列化,
RNN递归神经网络到底是啥
于是,结合当前序列和之前序列的输入,来进行手写识别
RNN递归神经网络到底是啥
所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层
RNN递归神经网络到底是啥
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
RNN递归神经网络到底是啥

遗忘门

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取ht−1ht−1和xtxt,输出一个在 0到 1之间的数值给每个在细胞状态 Ct−1Ct−1 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
RNN递归神经网络到底是啥

输入门

下一步是决定让多少新的信息加入到 cell 状态 中来。实现这个需要包括两个 步骤:首先,一个叫做“input gate layer ”的 sigmoid 层决定哪些信息需要更新;一个 tanh 层生成一个向量,也就是备选的用来更新的内容,C^tC^t 。在下一步,我们把这两部分联合起来,对 cell 的状态进行一个更新。

现在是更新旧细胞状态的时间了,Ct−1Ct−1更新为CtCt。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。

我们把旧状态与ftft相乘,丢弃掉我们确定需要丢弃的信息。接着加上it∗C~tit∗C~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

输出门

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
RNN递归神经网络到底是啥