Mamba+时间序列预测!既要SOTA又要低开销!

Mamba在性能和效率上的优势大家都有目共睹,因此最近越来越多研究也开始关注Mamba+时间序列预测。

在时间序列预测中,数据的长期依赖性是一个核心的挑战。与Transformer等模型相比,Mamba在训练阶段和推理阶段都具有随序列长度线性增长的时间复杂度,这显著提高了运算效率。同时,Mamba的架构相对简单,去除了传统的注意力和MLP块,也提供了更好的可扩展性和性能。

如SiMBA等多个基于Mamba的时间序列预测实践案例证明了这一方法的有效性,在实现SOTA的同时还能保持较低的计算开销。

为帮大家梳理Mamba时间序列预测的最新进展,我整理了2024新发表的11篇高质量工作,可参考的创新点都提炼好了,开源代码已附。

论文原文以及开源代码需要的同学看文末

Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting

方法:论文提出一种适应性地捕捉多变量时间序列数据的内部或者系列间依赖关系的新模型Bi-Mamba+,并且通过在Mamba中添加遗忘门来选择性地将新特征与历史特征进行补充性地结合,从而在更长的范围内保留历史信息。通过在模型中引入双向结构和分割时间序列为小块来更全面地建模时间序列数据。

创新点:

  • 提出了Bi-Mamba+模型,通过改进的Mamba+块和双向结构,更准确地预测了多元时间序列数据。

  • 设计了SRA决策器,基于Spearman相关系数自动选择通道独立或通道混合的标记策略,并将时间序列划分为片段以更细粒度地捕捉长期依赖关系。

  • 在8个广泛使用的真实世界数据集上进行了广泛实验,结果表明Bi-Mamba+在不同的预测长度下取得了优越的性能。

DTMamba : Dual Twin Mamba for Time Series Forecasting

方法:论文提出一种名为DTMamba的模型,通过利用两个TMamba模块,有效捕捉时间数据中的长期依赖关系,从而在长期时间序列预测中取得更好的性能。

创新点:

  • 提出了DTMamba模型,该模型由两个TMamba块组成。通过利用两个TMamba块,DTMamba可以有效地捕捉时间数据中的长期依赖关系。

  • 引入了通道独立和反向通道独立的概念。在时间序列数据预测中,通道独立可以防止模型过拟合。为了使每个通道的数据可以独立处理,需要对时间序列数据进行重塑。作者提出的通道独立方法可以有效地处理这个问题,并且在模型性能上具有明显优势。

MambaTS: Improved Selective State Space Models for Long-term Time Series Forecasting

方法:论文介绍了一种名为MambaTS的新型多变量时间序列预测模型。通过改进选择性SSMs,该模型能够在全局上建立依赖关系,并在多个数据集和预测设置中取得了最新的最佳结果。

创新点:

  • 介绍了一种新的时间序列预测模型MambaTS,该模型在改进的选择性SSMs的基础上进行了构建。通过引入VST,作者有效地组织了所有变量的历史信息,形成了全局的回顾序列。

  • 提出了VAST,它可以在训练过程中发现不同变量之间的关系,并利用ATSP求解器确定最佳变量扫描顺序。

  • 引入了变量沿时间扫描机制(VST),将变量的标记以交替的方式在时间步中排列。这种结构化组织使模型能够更准确地捕捉时间序列数据中的长期依赖性和动态变化。

Integrating Mamba and Transformer for Long-Short Range Time Series Forecasting

方法:本文旨在探索时间序列数据中Mamba和Transformer架构的融合潜力,提出了一种混合框架Mambaformer,通过内部整合Mamba和Transformer的优势实现长短范围的时间序列预测,实验证明Mambaformer家族在长短范围时间序列预测问题上优于Mamba和Transformer。

