《基于LSTM-RNN-CBAM模型和动态规划模型的交易策略》
这篇论文的深度学习部分,本质是一个端到端的回归预测模型:输入过去 20 天的数据,输出第 21 天的收盘价。但它的网络结构不是简单的“LSTM 堆叠”,而是一个CNN-LSTM-CBAM 三级串行流水线。
“CNN负责局部感知与降维升维,为系统提供高信噪比的基元特征;
CBAM基于这些基元进行通道与空间的软性掩码重标定,实现特征的精炼与梯度引导;
LSTM利用其门控记忆单元,在精炼后的低熵序列上完成长期时序推理。
三者串行,实现了从‘原始信号’到‘局部模式’再到‘全局决策’的逐级抽象,兼顾了模型的拟合能力与泛化能力与抗噪能力。”
1. 数据的“形状”变化(这是理解所有模型的基础)
在做深度学习时,你必须清楚张量(Tensor)的维度。假设我们考虑的特征数量为 F(比如开盘价、最高价、最低价、交易量等),时间步长为 T=20,批次大小为 B。
输入层:(B, T, F)——即 B 个样本,每个样本包含连续 20 天的 F 个特征。
论文的关键操作:他们不是直接把 (B, 20, F) 送进 LSTM,而是先用卷积模块(CNN)提取局部趋势,此时数据会经历维度置换(Permute),变成图像格式 (B, 1, F, T)(通道数=1,高=特征数,宽=时间步),这样才能让 CNN 的卷积核在“时间轴”上滑动。
2. 第一阶段:CNN(卷积神经网络)在干什么?
论文提到“使用卷积模块生成每个影响因子的特征图(Feature Maps)”。
目的:捕捉极短期的局部依赖(比如连续 3 天的“微涨微跌”形态)。
操作:用 1×3 或 3×3 的卷积核在 (F, T) 这个二维平面上滑动。
输出:CBAM 的输入不是原始数据,而是CNN 提取出的特征图Fin。这相当于把原始价格数据“升维”了,提炼出了更高维度的局部模式。
3. 第二阶段:CBAM(卷积块注意力模块)的数学细节(论文公式 7-9)
CBAM 是这篇论文深度学习部分最精彩的地方,它分为两个子模块,按顺序执行(通道注意力 → 空间注意力)。注意:这里的“空间”在时间序列中就是指“时间轴”。
1. 通道注意力(Channel Attention)—— 公式 (7)
公式:$bigmMc\left(F\right)=\sigma\left(MLP\left(AvgPool\left(F\right)\right)+MLP\left(MaxPool\left(F\right)\right)\right)$
它在算什么:特征图 F 的维度是 (C, H, W)(C 是通道数,H 是特征维度,W 是时间步)。通道注意力要算出 C 个权重(每个通道一个),告诉模型哪些特征因素(比如“交易量”比“开盘价”)对预测当前价格更重要。
具体步骤:
对 F 在空间维度(H 和 W)做平均池化(AvgPool),得到 Favgc(形状 C×1×1),这代表每个通道的“全局平均水平”。
对 F 在空间维度做最大池化(MaxPool),得到 Fmaxc(形状 C×1×1),这代表每个通道的“最显著峰值”。
将这两个结果分别送入一个共享的两层全连接网络(MLP)(即公式中的 W0, W1),把高维特征压缩再还原,学习非线性的通道重要性。
将两个 MLP 输出的结果逐元素相加,经过 σ(Sigmoid 激活函数),输出 0~1 之间的通道权重。
最终操作:将原始的 F 乘以这个通道权重(广播乘法),得到加权后的特征 F′。
2. 空间注意力(Spatial Attention)—— 公式 (8) 和 (9)
公式:$\operatorname{Ms}(F)=\sigma(f 7 \times 7([\operatorname{AvgPool}(F) ; \operatorname{MaxPool}(F)]))$
它在算什么:此时输入变成了经过通道注意力加权后的 F′。空间注意力要算出 (H, W) 维度的权重矩阵,告诉模型在过去的 20 天里,哪几天(比如第 5 天和第 18 天)的突变对预测第 21 天最有价值。
具体步骤:
在通道轴(Channel axis)上做平均池化和最大池化,得到两个二维矩阵(形状 H×W)。
将这两个矩阵在通道轴上拼接(Concat),变成一个 2×H×W 的张量。
用一个大卷积核 f7×7(7×7 卷积)去扫描这个拼接图,将 2 个通道融合成 1 个通道。
经过 Sigmoid,输出空间权重图。
最终操作:将这个空间权重乘以 F′,极其重要的时间点会被放大,不重要的时间点被抑制。
你的学习要点:这是注意力机制的精髓——“先看关注什么特征(通道),再看关注什么时刻(空间)”。
4. 第三阶段:LSTM(长短期记忆网络)接收“净化后”的数据
论文特别强调:CBAM 筛选出的关键信息,才会喂给 LSTM。
经过 CBAM 重标定后的特征图 F″,会被还原回序列格式 (B, T, Fnew)。
送入 LSTM 单元。论文中的公式 (1) ~ (6) 是标准 LSTM 前向传播:
遗忘门(公式 2):Ft = σ(Wf·[Ht-1, Xt] + Bf) —— 决定扔掉多少上一时刻的记忆 Ct-1。如果 Ft 接近 0,说明模型认为“前几天的旧趋势不重要了”。
输入门(公式 1 和 4):It = σ(Wi·...),C′t = tanh(Wc·...) —— 决定当前的哪些新信息 C′t 要写入长期记忆 Ct。
细胞状态更新(公式 5):Ct = Ft * Ct-1 + It * C′t ——这是 LSTM 最核心的“梯度高速路”。这条路径上没有非线性激活函数(只有乘法),使得 4 年前的梯度可以无损地传回来,彻底解决梯度消失。
输出门(公式 3 和 6):Ot = σ(Wo·...),Ht = Ot * tanh(Ct) —— 决定当前时刻的输出隐藏状态 Ht。
关键时间步设定(Time Step = 20):他们不训练整个 4 年的序列,而是每次截取连续的 20 天。这意味着 LSTM 的循环核(Recurrent Core)只需展开 20 步。多出来的 4 年数据被切分成无数个“20 天片段”作为训练样本。
5. 损失函数与训练(论文未明说但必然存在的细节)
论文没有写出 Loss 公式,但根据“预测价格”这一回归任务,必然使用:
损失函数(Loss):均方误差(MSE)或平均绝对误差(MAE)。
Loss = 1/N ∑i=1N (P真实,i - P预测,i)2优化器:极大概率使用Adam(自适应矩估计),因为它适合处理非平稳时间序列和大规模参数。
归一化(Normalization):论文图 5 和图 6 的纵坐标是“归一化后的价格”。这是深度学习的铁律——必须对价格进行 Min-Max 归一化或 Z-score 标准化,否则 Sigmoid/Tanh 激活函数会饱和,梯度直接消失。
6. 最关键的架构融合点:CNN + CBAM + LSTM 是如何串联的?
很多人以为顺序是 LSTM → CBAM,但论文第 10 页明确指出:“结合长短期记忆神经网络和卷积神经网络,并加入 CBAM”。实际的数据流顺序推测如下:
输入:原始多维时间序列 (B, 20, F)。
Reshape:变形为类似单通道图像 (B, 1, F, 20)。
CNN 层:滑动卷积提取局部趋势,输出 (B, C, F′, 20)(C 是卷积核数量,F′ 是卷积后的新特征维度)。
CBAM 通道注意力:计算 C 个通道的权重,重标定哪个卷积核提取的特征最有价值。
CBAM 空间注意力:计算 20 个时间步的权重,重标定这 20 天里具体哪几天最重要。
Reshape 还原:将加权后的特征图拍平还原为序列 (B, 20, C×F′)。
LSTM 层:处理这个“注意力净化过”的 20 步序列,输出最后一步的隐藏状态 H20。
全连接层(Dense):将 H20 映射到 1 个神经元,输出第 21 天的预测价格。
7. 为什么比特币预测误差(3.08%)大于黄金(1.85%)?
从深度学习角度,这不是模型结构的问题,而是数据本质(信息熵)的问题:
比特币:波动剧烈,方差极大。在归一化后,它的标签值(第 21 天价格)变化范围依然很大。模型在反向传播时,梯度震荡剧烈,难以收敛到全局最优。
黄金:走势相对平滑,时序自相关性极强。这意味着前 20 天的序列几乎已经锁定了第 21 天的值,属于“确定性较高”的回归任务,因此 MSE 损失天然更低。
8. 这篇论文对初学者最大的启发(避坑指南)
不要直接把原始序列扔进 LSTM:这篇论文用 CNN 提取局部特征、用 CBAM 过滤噪音,相当于给 LSTM 做了“降噪预处理”。这在信号处理中叫“前端增强”,能大幅提升 SOTA(State-of-the-art)效果。
注意力机制(CBAM)的位置极其讲究:它放在 CNN 之后、LSTM 之前。如果放在 LSTM 之后,相当于在预测结果上做注意力,那就变成“事后解释”了,对提升精度帮助不大。
时间步长(20)是经过实验对比选的:这提醒我们,在时间序列中,“记忆窗口”是超参数,不能用经验拍板,必须做网格搜索(Grid Search)对比验证集误差。
