三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

《基于LSTM-RNN-CBAM模型和动态规划模型的交易策略》

《基于LSTM-RNN-CBAM模型和动态规划模型的交易策略》

这篇论文的深度学习部分,本质是一个端到端的回归预测模型:输入过去 20 天的数据,输出第 21 天的收盘价。但它的网络结构不是简单的“LSTM 堆叠”,而是一个CNN-LSTM-CBAM 三级串行流水线

CNN负责局部感知与降维升维,为系统提供高信噪比的基元特征;

CBAM基于这些基元进行通道与空间的软性掩码重标定,实现特征的精炼与梯度引导;

LSTM利用其门控记忆单元,在精炼后的低熵序列上完成长期时序推理。

三者串行,实现了从‘原始信号’到‘局部模式’再到‘全局决策’的逐级抽象,兼顾了模型的拟合能力与泛化能力与抗噪能力。”


1. 数据的“形状”变化(这是理解所有模型的基础)

在做深度学习时,你必须清楚张量(Tensor)的维度。假设我们考虑的特征数量为 F(比如开盘价、最高价、最低价、交易量等),时间步长为 T=20,批次大小为 B。

  1. 输入层:(B, T, F)——即 B 个样本,每个样本包含连续 20 天的 F 个特征。

  2. 论文的关键操作:他们不是直接把 (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 个权重(每个通道一个),告诉模型哪些特征因素(比如“交易量”比“开盘价”)对预测当前价格更重要

  • 具体步骤

    1. 对 F 在空间维度(H 和 W)做平均池化(AvgPool),得到 Favgc(形状 C×1×1),这代表每个通道的“全局平均水平”。

    2. 对 F 在空间维度做最大池化(MaxPool),得到 Fmaxc(形状 C×1×1),这代表每个通道的“最显著峰值”。

    3. 将这两个结果分别送入一个共享的两层全连接网络(MLP)(即公式中的 W0, W1),把高维特征压缩再还原,学习非线性的通道重要性。

    4. 将两个 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 天最有价值

  • 具体步骤

    1. 通道轴(Channel axis)上做平均池化和最大池化,得到两个二维矩阵(形状 H×W)。

    2. 将这两个矩阵在通道轴上拼接(Concat),变成一个 2×H×W 的张量。

    3. 用一个大卷积核 f7×7(7×7 卷积)去扫描这个拼接图,将 2 个通道融合成 1 个通道。

    4. 经过 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”。实际的数据流顺序推测如下:

  1. 输入:原始多维时间序列 (B, 20, F)。

  2. Reshape:变形为类似单通道图像 (B, 1, F, 20)。

  3. CNN 层:滑动卷积提取局部趋势,输出 (B, C, F′, 20)(C 是卷积核数量,F′ 是卷积后的新特征维度)。

  4. CBAM 通道注意力:计算 C 个通道的权重,重标定哪个卷积核提取的特征最有价值。

  5. CBAM 空间注意力:计算 20 个时间步的权重,重标定这 20 天里具体哪几天最重要。

  6. Reshape 还原:将加权后的特征图拍平还原为序列 (B, 20, C×F′)。

  7. LSTM 层:处理这个“注意力净化过”的 20 步序列,输出最后一步的隐藏状态 H20。

  8. 全连接层(Dense):将 H20 映射到 1 个神经元,输出第 21 天的预测价格。


7. 为什么比特币预测误差(3.08%)大于黄金(1.85%)?

从深度学习角度,这不是模型结构的问题,而是数据本质(信息熵)的问题

  • 比特币:波动剧烈,方差极大。在归一化后,它的标签值(第 21 天价格)变化范围依然很大。模型在反向传播时,梯度震荡剧烈,难以收敛到全局最优。

  • 黄金:走势相对平滑,时序自相关性极强。这意味着前 20 天的序列几乎已经锁定了第 21 天的值,属于“确定性较高”的回归任务,因此 MSE 损失天然更低。


8. 这篇论文对初学者最大的启发(避坑指南)

  1. 不要直接把原始序列扔进 LSTM:这篇论文用 CNN 提取局部特征、用 CBAM 过滤噪音,相当于给 LSTM 做了“降噪预处理”。这在信号处理中叫“前端增强”,能大幅提升 SOTA(State-of-the-art)效果。

  2. 注意力机制(CBAM)的位置极其讲究:它放在 CNN 之后、LSTM 之前。如果放在 LSTM 之后,相当于在预测结果上做注意力,那就变成“事后解释”了,对提升精度帮助不大。

  3. 时间步长(20)是经过实验对比选的:这提醒我们,在时间序列中,“记忆窗口”是超参数,不能用经验拍板,必须做网格搜索(Grid Search)对比验证集误差。

← 返回列表