TF212——LSTM实现预测
TF212——LSTM实现预测
RNN当连续数据的序列变长时,会使展开时间步长过长,在反向传播更新参数时,梯度要按时间步连续相乘,会导致梯度消失,所以在1997年,Hochreitere等人提出了长短记忆网络LSTM
LSTM计算过程

输入门 (门限) : \(i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right)\)
遗忘门 (门限) : \(f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)\)
输出门 (门限) : \(o_{t}=\sigma\left(W_{o} \cdot\left[h_{t-1}, x_{t}\right]+b_{o}\right)\)
细胞态 (长期记忆) : \(C_{t}=f_{t} * C_{t-1}+i_{t} * \widetilde{C}_{t}\)
记忆体(短期记忆): \(h_{t}=o_{t} * \tanh \left(C_{t}\right)\)
候选态 (归纳出的新知识) : \(\widetilde{C}_{t}=\tanh \left(W_{c} \cdot\left[h_{t-1}, \quad x_{t}\right]+b_{c}\right)\)
三个门限
它们三个都是当前时刻的输入特征xt,和上一个时刻的短期记忆ht-1的函数,这三个公式中Wi,Wf和Wo是带训练参数矩阵,bi,bf和bo是待训练偏置项,它们都经过sigmoid激活函数,使门限的范围在0-1之间
细胞态表示长期记忆:细胞态等于上个时刻的长期记忆乘以遗忘门,加上当前时刻归纳出的新知识乘以输入门
记忆体表示短期记忆:属于长期记忆的一部分,是细胞态过tanh激活函数乘以输出门的结果
候选态表示归纳出的带存入细胞态的新知识:是当前时刻的输入特征xt和上个时刻的短期记忆ht-1的函数,Wc是带训练参数矩阵,bc是待训练偏置项
LSTM理解
LSTM就是你看我博客的过程,你现在脑子里记住的内容是TF01到TF212的长期记忆Ct,这个长期记忆有两部分组成,一部分是TF01-TF211的内容,也就是上一时刻的长期记忆Ct-1,你不可能一字不差的记住全部内容,你会不自觉地忘掉一些(ft)所以上个时刻的长期记忆Ct-1要乘以遗忘门,这个乘积项,表示留存在你脑子里的对过去的记忆
TF212的内容是新知识,是即将存入你脑子里的现在的记忆

现在的记忆有两部分组成,
一部分是我正在传授的本节内容,是当前时刻的输入xt,还有一部分是第TF211内容的短期记忆留存,这是上一时刻的短期记忆ht-1,你的脑子把当前时刻的输入xt和上一时刻的短期记忆ht-1,归纳形成即将存入你脑子的现在记忆Ct波浪号

现在的记忆乘以输入门与过去的记忆一同存储为长期记忆
当你把这一节内容复述给你的朋友时,你不可能一字不落的讲出来,你讲的是留存在你脑中的长期记忆,经过输出门筛选后的内容,这就是记忆体的输出ht
当有多层循环网络时,第二层循环网络的输入xt就是第一层循环网络的输出ht,输入第二层网络的时第一层网络提取出的精华,你可以认为笔者现在扮演的就是第一层循环网络,每一节内容都是我听课总结出的精华输出给你,作为第二层循环网络的你,接收到的数据,是我的长期记忆过tanh激活函数乘以输出们提取出的短期记忆ht,这就是LSTM的计算过程
TF描述LSTM层
tf.keras.layers.LSTM(记忆体个数,return_sequences=是否返回输出)
return_sequences=True 各时间步输出ht
return sequences=False 仅最后时间步输出ht(默认)
例:
model =tf.keras.Sequential([
LSTM(80,return sequences=True),
Dropout (0.2),
LSTM (100),
Dropout (0.2),
Dense(1)
]