【循环神经网络】对RNN的理解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41427568/article/details/101168467

为什么需要RNN?

这也是我接触完卷积网络之后的疑问,有了卷积神经网络以及感知机(人工神经网络)这两种提取特征的利器,为什么深度学习还需要循环神经网络(RNN Recurrent Neural Network)?
原因是他们都只能单独的去处理一个个输入,前一个输入和后一个输入是没有关系的,生成的结果之间也是没有关系的。但是在生活中,我们需要一些模型来处理序列信息,即前面的输入和后面的输入是有一定关系的。比如说理解一句话的时候,单单理解这句话的每个词是远远不够的,我们需要处理这些词连接起来的整个序列;又或者说我们在处理视频的时候,我们不能简单地分析每一帧,而是要分析这些帧连接起来的整个序列。
以词性标注任务举例
“我爱看电影”这句话。将这句话进行词性标注,结果为:我/nn 爱看/v 电影/nn

有人就会说,这个任务可以交给普通的卷积神经网络来做,就是一个简单的分类任务。不否认这种方法是可以的,但是在一个句子中,单词的前后关联性对词性预测是由很大影响的。比如说预测电影的时候,由于前面一个词是动词,那么电影这个词作为名词的概率会大于作为动词的概率,因为动词后面接名词的情况很常见,动词后面接动词的情况很少见。
为了解决类似的问题,并且让神经网络能更好处理序列信息,让神经网络也具有一定的记忆能力,RNN就这样诞生了。

RNN结构

首先来看一个比较简单的循环神经网络:
RNN抽象图
图源:【知乎】一文搞懂RNN(循环神经网络)基础篇
上图的元素有输入层X,权重矩阵U,隐藏层S,权重矩阵w,权重矩阵V,输出层O。他们之间的关系如下:
公式
上面公式中的函数g和函数f都是这一层的激活函数。对照上面的结构图以及关系式,接下来我们来理解一下这两行公式的含义:
第一行公式很好理解,就是张量相乘,然后经过激活函数,t时刻的S和V相乘得到t时刻的O输出。
第二行理解起来可能就有些困难,但是其实分成两部分来看也并不困难。
第一部分 X t U X_{t}*U 是t时刻的输入 X t X_t 和权重矩阵U的相乘,相当于t时刻S的一部分取决于t时刻的输入 X t X_{t}
第二部分:也就是RNN的核心部分, W S t 1 W*S_{t-1} 表示权重矩阵W与t-1时刻的隐藏层S相乘。也就是说权重矩阵W是隐藏层S上一次的值作为这一次的输入的权重。通过这一步就可以将隐藏层S在t-1时刻的记录下的状态作为输入,从而影响t时刻的隐藏层S。 S t S_t 的值不仅仅取决于 X t X_t ,还取决于 S t 1 S_{t-1}

比如t时刻输入 X X 的shape为 7 5 7*5 ,权重矩阵 U U 的shape为 5 10 5*10 ,通过矩阵乘法可以知道 X t U X_{t}*U 的shape为 7 10 7*10 ,那么权重矩阵 W W 的shape应该为 7 7 7*7 ,这样t-1时刻的 S t 1 S_{t-1} W W 进行矩阵相乘的shape也是 7 10 7*10 ,这样就可以和 X t U X_{t}*U 相加了。

我们给出上面抽象图具体的展开图:
在这里插入图片描述
从上图就可以很清楚的了解到,t-1时刻的隐藏层S到底是如何影响t时刻的隐藏层S的。

我们将RNN图按照时间线展开,循环神经网络可以展开成下面这个样子:
在这里插入图片描述
这样就很清楚了,一个网络在t时刻接收到输入 X t X_t 之后,隐藏层的值为 S t S_t ,输出层是 O t O_t 。其中,RNN的关键是, S t S_t 的值不仅仅取决于 X t X_t ,还取决于 S t 1 S_{t-1} ,也就是可以用上面提到的计算公式来表示循环神经网络的计算方法:
公式

猜你喜欢

转载自blog.csdn.net/qq_41427568/article/details/101168467
今日推荐