《神经网络与深度学习》第六章 循环神经网络
第六章 循环神经网络
在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力.在生物神经网络中,神经元之间的连接关系要复杂得多.前馈神经网络可以看作一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入.但是在很多现实任务中,网络的输出不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。比如一个有限状态自动机,其下一个时刻的状态(输出)不仅仅和当前输入相关,也和当前状态(上一个时刻的输出)相关.此外,前馈网络难以处理时序数据,比如视频、语音、文本等。时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变.因此,当处理这一类和时序数据相关的问题时,就需要一种能力更强的模型。
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络.在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构.和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构.循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过随时间反向传播算法来学习.随时间反向传播算法即按照时间的逆序将错误信息一步步地往前传递.当输入序列比较长时,会存在梯度爆炸和消失问题,也称为长程依赖问题。为了解决这个问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入门控机制(Gating Mechanism)。
此外,循环神经网络可以很容易地扩展到两种更广义的记忆网络模型:递归神经网络和图网络
RNN特点:
- 具有短期记忆能力的神经网络;
- 神经元不仅可以接受其他神经元的信息,还可以接受自身的信息,形成具有环路的网络结构。
- 较于前馈神经网络,RNN更加符合生物神经网络的结构;
- 应用:语音识别、语言模型以及自然语言生成等任务上。
- 参数学习:随时间反向传播算法;但会存在长程依赖问题(当输入序列比较长时,会存在梯度爆炸和消失问题),解决办法是引入门控机制。
- 扩展网络:递归神经网络和图网络
6.1 给网络增加记忆能力
- 前馈神经网络是一种静态网络,不具有短期记忆功能;
- 有以下三种方法给网络增加短期记忆能力;
6.1.1延时神经网络
-
建立额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等);
-
代表模型:延时神经网络(Time Delay Neural Network,TDNN);
-
结构:在前馈神经网络中的非输出层都添加一个延时器,记录神经元的最近几次活性值,如在第t个时刻,第l层神经元的活性值依赖于第l-1层神经元的最近K个时刻的活性值,即
表示第l层神经元的数量;
6.1.2 有外部输入的非线性自回归模型
- 自回归模型(AR):是统计学上常用的一类时间序列模型;
为可学习参数, \(\epsilon_t\)!服从 \(\mathcal{N}(0,\sigma^2)\)分布。
- 有外部输入的非线性自回归模型(NARX):在每一个时间t都有一个外部输入 \(x_t\),产生一个输出 \(y_t\) ,通过延时器记录最近 \(K_x\)次的外部输入和最近 \(K_y\)次的输出,第t个时刻的输出 \(y_t\) 为
,其中\(f(\cdot)\) 表示非线性函数,可以是一个前馈网络, \(K_x\)和\(K_y\)为超参数。
6.1.3 RNN
- 更新带反馈边的隐藏层的活性值\(h_t:h_t=f(h_{t-1},x_t),h_0=0,f(\cdot)\) 为一个非线性函数,可以是一个前馈神经网络;此公式可视为动力系统, \(h_t\) 也称为状态或隐状态;
- 理论上RNN可以近似任意的非线性动力系统。
6.2 简单循环网络
- 结构:只有一个隐藏层的神经网络,隐藏层之间的结点是无连接的,但是增加了隐藏层之间的反馈连接。
- 更新公式:\(z_t = Uh_{t-1}+Wx_{t}+b,h_t = f(z_t)\),\(x_t \in R^{M}\)表示在时刻t时网络的输入,\(h_t\in R^D\) 表示隐藏层状态(即隐藏层神经元活性值), \(U\in R^{D\times D}\)为转态-状态权重矩阵, \(W\in R^{D\times M}\)为转态-输入权重矩阵, \(b \in R^D\)为偏置向量,\(f(\cdot)\) 是非线性激活函数,常为Logistic函数或Tanh函数.
- 在时间维度上视为权值共享的神经网络;
6.2.1 RNN的计算能力
- 前馈神经网络可以模拟任何连续函数,RNN可以模拟任何程序。
- 定义一个完全连接的RNN,输入为 \(x_t\) ,输出为
其中h为隐状态.
- RNN的通用近似定理;
- 一个完全连接的RNN是任何非线性动力系统的近似器;
-
图灵完备
一种数据操作规则;(目前主流的编程语言都是图灵完备的)
一个完全连接的循环神经网络可以近似解决所有的可计算问题。
6.3 应用到机器学习
RNN可以应用到几种模式的机器学习任务:
- 序列到类别模式、同步的序列到序列模式、异步的序列到序列模式。
6.3.1 序列到类别模式
- 用于序列数据的分类问题:输入序列,输出为类别。如文本分类,输入数据为单词的序列,输出为该文本的类别.
- 由输入序列得到不同时刻的隐状态,而最后一个隐状态或者所有状态的平均可以视为整个序列的最终表示。然后输入给分类器 \(g(\cdot)\) 进行分类。 \(\hat{y}=g(h_T)\)
- 除了将最后时刻的状态作为整个序列的表示之外,我们还可以对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示
情感分类:
6.3.2 同步的序列到序列模式
- 用于序列标注任务;如词性标注。即每一时刻都有输入和输出,输入序列和输出序列的长度相同。
- 每个时刻的隐状态 \(h_t\) 代表了当前时刻和历史信息,并输入给分类器 \(g(\cdot)\) 。
信息抽取
(Information Extraction,IE) 从无结构的文本中抽取结构化的信息,形成知识。
语音识别
Connectionist Temporal Classification (CTC) [Alex Graves, ICML’06][Alex Graves, ICML’14][Haşim Sak, Interspeech’15][Jie Li, Interspeech’15][Andrew Senior, ASRU’15]
6.3.3 异步的序列到序列模式
- 也称为编码器-解码器(Encoder-Decoder);
- 输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。如机器翻译。
- 过程:将样本x按不同时刻输入到一个RNN(编码器)中,得到其编码 \(h_T\) ,然后再使用另一个RNN(解码器)得到输出序列
.为了建立输出序列之间的依赖关系,在解码器中通常使用非线性的自回归模型。
机器翻译
6.4 参数学习
循环神经网络的参数可以通过梯度下降方法来进行学习。
循环神经网络中存在一个递归调用的函数 𝑓(⋅),因此其计算参数梯度的方式和前馈神经网络不太相同.在循环神经网络中主要有两种计算梯度的方式:随时间反向传播(BPTT)算法和实时循环学习(RTRL)算法.
6.4.1 随时反向传播算法(BPTT)
- 思想:类似于前馈神经网络的错误反向传播算法来计算梯度;将RNN视为一个展开的多层前馈神经网络,所有层的参数是共享的,参数的真实梯度是展开层的参数梯度之和。
- 计算复杂度:参数的梯度需要在一个完整的前向计算和反向计算后才能得到并进行更新。计算量小,但因需要保存所有时刻的中间梯度,空间复杂度高。
6.4.2 实时循环学习算法(RTRL)
- 思想:通过前向传播的方式来计算梯度;
- 计算复杂度:不需要梯度回传,适合在线学习或无限序列的任务重。
两种算法比较
RTRL算法和BPTT算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度.在循环神经网络中,一般网络输出维度远低于输入维度,因此 BPTT 算法的计算量会更小,但是 BPTT 算法需要保存所有时刻的中间梯度,空间复杂度较高.RTRL算法不需要梯度回传,因此非常适合用于需要在线学习或无限序列的任务中。
6.5 长程依赖问题
RNN的常见问题:梯度消失和梯度爆炸;因此RNN不能完全解决长时依赖问题;
6.5.1 改进方案
- 梯度爆炸
- 权重衰减:给参数增加 \(l_1,l_2\)范数的正则化项来限制参数的取值范围,使得\(\gamma\leq 1\) 。
- 梯度截断;当梯度的模大于一定阈值时,就截断成为一个较小的数。
- 梯度消失
- 改变模型;
- 门控机制;
6.6 基于门控的循环神经网络
- 在\(h_t = h_{t-1}+g(x_t,h_{t-1};\theta)\) 的基础上引入门控机制(有选择的加入信息,遗忘之间累积的信息)来控制信息的累积速度。
6.6.1 长短时记忆网络(LSTM)
- 三个门:
- 遗忘门 \(f_t\in [0,1]^D\) : 控制上一个时刻的内部状态\(c_{t-1}\) 需要遗忘多少信息;
- 输入门\(i_t\in [0,1]^D\) : 控制当前时刻的候选状态 \(\tilde{c_t}\)有多少信息需要保存;
- 输出门 \(o_t\in [0,1]^D\) : 控制当前时刻的内部状态 \(c_t\)有多少信息需要输出给外部状态 \(h_t\) 。
-
其他: \(c_t\) :内部状态, \(h_t\):外部状态(隐藏层);
-
下图给出了 LSTM 网络的循环单元结构,其计算过程为:
1)首先利用上一时刻的外部状态\(h_{t-1}\)和当前时刻的输入\(x_t\),计算出三个门,以及候选状态 \(\tilde{c_t}\)
2)结合遗忘门\(f_t\) 和输入门 \(i_t\)来更新记忆单元 \(c_t\)
3)结合输出门 \(O_t\),将内部状态的信息传递给外部状态\(h_t\).
通过 LSTM 循环单元,整个网络可以建立较长距离的时序依赖关系
6.6.2 LSTM的变体
无遗忘门的LSTM网络
- 1997,Hochreiter;
- 缺点:记忆单元c会不断增大,其容量会达到饱和,从而大大降低LSTM模型的性能;
peephole连接
- 三个门不但依赖于输入和上一时刻的隐藏状态,还依赖于上一时刻的记忆单元。
其中 为对角矩阵。
- 耦合输入门和遗忘门
- 将输入门和遗忘门合并,令\(f_t = 1-i_t\)
- 更新方式:
6.6.3 门控循环单元(GRU)
- 2014,Cho;
- 一个更新门: \(z_t\)(平衡输入和遗忘);一个重置门: \(r_t\) (控制候选状态 \(\tilde{h_t}\) 的计算是否依赖于上一时刻 \(h_{t-1}\) 的计算)
- \(g(x_t,h_{t-1};\theta)\) 定义为
6.7 深层RNN
- 将RNN按照时间展开则是一个深的网络,但如果从同一时刻网络输入到输出之间的路径 \(x_t \xrightarrow{} y_t\) 来看,网络是浅的;
6.7.1 堆叠循环神经网络(SRNN)
一种常见的增加循环神经网络深度的做法是将多个循环网络堆叠起来,称 为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN)。
一个堆叠的简单循环网络(Stacked SRN)也称为循环多层感知器(Recurrent MultiLayer Perceptron,RMLP)
6.7.2 双向循环神经网络(Bi-RNN)
在有些任务中,一个时刻的输出不但和过去时刻的信息有关,也和后续时刻的信息有关.比如给定一个句子,其中一个词的词性由它的上下文决定,即包含左右两边的信息.因此,在这些任务中,我们可以增加一个按照时间的逆序来传递信息的网络层,来增强网络的能力.
双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成,它们的输入相同,只是信息传递的方向不同。
6.8 扩展到图结构
如果将循环神经网络按时间展开,每个时刻的隐状态 \(h_t\)看作一个节点,那么这些节点构成一个链式结构,每个节点 𝑡 都收到其父节点的消息(Message),更新自己的状态,并传递给其子节点。而链式结构是一种特殊的图结构,我们可以比较容易地将这种消息传递(Message Passing)的思想扩展到任意的图结构上
6.8.1 递归神经网络(RecRNN)
递归神经网络(Recursive Neural Network,RecNN)是循环神经网络在有向无循环图上的扩展 [Pollack, 1990].递归神经网络的一般结构为树状的层次结构。
-
思想:源于有向无循环图
-
用途:建模自然语言句子的语义;(2011,2013)给定一个句子的语法结构(常为树状结构),使用RecRNN按照句法的组合关系合成一个句子的语义
-
拓展:树结构的长短时记忆模型(2015);
2. 图神经网络(GNN)
-
知识图谱、社交网络、分子网络等;
-
每个节点\(v\)都用一组神经元来表示其状态\(h^{(\nu)},\mathcal{N}(\nu)\) 表示节点\(v\)的邻居,\(m_t^{(\nu)}\) 表示在第t时刻节点\(v\)收到的信息;
-
(6.79)(6.80)是一种同步更新方式,所有的结构同时接受信息并更新自己的状态。对于有向图,使用异步的更新方式会更有效,如RNN或RecRNN。
6.9 参考资料
- 延时神经网络:Lang K J, Waibel A H, Hinton G E. A time-delay neural network architecture for isolated word recognition[J]. Neural networks, 1990, 3(1):23-43.
- 延时神经网络:Waibel A, Hanazawa T, Hinton G, et al. Phoneme recognition using time-delay neural networks[J]. IEEE transactions on acoustics, speech, and signal processing, 1989, 37(3):328-339.
- BPTT算法:Werbos P J. Backpropagation through time: what it does and how to do it[J]. Proceedings of the IEEE, 1990, 78(10):1550-1560.
- 带截断的BPTT算法:Williams R J, Peng J. An efficient gradient-based algorithm for on-line training of recurrent network trajectories[J]. Neural computation, 1990, 2(4):490-501.
- 长期依赖问题:Bengio Y, Simard P, Frasconi P. Learning long-term dependencies with gradient descent is difficult[J]. Neural Networks, IEEE Transactions on, 1994, 5(2):157-166.
- 长期依赖问题:Hochreiter S, Bengio Y, Frasconi P, et al. Gradient flow in recurrent nets: The difficulty of learning longterm dependencies[M/OL]//Kolen J F, Kremer S C. A Field Guide to Dynamical Recurrent Networks. IEEE, 2001: 237-243.
- LSTM:Gers F A, Schmidhuber J, Cummins F. Learning to forget: Continual prediction with lstm[J]. Neural Computation, 2000.
- LSTM:Hochreiter S, Schmidhuber J. Long short-term memory[J]. Neural computation, 1997, 9(8):1735-1780.
- GRU:Chung J, Gulcehre C, Cho K, et al. Empirical evaluation of gated recurrent neural networks on sequence modeling[J]. arXiv preprint arXiv:1412.3555, 2014.
- LSTM在机器翻译上的应用:Sutskever I, Vinyals O, Le Q V. Sequence to sequence learning with neural networks[C]//Advances in Neural Information Processing Systems. 2014: 3104-3112.
- LSTM网络的分析:Greff K, Srivastava R K, Koutník J, et al. Lstm: A search space odyssey[J]. IEEE transactions on neural networks and learning systems, 2017.
- LSTM网络的分析:Jozefowicz R, Zaremba W, Sutskever I. An empirical exploration of recurrent network architectures[C]//Proceedings of the 32nd International Conference on Machine Learning. 2015: 2342-2350.
- LSTM网络的分析:Karpathy A, Johnson J, Fei-Fei L. Visualizing and understanding recurrent networks[J]. arXiv preprint arXiv:1506.02078, 2015.
- 残差网络:He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778
- 高速网络:Srivastava R K, Greff K, Schmidhuber J. Highway networks[J]. arXiv preprint arXiv:1505.00387,2015.
- 图网络:Scarselli F, Gori M, Tsoi A C, et al. The graph neural network model[J]. IEEE Transactions on Neural Networks, 2009, 20(1):61-80.
- 图卷积网络:Kipf T N, Welling M. Semi-supervised classification with graph convolutional networks[J]. arXiv preprint arXiv:1609.02907, 2016.
- 图注意力网络:Veličković P, Cucurull G, Casanova A, et al. Graph attention networks[J]. arXiv preprint arXiv:1710.10903, 2017.
- 消息传递神经网络:Gilmer J, Schoenholz S S, Riley P F, et al. Neural message passing for quantum chemistry[J]. arXiv preprint arXiv:1704.01212, 2017.
- 图网络综述:Battaglia P W, Hamrick J B, Bapst V, et al. Relational inductive biases, deep learning, and graph networks[J]. arXiv preprint arXiv:1806.01261, 2018.