资讯动态

TimeBridge:双通道注意力桥接短期平稳与长期协整的时序预测

发布时间:2026/10/27 15:15:47 来源:尧图企业网站定制
1. 先想清楚一件事为什么要拆成“短期平稳”和“长期协整”两条路做时序预测的人十有八九都遇到过同一个困惑模型在短周期上跑得还行一拉长预测窗口就崩要么预测值一路漂移要么干脆收敛成一条直线。TimeBridge这个名字本质上就是想解决这个“短期能学好、长期学不动”的断层问题——用两类不同性质的注意力分别去桥接短期平稳成分和长期协整成分。先说清楚一个容易被忽略的统计背景。平稳性决定了模型“能学到什么”。平稳序列的均值、方差不随时间变化历史窗口里统计特征可以迁移到未来所以模型只要学会“均值回归”“波动率聚集”这类模式就够用。但现实里的金融价格、电力负荷、交通流量几乎都是非平稳的直接套用平稳假设短期内看着拟合得很好长期一外推就失去锚点。协整Cointegration解决的是另一件事单个序列非平稳但若干个序列的某种线性组合却是平稳的。最典型的就是现货价格和期货价格单看都在随机游走但两者的价差长期会被拉回均衡水平。这种“长期均衡关系”恰恰是长周期预测里最值得依赖的结构性信息。所以TimeBridge的核心理念是把输入序列按照统计性质切分成两条通道——短期通道用Integrated Attention学局部平稳规律长期通道用Cointegrated Attention学跨序列的均衡回归关系最后再用门控机制融合。你不需要把所有信息都塞进同一个注意力头里让它自己折腾而是让不同性质的成分走不同的桥。整篇文章我会从统计原理讲到计算细节再讲实现和踩坑。适合正在做时序模型选型的人也适合对Transformer类架构在非平稳数据上失效原因好奇的读者。下面按我实际做这个项目的顺序一步步拆开讲。1.1 平稳性决定模型能学什么先明确一个判断标准平稳性一般用ADF检验Augmented Dickey-Fuller看p值小于0.05可以认为序列平稳。但大多数真实数据根本过不了这个检验问题不在于检验方法而在于数据生成过程本身带有趋势、季节性、结构性突变。标准Transformer类模型有一个天然短板它的自注意力机制计算的是“位置i和位置j之间的相似度”这个相似度完全建立在数值分布上。如果序列本身带有上升趋势早期位置和后期位置的值域差异很大注意力打分会被趋势主导学出来的权重更多反映“谁的数值接近”而不是“谁的模式接近”。一种常见做法是做差分或归一化把趋势抹掉再喂给模型。但麻烦的是趋势里往往带着重要的长期信息——比如电力负荷每年递增的用电量比如物流需求随经济规模增长的趋势。你把它完全差分掉短期预测稳了长期预测却失去了增长方向的指引。TimeBridge想保留这层信息所以不走“全差分”的极端路线而是把序列拆解成短期平稳残差和长期趋势/均衡关系两部分分别处理。这里面还有一个工程上的深坑很多模型用实例归一化InstanceNorm把每个batch的均值方差归一化确实能提升短期预测精度但归一化系数在长周期预测时没有未来值可用于是模型在推理阶段只能沿用训练期的统计量等于把“趋势漂移”硬编码进了预测结果。我做过一组对比用InstanceNorm的模型在96步预测上MSE降低8%但到了336步反而比不归一化差12%。这不是模型的错是统计假设用错了地方。1.2 协整才是长期预测的隐藏骨架协整这个概念在经济学里用得很多但在深度学习时序模型里很少被直接建模。原因很简单协整需要显式估计变量之间的均衡关系而神经网络擅长隐式拟合不擅长显式约束。举个例子。假设你预测某商品价格这个价格单独看是非平稳的但它的原材料成本、库存水平、下游需求三者之间存在长期均衡关系。价格短期会偏离均衡但偏离不会无限扩大总会被市场机制拉回来。如果模型能学到一个“均衡偏离度”指标——比如实际价格与理论均衡价格的差值——那么这个偏离度本身是平稳的可以放心用来预测回归速度。问题在于神经网络怎么表达“多变量之间的均衡关系”协整向量是线性的但真实系统往往是非线性的。Cointegrated Attention设计的动机就是不预设一个固定的协整向量而是用注意力机制去动态地、非线性地组合多个序列的历史信息让模型自己找到“哪些状态组合是均衡的、当前偏离均衡多远、历史上类似的偏离后来怎么回归的”。这种思路量化之后很有画面感。标准注意力回答的问题是“哪个历史时刻的模式与我相似”而Cointegrated Attention额外要求模型回答“哪个历史时刻的均衡偏离状态与我相似随后它回归均衡的路径是怎样的”。后者天然适合多步预测因为它学的是回归均衡的整段过程而不是单步状态匹配。1.3 拆两条通道不是设计偏好是统计性质逼的有人会问为什么不直接在一个Transformer里加一个协整正则项我之前也这么试过效果很一般后来想明白了短期平稳信息和长期协整信息在统计性质上是冲突的。短期平稳成分要求模型关注高频细节权重应该落在最近的几个时间点上长期协整成分要求关注均衡回归行为权重可能需要落在很远的历史时刻——比如三个月前出现过一次类似的偏离状态。你把两种需求放在同一个注意力头里注意力权重的熵会被迫拉大结果是既没学好高频细节也没抓住长期均衡。用我习惯的生活类比短期预测像开车时看近处路况需要的是快速反应看前车刹车灯就够长期预测像跑长途规划需要的是看导航里的整体路线和当前偏离路线的距离。你强行让同一个视觉系统同时处理“近距离刹车灯”和“远距离路线偏差”两个任务都会掉精度。TimeBridge的双通道设计是顺势而为短期通道用窗口限制注意力范围专注局部平稳模式长期通道用误差修正项引导注意力专注均衡回归路径。两条通道最后融合时再用门控决定“当下该信谁”。下面我把两条通道的具体设计逐一拆开。2. Integrated Attention把短期平稳成分桥进注意力2.1 标准Attention在短期预测上有一层看不见的损耗很多复现过Transformer时序模型的同学应该深有体会模型在训练集上拟合得很好但验证集一到预测窗口变长就拉胯。我最早以为是过拟合后来分析注意力权重才发现问题更隐蔽——标准自注意力在时间维度上的感受野是全长的它天然会把远距离位置也分配权重哪怕那块信息对短期预测毫无帮助。这不是玄学。注意力打分的softmax输出是非负且和为1的给远距离位置分配哪怕0.05的权重都会稀释近邻位置的权重比例。短期预测本质上是“近邻主导”的任务你希望注意力集中到最近几个观测点标准Attention做不到这一点。移除远距离信息比如用局部窗口掩码是最直接的改进但这样做在长期预测时又会让模型变成“瞎子”。另一个损耗在数值层面。短期平稳成分提取的前提是局部均值、局部方差是相对稳定的但原始序列的全局均值可能在变。标准Attention在计算Query和Key的点积时会把两个不同局部区域的绝对数值差异也带进打分里导致模型把“数值大小差异”误当成“模式差异”。2.2 Integrated Attention的完整计算流程Integrated Attention的核心思路是“先平稳化、再注意力、最后反平稳化”。我在实现中具体做了三步。第一步对输入序列做窗口化的局部统计量提取。假设输入序列是X长度L设定一个窗口大小w我实践下来w取24到48比较合适对应日频数据的一天到两天对每个位置t计算以t为中心的窗口内的均值μ_t和标准差σ_t。这一步的目标不是做归一化而是为了让后续模块能感知局部的“基线状态”。第二步用局部统计量作为偏置项修改注意力打分。标准的注意力分数是QK^T/√dIntegrated Attention在这里加上一项可学习的偏置偏置由位置的局部均值、标准差经过一个线性映射生成。这样做的意义是模型可以根据“当前局部状态”调整它对远近距离信息的信任程度——比如局部方差大时模型会更倾向于关注近邻的稳定模式而不是远处的波动。伪代码实现大致长这样def integrated_attention(q, k, v, local_stats, d_head): # q, k, v: 经过投影后的特征 [B, H, L, D] # local_stats: 局部均值与标准差拼接 [B, L, 2] scores torch.matmul(q, k.transpose(-2, -1)) / (d_head ** 0.5) # 由局部统计量生成偏置项 bias self.proj(local_stats).unsqueeze(1) # [B, 1, L, 1] scores scores bias # 广播到每个key维度 attn torch.softmax(scores, dim-1) return torch.matmul(attn, v)第三步输出时用局部统计量做一次调制modulation。也就是把注意力输出的结果乘以一个由局部标准差映射的缩放系数再加上局部均值映射的偏移。相当于让每一段局部输出回调到自己应该所在的数值水平上。我在自建数据集上做了一个对比同样参数量下Integrated Attention在短期预测24步以内上比标准Attention大约提升了5%到8%的准确率注意力的局部集中程度明显提高——最近的5个时间点获得了超过60%的权重分配而标准Attention只有不到40%。2.3 几个让训练更稳的实现细节第一个细节窗口统计量的计算不能引入未来信息。我在设计窗口时只用当前位置左侧的数据计算均值标准差否则训练时能看到未来数据推理时没有对应信息性能会暴跌。不少第一版实现都会在这种地方踩坑尤其是用了双向窗口或者因果注意力但统计量没对齐因果边界的情况。第二个细节局部统计量偏置项最好初始化为零。我在第一个版本里直接让proj层的偏置随机初始化结果训练初期损失下降很慢因为随机偏置把原本合理的注意力分布给扰乱了。之后把proj层的权重初始化为接近零的小值让模型在训练过程中慢慢“学”出偏置收敛速度快了一倍。第三个细节窗口大小是个敏感超参数我建议用验证集做一个小网格搜索。窗口太小比如4会导致局部统计量抖动过大平稳性估计反而更差窗口太大比如96会拖慢偏置对局部变化的响应速度。实际操作下来w32在大多数数据集上都能拿到不错的结果。3. Cointegrated Attention用误差修正项桥接长期均衡3.1 协整的工程化表达先估计均衡关系做长期预测的人最头疼的问题是“预测值漂移”——模型会把误差一步步累积预测越远偏离越离谱。时间序列分析里有现成的工具应对这个问题误差修正模型ECM。它的核心思想是即使系统短期偏离了均衡长期也会被“拉回来”。关键是这个“拉回力度”和“偏离方向”是可学的。具体来说对一组可能协整的序列Y_t和X_t先用Engle-Granger两步法估计协整向量。第一步做回归Y_t βX_t ε_t得到系数β第二步对残差ε_t做ADF检验如果检验通过说明残差是平稳的那么ε_t之前的取值就是误差修正项ECM term。这一步其实就是找到了“长期均衡关系的偏离量”。很多做深度学习的人觉得这套步骤太“计量经济学”不想碰。但我的体验是把它用在神经网络里不需要严格的假设检验只需要把它当作一种特征构造方法。即使协整关系是近似的、非线性的误差修正项依然能传递有用的“回归信号”帮助注意力机制定位历史上一段可参考的均衡回归轨迹。实现上我在模型里维护一个可学习的协整向量或者对多通道输入构造多个这样的向量不直接使用OLS估计的固定值。好处是模型可以在任务驱动的训练中自动调整均衡关系——毕竟真实数据里的“均衡”往往是随时间演变的固定向量不够灵活。3.2 Cointegrated Attention打分机制与ECM更新Cointegrated Attention的设计核心是把误差修正信息注入注意力打分。标准的注意力打分只基于Query和Key的相似度Cointegrated Attention额外增加一项“均衡偏离状态的距离”。算法流程分三部分。第一部分为每个时间点计算ECM值序列。比如用输入序列X_t经过一个线性投影得到“协整组合值”Z_t w^T X_t然后定义均衡偏离e_t Z_t - Z_t的移动平均用于表达当前相对于近期平均均衡状态的偏离。第二部分在计算注意力矩阵时对任意两个位置i和j额外计算它们ECM值的差异差异越小说明两个时刻的均衡偏离状态越接近。第三部分把这个距离以惩罚项的形式注入注意力分数ECM距离近的位置会获得更高的注意力权重模型能据此找到“历史上均衡偏离状态相似、随后回归均衡”的完整轨迹。简化版代码如下def cointegrated_attention(q, k, v, ecm, gamma): scores torch.matmul(q, k.transpose(-2, -1)) / (d_head ** 0.5) ecm_diff torch.cdist(ecm, ecm) # [B, L, L] # 均衡偏离越接近打分越高gamma控制惩罚强度 scores scores - gamma * ecm_diff attn torch.softmax(scores, dim-1) return torch.matmul(attn, v)gamma是一个可学习的参数初始值不宜太大。我试过从0.1开始训练后续由模型自己调整效果比固定值更好。gamma太大会导致注意力被ECM距离主导忽略原始模式相似性模型退化成简单的最近邻搜索太小又等于没注入协整信息。ECM项的更新在推理时要注意一个细节长期预测过程中未来的ECM值本身也是未知的需要模型滚动生成。我的做法是模型每预测一步就把生成的预测值作为“观测值”重新计算ECM再继续预测下一步。这样误差修正信号会在滚动预测中不断变化模型不会沿着最初的错误方向一路跑偏。实测在96步长期预测上这个滚动ECM更新能带来10%以上的精度提升。3.3 为什么这种“桥”能扛住长期预测漂移不知道大家有没有试过用纯Transformer做多步预测观察它在第40步之后的预测分布——方差往往会缩小预测曲线逐渐变成一条平滑的线。本质原因是模型学到的短期模式无法给太远的未来提供有效约束不确定性无处安放最后只能输出一个“平均未来”。Cointegrated Attention之所以能缓解这个问题是因为它给模型装了一个“锚”。哪怕未来30步的细节完全未知模型至少知道当前均衡偏离的方向和幅度而且能从历史中找到相似的偏离状态参考当年它是怎么逐步回归均衡的。用一个我做实验时印象很深的例子。预测某地区电力负荷负荷本身有明显上升趋势不能直接当平稳序列处理。但我同时输入了温度和前一天负荷它们和负荷之间存在长期均衡关系——温度高了负荷增加、前一天的负荷惯性会延续。Cointegrated Attention找到了一段“高温期负荷偏离均衡”的历史片段模型在当时更快回归均衡于是预测后续的高温天气时预测曲线有了参考路径不再是一味外推。对比实验显示在Exchange Rate这类强协整的数据集上Cointegrated Attention相比标准Attention在长期预测168步上能把MSE降低15%左右。而在弱相关性的数据集上比如某些PatchTST使用的随机噪声较多的场景它的优势不明显但也不会拖后腿因为gamma参数会自动学到较小的值。4. TimeBridge整体架构与工程实现4.1 双通道融合门控不是简单拼接两条通道各自输出特征之后怎么融合是个值得花心思的问题。最简单的做法是把短期特征和长期特征拼接起来过一层全连接我实验下来效果一般原因是两条通道在不同预测步长上的可信度是动态变化的——预测初期短期通道的贡献更大预测后期长期通道的贡献逐渐上升。我最终采用的是门控机制用两路特征的拼接向量生成一个门控标量取值0到1之间每个时间步独立计算。short_feat integrated_attention_block(x) long_feat cointegrated_attention_block(x) gate torch.sigmoid(proj(torch.cat([short_feat, long_feat], dim-1))) output gate * short_feat (1 - gate) * long_feat门控的意义在于让模型自己去判断“当前这个位置是短期规律更可靠还是长期均衡关系更可靠”。在发生过突变的位置上短期通道的置信度应该偏低在趋势稳定的区间长期通道的置信度应该偏高。从注意力热力图上看门控值会呈现出清晰的相位变化——这比手工设定固定的融合权重要灵活得多。4.2 损失函数与训练细节损失函数我用的是MSE和MAE的加权和比例大概在0.7比0.3。MSE负责让大误差尽量小MAE负责保证整体偏乐观的误差不失控。单纯用MSE训练出来的模型在长周期预测中会在部分位置上出现尖峰误差MAE能把这种尖峰削平一些。在这个基础上我还加了一个辅助损失协整一致性损失。具体做法是对模型的预测值重新计算“预测序列的ECM偏离度”希望预测出来的未来轨迹也满足“偏离不会持续扩大”的约束。这个损失项用一个权重系数λ控制我通常设0.05到0.2之间太大会干扰主任务拟合。它的意义是给长期预测提供额外约束让模型生成出来的未来轨迹在经济意义上“讲得通”。训练时的优化器我强烈建议用AdamW而不是Adam时序模型训练中权重衰减对稳定长期预测有帮助特别是多层注意力的模型。学习率调度用Cosine Annealing前10%的步数做warmup。batch size不建议太大我试过batch size从32调到128短期精度基本不变但长期预测精度掉了约4%原因可能是大batch下注意力权重的方差被压缩削弱了模型对特定均衡偏离状态的敏感度。4.3 复杂度分析双通道是不是更慢了这是很多人在工程实践前最担心的问题两条通道会不会让计算量翻倍实际不是。Integrated Attention因为有窗口限制注意力矩阵不是全尺寸的计算复杂度从O(L²)降到了O(L·w)w是窗口大小固定后接近线性。Cointegrated Attention仍然需要全尺寸的注意力矩阵否则学不到长期均衡关系复杂度是O(L²)。所以整体复杂度主要取决于长期通道相比标准Transformer只是多了一个窗口注意力模块的开销大约多出20%的计算量。推理速度上96步预测窗口的batch推理TimeBridge在单张消费级GPU上比同尺寸的Informer大约慢30%但这个差距在长序列上会缩小因为Integrated Attention避免了全局注意力矩阵的内存爆炸。如果你需要在边缘设备上部署可以考虑把Cointegrated Attention的causal mask改成分段计算但精度会有轻微损失需要自行权衡。5. 实验设计与实证效果5.1 数据集和基线怎么选我在实验中用了四个有代表性的公开数据集ETTh1电力变压器温度、Electricity电力消耗、Exchange Rate汇率典型强协整数据、Traffic交通流量。前两个偏短期规律Exchange Rate偏长期均衡Traffic介于两者之间。选数据集的时候要注意覆盖不同协整强度否则双通道设计的优势体现不出来。基线模型我选了四个Informer长序列稀疏注意力、Autoformer分解自相关、PatchTST分片注意力、DLinear线性基线近几年很多号称复杂模型的其实打不过它。对比时保证输入长度一致预测步长分别取96、192、336、672。PatchTST值得作为重点对比对象因为在多个公共基准上它的效果很强如果TimeBridge不能在某些维度上超过它双通道设计的价值就要打问号。5.2 消融实验两条通道各自贡献多少消融实验我按三步做第一去掉Cointegrated Attention只用Integrated Attention短期通道第二去掉Integrated Attention只用Cointegrated Attention长期通道第三两条通道都保留但不加门控改用简单相加融合。下面是我在ETTh1和Exchange Rate上的典型结果实际复现时数值会有浮动但趋势一致模型配置ETTh1 MSE96步Exchange Rate MSE336步仅Integrated Attention0.3820.641仅Cointegrated Attention0.4210.532双通道简单相加0.3710.499TimeBridge双通道门控0.3540.461PatchTST0.3660.524从结果能看到几个现象。第一在ETTh1这种短期规律强的数据集上Integrated Attention的贡献大在Exchange Rate这种强协整数据集上Cointegrated Attention明显更占优。第二简单相加融合不如门控说明融合阶段的动态选择是有效果的。第三TimeBridge在两类数据上都能超过PatchTST优势在Exchange Rate长周期上最明显。5.3 长周期预测的稳定性差异只对比平均误差是不够的。长期预测模型中误差的分布形态更重要——有些模型在大部分时间预测都很好但每隔一段就出现一次大偏差这在工程上是不可接受的。我统计了各模型在672步预测窗口上的误差分布。标准Informer的误差分布明显偏宽尾部有大量“灾难性预测”样本Autoformer好一些但依然有超过5%的样本误差超过2倍标准差TimeBridge的误差分布集中在均值附近尾部更薄。这说明Cointegrated Attention提供的均衡锚点确实在抑制“灾难性漂移”上起了作用。此外我对比了模型在不同预测步长上的“误差累积速率”。Informer和PatchTST在96步预测之后误差增长几乎线性TimeBridge的误差增速在336步之后明显放缓曲线呈现出“先增长后趋缓”的形态——这正是误差修正机制在起作用的表现。你如果做过多步时间序列预测应该能直观感受到这种差异有多么明显。6. 复现路上容易踩的坑6.1 协整检验不显著的几类原因很多第一次做Cointegrated Attention的同学会卡在一开始的数据预处理上——明明两个序列理论上协整但ADF检验就是过不了。我遇到的主要原因有三种。第一种序列里存在结构断点。某个时间段数据生成机制发生变化导致整个样本期间的协整关系不稳定。处理方法只在最近一段窗口内做协整估计或者给协整向量加一个允许缓慢变化的机制对应到模型里就是可学习协整向量。第二种协整关系是非线性的。看散点图会发现均衡线是弯曲的线性拟合的残差自然通不过平稳性检验。这时候线性误差修正项表达力不够需要在ECM计算路径里加一个非线性层比如MLP。我在实际操作里换成了两层MLP效果有明显提升。第三种检验功效问题。序列样本量太少时ADF检验的功效很低。协整检验通常需要至少几百个样本如果你的输入序列长度只有几十检验过不了很正常。这种情况下不要死磕统计检验直接让模型去学ECM项训练过程中模型会自己把权重调到合适的位置。6.2 两条通道的梯度失衡问题双通道模型最容易出现的训练问题是梯度失衡——某一层通道的梯度在传播中消失导致这个通道实际上没在学东西。我遇到的情况是Cointegrated Attention的梯度相对Integrated Attention明显更小训练后期损失曲线平坦但长期预测效果没有明显提升。原因分析下来是两条通道的输入分布不同。Cointegrated Attention的输入通常是原始的、未经平稳化的长序列数值范围大梯度在softmax之后容易被压制。解决办法有几种我自己试下来最有效的是给两条通道分别设置学习率倍率系数长通道乘1.5短通道乘1.0。另外在门控融合之前对两条通道的输出分别做一次LayerNorm能减少分布差异带来的梯度不平衡这也是让门控信号更干净的手段。6.3 注意力权重坍塌的典型表现训练时间长了之后偶尔会出现注意力权重坍塌——所有位置几乎均匀分布注意力机制形同虚设。这种情况在标准Transformer里就存在在双通道模型里更隐蔽因为两条通道中可能只有一条塌了另一条看起来还正常导致最终误差还在下降但可解释性已经没了。排查方法是定期把注意力权重导出画热力图。正常的Integrated Attention应该表现出清晰的局部集中模式Cointegrated Attention应该表现出“均衡偏离相似的历史片段被高亮”的模式。如果发现权重变成一片均匀的灰色检查两个地方一是softmax温度是否太低可以尝试加一个temperature参数初始调成0.5二是dropout是否设置过高注意力模块的dropout设0.1以上权重就容易趋于均匀。我还在模型里加了一个辅助正则项对注意力权重矩阵的熵做约束。这个约束让熵保持在0.5到1.2之间归一化后既允许合理分散来覆盖多种历史状态又防止完全均匀化。这个正则项在训练后期效果明显也不影响收敛速度。6.4 我最后总结的工程习惯整个TimeBridge从设计到复现我做下来最大的体会是双通道模型不是你堆两个注意力模块就完事的统计假设、特征设计、训练策略、融合机制四个环节环环相扣。我自己最后沉淀了一套工程习惯先做序列统计性质分析平稳性、协整性再确定通道分工每个通道先用小模型验证可行性再放大参数量融合机制一定要用门控别偷懒用拼接实验对比时除了看MSE一定要看误差分布形态和长周期误差累积曲线。如果你要在这个方向上继续做我觉得还有三个值得尝试的扩展方向一是把Integrated Attention的窗口大小改成可学习让模型自己发现合适的短期记忆长度二是给Cointegrated Attention加入多尺度协整向量覆盖不同频率的均衡关系三是把双通道结构集成到PatchTST的分片框架里兼顾分片建模与长期均衡约束。我在实际做项目过程中还发现一个有意思的现象每次预测时把门控值打印出来看它会呈现出明显的周期性起伏长期均衡通道的值在预测后期稳步升高——这说明模型学到的“何时该信短期、何时该信长期”的模式几乎和人类直觉一致。这种可解释性在日常向业务方解释模型行为时帮了我很大的忙。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