作者:老余捞鱼
原创不易,转载请标明出处及原作者。

写在前面的话:本文介绍了一种创新模型——“思想增强型 LSTM”,用于提升股价预测的准确性。该模型在每个时间步生成抽象的“思想”表征,与 LSTM 输出结合,捕捉股价序列的复杂模式。通过实验证明,这种方法在股价预测上优于传统 LSTM,这为您的金融投资提供了一种新的技术工具,我会在文末附上全部源码和Google Colab笔记本运行环境地址,感兴趣的朋友不妨一探究竟。
一、了解 LSTM 网络
长短期记忆(LSTM)网络是一种递归神经网络(RNN),旨在捕捉连续数据中的长期依赖关系。与标准 RNN 不同的是,LSTM 可以选择性地记忆或遗忘长序列中的信息,这使其对股票价格预测等时间序列预测任务尤为有效。
1. LSTM 网络的核心在于其单元结构,主要由以下几个部分组成:

LSTM 利用这些方程更新其单元状态,并在每个时间步产生输出:
f_t = σ(W_f · [h_(t-1), x_t] + b_f) i_t = σ(W_i · [h_(t-1), x_t] + b_i) o_t = σ(W_o · [h_(t-1), x_t] + b_o) c̃_t = tanh(W_c · [h_(t-1), x_t] + b_c) c_t = f_t * c_(t-1) + i_t * c̃_t h_t = o_t * tanh(c_t)
f_t = σ(W_f - [h_(t-1), x_t] + b_f) i_t = σ(W_i - [h_(t-1), x_t] + b_i) o_t = σ(W_o - [h_(t-1)、x_t] + b_o) c̃_t = tanh(W_c - [h_(t-1), x_t] + b_c) c_t = f_t * c_(t-1) + i_t * c̃_t h_t = o_t * tanh(c_t)
- f_t、i_t、o_t 分别是遗忘门、输入门和输出门
- c_t 是单元状态
- h_t 是隐藏状态
- x_t 是 t 时刻的输入
- W 和 b 是权重矩阵和偏置向量
- σ 是正余弦函数。
2. LSTM 的工作流程可以概括为以下几个步骤:

3. LSTM 网络在多个领域表现出色,以下是一些典型应用:

我也曾写过几篇涉及 LSTM 的文章,感兴趣的朋友可以点击下面的链接阅读:
- 使用堆叠 LSTM 模型预测市场趋势
- 震惊金融界!三大深度学习模型联袂,竟创出66,941.5%逆天回报率!
- 运用 121 策略模型,提供给您 121% 的投资收益
- 手把手教会你用 AI 和 Python 进行股票交易预测(完整代码干货)
二、思维增强 LSTM 简介
传统的LSTM模型无疑具有强大的功能,但我们的愿景是将其推向一个新的高度。我们计划通过引入一种“思维”机制来进一步提升其性能。我们的创新思路在于,为输入序列的每一个时间步生成一种抽象的表征——我们称之为“思想”。将这些“思想”融合在一起,并与LSTM的输出相结合,以此来实现更为精准的预测。这就像是在LSTM的大脑中植入一颗思考的种子,让它能够以更接近人类思维的方式理解和预测数据。
这种方法受到注意力机制概念的启发,但我们并不是专注于输入的特定部分,而是产生更高层次的抽象(思维),从而捕捉整个序列中的复杂模式。
三、代码实现
我们的实现被称为 LSTMWithThoughts,它扩展了基本的 LSTM 架构:
class LSTMWithThoughts(nn.Module):
def __init__(self, input_dim, hidden_dim, thought_dim, num_thoughts, output_dim):
super(LSTMWithThoughts, self).__init__()
self.encoder = nn.LSTM(input_dim, hidden_dim, batch_first=True)
self.thought_generator = nn.Linear(hidden_dim, num_thoughts * thought_dim)
self.mlp_combine_thoughts = nn.Sequential(
nn.Linear(num_thoughts * thought_dim, thought_dim),
nn.ReLU(),
nn.Linear(thought_dim, thought_dim)
)
self.output_layer = nn.Linear(hidden_dim + thought_dim, output_dim)
def forward(self, x):
# LSTM encoding
_, (h_enc, _) = self.encoder(x.unsqueeze(1)) # Add sequence dimension
h_last = h_enc[-1]
# Generate thoughts
thoughts = self.thought_generator(h_last)
# Apply MLP to combine thoughts
combined_thoughts = self.mlp_combine_thoughts(thoughts)
# Combine with last hidden state
combined_rep = torch.cat((combined_thoughts, h_last), dim=-1)
# Predict next price
prediction = self.output_layer(combined_rep)
return prediction
主要组成部分:
- LSTM 编码器:处理输入序列,为每个时间步生成隐藏状态。
- 思维生成器:为每个隐藏状态创建一个思维向量。
- 思维组合器:将所有思维向量合并为单一的综合思维表征。
- 输出层:将最终的 LSTM 隐藏状态与综合思维相结合,做出最终预测。
The forward pass:
- 使用 LSTM 对输入序列进行编码。
- 为每个时间步生成想法。
- 将这些想法合并为一个表征。
- 将组合思想与最终的 LSTM 隐藏状态合并。
- 得出最终预测结果。
这种架构使模型既能利用 LSTM 的顺序处理能力,又能利用抽象的 “思维 “表征,从而捕捉股价数据中更多细微的模式。
四、输出成果
1. Reliance.NS
- 平均绝对误差 (MAE):32.8966
- 平均绝对百分比误差 (MAPE):0.0184
- 测试平均绝对误差 (MAE):33.4168
- 测试平均绝对百分比误差 (MAPE): 0.01430.0143

2. SBIN.NS
- 平均绝对误差 (MAE):6.5945
- 平均绝对百分比误差 (MAPE):0.0206
- 测试平均绝对误差 (MAE):7.9423
- 测试平均绝对百分比误差 (MAPE): 0.01430.0143

3. Manali Petro
- 平均绝对误差 (MAE):3.1939
- 平均绝对百分比误差 (MAPE):0.1065
- 测试平均绝对误差 (MAE):1.8901
- 测试平均绝对百分比误差 (MAPE): 0.02110.0211

五、观点总结
我们上面的文章中尝试了一种方法,即:网络在给出最终预测之前会进行更多的思考。它会反思之前的隐藏状态,然后将这些组合成一个思想向量,用它来预测未来。我还认为这可以进一步与策略网络结合起来,通过奖励机制进一步优化预测结果。这就像是给网络装上了一个智慧的大脑,让它能够更有效地学习和进化。
- 传统LSTM网络能够处理长期依赖问题,但在股价预测任务中可能需要进一步的增强。
- 通过引入“思想”机制,可以使LSTM网络生成更高层次的抽象表示,从而提高对股价时间序列的预测能力。
LSTMWithThoughts
模型的关键在于它能够结合LSTM的隐藏状态和生成的思维表征,合成出更为全面的特征,用于最终的预测。- 实验结果表明,相较于传统LSTM,思想增强型LSTM在股价预测上取得了更好的性能。
- 未来的研究可能会将思想增强型LSTM与策略网络结合,通过奖励机制进一步优化预测结果。
代码示例和 Google Colab 笔记本地址如下:
https://colab.research.google.com/drive/10k_L1ISBoL5kKBlHWU_oDnP4ZFimGHDC?usp=sharing感谢您阅读到最后,希望本文能给您带来新的收获。祝您投资顺利!如果对文中的内容有任何疑问,请给我留言,必复。
本文内容仅仅是技术探讨和学习,并不构成任何投资建议。
Be First to Comment