附代码 LSTM 详解及 LSTM 解决时间序列预测问题( 三 )


忘记门的具体计算过程如下动图 。
b. 输入门
当新的输入进入LSTM网络时 , 输入门会决定哪些信息应该被保留并更新细胞状态 。
输入门通过一个函数来决定哪些信息需要被保留 。在每个时间步 t t t , 输入门的计算公式如下:
i t = σ ( W i [ x t , h t ? 1 ] + b i ) i_t = \sigma(W_i[x_t, h_{t-1}] + b_i) it?=σ(Wi?[xt?,ht?1?]+bi?)
其中 ,  W i W_i Wi?是输入门的权重矩阵 ,  b i b_i bi?是偏置项 ,  x t x_t xt?是当前时间步的输入 ,  h t ? 1 h_{t-1} ht?1?是上一时间步的隐藏状态 。σ \sigma σ是函数 , 将输入值映射到0到1之间的概率值 。
输入门的输出 i t i_t it?是一个0到1之间的值 , 表示哪些新的输入应该被保留 。当 i t i_t it?接近1时 , 所有新的输入都会被完全保留;当 i t i_t it?接近0时 , 所有新的输入都会被完全忽略 。
接下来 , LSTM会计算候选细胞状态 c t ~ \tilde{c_t} ct?~? , 它表示当前时间步的新输入可以对细胞状态产生多少影响 。候选细胞状态的计算公式如下:
c t ~ = tanh ? ( W c [ x t , h t ? 1 ] + b c ) \tilde{c_t} = \tanh(W_c[x_t, h_{t-1}] + b_c) ct?~?=tanh(Wc?[xt?,ht?1?]+bc?)
其中 ,  W c W_c Wc?是候选细胞状态的权重矩阵 ,  b c b_c bc?是偏置项 ,  x t x_t xt?是当前时间步的输入 ,  h t ? 1 h_{t-1} ht?1?是上一时间步的隐藏状态 。tanh ? \tanh tanh是双曲正切函数 , 将输入值映射到-1到1之间的值 。
输入门的具体计算过程如下动图 。
输入门的作用是控制新的输入在当前时间步的权重 。通过输入门 , LSTM能够更好地处理长序列数据 , 避免梯度消失和梯度爆炸的问题 , 从而提高模型的效果和稳定性 。
c. 细胞状态
细胞状态可以被看作是整个LSTM网络的核心 , 它可以存储和传递信息 , 同时也能够控制信息的流动和更新 。
LSTM的细胞状态会被更新和传递到下一个时间步 。在每个时间步 t t t , 细胞状态的更新公式如下:
c t = f t ? c t ? 1 + i t ? c t ~ c_t = f_t \cdot c_{t-1} + i_t \cdot \tilde{c_t} ct?=ft??ct?1?+it??ct?~?
其中 ,  f t f_t ft?是忘记门 , 表示对细胞状态进行遗忘的权重; i t i_t it?是输入门 , 表示对细胞状态进行更新的权重; c t ~ \tilde{c_t} ct?~?是当前时间步的候选细胞状态 , 表示当前时间步的新输入可以对细胞状态产生多少影响 。
当 f t f_t ft?接近1时 , 过去的信息会被完全保留;当 f t f_t ft?接近0时 , 过去的信息会被完全遗忘 。当 i t i_t it?接近1时 , 新的输入会被完全保留;当 i t i_t it?接近0时 , 新的输入会被完全忽略 。
细胞状态的具体计算过程如下动图 。
细胞状态的更新和传递是LSTM中非常重要的过程 。在训练过程中 , LSTM网络可以通过学习到的权重来自适应地更新细胞状态 , 保留和传递重要的信息 。
d. 输出门
当需要将当前时间步的信息传递到下一层或输出层时 , 需要通过输出门来控制哪些信息应该被输出 。
输出门通过一个函数来决定哪些信息需要被输出 。在每个时间步 t t t , 输出门的计算公式如下:
o t = σ ( W o [ x t , h t ? 1 ] + b o ) o_t = \sigma(W_o[x_t, h_{t-1}] + b_o) ot?=σ(Wo?[xt?,ht?1?]+bo?)
其中 ,  W o W_o Wo?是输出门的权重矩阵 ,  b o b_o bo?是偏置项 ,  x t x_t xt?是当前时间步的输入 ,  h t ? 1 h_{t-1} ht?1?是上一时间步的隐藏状态 。σ \sigma σ是函数 , 将输入值映射到0到1之间的概率值 。