循环神经网络
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络.在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构.
6.1 给网络增加记忆能力
为了处理这些时序数据并利用其历史信息,我们需要让网络具有短期记忆能力.而前馈网络是一种静态网络,不具备这种记忆能力.
一般来讲,我们可以通过以下三种方法来给网络增加短期记忆能力.
- 延时神经网络:一种简单的利用历史信息的方法是建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等).
- 有外部输入的非线性自回归模型:有外部输入的非线性自回归模型(Nonlinear AutoRegressive with Exogenous Inputs Model,NARX)是自回归模型的扩展,在每个时刻𝑡 都有一个外部输入xt,产生一个输出𝒚t.NARX通过一个延时器记录最近𝐾𝑥 次的外部输入和最近𝐾𝑦次的输出.
- 循环神经网络:通过使用带自反馈的神经元,能够处理任意长度的时序数据.
6.2 简单循环网络
简单循环网络(Simple Recurrent Network,SRN)是一个非常简单的循环神经网络,只有一个隐藏层的神经网络.在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间是无连接的.而简单循环网络增加了从隐藏层到隐藏层的反馈连接.
循环神经网络的通用近似定理 :如果一个完全连接的循环神经网络有足够数量的 sigmoid 型隐藏神经元,它可以以任意的准确率去近似任何一个非线性动力系统.
图灵完备 : 所有的图灵机都可以被一个由使用Sigmoid型激活函数的神经元构成的全连接循环网络来进行模拟.
6.3 应用到机器学习
循环神经网络可以应用到很多不同类型的机器学习任务.根据这些任务的特点可以分为以下几种模式:序列到类别模式、同步的序列到序列模式、异步的序列到序列模式.
- 序列到类别模式主要用于序列数据的分类问题:输入为序列,输出为类别.
- 同步的序列到序列模式主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同.
- 异步的序列到序列模式也称为编码器-解码器(Encoder-Decoder)模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度.
6.4 参数学习
在循环神经网络中主要有两种计算梯度的方式:随时间反向传播(BPTT)算法和实时循环学习(RTRL)算法.
- 随时间反向传播(BackPropagation Through Time,BPTT)算法的主要思想是通过类似前馈神经网络的误差反向传播算法[Werbos, 1990]来计算梯度.
- 实时循环学习(Real-Time RecurrentLearning,RTRL)是通过前向传播的方式来计算梯度.
RTRL算法和BPTT算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度.在循环神经网络中,一般网络输出维度远低于输入维度,因此 BPTT 算法的计算量会更小,但是 BPTT 算法需要保存所有时刻的中间梯度,空间复杂度较高.RTRL算法不需要梯度回传,因此非常适合用于需要在线学习或无限序列的任务中.
6.5 长程依赖问题
循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔(Long Range)的状态之间的依赖关系.
虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度爆炸或消失问题,实际上只能学习到短期的依赖关系.这样,如果时刻 𝑡 的输出 𝑦𝑡 依赖于时刻 𝑘 的输入 𝒙𝑘,当间隔 𝑡 − 𝑘 比较大时,简单神经网络很难建模这种长距离的依赖关系,称为长程依赖问题(Long-Term DependenciesProblem).
改进方案:
- 梯度爆炸 :一般而言,循环网络的梯度爆炸问题比较容易解决,一般通过权重衰减或梯度截断来避免.
- 梯度消失:梯度消失是循环网络的主要问题.除了使用一些优化技巧外,更有效的方式就是改变模型.
但这种改进依然存在两个问题:1、梯度爆炸问题.2、记忆容量(Memory Capacity)问题
为了解决这两个问题,可以通过引入门控机制来进一步改进模型.
6.6 基于门控的循环神经网络
为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是在之前的基础上引入门控机制来控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息.这一类网络可以称为基于门控的循环神经网络(Gated RNN)本节中,主要介绍两种基于门控的循环神经网络:长短期记忆网络和门控循环单元网络.
6.6.1 长短期记忆网络
长短期记忆网络(Long Short-Term Memory Network,LSTM)是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题.
LSTM网络引入一个新的内部状态(internal state)专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态.
LSTM 网络引入门控机制(Gating Mechanism)来控制信息传递的路径.
- 遗忘门:控制上一个时刻的内部状态需要遗忘多少信息.
- 输入门:控制当前时刻的候选状态有多少信息需要保存.
- 输出门: 控制当前时刻的内部状态有多少信息需要输出给外部状态.
图6.7给出了 LSTM 网络的循环单元结构
![](https://img-blog.csdnimg.cn/20210620171041604.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUxMzA4Ng==,size_16,color_FFFFFF,t_70)
记忆:循环神经网络中的隐状态 𝒉 存储了历史信息,可以看作一种记忆(Memory.在简单循环网络中,隐状态每个时刻都会被重写,因此可以看作一种短期记忆(Short-Term Memory).在神经网络中,长期记忆(Long-Term Memory)可以看作网络参数,隐含了从训练数据中学到的经验,其更新周期要远远慢于短期记忆.而在 LSTM 网络中,记忆单元 𝒄 可以在某个时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔.记忆单元 𝒄 中保存信息的生命周期要长于短期记忆 𝒉,但又远远短于长期记忆, 因此称为长短期记忆(LongShort-Term Memory).
目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息.我们可以对门控机制进行改进并获得LSTM网络的不同变体.
- 无遗忘门的 LSTM 网络:最早提出的 LSTM 网络是没有遗忘门的.
- peephole 连接:三个门不但依赖于输入 𝒙𝑡 和上一时刻的隐状态𝒉𝑡−1,也依赖于上一个时刻的记忆单元𝒄𝑡−1
- 耦合输入门和遗忘门:LSTM 网络中的输入门和遗忘门有些互补关系,因此同时用两个门比较冗余.为了减少LSTM网络的计算复杂度,将这两门合并为一个门.
6.6.2 门控循环单元网络
门控循环单元(Gated Recurrent Unit,GRU)网络引入门控机制来控制信息更新的方式.和 LSTM 不同,GRU 不引入额外的记忆单元,GRU网络也是在之前改进的基础上引入一个更新门(Update Gate)来控制当前状态需要从历史状态中保留多少信息(不经过非线性变换),以及需要从候选状态中接受多少新信息
图6.8给出了GRU网络的循环单元结构.
![](https://img-blog.csdnimg.cn/20210620172539252.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUxMzA4Ng==,size_16,color_FFFFFF,t_70)
6.7 深层循环神经网络
我们可以增加循环神经网络的深度从而增强循环神经网络的能力.
- 一种常见的增加循环神经网络深度的做法是将多个循环网络堆叠起来,称为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN).一个堆叠的简单循环网络(Stacked SRN)也称为循环多层感知器(Recurrent MultiLayer Perceptron,RMLP)
- 双向循环神经网络:在有些任务中,一个时刻的输出不但和过去时刻的信息有关,也和后续时刻
的信息有关.双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成,它们的输入相同,只是信息传递的方向不同.
6.8 扩展到图结构
递归神经网络(Recursive Neural Network,RecNN)是循环神经网络在有向无循环图上的扩展 [Pollack, 1990].递归神经网络的一般结构为树状的层次结构,如图6.11a所示.
![](https://img-blog.csdnimg.cn/2021062017360020.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUxMzA4Ng==,size_16,color_FFFFFF,t_70)
当递归神经网络的结构退化为线性序列结构(见图6.11b)时,递归神经网络就等价于简单循环网络.
图神经网络(Graph Neural Network,GNN)是将消息传递的思想扩展到图结构数据上的神经网络.