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

本文章主要涉及以下工作:
(1)详细介绍了 LSTM 的基本原理及计算过程 。
(2)利用深度学习框架编程 , 基于多层 LSTM 解决时间序列预测问题 。
(3)提供了项目的代码以及相应的使用文档 。
如果文章有用 , 欢迎各位→点赞 + 收藏 + 留言
项目代码:Sales--With-LSTM
如果项目代码有用 , 请给项目star一下;谢谢啦
目录2. 基于LSTM解决时间序列预测问题 (3) 运行结果展示 3. 参考资料
1. LSTM 概念 (1) RNN的介绍
循环神经网络( , RNN)是一种人工神经网络 , 主要用于处理序列数据 , 如自然语言、音频和视频等 。
与其他神经网络不同的是 , RNN具有内部循环结构 , 可以保留先前的信息 , 并在后续的计算中使用它们 。如下图所示 , 在这个循环的结构中 , 每个神经网络的模块 A , 读取某个输入x t x_{t} xt? , 并输出一个值h t h_{t} ht? , 然后不断循环 。循环可以使得信息可以从当前步传递到下一步 。
RNN的每个单元都有一个状态 , 这个状态将被传递到下一个单元中 。在每个时间步 , RNN都会接收当前输入和前一时刻的状态作为输入 , 并输出当前时刻的状态和相应的输出 。这个输出可以被用作下一个时间步的输入 , 形成一个循环 。
由于RNN具有内部循环结构 , 因此它可以处理任意长度的序列数据 , 并且可以用于各种任务 , 包括语言建模、机器翻译、语音识别等 。此外 , RNN还可以通过反向传播算法进行训练 , 以优化网络的权重和偏差 , 从而提高模型的准确性和性能 。
(2) RNN无法处理长期依赖
RNN无法处理长期依赖的问题 , 是由于在反向传播时 , 梯度会在每个时间步骤中指数级地衰减 , 这使得远距离的信息无法有效传递 。
这个问题可以通过以下方式来理解:在RNN的训练过程中 , 梯度是从后向前传递的 , 每个时间步骤的梯度都会影响前面的时间步骤 。如果一些时间步骤之间存在长期的依赖关系 , 那么梯度在传递时会多次相乘 , 导致指数级的衰减 。这就使得前面的时间步骤无法有效地传递信息 , 从而影响了模型的准确性 。
举个例子 , 考虑一个RNN模型用于语言建模 。假设RNN预测“云在天空中”中的最后一个单词 , 我们不需要任何进一步的上下文——很明显下一个单词将是天空 。在这种情况下 , 相关信息和需要信息的地方之间的差距很小 , RNN可以学习使用过去的信息 。
但假设我们要用RNN生成一段长序列的文本 , 比如一篇新闻文章 。在这种情况下 , RNN需要记住文章中的前一部分内容 , 并在后续的计算中使用它们 。然而 , 如果文章中存在长期依赖关系 , 例如在文章的开头提到了一个事件 , 而这个事件在文章的结尾才有进一步的描述 , 那么RNN很难记住这个事件 , 并在后续的计算中使用它们 。
为了解决这个问题 , 研究人员提出了一些改进的RNN模型 , 如LSTM和GRU 。这些模型通过引入门控机制 , 可以控制信息的流动和遗忘 , 从而有效地解决了梯度消失的问题 。这些门控机制可以控制信息的流动和遗忘 , 使得RNN可以记住长期的依赖关系 , 从而提高了模型的准确性 。