史上最详细循环神经网络讲解(RNN/LSTM/GRU) - 知乎

从反向传播推导到梯度消失and爆炸的原因及解决方案(从DNN到RNN,内附详细反向传播公式推导) - 知乎

RNN

RNN对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息

为什么要发明循环神经网络:

我们先来看一个NLP很常见的问题,命名实体识别,举个例子,现在有两句话:

第一句话:I like eating apple!(我喜欢吃苹果!)

第二句话:The Apple is a great company!(苹果真是一家很棒的公司!)

现在的任务是要给apple打Label,我们都知道第一个apple是一种水果,第二个apple是苹果公司,假设我们现在有大量的已经标记好的数据以供训练模型,当我们使用全连接的神经网络时,我们做法是把apple这个单词的特征向量输入到我们的模型中(如下图),在输出结果时,让我们的label里,正确的label概率最大,来训练模型,但我们的语料库中,有的apple的label是水果,有的label是公司,这将导致,模型在训练的过程中,预测的准确程度,取决于训练集中哪个label多一些,这样的模型对于我们来说完全没有作用。

问题就出在了我们没有结合上下文去训练模型,而是单独的在训练apple这个单词的label,这也是全连接神经网络模型所不能做到的,于是就有了我们的循环神经网络。

image.png

循环神经网络的结构

注意辨析循环神经网络和全连接神经网络的关系

image.png

image.png

举个例子,有一句话是"I love you",那么在利用RNN做一些事情时,比如命名实体识别,上图中的Xt−1代表的就是"I"这个单词的向量,X代表的是"love"这个单词的向量,Xt+1代表的是"you"这个单词的向量,以此类推。我们注意到,上图展开后,W一直没有变,W其实是每个时间点之间的权重矩阵,我们注意到,RNN之所以可以解决序列问题,是因为它可以记住每一时刻的信息,每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定,公式如下,其中Ot代表t时刻的输出,St代表t时刻的隐藏层的值:

image.png

值得注意的一点是,在整个训练过程中,每一时刻所用的都是同样的W

RNN详解过程