交易中的神经网络:二维连接空间模型(Chimera)(基础篇)
📘

交易中的神经网络:二维连接空间模型(Chimera)(基础篇)

第 1/2 篇

◍ 用二维连接空间理解 Chimera 网络

传统 MLP 把神经元排成一维链,层间全连接,参数随宽度平方膨胀。Chimera 提出把输入映射进一个二维连接空间,让相邻节点只在局部网格内耦合,远距离依赖通过跨层跳跃边补足。 这套结构在 MT5 里可直接用自定义指标装载,输入取近 200 根收盘价归一化序列,输出层给三个状态:趋势延续 / 反转 / 震荡。实盘前务必用 2020—2025 年 XAUUSD 的 M15 数据做 walk-forward,外汇与贵金属杠杆高,模型失效时回撤可能超过 30%。 二维空间的局部耦合带来一个直接好处:同样 64 隐节点,Chimera 参数量约为全连接同款的 41%,训练耗时显著下降,但需手动调网格边长参数,边长过小会丢全局形态。

多变量时序建模的坑与 Chimera 的切角

做时间序列建模,外汇和贵金属的多变量行情尤其难啃:短期自相关、季节性、长期趋势叠在一起,变量间关系还常是动态非线性的。经典统计方法 preprocess 太重,且抓不住复杂非线性;基于 Transformer 的模型虽然是深度网络里表达力强的那一拨,但计算复杂度是序列长度的二次方,特征一多就跑不动,还容易把季节性和长期分量混为一谈。 Chimera 这篇框架换了个思路:二维状态空间模型(2D-SSM),在时态轴和变量轴同时做线性变换。它由时间维 SSM、变量维模型、跨维变换三块组成,参数化用紧凑对角矩阵,所以既能复现经典统计方法,也能兼容现代 SSM 架构,还顺手接了自适应离散化去对齐动态系统的季节形态。 作者测了分类、预测、异常检测三类任务,结果是精度和新潮方法持平甚至更好,同时整体计算成本降下来了——对 MT5 上跑长序列多品种盯盘的人来说,这意味着同样的算力能塞进更多符号和更长窗口。

「奇美拉如何用二维状态空间抓跨变量依赖」

传统状态空间模型(SSM)只让系统状态依赖单一变量,比如时间轴,导致它在多变量行情序列里抓不住「变量之间」的纠缠。Chimera 把 SSM 扩成二维:第一轴是时间 t,第二轴是变量 v,每个隐藏状态同时吃前一个时间步的同变量信息和同一时刻的跨变量信息。 离散化时用零阶保持(ZOH),沿时间轴步长 Δ1、沿变量轴步长 Δ2。参数为 ({A_i},{B_i},{C_i}, kΔ1, ℓΔ2) 的 2D 离散 SSM,在时间上的演化速度比 ({A_i},{B_i},{C_i}, Δ1ℓΔ2) 快 k 倍,比 ({A_i},{B_i},{C_i}, kΔ1, Δ2) 快 ℓ 倍——这说明 Δ1 实质是模型捕获依赖长度的控制器。 较小的 Δ1 倾向捕捉长期趋势进度,较大的 Δ1 更适配季节性形态;Δ2 则类似 RNN 门,较大的 Δ2 压缩上下文窗口、削弱变量间交互,较小的 Δ2 强调内部变量依赖。外汇与贵金属多品种联动中,这种轴分离对识别跨品种领先滞后关系有帮助,但杠杆品种高风险,验证前先用模拟盘。 Chimera 让 B_i、C_i、Δ_i 成为输入 x_{v,t} 的函数,相当于给 SSM 装了类 Transformer 的自适应过滤:对当前行情片段,模型自行混合相关参数、屏蔽噪声变量。层间非线性堆叠多个 2D-SSM,并先做趋势/季节分解再分别建模。 别把 Δ1 调小当万能钥匙 长期依赖捕获虽好,但 Δ1 过小在分钟级贵金属跳空时易放大过拟合,回测里常见样本外衰减,实盘须配合品种波动率分段设参。

◍ 用 OpenCL 把 2D-SSM 跑在 GPU 上

Chimera 框架里那套隐藏状态注意力矩阵,原作者想用扩展对角矩阵压参数、降复杂度,但只能抓序列里连续元素的局部依赖,表达力受限。我们改成了完全可训练矩阵,参数多了,却能捕更复杂的跨步依赖,且矩阵不依赖输入数据,多变量时序里更通用。 四个注意力矩阵我们并成一个级联张量,顺带把两个隐藏状态也并掉,一次内核并行算完。但 B、C、Δ 这类参数矩阵不能也写死,否则多变量数据灵活性掉档;改成由输入数据动态生成的上下文相关矩阵,局部和全局趋势都能看。 计算密集部分塞进独立 OpenCL 内核。SSM2D_FeedForward 内核按二维任务空间排线程:一维是序列长度,一维是特征维度,同特征的所有序列元素归到一个工作组。先对齐可训练参数和输入投影,算两种上下文隐藏状态写回缓冲区,同步工作组后再用离散矩阵乘出输出。 反向传播另起 SSM2D_CalcHiddenGradient 内核,线程按特征维度分组,梯度缓冲区全加 grad_ 前缀防混。B_i 的梯度要跨所有维度聚合,先清零再同步汇总。附件有完整源码,MT5 里建 CNeuron2DSSMOCL 类挂这些内核就能验。 注意力参数随机初始化后整体缩放十倍,否则容易梯度膨胀。B_i、C_i 用 tanh 激活容纳正负依赖,Δ_i 用 SoftPlus 保离散化非负,这就是比原对角方案多耗显存换来的适配度。

MQL5 / C++
__kernel <span class="keyword">class="type">void</span> SSM2D_FeedForward(__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *ah,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *b_time,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *b_var,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *px_time,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *px_var,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *c_time,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *c_var,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *delta_time,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *delta_var,

常见问题

把每个变量的时序展开成二维状态网格,横向看时间、纵向看变量,Chimera 通过跨格连接捕捉依赖,比堆 LSTM 层更省参数。
它用稀疏二维状态空间限制跨变量连接数,降低冗余自由度,实盘里能缓解不同品种噪声互相放大的问题。
小布可读取你导入的多个品种分钟线,自动画出二维状态热力图并标出强连接区,省去你手写可视化代码。
一维序列被迫把变量压缩进同一条轴,二维空间让变量沿独立轴铺开,跨轴连接直观对应变量间滞后或同步关系。
可用 OpenCL 把状态更新内核丢到核显或独显算,外汇多品种回测耗时可从小时级降到分钟级,无需专门购置设备。