目录
1. 给网络增加记忆能力
1.1 延时神经网络
1.2 有外部输入的非线性自回归模型
1.3 循环神经网络
2. 简单循环网络
2.1 循环神经网络的计算能力
2.1.1 循环神经网络的通用近似定理
2.1.2 图灵完备
3. 应用到机器学习
3.1 序列到类别模式
3.2 同步的序列到序列模式
3.3 异步的序列到序列模式
4. 参数学习
4.1 随时间反向传播算法
5. 长程依赖问题
5.1 改进方案
6. 基于门控的循环神经网络
6.1 门控循环单元网络
6.2 长短期记忆网络(LSTM)
6.3 LSTM网络的各种变体
7. 深层循环神经网络
7.1 堆叠循环神经网络
7.2 双向循环神经网络
8. 拓展到图结构
8.1 递归神经网络
8.2 图神经网络
全前馈神经网络,信息单向传递,网络易学习,但能力被减弱。网络输出只依赖于当前的输入。输入输出维数固定。
循环神经网络,具有短期记忆能力。其中的神经元可接收 其他神经元的信息和 本身的信息。输入输出可不固定。参数学习可通过随时间反向传播算法学习。输入序列较长时,错误信息向前传递过长,存在梯度爆炸和梯度消失问题,即长程依赖问题,一种有效的改进方式:门控机制。
循环神经网络易拓展到更广义的记忆网络模型: 递归神经网络、 图网络。
时序数据处理需要历史信息。前馈网络无记忆能力。
介绍三种方法给网络增加记忆能力:
延时神经网络通过在前馈网络的非输出层中都添加一个延时器,记录神经元的最近几次活性值,增加前馈网络的短期记忆能力。在 t时刻,第 l 层神经元的活性值依赖于第 l − 1 层神经元的最近 K 个时刻的活性值:
循环神经网络 (Recurrent Neural Network,RNN)通过使用带自反馈的神经元处理任意长度的时序数据。
图 循环神经网络
简单循环网络(SRN)只有一个隐藏层。在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间无连接。简单循环网络增加了隐藏层到隐藏层的反馈连接。
若把每个时刻的状态都看做前馈神经网络的一层,循环神经网络可看做在时间维度上权值共享的神经网络。按时间展开的循环神经网络:
循环神经网络的拟合能力也十分强大。一个完全连接的循环网络是任何非线性动力系统的近似器。可用通用近似定理解释:
图灵完备(Turing Completeness)是指一种数据操作规则,比如一种编程语言,可以实现图灵机(Turing Machine)的所有功能,解决所有的可计算问题。
故一个完全连接的循环神经网络可以近似解决所有的可计算问题。
循环神经网络可以应用到三种模式的机器学习任务::序列到类别模式、同步的序列到序列模式、异步的序列到序列模式。
序列到类别模式主要用于序列数据的分类问题。比如文本分类任务,输入为单词序列,输出为该文本类别。
同步的序列到序列模式主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入输出,输入输出序列长度相同。比如在词性标注(Part-of-Speech Tagging)中,每一个单词需要标注其词性标签。
应用:
中文分词:(s-start、b-beginning、e-ending)
信息抽取:
异步的序列到序列模式 又称编码器-解码器(Encoder-Decoder)模型,即输入序列和输出序列不需具有严格的对应关系,也不需相同长度。比如机器翻译任务中,输入为源语言单词序列,输出为目标语言单词序列。
异步的序列到序列模式示例如下图,其中〈〉 表示输入序列的结束,虚线表示将上一个时刻的输出作为下一个时刻的输入:
RNN中存在提个递归调用的 f(⋅) ,因此计算参数梯度的方式不同于计算前馈网络,主要有两种:随时间反向传播(BPTT)算法和实时循环学习(RTRL)算法。
随时间反向传播算法类似前馈网络的错误反向传播算法。
BPTT 算法将RNN看做展开的多层前馈网络,其中的“每一层”对应RNN中的“每个时刻”:
这样,RNN就可按照前馈网络中的反向传播算法计算参数梯度。在展开的前馈网络中,所有层参数共享,参数的真实梯度是所有“展开层”的参数梯度之和。
计算复杂度 在BPTT 算法中,参数的梯度需要在一个完整的“前向”计算和“反向”计算后才能得到并进行参数更新。
RNN在学习过程中主要的问题是梯度消失或梯度爆炸。很难建模长时间间隔的状态之间的依赖关系。
将BPTT中的误差项展开:
得到:
再定义:
得到:
注意:
梯度可能过大,存在梯度爆炸问题。
记忆容量:随着 h_t不断累积存储新的输入信息,会发生饱和。 假设 g(⋅) 为 Logistic 函数,则随着时间 t 的增长,h_t 会变得大,从而导致 h 变得饱和。即隐状态 h_t 可存储信息有限,随着记忆单元存储内容增多,其丢失信息也增多。
利用门控机制改进模型,解决这两个问题。
为改善RNN的长程依赖问题,在公式:
上引入门控机制来控制信息积累速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息。这类网络叫做 基于门控的循环神经网络 (Gated RNN)。
门控循环单元(Gated Recurrent Unit,GRU)网络比LSTM更简单。
GRU网络引入门控机制控制信息更新方式,不同LSTM,GRU不引入额外的记忆单元,在公式:
上,引入一个更新门控制当前状态需从历史状态中保留多少信息,需从候选状态中接受多少新信息:
长短期记忆网络(Long Short-Term Memory Network,LSTM)是RNN的一变体,可有效解决RNN的梯度爆炸或梯度消失问题。在以下公式上,进行两方面的改进:
LSTM的循环单元结构如图:
其计算过程为:
通过LSTM循环单元,整个网络可以建立较长距离的时序依赖关系。给出以上LSTM循环单元公式的简洁描述:
主流的LSTM用三个门动态控制内部状态,遗忘历史信息、输出信息、输入信息的数量。对门控机制修改,得到LSTM变体。
无遗忘门的LSTM 最早的LSTM是没有遗忘门的,内部状态的更新为:
记忆单元 c会不断增大。输入序列很长时,记忆单元容量饱和,大大降低LSTM的性能。
如果将深度定义为网络中中信息传递路径长度的话,RNN可以看作是既“深”又“浅”的网络。因为,把RNN按时间展开,长时间间隔的状态之间的路径很长,RNN可以看作是一个非常深的网络;而果同一时刻网络输入到输出之间的路径x_t →y_t ,这个RNN网络是非常浅的。
故,可增加RNN的深度来增强RNN的能力,即增加同一时刻网络输入到输出的路径x_t → y_t ,比如增加隐状态到输出的路径 h_t → y_t ,以及输入x_t → h_t到隐状态的路径深度。
常见的简单做法,将多个RNN堆叠起来,称为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN)。一个堆叠的简单循环网络(Stacked SRN) 也称为循环多层感知器(Recurrent Multi-Layer Perceptron,RMLP)。按时间展开的SRNN如下:
特定任务中,一个时刻的输出不但和过去时刻的信息有关,也和后续时刻的信息有关。比如给定句子,其中一个词的词性由它的上下文决定。因此,在这些任务中,可以增加一个按时间的逆序来传递信息的网络层,以增强网络的能力。
双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成,他们的输入相同,只是信息传递的方向不同。
其中⨁为向量拼接操作。
如果将RNN按时间展开,每个时刻的隐状态h_t 看作一个节点,那么这些节点构成一个链式结构,每个节点 t 都收到其父节点的消息(Message),更新自己的状态,并传递给其子节点。而链式结构是一种特殊的图结构,我们可以比较容易地将这种消息传递(Message Passing)的思想扩展到任意的图结构上。
递归神经网络(Recursive Neural Network,RecNN)是RNN在有向无循环图上的拓展,常为树桩层次结构:
当递归神经网络的结构退化为线性序列结构(图b),递归神经网络等价于简单RNN。
递归神经网络主要用来建模自然语言句子的语义。
同样,可用门控机制来改进递归神经网络中的长距离依赖问题,比如树结构的长短期记忆模型(Tree-Structured LSTM),就是将LSTM模型的思想应用到树结构的网络中,来实现更灵活的组合函数。
实际中很多数据是图结构的,比如知识图谱、社交网络、分子网络等。而前馈网络和反馈网络很难处理图结构的数据。图神经网络(Graph Neural Network,GNN)是将消息传递的思想扩展到图结构数据上的神经网络,可用来处理图数据。