循环神经网络
循环神经网络(RNN)是一类用于处理序列数据的神经网络。
传统的全连接前馈网络会给每个输入特征分配一个单独的参数,所以需要分别学习句子每个位置的所有语言规则。相比之下,循环神经网络在几个时间步内共享相同的权重,不需要分别学习句子每个位置的所有语言规则。
这种想法有点类似于在一维时间序列上使用卷积,这种卷积方法是时延神经网络的基础
但实际上,卷积的输出是一个序列,其中输出中的每一项是相邻几项输入的函数。参数共享的概念体现在每个时间步中使用的相同卷积核;而循环神经网络以不同的方式共享参数,输出的每一项是前一项的函数。输出的每一项对先前的输出应用相同的更新规则而产生
RNN 和一维卷积在以下方面具有相似性:
权值共享:RNN 在每个时间步共享相同的权重矩阵,类似于一维卷积核在序列上滑动。
序列处理:两者都用于处理序列数据,能够捕捉序列中的局部模式。
区别在于:
时间依赖性:RNN 通过隐藏状态ht捕捉序列中的时间依赖性,而一维卷积只能捕捉局部模式,无法直接建模长距离依赖。
计算方式:RNN 在每个时间步的计算依赖于前一个时间步的隐藏状态,而一维卷积在每个时间步的计算是独立的。
展开计算图
类似于递归的形式使得深度网络结构中的参数共享

以这种方式重复应用定义、展开等式,就能得到不涉及循环的表达

通过这样展开后,可以看出当前状态包含了整个过去序列的信息
循环神经网络可以通过许多不同的方式建立,正如几乎所有函数都可以被认为是前馈网络,本质上任何涉及循环的函数都可以被认为是一个循环神经网络。
如果有隐藏状态\(h^{t}\),则展开的形式

循环神经网络
常见的设计形式有:
- 每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络
![image]()
- 每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络
![image]()
- 隐藏单元之间存在循环连接,但读取整个序列后产生单个输出的循环网络
![image]()
对于第一种设计形式,其前向传播中的更新方程为:

门控RNN
门控RNN是一种有效的序列模型,其中包括基于长短期记忆和基于门控循环单元的网络
像渗漏单元一样,门控 RNN 想法也是基于生成通过时间的路径,其中导数既不消失也不发生爆炸。渗漏单元通过手动选择常量的连接权重或参数化的连接权重来达到这一目的。门控 RNN 将其推广为在每个时间步都可能改变的连接权重。
LSTM
通过引入子循环的想法,以产生梯度长时间持续流动的路径
其中一个关键扩展是使子循环的权重视上下文而定
LSTM 循环网络除了外部的RNN 循环外, 还具有内部的 “LSTM 细胞’’ 循环(自环)

遗忘门(Forget Gate):决定哪些信息需要从细胞状态中丢弃。
输入门(Input Gate):决定哪些新信息需要添加到细胞状态中。
输出门(Output Gate):决定哪些信息需要输出。
此处自环的权重(或相关联的时间常数)由遗忘门\(f_i^{(t)}\)控制(时刻\(t\)和细胞\(i\)),由sigmoid单元将权重设置为 0 和 1 之间的值:
其中\(x^{(t)}\)是当前输入向量,\(h^t\)是当前隐藏层向量,\(h^t\)包含所有 LSTM 细胞的输出。\(b^f\),\(U^f\),$W^f分别是偏置、输入权重和遗忘门的循环权重。因此 LSTM 细胞内部状态以如下方式更新,其中有一个条件的自环权重 \(f_i^{(t)}\):
其中\(b\),\(U\),\(W\)分别是 LSTM 细胞中的偏置、输入权重和遗忘门的循环权重。外部输入门单元\(g_i^{(t)}\)以类似遗忘门(使用sigmoid获得一个 0 和 1 之间的值)的方式更新,但有自身的参数:
LSTM 细胞的输出\(h_i^{(t)}\)也可以由输出门\(q_i^{(t)}\)关闭(使用sigmoid单元作为门控):
其中\(b^o\),\(U^o\),\(W^o\)分别是偏置、输入权重和遗忘门的循环权重。在这些变体中,可以选择使用细胞状态 \(s_i^{(t)}\)作为额外的输入(及其权重),输入到第 \(i\) 个单元的三个门




浙公网安备 33010602011771号