神经网络与深度学习第六章--循环神经网络(理论)
#第六章-循环神经网络
前馈神经网络的缺点:
①信息的传递是单向的。前馈神经网络可以看作一个复杂的函数,每次的输入都是独立的,即网络的输出只依赖于当前的输入。前馈神经网络是一种静态网络,没有记忆能力,就无法模拟有限状态自动机和图灵机等。
②前馈神经网络要求输入和输出的维数都是固定的,不能任意改变,因此无法处理变长的序列(时序)数据,比如视频、语音、文本等。
因此,就需要循环神经网络。
循环神经网络 RNN:是一类具有短期记忆能力的神经网络
- 神经元不但可以接受其他神经元的信息,也可以接收自身的信息,形成具有环路的网络结构
广泛应用于:语音识别、语言模型、自然语言生成等任务 - 参数学习:随时间反向传播算法
即,按照时间的逆序将错误信息一步步地往前传递 - 长程依赖问题:当输入序列比较长时,会存在梯度爆炸和消失问题,也称 长程依赖问题
改进:引入门控机制 - 扩展(更广义的记忆网络模型):
递归神经网络
图网络
#6.1 给网络增加记忆能力
处理时序数据并利用其历史信息,需要使网络具有短期记忆能力
##6.1.1 延时神经网络 TDNN
思想:加入延时器(延时单元),使前馈神经网络也具有短期记忆能力
-
延时单元:建立额外的延时单元来存储网络的历史信息,包括输入、输出、隐状态等
-
延时神经网络 TDNN:在前馈神经网络的非输出层都添加一个延时器,记录神经元的最近几次活性值
-
第
层神经元在时刻 t 的活性值
-
即依赖于第
层神经元在最近 K 个时刻的活性值
##6.1.2 有外部输入的非线性自回归模型(NARX)
有外部输入的非线性自动回归模型 NARX:
-
-
基于自回归模型,扩展加入延时器
-
在每个时刻 t 都有一个外部输入
,产生一个输出
-
NARX 通过一个延时器记录最近
次的外部输入和最近
次输出
-
第 t 个时刻的输出
,
是非线性函数
##6.1.3循环神经网络 RNN
循环神经网络 RNN:
- 通过使用带自反馈的神经元,能够处理任意长度的时序数据
- 带反馈边的隐藏层的活性值(也称状态 or 隐状态)
,
,
是非线性函数(可以是一个前馈网络)
上图是循环神经网络的示例 - 循环神经网络具有短期记忆能力,相当于存储装置,理论上可以近似任意的非线性动力系统
- 前馈神经网络可以模拟任何连续函数,而循环神经网络可以模拟任何程序
动力系统:指系统状态按照一定的规律随时间变化的系统,
可以看成一个动力系统
#6.2 简单循环网络
简单循环网络 SRN:是只有一个隐藏层的神经网络,但(区别于两层的前馈神经网络,)增加了从隐藏层到隐藏层的反馈连接。
-
在时刻t,网络的输入:
-
在时刻t,隐藏层的净输入:
-
在时刻t,隐藏层的(隐)状态/活性值:
,
-
其中,
为“状态-状态权重矩阵”,
为“状态-输入权重矩阵”,
为偏置向量,
为非线性激活函数(通常为 Logistic 函数或 Tanh 函数)。
##6.2.1 循环神经网络的计算能力
根据循环神经网络的通用近似定理,一个完全连接的循环网络是任何非线性动力系统的近似器
- **图灵机:**一种抽象的信息处理装置,可以用来解决所有的可计算问题
- 图灵完备:指一种数据操作规则,比如一种计算机编程语言,可以实现图灵机的所有功能,解决所有的可计算问题。目前的主流编程语言都是图灵完备的
- 图灵完备定理:所有的图灵机都可以被一个由使用 Sigmoid 型激活函数的神经元构成的全连接循环网络来进行模拟
- 因此,一个完全连接的循环神经网络可以近似解决所有的可计算问题
#6.3 应用到机器学习
##6.3.1 序列到类别模式
- 输入为序列,输出为类别
- 主要用于序列数据的分类问题
- eg. 文本分类,输入数据为单词序列,输出为该文本的类别
- 输入序列:
是长度为 T 的序列,按不同时刻输入到循环神经网络,得到:
- 不同时刻的隐状态:
,两种方式处理隐藏状态 h,输入给分类器
,得到:
- 输出类别:
- 正常模式:将最后时刻的状态
看作整个序列的最终表示(或 特征),即
间进
- 按时间进行平均采样模式:将整个序列的所有状态的平均作为整个序列的表示,即
- 正常模式:将最后时刻的状态
##6.3.2 同步的序列到序列模式
-
每一时刻都有输入和输出,输入和输出都是序列,且序列长度相同
-
主要用于序列标注
- eg. 词性标注,对每个输入的单词都标注对应的词性标签
- 信息抽取
- 语音识别
-
输入序列:
,长度为 T,样本 x 按不同时刻输入到 RNN,并得到:
-
不同时刻的隐状态:
,每个时刻的隐状态
代表了当前时刻和历史的信息,并输入给分类器
,得到输出(当前时刻的标签
)
-
输出序列:
,长度为 T
##6.3.3 异步的序列到序列模式
也称编码器-解码器模型,通过先编码后解码的方式实现
-
输入和输出都是序列,但输入输出序列不需要有严格的对应关系,也不需要保持相同的长度
-
应用:机器翻译,输入为源语言的单词序列,输出为目标语言的单词序列
-
输入序列:
,长度为 T。先将样本 x 按不同时刻输入到一个 RNN(编码器)中,并得到其编码
;再使用另一个 RNN(解码器),得到输出序列:
-
输出序列:
,长度为 M
-
公式(
是用作编码器的 RNN,
是用作解码器的 RNN(通常采用非线性的自回归模型),
为分类器):
虚线表示将上一个时刻的输出作为下一个时刻的输入。
#6.4 参数学习
循环神经网络的参数可以通过梯度下降法进行学习
以同步的序列到序列模式为例:
-
时刻 t 的输出
-
时刻 t 的损失函数
-
整个序列的损失函数
-
整个序列的损失函数关于参数 U 的梯度
,关于参数 W,b 的梯度同理
循环神经网络计算梯度的两种方式:
##6.4.1 随时间反向传播算法 BPTT
-
算法思想:通过类似前馈神经网络的错误反向传播算法计算梯度
- 见上图6.2,将循环神经网络看作一个展开的多层前馈网络,每一层对应循环神经网络的每个时刻
- 展开的网络中,所有层共享参数,因此参数的真实梯度是所有展开层的参数梯度之和
-
误差项
,为 t 时刻的损失
对 k 时刻的隐藏神经层的净输入
的导数
-
参数梯度:
##6.4.2 实时循环学习算法 RTRL
- 算法思想:通过前向传播的思想来计算梯度(参考自动微分中的前向模式)
**前向模式:**按计算图中计算方向的相同方向来递归地计算梯度
BPTT 和 RTRL 算法的比较:
- 两种算法都是基于梯度下降的算法,分别通过反向模式和前向模式应用链式法则计算梯度
- 在循环神经网络中,一般网络输出维度远远低于输入维度,因此 BPTT 算法的计算量会更小
- 但 BPTT 算法需要保存所有时刻的中间梯度,空间复杂度较高
- RTRL 算法不需要梯度回传,因此非常适用于需要在线学习或无限序列的任务中
#6.5 长程依赖问题
循环神经网络在学习过程中的主要问题是:由于梯度消失或梯度爆炸问题,简单循环神经网络实际上只能学习到短期的依赖关系,很难建模长时间间隔的状态之间的依赖关系,称为长程依赖问题
##6.5.1 改进方案
- 方案一(最直接的方式):选取合适的参数,同时使用非饱和的激活函数,但需要足够的人工调参经验,限制了模型的广泛应用
- 方案二(比较有效的方式):通过改进模型或优化方法来缓解网络的梯度消失和梯度爆炸问题
梯度爆炸问题:比较容易解决,通过权重衰减或梯度截断来避免
权重衰减:给参数增加 或
范数的正则化项来限制参数的取值范围
梯度截断:一种启发式方法,当梯度的模大于一定的阈值时,就将它截断成为一个较小的数
**梯度消失问题:**是循环网络的主要问题,避免方法:
- 使用一些优化技巧
- 更有效的方式是改变模型
- 原本的RNN的隐状态
,现在让
,同时令
为单位矩阵,即
,
是非线性函数,
为参数
- 优点:这样,
和
之间就变为线性依赖关系,且权重系数为 1,就不存在梯度消失或梯度爆炸问题
- 缺点:丢失了神经元在反馈边上的非线性激活的性质,因此降低了模型的表示能力
- 原本的RNN的隐状态
- 避免以上的缺点,更有效的改进策略:
- 优点:这样,
和
之间既有线性关系,也有非线性关系,。可以缓解梯度消失问题
- 缺点:
- 梯度爆炸问题
- 记忆容量问题:隐状态
能存储的信息是有限的,会发生饱和现象,随着记忆单元存储的内容越来越多,丢失的信息也越来越多
- 为了解决以上两个问题缺点,需要引入下一节介绍的门控机制
#6.6 基于门控的循环神经网络
##6.6.1 长短期记忆网络 LSTM
长短期记忆网络 LSTM 是循环神经网络的一个变体,能有效解决简单循环神经网络的梯度爆炸或消失问题
LSTM 在公式的基础上改进了两方面:
- 新的内部状态
:
-
内部状态
专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态
-
在每个时刻 t,LSTM 的内部状态
记录了当前时刻为止的历史信息
-
内部状态:
-
外部状态:
-
其中,
为向量元素乘积,里面的f,i,o分别是遗忘门、输入门、输出门(详见下面的门控机制),用来控制信息传递的路径
-
候选状态:
,
-
- 门控机制:用来控制信息传递的路径。用三个门动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息
门 | 作用 & 计算方式(门是“软门”,取值在(0,1)之间,表示以一定的比例允许信息通过) |
---|---|
遗忘门 | 控制上一时刻的内部状态 需要遗忘多少信息 |
输入门 | 控制当前时刻的候选状态 ![]() |
输出门 | 控制当前时刻的内部状态 有多少信息需要输出给外部状态 |
- 由上面的公式,
- 当
时,记忆单元将历史信息清空,并将候选状态
写入(不过由
的公式,此时记忆单元
依然和上一时刻的历史信息相关)
- 当
时,记忆单元将复制上一时刻的内容,不写入新的信息。
- 当
LSTM 网络的循环单元结构:
以上提到的公式可以归纳为:
**记忆:**循环神经网络的隐状态 h 存储了历史信息,可以看作一种记忆
短期记忆:简单循环网络中,隐状态 h 每个时刻都会被重写,可以看作一种短期记忆
长期记忆:长期记忆可以看作网络参数,隐含了从训练数据中学到的经验,其更新周期要远慢于短期记忆
长短期记忆:LSTM网络中,记忆单元 c 可以在某个时刻捕捉到某个关键信息,并保存一定的时间间隔,这个生命周期长于短期记忆 h,又远远短于长期记忆,因此称为长短期记忆
##6.6.2 LSTM 网络的各种变种
对门控机制的三个门进行改进,可获得 LSTM 网络的不同变体
-
无遗忘门的 LSTM 网络:
-
peephole 连接:三个们不但依赖于输入 第 6 章 循环神经网络 RNN - 图103 和上一时刻的隐状态 第 6 章 循环神经网络 RNN - 图104,也依赖于上一时刻的记忆单元 第 6 章 循环神经网络 RNN - 图105
-
耦合输入门和遗忘门:LSTM 网络中和输入门和遗忘门有互补关系,比较冗余,可以合并为一个
##6.6.3 门控循环单元网络 GRU
门控循环单元网络 GRU 是一种比 LSTM 更简单的循环神经网络
- 原理:不引入额外的记忆单元,而是在公式
的基础上引入一个更新门
- 更新门:控制当前状态需要从历史状态中保留多少信息(不经过非线性变换),以及需要从候选状态中接受多少新信息。相当于去掉了 LSTM 中使用输入门和遗忘门的冗余性,直接使用一个更新门控制输入和以往之间的平衡
- 更新门
- 重置门
,
用来控制候选状态
的计算是否依赖上一时刻的状态
- 当前时刻的候选状态
- 当前状态
- 当
时,当前状态
和前一时刻的状态
之间为非线性函数关系
- 当 第 6 章 循环神经网络 RNN - 图121 时,当前状态
和前一时刻的状态
之间为线性函数关系(实际上是
),和当前输入
无关
- 当
时,GRU 网络退化成简单循环网络
- 当
时,当前状态
只和输入
相关,和历史状态
无关
- 当
- 更新门
#6.7 深层循环神经网络
循环神经网络可以看作既深又浅的网络:
- 深:如果将 RNN 按时间展开,长时间间隔的状态之间的路径很长,因而可以看作一个很深的网络。
- 浅:同一时刻,RNN 网络的输入到输出之间的路径
是很短的,所以是一个很浅的网络。
增加网络的深度(以增加网络的能力):
- 主要是增加同一时刻网络输入到输出之间的路径
的长度
##6.7.1 堆叠循环神经网络 SRNN
-
**堆叠循环神经网络 SRNN:**即将多个循环神经网络堆叠起来,以增加循环神经网络的深度
-
循环多层感知机 RMLP:简单循环网络 SRN 的堆叠
-
堆叠循环神经网络中,时刻 t 第
层的输入
等于第
层的输出
-
所以,时刻 t 第
层的隐状态:
-
##6.7.2 双向循环神经网络 Bi-RNN
6.7.2 双向循环神经网络 Bi-RNN
-
使用场景:有些任务,一个时刻的输出不但和过去时刻的信息有关,也和后续时刻的信息有关
- eg. 一个句中,一个单词的词性由上下文决定
- 因此,需要增加一个按照时间逆序传递信息的网络层,来增强网络能力
-
双向循环神经网络 Bi-RNN:由两层循环神经网络组成,输入相同,只是信息的传递方向不同
-
例:第一层按时间顺序,第二层按时间逆序,在时刻 t 的隐状态:
- 第一层的隐状态:
- 第二层的隐状态:
- 最后输出状态:
,
是向量拼接操作.
- 第一层的隐状态:
再解释一下双向循环神经网络:
双向循环神经网络(BRNN)的基本思想是提出每一个训练序列向前和向后分别是两个循环神经网络(RNN),而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息。
下图展示的是一个沿着时间展开的双向循环神经网络。六个独特的权值在每一个时步被重复的利用,六个权值分别对应:输入到向前和向后隐含层(w1, w3),隐含层到隐含层自己(w2, w5),向前和向后隐含层到输出层(w4, w6)。值得注意的是:向前和向后隐含层之间没有信息流,这保证了展开图是非循环的。每一个输出都是综合考虑两个方向获得的结果再输出
上面的图都可以辅助理解。
#6.8 扩展到图结构
- 如上图所示,将循环神经网络按时间展开,每个时刻的隐状态
可以看作一个节点,这些节点构成一个链式结构来传递消息(
传给 )
- 这种消息传递可以扩展到任意其它图结构,而不单单是链式结构
##6.8.1 递归神经网络 RecNN
递归神经网络 RecNN:是循环神经网络在有向无循环图上的扩展,一般结构为树状的层次结构
- 即消息的传递方向不再限定为
传给
,针对一个节点
,可以让它接受来自父节点
的消息
,
是非线性函数。
##6.8.2 图神经网络 GNN
- 图神经网络 GNN:是将消息传递的思想扩展到图结构数据上的神经网络
- 图结构数据:知识图谱、社交网络、分子网络等
#6.9 总结和深入阅读
- 循环神经网络可以建模时间序列数据之间的相关性
- 相较于 延时神经网络 和 有外部输入的非线性自回归模型,循环神经网络可以更方便地建模长时间间隔的相关性
- 常用的循环神经网络的参数学习算法是:BPTT 算法 ,但其计算时间和空间会随时间线性增长
- 一个完全连接的循环神经网络,可以近似任何非线性动力系统以及图灵机(6.2.1 循环神经网络的计算能力),解决所有可计算问题
- 由于梯度爆炸和梯度消失问题,简单循环网络存在长程依赖问题
- 为了解决长程依赖问题,最有效的解决方式是:引入门控机制,eg.
- LSTM 网络:是目前为止最成功的循环神经网络模型
- 应用:语音识别、机器翻译、语音模型、文本生成等
- 通过引入线性连接来缓解长距离依赖问题
- LSTM 网络的线性连接以及门控机制是一种十分有效的避免梯度消失问题的方法
- GRU 网络
- LSTM 网络:是目前为止最成功的循环神经网络模型
- 循环神经网络可以很容易地扩展到更广义的图结构数据上,称为图网络。递归神经网络是一种在有向无环图上的简单的图网络