创新点:

  • 提出了一种混合架构,将Mamba模型和Transformer模型结合起来用于时间序列预测。他们研究了Mambaformer家族的不同结构,包括Mambaformer、注意力-Mamba混合模型和Mamba-注意力混合模型。这些混合模型整合了Mamba和Transformer的优势,有助于进行有效的预测任务。

  • 核心的Mambaformer层交错了Mamba层和自注意力层,以结合Mamba和Transformer的优点。注意力层捕捉时间序列数据中的短期依赖关系,而Mamba层增强了捕捉长期依赖关系的能力。这一层显著提高了Mambaformer家族在长短程时间序列预测中的性能。

关注下方《学姐带你玩AI》🚀🚀🚀

回复“曼巴时序”获取全部论文+代码

码字不易,欢迎大家点赞评论收藏

### 基于Mamba时间序列预测方法实现 为了实现基于Mamba时间序列预测方法,可以按照以下方式构建模型并完成其实现: #### 1. 数据准备 在时间序列预测任务中,通常需要将原始数据转换为适合模型输入的形式。假设多元时间序列的数据形状为 \( B \times M \times n_i \),其中 \( B \) 表示批次大小,\( M \) 表示特征维度,\( n_i \) 表示时间步数。 ```python import torch # 示例:生成随机时间序列数据 batch_size = 32 feature_dim = 8 time_steps = 64 data = torch.randn(batch_size, feature_dim, time_steps) print(f"Input data shape: {data.shape}") ``` --- #### 2. 构建Mamba模块 Mamba是一种高效的注意力机制变体,其核心在于减少计算复杂度的同时保持较高的精度。以下是简化版的Mamba模块实现[^4]。 ```python class MambaModule(torch.nn.Module): def __init__(self, d_model, num_heads=8, dropout=0.1): super(MambaModule, self).__init__() self.d_model = d_model self.num_heads = num_heads # 定义多头自注意力层 self.self_attn = torch.nn.MultiheadAttention(d_model, num_heads, dropout=dropout) # 定义前馈网络 self.ffn = torch.nn.Sequential( torch.nn.Linear(d_model, d_model * 4), torch.nn.GELU(), torch.nn.Dropout(dropout), torch.nn.Linear(d_model * 4, d_model) ) def forward(self, x): attn_output, _ = self.self_attn(x, x, x) ffn_output = self.ffn(attn_output) return ffn_output + x # 残差连接 ``` --- #### 3. 组合多个Mamba块形成TimeMachine模型 根据论文描述,TimeMachine模型由多个Mamba块组成,并支持双向结构以捕捉时间序列中的上下文信息[^3]。 ```python class TimeMachineModel(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, num_layers=4, num_heads=8, dropout=0.1): super(TimeMachineModel, self).__init__() layers = [] for _ in range(num_layers): layers.append(MambaModule(hidden_dim, num_heads=num_heads, dropout=dropout)) self.mamba_stack = torch.nn.Sequential(*layers) self.input_proj = torch.nn.Linear(input_dim, hidden_dim) self.output_proj = torch.nn.Linear(hidden_dim, output_dim) def forward(self, x): x = self.input_proj(x.permute(2, 0, 1)) # 调整到 (time_steps, batch_size, features) x = self.mamba_stack(x) x = self.output_proj(x[-1]) # 使用最后一个时间步作为输出 return x ``` --- #### 4. 训练过程 定义损失函数和优化器,并进行训练循环。 ```python model = TimeMachineModel(input_dim=feature_dim, hidden_dim=128, output_dim=1) criterion = torch.nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) for epoch in range(10): # 示例:运行10个epoch optimizer.zero_grad() outputs = model(data) loss = criterion(outputs.squeeze(-1), target_data) # 替换target_data为目标标签 loss.backward() optimizer.step() print(f"Epoch [{epoch+1}/10], Loss: {loss.item():.4f}") ``` --- #### 总结 上述代码展示了如何利用Mamba模块构建一个简单的时间序列预测模型——TimeMachine。该模型通过堆叠多个Mamba块实现了高效的时间序列建模能力[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值