在tensorflow深度学习之描述循环计算层与循环计算过程(超详细)中,我们已经学习到了传统循环网络RNN的原理。
传统循环网络RNN的缺点
传统循环网络RNN通过记忆体实现短期记忆进行连续数据的预测,但是当连续数据的序列变长时,会使得展开时间步过长。在反向传播更新参数时,梯度要按时间步连续相乘,会导致梯度消失。
长短期记忆网络LSTM
长短期记忆网络中引入了三个门限,即输入门it,遗忘门ft,输出们ot。
引入了表征长期记忆的细胞态Ct,引入了等待存入长期记忆的候选态Ct波浪号。
他们分别的作用是:
- 三个门限都是当前输入时刻的输入特征xt和上个时刻的短期记忆网络h(t-1)的函数。三个公式中,Wi,Wf和Wo是待训练参数矩阵,bi、bf和bo是待训练偏置项,他们都经过sigmoid激活函数使门限的范围在0到1之间。
- 细胞态表示长期记忆,细胞态等于遗忘门X上个时刻的长期记忆,加上输入门X当前时刻归纳出的新知识。
- 记忆体表示短期记忆,属于长期记忆的一部分,是细胞态过tanh激活函数乘以输出门的结果。
- 候选态表示归纳出的待存入细胞态的新知识,是当前时刻的输入特征xt和上个时刻的短期记忆h(t-1)的函数,Wc是待训练参数矩阵,bc是待训练偏置项。
LSTM的tensorflow实现
tf.keras.layers.LSTM(记忆体的个数,return_sequence=是否有返回输出)
return_sequences=Ture 个时间不输出ht
return_sequences=False 仅最后时间步输出ht(默认)
eg:model = tf.keras.Sequential([
LSTM(80, return_sequences=Ture),
Dropout(0.2),
LSTM(100),
Dense(1)
])