循环神经网络(RNN)是一类擅长处理序列数据的神经网络,其单元连接形成一个有向环。一般人工神经网络(ANN)由多层神经元组成,典型的连接方式是在前馈神经网络中,仅存在层与层之间的互相连接,而同层神经元之间没有连接。RNN在此基础上结合了隐藏层的循环连接,从而能从序列或时序数据中学习特征和长期依赖关系。RNN隐藏层的每一单独计算单元对应了数据中某个时间节点的状态,它可以是简单神经元、神经元层或各式的门控系统。 每一单元通过参数共享的层间顺序连接,并随着数据序列传播。这一特性使得RNN中每一单元的状态都取决于它的过去状态,从而具有类似“记忆”的功能,可以储存并处理长时期的数据信号。 大多数RNN能处理可变长度的序列,理论上也可以建模任何动态系统。
来源:
Wikipedia, https://en.wikipedia.org/wiki/Recurrent_neural_network
Deep Learning,http://www.deeplearningbook.org/contents/mlp.html
Fig 1.循环神经网络,计算图展开形式
Fig 2.循环神经网络各种计算单元
来源: Understanding LSTM Networks, colah's blog, http://colah.github.io/posts/2015-08-Understanding-LSTMs/
发展历史
循环神经网络的研究始于1980年前后,1982年的Hopfield网络运用循环连接的结构模拟人类的联想记忆,是早期比较知名的成果。另一经典成果是1990年的Elman网络(也称Simple Reccurent Network,SRN),运用了反向传播算法(BP)来训练并进行序列预测,对当时的认知科学及语音处理有着深远影响。
1997年Hochreiter和Schmidhuber发明了长短期记忆网络(Long Short-Term Memory, LSTM),其核心贡献是为RNN创造了信号梯度能长时间持续流动的机制。 它通过门控RNN中计算单元的自循环,使得网络中信息累计的时间尺度能动态地改变。LSTM在后来的许多应用中都取得了巨大成果,包括手写识别,语音识别,机器翻译等。同年,双向循环神经网络(Bidirectional RNN)被提出,考虑了在某些序列任务中,预测的输出可能依赖于整个输入序列,从而导致某时刻的状态既有过去(前向)的依赖关系,也有未来(反向)的依赖关系。
2014年前后出现的序列到序列(Sequence to Sequence)模型,特别是基于编码-解码(Encoder - Decoder)的架构,对机器翻译,机器理解等领域产生了重大影响。2015年Bahdanau在机器翻译中引入了将原始序列元素和输出序列元素相关联的注意力机制,进一步使得神经机器翻译(Neural Machine Translation, NMT)得到大幅提高。 知名的谷歌翻译(Google Translate)便基于此,并已实现10多个语种之间的高效翻译。
主要事件
年份 | 事件 | 相关论文 |
1982 | Hopfield网络提出 | Hopfield, J. (1982). "Neural networks and physical systems with emergent collective computational abilities", Proc. NatL Acad. Sci. USA, Vol. 79 (pp. 2554-2558). |
1990 | Elman网络提出 | Elman, Jeffrey L. (1990). "Finding Structure in Time". Cognitive Science. 14 (pp. 179–211). |
1994 | Bengio指出使用梯度下降的网络难以学习长期的依赖关系 | Bengio, Y., Simard, P., & Frasconi, P. (1994). "Learning Long-Term Dependencies with Gradient Descend is Difficult", IEEE Transactions on Neural Networks, Vol. 5, No. 2 (pp. 157-166). |
1997 | Hochreiter和Schmidhuber发明了LSTM | S. Hochreiter; J. Schmidhuber (1997). "Long short-term memory". Neural Computation. 9 (8): 1735–1780. |
1997 | 双向RNN提出 | Schuster, M., & Paliwal, K. (1997)." Bidirectional Recurrent Neural Networks", IEEE Transactions on Signal Processing, Vol. 45, No. 11 (pp. 2673- 2681). |
2009 | Graves将LSTM用于手写识别 | A. Graves and J. Schmidhuber, “Offline handwriting recognition withmultidimensional recurrent neural networks,” in Advances in neuralinformation processing systems, 2009 (pp. 545–552). |
2010 | Mikolov将RNN用于语言模型 | T. Mikolov, M. Karafi´at, L. Burget, J. Cernock `y, and S. Khudanpur, “Recurrent neural network based language model.” in Interspeech,Vol. 2, 2010 (pp. 3). |
2014 | Google研究提出基于序列到序列(seq2seq)的机器翻译模型 | Sutskever, I., Vinyals, O., & Le, Q. (2014). "Sequence to Sequence Learning with Neural Networks", arXiv preprint arXiv:1409.3215v3, 2014. |
2014 | 门控循环单元(GRU)提出 | Cho, K., van Merrienboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., & Bengio, Y. (2014). “Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation”, arXiv preprint arXiv:1406.1078, 2014. |
Chung, J., Gulcehre, C., Cho, K., & Bengio, Y. (2014). "Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling", arXiv preprint arXiv:1412.3555, 2014. | ||
2016 | 提出机器翻译中的注意力机制 | Bahdanau, D., Cho, K., & Bengio, Y. (2016). "Neural Machine Translation by Jointly Learning to Align and Translate", arXiv preprint arXiv:1409.0473, 2016. |
成熟阶段
早期循环神经网络的探索侧重于对序列数据的建模,计算图展开和参数共享的思想使它对于包含时序的数据具备了较优的拟合能力。另一研究重点在于发掘高效的训练/学习方法来缓解由于序列长度带来的梯度爆炸/消失等问题,在这一基础上促成了多种新型循环计算单元(LSTM,GRU等)的诞生,为循环神经网络后来的诸多推广带来了坚实的理论实践基础和动力。
目前循环神经网络作为一类重要的神经网络变种已被广泛用于各种序列数据的处理中, 并已在语言模型,机器翻译, 语音识别, 手写字体识别与生成等领域取得了空前的成就。其连同擅长于处理网格化数据的卷积神经网络一起,并列为现代神经网络设计与应用的基石。
发展分析
瓶颈
尽管通过改善了的训练方法和网络结构,循环神经网络对于短序列的处理已得到了提高,但对于中长序列数据的处理依然很困难,如何有效地在网络中增强信息流,包括对信息进行更紧致的编码和保留梯度传播等,成了循环神经网络目前重要的研究方向。
由于循环神经网络的时序性质,在训练时很难简单地通过GPU进行加速,这成了制约循环神经网络推广和应用的一大瓶颈。如何通过网络设计或硬件支持来为循环神经网络训练提速也成了它重要的发展方向之一。
未来发展方向
针对如何更好地处理多种序列数据(长度,复杂度),循环神经网络有诸多可能的发展方向
- 新型网络结构,诸如通过堆叠网络层,单元连接,网络通路等提高信息萃取效率
- 新型循环计算单元,存储更丰富的时序信息并改进梯度流
- 外显记忆,注意力机制等促进信息提取及梯度传递
针对如何更高效地训练循环神经网络,目前有诸如改良网络设计及提高硬件支持等努力。
Contributor: Justin Yuan