首先,介绍一下lstm神经网络:
长短期记忆(英语:Long Short-Term Memory,LSTM)是一种时间递归神经网络(RNN)[1],论文首次发表于1997年。由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。
LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好,比如用在不分段连续手写识别上[2]。2009年,用LSTM构建的人工神经网络模型赢得过ICDAR手写识别比赛冠军。LSTM还普遍用于自主语音识别,2013年運用TIMIT自然演講資料庫達成17.7%錯誤率的紀錄。作为非线性模型,LSTM可作为复杂的非线性单元用于构造更大型深度神经网络。
根据前一周的学习,首先设计训练参数:
learning_rate:学习的速度,根据Hinton 的BP算法中的梯度下降法则,数值越小,越能找出趋近于最合适的参数值。
training_iters:训练迭代的次数,次数的选择需要一点一点地查看,过多会导致过拟合,过少很引起欠拟合。
batch_size:使用批梯度下降,再次,注意一下,批梯度下降与随机梯度下降的区别:
批量梯度下降的求解思路如下:
(1)将J(theta)对theta求偏导,得到每个theta对应的的梯度
(2)由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta
(3)从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么可想而知这种方法的迭代速度!!所以,这就引入了另外一种方法,随机梯度下降。
随机梯度下降的求解思路如下:
(1)上面的风险函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度,而上面批量梯度下降对应的是所有的训练样本:
(2)每个样本的损失函数,对theta求偏导得到对应梯度,来更新theta
(3)随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
lr =0.001 # learning rate
training_iters =10000 # train step 上限
batch_size =64
inputs:一次性输入的量
steps:输入完一整个数据的次数,因为词向量的长度为300,所以均为300的公因数
hidden_units:lstm内部的神经元的个数
n_inputs = 50 # input of each neuronn_steps = 6 # time stepsn_hidden_units = 512 # neurons in hidden layern_classes = 3 # result(bad, not good, good)