A Survey on Recurrent Neural Network
参考资料
A Critical Review of Recurrent Neural Networks for Sequence Learning (2015年的一篇综述性文章)
Long Short-Term Memory in RNN (Felix Alexander Gers大牛的博士论文)
Supervised sequence labelling with recurrent neural network (Alex Graves大牛的springer出版物)
Deep Learning(Yoshua Bengio大神的基础教程)
目录
一、简述
二、RNN基础算法
三、LSTM以及LSTM的变种
一、简述
循环神经网络(Recurrent neural networks,简称RNN)是一种通过隐藏层节点周期性的连接,来捕捉序列化数据中动态信息的神经网络,可以对序列化的数据进行分类。和其他前向神经网络不同,RNN可以保存一种上下文的状态,甚至能够在任意长的上下文窗口中存储、学习、表达相关信息,而且不再局限于传统神经网络在空间上的边界,可以在时间序列上有延拓,直观上讲,就是本时间的隐藏层和下一时刻的隐藏层之间的节点间有边。RNN广泛应用在和序列有关的场景,如如一帧帧图像组成的视频,一个个片段组成的音频,和一个个词汇组成的句子。尽管RNN有一些传统的缺点,如难以训练,参数较多,但近些年来关于网络结构、优化手段和并行计算的深入研究使得大规模学习算法成为可能,尤其是LSTM与BRNN算法的成熟,使得图像标注、手写识别、机器翻译等应用取得了突破性进展。
最简单的RNN(fold状态和unfold状态)
注意:输入层、隐藏层、输出层的比例不一定是1:1:1,(fold状态和unfold状态)
1. WHY——关于序列化(sequentiality)的几个问题
1.为什么需要进行显式表达序列模型?
传统的机器学习方法,如SVM、logistics回归和前向神经网络都没有将时间进行显式模型化,用这些方法建模而得出的好的实验结果都是基于独立性假设的前提。还有一些模型将本节点和时间上的前驱节点与后继节点相连接,通过上下文的滑动窗口来将时间隐式模型化,例如深度置信网络DBN。尽管独立性假设非常有用,但是这些模型排除了长时依赖(long-range dependencies)的实际情况。比如用时间窗口大小为5进行训练的模型无法回答需要6个时间输入的问题。人机对话系统、现代交互系统都需要将序列化模型或时间模型显式表达,否则任何分类器或回归器都是无法组合起来解决这种问题的。
2.为什么不用Markov模型?
RNN并非唯一一个将时间依赖显式表达的模型,Markov链也包含时间信息(或说是观测序列),但它有一定局限性。首先,离散状态空间必须是有限尺寸,而不是无限,因为动态规划算法在运算复杂度上是状态空间尺寸的平方;其次,转移表的大小(两个任意时间点的状态转移轨迹概率)也是状态空间尺寸的平方,如果隐藏状态数量较大,运算复杂度呈平方数增长;最后,隐藏状态仅依赖此刻的上一个状态,而不是多个前次的状态,即便可以设定窗口来与多个先前状态建立关系,但状态空间的增长随窗口的大小成指数性增长,使得长时依赖(long-range dependencies)的建模计算变得不切实际。
相比之下全连接的ANN模型没有上述问题