RNN

序列数据

RNN是神经网络中的一种,它擅长对序列数据进行建模处理。

例1:预测小球的运动方向

RNN

如果只有一个状态的静态快照,只能进行随机预测

RNN

但是,如果具有连续状态的快照,则有足够的信息来进行更好的预测,这里就是一种序列数据

例2:音频数据

RNN

音频是一种自然的序列,你可以将音频频谱图分成块并将其馈入RNN。

例3:文本数据

文本也是一种形式的序列,你可以将文本分成一系列字符或一系列单词。

RNN

标准RNN的有以下特点:
1、权值共享,图中的W全是相同的,U和V也一样。
2、每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4d5b3k4-1572009794409)(C:\Users\liuyi\AppData\Roaming\Typora\typora-user-images\image-20191025132604973.png)]

RNN的各种变体结构

N vs 1 序列输入只有一个输出

RNN

1 vs N 一个输入,序列输出

RNN

N vs N

RNN

N vs M

encoder-decoder seq2seq

RNN

LSTM

1.遗忘门

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为遗忘门完成。该门会读取ht−1ht−1 h_{t-1}ht−1和xtxt x_txt,输出一个在 0 到 1 之间的数值给每个在细胞状态Ct−1Ct−1 C_{t-1}Ct−1中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。

RNN

这里可以抛出两个问题:这个门怎么做到“遗忘“的呢?怎么理解?既然是遗忘旧的内容,为什么这个门还要接收新的xtxt x_{t}xt?
对于第一个问题,“遗忘“可以理解为“之前的内容记住多少“,其精髓在于只能输出(0,1)小数的sigmoid函数和粉色圆圈的乘法,LSTM网络经过学习决定让网络记住以前百分之多少的内容。对于第二个问题就更好理解,决定记住什么遗忘什么,其中新的输入肯定要产生影响。
2.输入门

_下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,C˜tC~t \tilde{C}_tC~t,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。
RNN

3.输出门

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

。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

RNN