TensorFlow中LSTM神经网络详解
- 一、LSTM神经元
-
- [1.1 神经网络引入](#1.1 神经网络引入)
- [1.2 RNN神经元结构](#1.2 RNN神经元结构)
- [1.3 LSTM神经元](#1.3 LSTM神经元)
-
- [1.3.1 LSTM模型框架](#1.3.1 LSTM模型框架)
- [1.3.2 隐藏态](#1.3.2 隐藏态)
- [1.3.3 遗忘门](#1.3.3 遗忘门)
- [1.3.4 记忆门](#1.3.4 记忆门)
- [1.3.5 输出门](#1.3.5 输出门)
- 二、LSTM神经网络
-
- [2.1 LSTM网络架构](#2.1 LSTM网络架构)
时间序列预测分析可以实现对未来数据的预测分析,通过分析过去时序数据,形成长短时序记忆,从而实现对未来数据的预测。
一、LSTM神经元
1.1 神经网络引入
随着神经网络的出现,各种应用都用到了神经网络,但是传统的神经网络中的神经元并不具备记忆功能,于是能够有记忆功能的神经网络就产生了。
1.2 RNN神经元结构
RNN神经网络虽然可以让神经元具有"记忆"能力,但是从上面的图也可以看出RNN的神经元仅仅对距离自己较近的神经元的记忆能力比较好,但是对于距离自己较远的神经元产生的影响可能会有一定程度的忽略。
1.3 LSTM神经元
1.3.1 LSTM模型框架
为了克服RNN 神经网络对于长时间记忆的问题,LSTM出现了,下面的图展示了LSTM的框架,通过一个一个基本单元连接实现对前面神经元传入数据的选择以及输出当前神经元的数据到下一级神经元。
1.3.2 隐藏态
这是LSTM中最关键的主线部分,决定了LSTM最终的输出。
1.3.3 遗忘门
在遗忘门,LSTM会先根据新的输入和上一时刻的输出决定遗忘掉之前的哪些记忆------输入和上一步的输出会整合为一个单独的向量,然后通过sigmoid神经层,最后点对点的乘在单元状态上,这个部分实现了记忆传递的功能。
1.3.4 记忆门
记忆门用来控制是否将当前时刻的数据并入单元状态中的控制单位。先用tanh函数层将现在的向量中的有效信息提取出来,然后用的sigmoid函数来控制这些记忆要放"多少"进入单元状态。
1.3.5 输出门
计算当前时刻的输出值的神经层。输出层会先将当前输入值与上一时刻输出值整合后的向量,用sigmoid函数提取其中的信息,接着,会将当前的单元状态通过tanh函数压缩映射到区间(-1, 1)中。
值得注意的一点是使用tanh函数的原因:
- 为了防止梯度消失问题,我们需要一个二次导数在大范围内不为0的函数,而tanh函数可以满足这一点
- 为了便于凸优化,我们需要一个单调函数
- tanh函数一般收敛的更快
- tanh函数的求导占用系统的资源更少
二、LSTM神经网络
仅仅了解LSTM神经元并不足以支撑完成庞大的LSTM神经网络架构的构建,因此学习如何将LSTM与其他神经元结构相结合很有必要。
2.1 LSTM网络架构
把这幅图跟前面讲的LSTM单个神经元放在一起比较很快就能发现这个网络设计的巧妙之处,纵向是网络架构,也就是在各种Python库中LSTM封装的调用里面定义的网络架构,比如下面我写的这个两层的LSTM层:
这里我们就可以理解为什么之前LSTM神经元需要有两个输出了,因为不仅仅需要当前神经元跟同一层的神经元进行时序上面的交互实现数据记忆,并在记忆的基础上实现预测;还有一个很重要的就是将当前LSTM层的输出数据传到下一层LSTM或者Dense层,用来最终输出预测结果。
另外值得一提的是Dense层:在LSTM网络中Dense层可以有两个常见的作用:
- 帮助理解特征。
- 将模型中的数据维度转化成输出数据需要的维度。