http://blog.youkuaiyun.com/peaceinmind/article/details/50848128
导语
LSTM[1]作为RNN的经典模型,已经应用在了很多领域,如语音识别[2],OCR[3,4,16],图像描述[5],手写字识别[6],翻译[7],自然语言处理等等。
在线手写字识别[11]
图像内容描述[5]
1为什么需要LSTM
1.1时序问题
如果接到一个时序问题时,比如语音识别,我首先会想着先切割,然后每一段每一段地去识别,但是由于语音是有上下文关系的,比如中文发一个平声的"zhong",那么有可能是中文或者钟表的"zhong",因此需要上下文关系。然后我又有些了解普通的前馈神经网络,这样我就会设计出下图中的网络,把时序的输入全部输入到全连接前馈网络中
这是一个很自然的选择。但是个人认为这里面至少存在三个问题,第一个就是很难确定这个时序的窗口,是用t-5->t+5还是t-10->t+0,时序依赖的间隔很难确定;第二个不管这个窗口设的多大,它也只能对这些固定长度的信息进行建模,而很难对整个历史信息建模(因为目前的机器学习算法需要特征维度固定);第三个就是这里面有很多冗余的信息在里面,因为对每一个发音的识别的网络应该是比较类似的(按照CNN的理解,我们也可以把隐藏层认为是特征提取,直觉上对一个发音的识别的特征提取应该是相同的),因此在上图中xt-1到h1,h2和xt到h1,h2的权重应该类似,但是按照上图设计的话权重的维度就很大,复杂度就增加了很多。不要小看这个复杂度,CNN的卷积层不就是在全连接的基础上做了很强的人为限制么?
1.2递归神经网络
这样理解之后呢就很自然理解普通的递归神经网络RNN的出现,如下图
跟最开始的版本相比,输入到隐藏层的权重、隐藏层到输出层的权重在每个时间点上保持不变,而隐藏层比以前多了一个输入,也就是说除了接收输入层x外,还接收相应的上一个时刻隐藏层的输出ht-1(跟隐藏层到输出层yt-1的东西不一样),靠这个解决上下文的问题
1.3 RNN难以训练
但是在实际中,RNN比较难训练,这个小节主要参考[9,10,11].大家都知道为了增加模型的复杂度,神经网络里面会引入非线性的激活函数,所以前馈的时候是非线性,但是请注意反馈的时候是线性的,如果你把误差放大两倍,那么所有反馈的误差也会放大两倍,同理缩小也一样。
另外反馈的误差还跟权重有关系,这里利用UFLDL里面的公式[12]
W是权重,delta是误差,f代表激活函数,l代表隐藏层,输入层是最低层,可以看到底层的反馈误差是上一层的误差乘以权重,如果权重过小,那么越往底层传递反馈的误差就越来越小,那么你用这个误差去调整网络权值基本也就没什么用。梯度爆炸也类似。但是误差也是权重算出来的,因此控制网络权重非常重要,例如需要很小心的初始化权值,图像中用CNN做转移学习时,一般都用ImageNet的训练结果作为初始化,有些也用RBMs的训练结果初始化。
文献[10]部分工作是从工程角度去分析激活函数,从上面的公式上看,激活函数的导数会影响反馈误差
比如sigmoid激活函数的值处在左边和右边的饱和区,但是因为在那些区域的导数是非常小的(曲线比较平),因此也不利于误差传播。
上图是文献[10]中前馈网络采用sigmod激活函数后各个层节点激活值的均值和标准差示意图,可以看到第4层前期长期处于饱和区,虽然后面又很神奇地跳了一点出来。顶层反馈误差很小,那底层的基本就更小了。
由于这些原因,研究者就提出了本文要讲的LSTM.
2 LSTM基本概念
LSTM的发明是为了解决梯度消失的问题从而解决时序问题中上下文长依赖的问题。比如预测单词任务中需要根据前面的单词去预测下一个输出的单词。"我的家在东北,松花江上……..,我能说一口流利的(东北话)",东北和东北话是有依赖关系的,但是中间呢隔了很多其他的单词,按照普通的RNN,这两者间有很多的层,因此依赖关系需要经过多次链式法则求偏导,所以存在梯度消失的问题,导致最后很难训练到位。
LSTM有很多变形,这里我们参考文献[13]里介绍一种常用模型,其中主要概念有Input Gate控制输入,output Gate控制输出,cell核心记忆模块,forget gate控制cell遗忘程度,peephole等,示例图如下(主要参考[8,14])
上图初看比较复杂,不要紧我们一步一步分析,我们看图中的基本符号
前两个是激活函数,分别是sigmoid和tanh,后面一个代表两个输入相乘,带箭头的连线代表有权重的连接。
2.1 Cell
Cell是核心记忆模块,可以看出cell是一个递归的节点,它跟它自己的上一个状态有关,它可以记住或者遗忘自己的上一个状态,forget gate的输出ft(0~1.0)来控制这个遗忘程度的,有点像梯度下降法中的冲量。另外它也能接收或者不接收当前的输入,接收程度由input gate控制。
W是权重,b是bias.
另外cell的结果会输出到隐藏节点ht,但是输出的程度由output gate控制
2.2 Forget Gate
还是以预测下一个单词为例子。如果当前的输入是个句号,直觉上那么句号之后跟句号之前的上下文依赖性较低,这个时候我们可以适当忘记之前的一些东西,比如说忘记8成,好让后面更好地学习。
2.3 Input Gate
Input Gate是用来控制当前的输入有多少能到cell.一个极端的例子能说明为什么LSTM能对时间跨度长的依赖关系建模和input gate的作用。在预测下一个单词的问题中那么LSTM可以通过输入门关闭输入阀(it值为0),不让那些单词影响Cell的值,从而“东北”和“东北话”的关系用一次偏导就可以描述,而没有什么中间状态,不需要偏导的偏导的偏导,从而解决梯度消失的问题。数学公式如下
2.4 Output Gate
Output Gate是控制当前的cell有多少能输出到隐藏节点
2.5全局网络
上图中描述了带有两个LSTM块的网络,请注意有些连接没有画出来
2.6 Peephole
Peephole[15]的东西其实已经包含在上面了,但是为了能清楚这个概念,还是再提一下
上面三根链接,就是peephole。有了这三个链接cell的状态就可以去影响input gate,output gate和forget gate的值。
LSTM的训练就套用BP就可以了,这里不再继续讨论。
这个小节就讲到这里,后面会继续讨论CTC和MD-LSTM.个人水平有限,错误与疏漏请批评指正.
3 LSTM的入门阅读材料
1 Speech Recognition with Neural Networks. http://andrew.gibiansky.com/blog/machine-learning/speech-recognition-neural-networks/
2 Understanding LSTM network http://colah.github.io/posts/2015-08-Understanding-LSTMs/
3 The UnreasonableEffectiveness of Recurrent Neural Networks.http://karpathy.github.io/2015/05/21/rnn-effectiveness/
4统计学习方法第九章EM和第十章HMM
5 [Optional] Learningprecise timing with LSTM recurrent networks。Appendix A. Peephole LSTM with Forget Gates inPseudo-code
6 [Optional]paper of CTC:Connectionist temporal classification: labelling unsegmented sequence data withrecurrent neural networks
7 From Recurrent Neural Networkto Long Short Term Memory Architecture
8 Supervised Sequence Labellingwith Recurrent Neural Networks
4参考文献
[1]Greff, Klaus, et al."LSTM: A Search Space Odyssey." arXiv preprintarXiv:1503.04069 (2015).
[2]A. Graves and N. Jaitly.Towards end-to-end speech recognition with recurrent neural networks. In ICML,2014. 2,
[3]Messina R, Louradour J.Segmentation-free handwritten Chinese text recognition withLSTM-RNN[C]//Document Analysis and Recognition (ICDAR), 2015 13th InternationalConference on. IEEE, 2015: 171-175.
[4]Ul-Hasan, Adnan, and ThomasM. Breuel. "Can we build language-independent OCR using LSTMnetworks?." Proceedings of the 4th International Workshop onMultilingual OCR. ACM, 2013.
[5]Donahue J, Hendricks L A,Guadarrama S, et al. Long-term recurrent convolutional networks for visualrecognition and description[J]. arXiv preprint arXiv:1411.4389, 2014.
[6]Doetsch, Patrick, MichalKozielski, and Hermann Ney. "Fast and robust training of recurrent neuralnetworks for offline handwriting recognition."Frontiers in HandwritingRecognition (ICFHR), 2014 14th International Conference on. IEEE, 2014.
[7]Luong, Minh-Thang, et al."Addressing the rare word problem in neural machinetranslation." Proceedings of ACL. 2015.
[8]Understanding LSTM network http://colah.github.io/posts/2015-08-Understanding-LSTMs/
[9]Pascanu, Razvan, TomasMikolov, and Yoshua Bengio. "On the difficulty of training recurrentneural networks." arXiv preprint arXiv:1211.5063 (2012).
[10]Glorot, Xavier, and YoshuaBengio. "Understanding the difficulty of training deep feed forward neuralnetworks." International conference on artificial intelligence andstatistics. 2010.
[11]Geoffery Hinton, NeuralNetworks for Machine Learning.https://class.coursera.org/neuralnets-2012-001/lecture/95
[12]http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm
[13]]Graves A. Supervisedsequence labelling with recurrent neural networks[M]. Heidelberg: Springer,2012.
[14]Speech recognition neuralnetworks http://andrew.gibiansky.com/blog/machine-learning/speech-recognition-neural-networks/
[15]Gers, Felix A., and JürgenSchmidhuber. "Recurrent nets that time and count." Neural Networks,2000. IJCNN 2000, Proceedings of the IEEE-INNS-ENNS International JointConference on. Vol. 3. IEEE, 2000.
[16]He, Pan, et al. "Reading scene text in deep convolutional sequences."arXiv preprint arXiv:1506.04395 (2015).