#DeepLearningBook#算法概览之五:Sequence Modeling

来源:互联网 发布:orange作图软件中文版 编辑:程序博客网 时间:2024/05/16 14:31

一、Recurrent Neural Networks

Recurrent Neural Networks是用来处理序列数据的网络,即数据不再是散乱地组成一个训练集合。数据之间的排列顺序本身也是具有信息量的。打乱数据之间的排列前后输出的结果是不同的。
一般recurrent neural networks有三种形式:
1) 每步都有输出O,recurrent connections存在于hidden units之间。
2) 每步都有输出O,recurrent connections存在于上一步的Output和下一步的hidden unit之间。
3) 只有最后一步有一个输出O,recurrent connections存在于hidden units之间。

对于形式1),它的图像表示为:
这里写图片描述
其中hidden units->hidden units,input->hidden units,hidden units->output units的权值矩阵都是共享的。它的前向通道可以借由它们图中的线性组合以及相应的一些非线性激励单元表示为:

这里写图片描述
这里写图片描述
另外2)类型和3)类型的示例图分别如下:
这里写图片描述
这里写图片描述
类型2)缺少hidden-to-hidden的直接recurrent connections,这导致了这个模型本身是不如类型1)有力的。为了保障类型2)的工作效果客观,需要让output units能够保留足够的过去信息来供之后的hidden units使用。前向传输过程中有价值信息的损失是类型2)的缺点。
类型2)的优点是,有利于Backprop的计算,因为这样就可以达到关于时间t的解耦。对于这个解耦怎么理解,个人是这么看的,可能存在不妥的地方:backprop是cost function对网络中的各个参数找其梯度下降的方向的迭代过程。对于类型1),连接整个网络的是hidden units,但是给出cost function的是output units。在这种情况下output units是整根链条额外拉出来的单元,并非是链条本身的组员,backprop从末往前推的过程中,每过一个单元就要因为这个cost function的位置特性而卡一下,因而不利于计算。但是对于类型2),output units本身就是这根序列链条的一部分,这可以使得backprop求梯度的过程更为便捷。具体的可能还是要手算一下才能更具体地理解。
Recurrent neural networks的backprop方法有计算梯度的(公式可直接推导得到),也有一种teacher forcing的方法。后种相对比较新。
Recurrent networks作为directed graphical models和modeling sequences conditioned on context with RNNs这两章暂时没有很看懂。

二、 Bidirectional RNNs

这类RNN是考虑y(t)依赖于整个输入序列。比如在语音识别里面,一个词的理解既依赖于它之前的句义,又依赖于它之后的句义。除此之外它还应用于手写识别和生物信息处理。
这里在普通recurrent neural network的基础上加了一条反向链,即从t->0时刻的。i时刻的输出值既依赖此时正向链的hidden units也依赖于反向链的hidden units。如图所示:
这里写图片描述

三、 Encoder-Decoder Sequence-to-Sequence结构

RNN的input又称为context。从前面Recurrent neural network的类型1)和类型2)中可以知道,一般input x和output y的维数都是一样的。有几个时间段t就有几个input和output,它俩基本可以看做是一一对应的关系。但是如果我们想要input和output的维数不一样,比如我想输入10个时间段的值,但是输出只有两个,这就需要用到encoder-decoder的结构了。这种结构可以看做是由两个RNN组成,第一个RNN完成的是input到context的编码过程,另外一个RNN完成的是context解码再转换成output的过程。暂时不是很懂这样做有什么意义。
这里写图片描述

四、Recursive Neural Networks

RecursiveNN可以看做是RecurrentNN的一般化。RecurrentNN的拓扑结构是链式的,而RecursiveNN的拓扑结构是树状的。因此当两种网络拥有相同的节点数目时,RecursiveNN的深度会更浅得多。RecursiveNN结构的设计一般可以考虑设计成二叉平衡树,但在更立项的情况下,往往是让网络自身去学习自己的拓扑结构。据说这种模型在自然语言处理和图像处理方面效果不错。
这里写图片描述

