#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是考虑
这里在普通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矩阵的特征值
六、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,决定此时状态的
换句话说,此时的状态s取决于输入和状态。
从forget gate这边着眼:
forget gate的函数如下
这里输出的f是一个n维的0,1向量。0表示此处信息不要,1表示此处信息保留。用这个forget门去卡我们t-1时刻的状态s。这个s也是一个向量。如果f某个位置为0,则说明forget gate关闭,
从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通道)来卡这个
output gate和上面两个gate的设计思路完全一样:
我们最后隐层的输出就是:
另外对LSTM还有一些变体,比如说GRUs。简单来说,GRUs就是在LSTM的基础上将forget gate和output gate权值的形式做一点调整,大致设计的框架相同。
写在最后:RNN这块卡了两天。还是有很多没弄懂。但愿周末前能把这本书看完吧…
今天晚上好像有雪…(:зゝ∠)
- #DeepLearningBook#算法概览之五:Sequence Modeling
- #DeepLearningBook#算法概览之二
- #DeepLearningBook#算法概览之七:Autoencoders
- #DeepLearningBook#算法概览之八:Representation Learning
- #DeepLearningBook#算法概览之一
- #DeepLearningBook#算法概览之六:Linear Factor Models
- #DeepLearningBook#算法概览之九:Monte Carlo Methods
- #DeepLearningBook#算法概览之十:Deep Generative Models
- Modeling with Sequence Diagram
- Sequence Modeling With CTC
- Sequence Modeling With CTC
- 机器学习概览之常见算法汇总
- Sequence Modeling:Recurrent and Recursive Nets
- 计算几何算法概览——算法篇之其他
- Javaの算法之Fibonacci Sequence
- 数据结构之KMP算法---hdu---Number Sequence
- 贪心算法之 POJ 2313 Sequence
- Java实现算法之Brackets Sequence问题
- 终结者:HTTPS在Tomcat中的使用(一)——生成密钥库文件与配置Tomcat服务器
- Hadoop、Spark等5种大数据框架对比,你的项目该用哪种?
- Android中Application组件的基础用法。
- Hadoop中hdfs的操作:
- leetcode(31).111. Minimum Depth of Binary Tree
- #DeepLearningBook#算法概览之五:Sequence Modeling
- iOS 10 不提示「是否允许应用访问数据」,导致应用无法使用的解决方案
- Java面向对象之封装
- Oracle中查找没有主键的表
- Spring学习历程---Hibernate访问数据库可脱离事务管理器
- [李景山php]每天TP5-20161228|thinkphp5-Console.php-5
- IOS两张图片合成为一张图片
- 在Linux系统下搭建Samba共享服务器的详细步骤
- VR系列——Oculus Audio sdk文档:四、传统Oculus声场定位技术的统一集成指南(3)——安装到Unity