前言
描述LSTM就要先描述一下循环神经网络
循环神经网络
循环神经网络通过使用带自反馈的神经元,使得网络的输出不仅和当前的输入有关,还和上一时刻的输出相关,于是在处理任意长度的时序数据时,就具有短期记忆能力。
如下是一个按时间展开的循环神经网络图:
梯度消失和梯度爆炸是困扰RNN模型训练的关键原因之一,产生梯度消失和梯度爆炸是由于RNN的权值矩阵循环相乘导致的,相同函数的多次组合会导致极端的非线性行为。梯度消失和梯度爆炸主要存在RNN中,因为RNN中每个时间片使用相同的权值矩阵。
LSTM
- LSTM的全称是Long Short Term Memory,顾名思义,它具有记忆长短期信息的能力的神经网络。
- LSTM 神经网络是一种循环神经网络 (RNN),可以学习序列数据的时间步之间的长期依存关系。
- LSTM 神经网络的核心组件是序列输入层和 LSTM 层。
- 序列输入层将序列或时间序列数据输入神经网络中。
- LSTM 层学习序列数据的时间步之间的长期相关性
公式推导
LSTM之所以能够解决RNN的长期依赖问题,是因为LSTM引入了门(gate)机制用于控制特征的流通和损失。LSTM是由一系列LSTM单元(LSTM Unit)组成,其链式结构如图。
我们假设h为LSTM单元的隐藏层输出,c为LSTM内存单元的值,x为输入数据。LSTM单元的更新与前向传播一样,可以分为以下几个步骤。
1、计算遗忘门的值*𝑓**(𝑡)*f_((t))。遗忘门主要用来控制历史信息对当前记忆单元状态值的影响,为记忆单元提供了重置的方式。
2、计算当前时刻的输入结点*𝑔**(𝑡)g_((t)),𝑊(𝑥𝑔)W_((xg)),𝑊(h𝑔)W_((hg)),𝑊(𝑐𝑔)*W_((cg))分别是输入数据和上一时刻LSTM 单元输出的权值:
3、计算输入门 (input gate) 的值*𝑖**(𝑡)i_((t))。输入门用来控制当前输入数据对记忆单元状态值的影响。所有门的计算受当前输入数据𝑥**(𝑡)x_((t))和上一时刻LSTM单元输出值h**(𝑡−1)*h_((t-1))影响。
4、计算当前时刻记忆单元的状态值*𝑐**(𝑡)c_((t))。记忆单元是整个LSTM神经元的核心结点。记忆单元的状态更新主要由自身状态𝑐**(𝑡−1)c_((t-1))和当前时刻的输入结点的值𝑔**(𝑡)*g_((t)),并且利用乘法门通过输入门和遗忘门分别对这两部分因素进行调节。乘法门的目的是使 LSTM存储单元存储和访问时间较长的信息,从而减轻消失的梯度。
5、计算输出门*𝑜**(𝑡)*o_((t))。输出门用来控制记忆单元状态值的输出。
6、最后计算LSTM单元的输出。
LSTM层的作用
LSTM层:长短时记忆网络层,它的主要作用是对输入序列进行处理,对序列中的每个元素进行编码并保存它们的状态,以便后续的处理。
LSTM 是一种特殊的 RNN,它通过引入门控机制来解决传统 RNN 的长期依赖问题。
我们假设:h为LSTM单元的隐藏层输出,c为LSTM内存单元的值,x为输入数据。
LSTM 的结构包含以下几个关键组件:
- 1、输入门(input gate):决定当前时间步的输入信息对细胞状态的影响程度。
2 、遗忘门(forgetgate):决定上一个时间步的细胞状态对当前时间步的影响程度。
3 、细胞状态(cell state):用于在不同时间步之间传递和存储信息。
4 、输出门(output gate):决定细胞状态对当前时间步的输出影响程度。
5 、隐藏状态(hiddenstate):当前时间步的输出,也是下一个时间步的输入。
LSTM的训练过程
1、数据准备:(LSTM对于数据标准化要求很高)将时序序列数据切分为输入序列和目标序列。输入序列是用于模型输入的历史数据,目标序列是要预测的未来数据。
2、初始化模型参数:初始化LSTM模型的权重参数,包括输入门、遗忘门、输出门等。
3、前向传播:将输入序列通过LSTM模型进行前向传播。在每个时间步,LSTM模型将接收当前时间步的输入和上一时间步的隐藏状态,然后计算当前时间步的输出和新的隐藏状态,将其传递到下一个时间步。
4、计算损失:将LSTM模型的输出与目标序列进行比较,计算模型的损失值。常用的损失函数包括均方误差(MSE)和交叉熵损失(Cross-Entropy)等。
5、反向传播:根据损失值,通过反向传播算法计算梯度,并更新模型的权重参数,以减小损失函数的值。这一步是为了优化模型,使其能够更好地拟合训练数据。
6、重复训练:重复执行步骤3到5,直到达到预先设定的停止条件,如达到最大训练轮数或损失收敛到一定阈值。
7、预测:在训练完成后,使用已训练好的LSTM模型对未来的数据进行预测。将未来的输入序列输入到模型,通过前向传播得到预测结果。
在训练过程中,LSTM通过学习输入序列中的时序模式和依赖关系来进行建模,并通过反向传播算法调整模型参数以最小化预测与实际值之间的误差。通过不断迭代训练和优化,LSTM模型逐渐提高预测性能,从而可以更好地预测时序序列的未来趋势和模式。
lstmLayer
描述
LSTM 层是长期学习的 RNN 层 时间序列和序列数据中时间步长之间的依赖关系。
该图层执行加互,这有助于改善梯度流 训练期间的长序列。
语法
- layer = lstmLayer(numHiddenUnits) 创建 LSTM 图层并设置 NumHiddenUnits 属性。
- layer = lstmLayer(numHiddenUnits,Name=Value) 使用一个或多个名称-值参数设置其他 OutputMode、Activations、State、Parameters and Initialization、Learning Rate 和 Regularization 以及 Name 属性。