五、 Echo State Networks

一般在RNN系列中,hidden layer->hidden layer之间的系数矩阵以及input unit->hidden layer之间的系数矩阵是最难训练出来的。(不要问为什么╮(╯▽╰)╭)
其次,Echo state networks属于动态网络,即其内部存在带延迟因子和反馈连接。这个网络的核心是一个随机生成,并且保持不变的reservoir。对它而言它仅仅学习的是output weights,使得简单的线性回归就可以完成网络的训练。为了能够使得大部分的历史信息能够由recurrent neural network state表达,我们需要将input和recurrent weights设置为使得这个动态系统临界稳定的值。更数学化的说法是,使得state-to-state的转移方程Jacobian矩阵的特征值接近1。
储备池有一个重要的参数SR(权值谱半径),即state-to-state的转移方程的Jacobian矩阵的特征值λ。必须要保证|λ|<1,这个ESN才能具有回声状态特性。因为经过n个step就相当于有n个Jacobian矩阵作用在最初的状态上。确保SR满足小于1才能保证网络状态和输入对网络的影响在足够长的时间后消失,自此确保网络的稳定。

六、Multiple Time Scales

Multiple time scales 的目的是在于把过去的历史信息进行分级处理。所谓分级就是某些信息处理为coarse time scale,这类信息往往可以跨越比较长的时间片但依旧产生客观的影响;另一类被处理为fine time scale,这类信息能够处理好细节信息。
最基础的建立multiple time scales的方法是建立多个直接的链接。这些链接联系了很久之前的节点和现在的节点。
在此之上的改进是leaky units。Leaky units并非直接的链接,而是加权的链接。它的表达式简述如下:
这里写图片描述
第三种方法是删除长度为一的边,取而代之的是长度更长的边。这样的话这个网络就会自己去适应。

七、 Gated RNNs

在实际应用中,最有效的序列模型是gated RNNs。这类模型一般主要包括LSTM(long short-term memory)和基于gated recurrent unit的网络。

LSTM

LSTM的框图示意如下:
这里写图片描述
第t个step,决定此时状态的st值大小的主要有两个:1)forget gate和st1的杂交体;2)input和input gate的混合体。
换句话说,此时的状态s取决于输入和状态。

从forget gate这边着眼:
forget gate的函数如下
这里写图片描述
这里输出的f是一个n维的0,1向量。0表示此处信息不要,1表示此处信息保留。用这个forget门去卡我们t-1时刻的状态s。这个s也是一个向量。如果f某个位置为0,则说明forget gate关闭,st1此处的信息不能传达给st。如果f某个位置为1,则说明forget gate开启,st1此处的信息可以传达给st

从input gate这边着眼:
3这条通道表征的是我的input输送给状态。但是输送的时候也要受到gate的限制。这个道理和上面的forget gate类似。只有这个input gate(4通道)处于开启状态,数据才能从3通道送给状态。gate的限制作用是由3,4共同通到的乘法器处得以体现。
input gate具体表达式如下:
这里写图片描述

因此最后t时刻的状态的表达式为:
这里写图片描述
简单来说就是:
t时刻的状态 = t-1时刻的状态 * 这个状态要不要忘掉 + t时刻的输入 * 这个输入要不要真的传给状态

在得到了t时刻的状态后,问题又来了。状态有,但是这个状态是否有作为输出的价值的问题出现了。因此这个时候又添加了一个output gate(7通道)来卡这个st是否有输出的价值。
output gate和上面两个gate的设计思路完全一样:
这里写图片描述
我们最后隐层的输出就是:
这里写图片描述

另外对LSTM还有一些变体,比如说GRUs。简单来说,GRUs就是在LSTM的基础上将forget gate和output gate权值的形式做一点调整,大致设计的框架相同。

这里写图片描述
写在最后:RNN这块卡了两天。还是有很多没弄懂。但愿周末前能把这本书看完吧…
今天晚上好像有雪…(:зゝ∠)

0 0