循环神经网络(RNN)是基于序列数据(如语言、语音、时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为“循环”。它专门用于处理序列数据,如逐字生成文本或预测时间序列数据(例如股票价格)。

一、 RNN 网络类型
RNN以输入数m对应输出数n的不同,可以划分为5种基础结构类型:

(1)one to one:其实和全连接神经网络并没有什么区别,这一类别算不上 RNN。
(2)one to many:输入不是序列,输出是序列。可用于按主题生成文章或音乐等。
(3)many to one:输入是序列,输出不是序列(为单个值)。常用于文本分类。
(4)many to many:输入和输出都是不定长的序列。这也就是Encoder-Decoder结构,常用于机器翻译。
(5)many to many(m==n):输入和输出都是等长的序列数据。这是 RNN 中最经典的结构类型,常用于NLP的命名实体识别、序列预测,本文以此为例具体展开。
二、RNN原理
关于RNN模型,我们还是从数据、模型、学习目标、优化算法这几个要素展开解析,使用过程需要重点关注的是其输入和输出的差异(本节以经典的m==n的RNN结构为例):
2.1 数据层面
不像传统的机器学习模型假设输入是独立的,RNN的输入数据元素有顺序及相互依赖的,并按时间步逐一的串行输入模型的。上一步的输入对下一步的预测是有影响的(如文字预测的任务,以“猫吃鱼”这段序列文字,上一步的输入“猫”–x(0)会影响下一步的预测“吃”–x(1)的概率,也会继续影响下下步的预测“鱼”–x(2)的概率),我们通过RNN结构就可以将历史的(上下文)的信息反馈到下一步。
2.2 模型层面及前向传播

如上图,RNN模型(如左侧模型,实际上也只有这一个物理模型),按各个时间步展开后(如右侧模型),可以看作是按时间步(t)串联并共享($ U、W、V$ )参数的多个全连接神经网络。展开后的立体图如下:

RNN除了接受每一步的输入x(t),同时还会连接输入上一步的反馈信息——隐藏状态h(t-1),也就是当前时刻的隐藏状态 ℎ(t) 由当前时刻的输入 x(t)和上一时刻的隐藏状态h(t-1)共同决定。另外的,RNN神经元在每个时间步上是共享权重参数矩阵的(不同于CNN是空间上的参数共享),时间维度上的参数共享可以充分利用数据之间的时域关联性,如果我们在每个时间点都有一个单独的参数,不但不能泛化到训练时没有见过序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。
如下各时间步的前向传播计算流程图,接下来我们会对计算流程逐步分解:

上图展开了两个时间步t-1、t的计算过程;
t取值为0~序列的长度m;
x(t)是t时间步的 输入向量;
U是 输入层到隐藏层的权重矩阵;
h(t)是t时间步 隐藏层的输出状态向量,能表征历史输入(上下文)的反馈信息;
V是 隐藏层到输出层的权重矩阵;
b是 偏置项;
o(t)是t时间步 输出层的输出向量;
2.2.1 t 时间步的输入过程
假设各时间步的状态h的维度为2,h初始值为[0,0],输入x和输出o维度为1。
将上一时刻的状态h(t-1),与当前时刻的输入x(t)拼接成一维向量作为全连接的隐藏层的输入,对应隐藏层的的输入维度为3 (如下图的输入部分)。

2.2.2 t时间步输出h(t) 并反馈到下一步的过程
对应到计算流程图上,t-1时刻输出的状态h(t-1)为[0.537, 0.462],t时刻的输入为[2.0],拼接之后为[0.537, 0.462, 2.0]输入全连接的隐藏层,隐藏层的权重矩阵 U + W U+W U+W为[[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]],偏置项b1为[0.1, -0.1],经过隐藏层的矩阵运算为:h(t-1)拼接x(t) * 权重参数W 拼接 权重矩阵U + 偏置项(b1)再由tanh转换后输出为状态h(t)。接着h(t)与x(t+1)继续输入到下一步(t+1)的隐藏层。
# 隐藏层的矩阵运算的对应代码
np.tanh(np.dot(np.array([[0.537, 0.462, 2.0]]),np.array([[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]])) + np.array([0.1, -0.1]))
# 输出h(t)为: array([[0.85972772, 0.88365397]])
2.2.3 t时间步h(t) 到输出o(t)的过程
隐藏层输出状态h(t)为[0.86, 0.884],输出层权重矩阵 V V V为[[1.0], [2.0]],偏置项b1为[0.1], h(t)经由输出层的矩阵运算为:h(t) * V +偏置项(b2)后,输出o(t)
# 输出层的矩阵运算的对应代码
np.dot(np.array([[0.85972772, 0.88365397

最低0.47元/天 解锁文章
4226

被折叠的 条评论
为什么被折叠?



