RNN,LSTM深度学习模型原理与应用

序列标注任务

机器学习任务主要包含两大类。第一种属于模式识别范畴,认为所有的样本之间相互独立,可以直接将每个样本的特征输入机器学习模型进行训练,如逻辑回归,SVM,随机森林,稀疏自编码等模型;另一种属于序列任务,需要考虑样本之间的某种关联,如预测天气状况,很明显,今天的天气(一个样本)和昨天的天气(另一个样本)有关,这样的任务如果仅仅使用模式识别,将忽略样本之间的联系,达不到理想的效果,一般这种问题的解决办法是使用固定窗口,即将某一个连续的范围内的所有样例共同训练,从而提高准确率,另一种办法是使用带有时序的模型,如HMM,RNN,LSTM等。

序列标注任务包含三类:第一种叫 Sequence labeling, 即一个序列只有一个label;另一种叫Segment labeling,和Sequence labeling不同的是一个序列可以有多个label,并且知道哪些地方需要进行标注,如天气预报,每一天都需要一个标注;最后一种是Temporal labeling, 可以有任意个标注并且不知道具体标注的位置。Temporal labeling 任务相对比较复杂,一种好的办法是将HMM与LSTM模型进行组合,此部分内容超出本文所讲述的范围。


  1. 传统神经网络模型


前向传播:

直接将数据特征输入模型,通过每一层之间的边进行前向传播(矩阵乘法),每一层的节点使用激活函数(sigmoid,tanh)对其进行非线性变换,最终预测结果。

反向传播:

  1. 更新边权重

  2. 反向传播误差

图中sigma是节点输入误差,eps 是节点的输出误差,它们满足:sigma=eps*f’(x).

反向传播同正向传播一样,只不过正向传播的是激活值,反向传播的是误差项,并且激活函数变为原激活函数的导数。计算每一个节点的输出误差只需查看该节点的所有出边,将每条出边所带来的误差进行累和即可。请牢记这句话,所有的神经网络模型均可以通过此方法进行计算,并且相对简单。

  1. RNN模型的原理

将神经网络模型加入时序的特征。将隐藏层加反馈边,每个隐层的输入既包括当前样本特征又包含上一个时序所带来的信息。以下为两个输入节点,一个隐层(包含两个节点),一个输出节点的RNN模型结构。

上图仅画出两个时刻之间的关系,其中红边表示反馈边。第二个时刻隐层输入既包含输入层的数据又包含上一时刻隐层的数据,其中红边是另一个矩阵,用于传播隐层相邻时刻之间的信息。

反向传播时,需要从T时刻开始计算,直到计算到初始时刻,每个隐层的节点输出误差按照所有出边进行累加即可。所以第一时刻隐藏层的误差除了输出误差(黑边)之外还包括第二时刻隐层本身反馈的误差(红边),将之进行累加即可。

  1. LSTM模型(long short term memory)

当某些特定的任务只有相近的几个时刻具有特殊关系时,使用RNN模型表现非常好,但是当较远的两个时刻也有关系时,RNN无法表达。即通过隐层反馈的方法当时间越久对后面的影响越薄弱,下图是RNN第一时刻的输入对后面各个时刻的影响,颜色越深表示影响越大。

为了解决上述问题,LSTM模型应运而生。LSTM是RNN的一种特殊形式,同样考虑时序关系,并且具有与RNN一样的反馈边,只不过LSTM每个隐层节点还加一些特殊的结构。下图是LSTM的一个隐层节点,在LSTM中改名为内存块(memory block)。

1LSTM 结构:

从图中可以看出,一个memory block 包含3个控制门和一个记忆节点(memory cell)。Memory cell 是一种存储器,他可以保留长远的历史信息。事实上,一个memory block可以包含多个memory cell,并且所有的memory cell 共享三个控制门。 三个门用来阻塞或放行对应管理的信息,它的取值范围为[0,1], 将其乘到对应的信息值上,0表示阻塞,1表示放行。

输入控制门(input gate)用于控制当前时刻的输入信息是否对该节点有影响,因为某些特定情况下,一些隐层节点需要利用的是历史信息而非当前时刻信息,另一些隐层节点可能利用当前信息,在它们共同的协助下进行标注。

输出控制门(output gate)用于控制此节点的输出在当前时刻是否起作用,因为某些特定的情况下,该节点所记录的信息不是所求任务的有效或主要特征,因此对其进行衰减,使得其它节点的输出信息起到更主要的作用。

忘记控制门(forget gate)用于适当的忘记该节点记录的历史信息。随着时间的不断推进,一些没有用的历史信息永久的忘记。初始的LSTM网络并没有控制门,但是这样的网络具有一些致命的问题。Memory cell记录的信息特别大,导致该节点的输出一直由历史信息所决定,这将导致整个网络无法进行再训练,因此引入忘记门,动态的删除前面无用的信息。

2LSTM流程:

输入信息进入memory block后,首先进行激活函数处理,然后乘以输入门,再将历史信息与当前信息相加,再进行激活函数处理,再乘以输出门,最后输出。

处理过程中需要同时更新memory cell, 更新方法为:新的cell值等于当前值与历史值乘以忘记门的和。

3)数据源:

数据源主要包括三部分:当前时刻输入特征,RNN反馈特征,memory cell值。其中memory block输入数据不包含memory cell值,其它与输入控制门,忘记门控制门相同。而输出控制门不是使用RNN反馈特征而是所有隐层当前时刻的输出特征,用于控制是否对其进行输出。总体流程图如下:

包含两个隐层节点的情况,第一个隐层节点边已经全部画出,第二个节点未完全画出。公式如下:


其中 a 表示输入值,b表示激活后的值,I表示所有输入节点,H表示所有隐层节点,C表示某个memory block 中所有的memory cell。 W为边权。S为cell值。t表示时刻。反向传播需要进行详细推倒,主要依据依然是某个节点的输出边来进行误差累加,详情参考文献中的论文。

  1. 相关文献

Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780.


Gers, F. A., Schmidhuber, J., & Cummins, F. (2000). Learning to forget: Continual prediction with LSTM. Neural computation, 12(10), 2451-2471.


Graves, Alex. Supervised sequence labelling with recurrent neural networks. Vol. 385. Springer, 2012.


Hochreiter, S., Bengio, Y., Frasconi, P., & Schmidhuber, J. (2001). Gradient flow in recurrent nets: the difficulty of learning long-term dependencies.


Bengio, Y., Simard, P., & Frasconi, P. (1994). Learning long-term dependencies with gradient descent is difficult. Neural Networks, IEEE Transactions on, 5(2), 157-166.


Maas, A. L., Daly, R. E., Pham, P. T., Huang, D., Ng, A. Y., & Potts, C. (2011, June). Learning word vectors for sentiment analysis. In Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies-Volume 1 (pp. 142-150). Association for Computational Linguistics

发布于 2016-10-25 09:05