深度学习之循环神经网络 - 实践

前言

卷积神经网络CNN在图象处理领域起到了要紧的作用,在自然语言处理中还要看循环神经网络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,这也是全连接神经网络模型所不能做到的,于

序列特性

符合时间顺序,逻辑顺序,或者其他顺序就叫序列特性,举几个例子:就是上下文即序列特性,就

  • 拿人类的某句话来说,也就是人类的自然语言,是不是符合某个逻辑或规则的字词拼凑排列起来的,这就是符合序列特性。
  • 语音,我们发出的声音,每一帧每一帧的衔接起来,才凑成了我们听到的话,这也具有序列特性、
  • 股票,随着时间的推移,会产生具有顺序的一系列数字,这些数字也是具有序列特性

循环神经网络

如下左图则为RNN,其中X是一个向量,也就是某个字或词的特征向量,作为输入层;U是输入层到隐藏层的参数矩阵;S是隐藏层的向量;V是隐藏层到输出层的参数矩阵;O是输出层的向量;不要管W,只看X,U,S,V,O就是我们的全连接神经网络结构.
在这里插入图片描述
W到底是什么?把左边的图按照时间线展开得到右边的图.

,I love you.上图中的就是举个例子,有一句话

  1. x t − 1 x_{t-1}xt1代表的就是I这个单词的向量,
  2. x t x_{t}xt代表的是love这个单词的向量,
  3. x t + 1 x_{t+1}xt+1代表的是you这个单词的向量

W一直没有变,W其实是每个时间点之间的权重矩阵

因为它可以记住每一时刻的信息,就是RNN之所以能够解决序列问题,每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定.公式如下
在这里插入图片描述
其中 O t O_tOt代表t时刻的输出,S t S_tSt代表t时刻的隐藏层的值.值得注意的一点是,在整个训练过程中,每一时刻所用的都是同样的W.

举个例子,方便理解

假设现在我们已经训练好了一个RNN,如图,我们假设每个单词的特征向量是二维的,也就是输入层的维度是二维,且隐藏层也假设是二维,输出也假设是二维,所有权重的值都为1且没有偏差且所有激活函数都是线性函数,现在输入一个序列,到该模型中,我们来一步步求解出输出序列:在这里插入图片描述
初始时a 1 a_1a1, a 2 a_2a2是没有存值的,因此初始值为0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,一个完整的RNN结构大家已经经历了一遍,我们注意到,每一时刻的输出结果都与上一时刻的输入有着非常大的关系,如果我们将输入序列换个顺序,那么我们得到的结果也将是截然不同,这就是RNN的特性,能够处理序列数据,同时对序列也很敏感。

RNN梯度消失

假设在t=3时刻,损失函数为L 3 = 1 2 ( Y 3 − O 3 ) 2 L_3={1 \over 2}(Y_3-O_3)^2L

posted on 2025-12-26 10:58  ljbguanli  阅读(0)  评论(0)    收藏  举报