英文原文请参考http://www.deeplearning.net/tutorial/lstm.html
LSTM 网络用于情感分析
本指南旨在提供一个使用长短记忆网络(LSTM)架构的RNN如何使用Theano实现的例子。本文中的模型用来对电影评论做语义分析,数据来自 Large Movie Review Dataset, 熟称为IMDB数据集。
一旦模型训练好,你可以使用自己的语料库测试它,利用word-index词典 (imdb.dict.pkl.gz) ,数据预处理脚本 (preprocessing script) 。
模型
LSTM
在传统的循环神经网络(RNN)中,在梯度反向传播阶段,梯度信号被weight matrix(循环隐藏层连接权重)乘了很多次(与timesteps一样多)。这意味着,在转移矩阵中权重的维度对学习过程有很大的影响。
如果矩阵中权重太小(或者说,权重矩阵的主特征值小于1.0),可能导致vanishing gradients的情况,就是说梯度信号变得太小以致于学习太慢或者停止运行。也可能使得学习数据中的长短依赖任务变得更加困难。相反地,如果权重太大(或者说,主特征值大于1.0),可能导致学习分散(cause learning to diverge),通常叫做exploding gradients.
这些问题是提出LSTM的主要动机,它引进了一个新的结构叫做记忆单元(memory cell)如下图所示。一个记忆单元由四部分组成:输入门,自我连接的神经元,忘记门和一个输出门。自我连接有一个权重为1,保证不受任何外界干扰,记忆单元的状态从一个时间步到另一个可以保持不变。门用来建立记忆单元本身和环境的交互。输入门可以允许到来的信号去改变记忆单元的状态或阻止它。另一方面,输出门可以允许记忆单元的状态去影响其他神经元或阻止它。最后,忘记门建立记忆单元的自我连接,允许单元根据需要记住或忘记它之前的状态。
下面这些公式描述了一层记忆单元在每个时间步t是如何更新的,其中:
是t时间的输入
首先,我们计算输入门的值it,和时间t 时记忆单元状态的候选值
其次,我们计算忘记门在时间t时的激活(activation) ft
给定输入门激活和忘记门激活
以及候选状态值
,我们可以计算记忆单元在时间t 的新状态
给定新的状态,我们可以计算输出门的值:
我们的模型
这里我们使用的模型是标准LSTM模型的变体,在这个变体中,单元的输出门的激活不依赖于记忆单元的状态。这使得执行部分计算时更高效。这意味着,在我们实现的变体里,没有(5)中的Vo,被公式(7)代替:
我们的模型由一个LSTM层,跟着一个平均池化和逻辑回归层组成,如下图所示。这样,从输入序列,LSTM层的记忆单元将产生一个表示序列,然后在所有时间步上平均表示序列。最后,这个表示输入到逻辑回归层,目标是得到输入序列的相关联的类标签。