简介:本文系统解析iTransformer与Transformer在多变量时序预测中的技术差异,从模型架构、物理意义保留、长期依赖处理等维度展开对比,结合Python代码示例说明iTransformer如何解决传统模型的两大硬伤,为开发者提供多变量时序预测领域的创新技术选型参考。
Transformer是2017年由行业研究者提出的基于自注意力机制(Self-Attention)的深度学习模型,其核心通过多头注意力机制捕捉序列数据中的长距离依赖关系,在自然语言处理(NLP)领域取得突破性进展后,逐渐被扩展至时序预测任务。传统Transformer处理多变量时序数据时,通常将同一时间戳下的所有变量拼接为一个token,通过全局注意力计算实现跨变量、跨时间的信息交互。
iTransformer(Interpretable Transformer)是2024年发表于机器学习顶会ICLR的新架构,专为多变量时序预测设计。其核心创新在于将变量间关系建模与时间依赖建模解耦:通过独立处理每个变量的时间序列(变量维度注意力)和跨变量的静态关系(时间维度注意力),避免传统模型中物理意义混淆的问题,同时通过分层注意力机制提升长期预测精度。
传统Transformer在多变量时序预测中存在两大硬伤:
iTransformer通过解耦变量与时间维度的注意力计算,既保留了变量的物理特性,又通过分层结构降低了长期预测的复杂度,成为多变量时序预测领域的SOTA(State-of-the-Art)模型。
iTransformer的架构包含三大关键模块:
传统Transformer将变量拼接为token后,注意力权重矩阵的维度为(N×T)×(N×T)(N为变量数,T为时间步),导致变量间关系与时间依赖混合计算。iTransformer通过分阶段处理:
N×T×D(D为隐藏层维度),确保变量特性不被稀释。N×N,仅关注静态关系。T×T,避免跨变量干扰。iTransformer采用分层注意力机制,将全局注意力分解为局部注意力与全局聚合:
| 对比维度 | Transformer | iTransformer |
|---|---|---|
| 输入处理 | 变量拼接为token | 变量独立处理 |
| 注意力维度 | 混合变量与时间维度 | 解耦变量间与时间维度 |
| 长期依赖处理 | 全局注意力,复杂度高 | 分层注意力,复杂度低 |
| 物理意义保留 | 变量特性易丢失 | 变量特性保留完整 |
| 适用场景 | 单变量或同质变量时序预测 | 多变量异构时序预测 |
import torchimport torch.nn as nnclass iTransformer(nn.Module):def __init__(self, num_vars, seq_len, d_model):super().__init__()self.var_encoder = nn.ModuleList([nn.LSTM(input_size=1, hidden_size=d_model, batch_first=True)for _ in range(num_vars)])self.inter_var_attn = nn.MultiheadAttention(d_model, num_heads=4)self.temporal_attn = nn.MultiheadAttention(d_model, num_heads=4)def forward(self, x): # x.shape: (batch, num_vars, seq_len)# 变量编码阶段var_features = []for i in range(self.num_vars):_, (h, _) = self.var_encoder[i](x[:, i:i+1, :])var_features.append(h.squeeze(0))var_features = torch.stack(var_features, dim=1) # (batch, num_vars, d_model)# 变量间注意力阶段inter_var_out, _ = self.inter_var_attn(var_features.transpose(0, 1), # (num_vars, batch, d_model)var_features.transpose(0, 1),var_features.transpose(0, 1))# 时间注意力阶段(需扩展维度模拟时间步)temporal_input = inter_var_out.unsqueeze(2).repeat(1, 1, self.seq_len, 1)temporal_out, _ = self.temporal_attn(temporal_input.transpose(1, 2), # (batch, seq_len, num_vars, d_model)temporal_input.transpose(1, 2),temporal_input.transpose(1, 2))return temporal_out.mean(dim=2) # 聚合时间维度
d_model(隐藏层维度)和num_heads(注意力头数),通常d_model设为变量数的2-4倍效果较佳。O(N²)内存,建议变量数超过100时使用梯度检查点(Gradient Checkpointing)优化显存。iTransformer通过解耦变量与时间维度的注意力计算,解决了传统Transformer在多变量时序预测中的物理意义丢失和长期依赖退化问题,尤其适用于变量异质性强、预测周期长的场景。然而,其分层注意力机制增加了模型复杂度,需在变量数较少(如<50)或计算资源受限时谨慎评估性价比。对于单变量或同质变量预测任务,轻量级模型(如LSTM或TCN)可能仍是更高效的选择。