【文章学习系列之模型】DLinear

文章概况

《Are Transformers Effective for Time Series Forecasting?》是2023年发表于AAAI上的一篇文章。该文章以“Transformer在时序预测中是否有效”为论点展开讨论,并提出一种非Transformer系列的简易网络模型。

论文链接
代码链接

模型流程

在这里插入图片描述
该模型主体思路借鉴了ARIMA的分解思路,将原先时序数据分解为趋势项和残差项,并分别经过全连接层,最终求和获得预测结果。其中趋势项使用是对原始数据做平均池化所得,残差项是原始数据和池化所得数据的差值。

作者认为该模型具有四点优势:
1.路径短,捕获的长短期关系效果好
2.更少的内存、参数和更快的推理速度
3.结构简单,可解释性探索相对容易
4.超参数少,不需要过多地针对参数进行调优

实验

本文的实验部分主要针对Transformer在时序预测中是否有效展开讨论。

定量结果

在这里插入图片描述
在这里插入图片描述
同一组实验中,红色为最佳结果,蓝色为第二佳结果,可以看出Dlinear占据着更多的优势结果,总体而言优于前人已有的模型方法。因此,Transformer系列模型在时序预测中并不如简单的全连接模型有效。

定性结果

在这里插入图片描述
文中对三种数据集上的预测结果进行可视化。很显然发现Transformer系列模型无法捕捉这些数据的规律,预测结果远不如Dlinear。这从预报任务的多样性说明了Transformer系列模型的不足。

其他对比

该部分作者针对以下几个方面展开讨论。
回顾窗口的大小: 回顾长度越长,Transformer系列模型效果保持不变或逐渐恶化,Dlinear则显著提高。
训练的数据量: 多数情况下,减少数据集降低了误差,表明在数据达到一定规模后,数据集大小并不是限制模型预测能力的因素。
不同的编码策略: Transformer系列模型的核心模块的各不相同,最佳编码策略的选取也不尽相同。
模型效率: 和普通Transformer模型相比,各类衍生模型加入了众多的创新元素,虽然一定程度上有所提高,但带来了更多的训练参数和推理时间。这削弱了推导基于内存高效Transformer的方法的重要性。

总结

这篇论文使用一个简单的模型超过了众多Transformer系列复杂模型,不禁让我深思:时序预测中Transformer的发展是否真的有效?文中做了多种实验,均表现出Transformer在时序预测中大可不必且不如全连接的结论。或许追逐了这么多复杂模型的探索,尝试一些简单的模型会有不一样的风景。

03-30
<think>好的,用户想了解DLinear模型的相关信息,特别是模型介绍和使用方法。首先,我需要确认DLinear的基本背景。根据引用[2]中的内容,DLinear是一个时间序列预测模型,原文作者声称其效果可能超越了一些复杂的Transformer模型,比如Informer和Autoformer。这说明DLinear可能具有结构简单但性能优越的特点。 接下来,我需要整理DLinear的核心结构。根据资料,DLinear由三个主要组件构成:分解层、线性趋势预测和季节性残差预测。分解层可能使用移动平均来将时间序列分解为趋势和季节性成分。线性部分处理趋势,而季节性残差部分可能通过线性层来捕捉剩余的模式。这样的设计可能减少了模型的复杂性,同时保持了对时间序列关键特征的捕捉能力。 然后,关于DLinear的优势,用户可能想知道为什么选择它而不是其他复杂模型。根据引用[2],DLinear在计算效率、可解释性、训练速度和长序列预测方面表现突出。这些优势需要具体说明,比如分解结构带来的可解释性,线性层的低计算成本等。 使用方法方面,用户可能需要具体的步骤指导。引用[1]提到文档指导了训练和预测的流程,所以需要列出数据准备、模型构建、训练配置、训练和预测的步骤。同时,结合引用[2]中的代码解析,可能需要给出示例代码片段,比如使用PyTorch构建模型,并说明数据输入的格式要求,比如(batch_size, seq_length, feature_dim)。 此外,用户可能想知道DLinear的应用场景。根据时间序列预测的常见应用,比如电力负荷、销售预测等,可以举例说明。同时,需要比较DLinear与其他模型(如LSTM、Transformer)的适用场景,强调其在长序列和需要快速部署时的优势。 最后,生成相关问题时要覆盖模型结构、优势、使用方法、应用场景以及与其他模型的对比,确保用户能全面了解DLinear。需要检查是否所有数学公式都正确使用$...$或$$...$$格式,例如分解公式可能需要独立成段,使用双美元符号包裹。同时,确保回答结构清晰,分点说明,便于用户理解。</think>### DLinear 模型介绍 DLinear是一种基于分解结构的线性时间序列预测模型,通过**趋势-季节分解+双通道线性层**的极简设计,在多个基准数据集上超越Transformer等复杂模型[^2]。 #### 核心结构 1. **分解层**: 使用移动平均分解时间序列$X_t = T_t + S_t$ $$T_t = \frac{1}{m}\sum_{i=-k}^{k}X_{t+i},\quad S_t = X_t - T_t$$ ($m$为滑动窗口大小) 2. **双通道预测**: - 趋势通道:单层Linear处理低频趋势分量 - 季节性通道:单层Linear处理高频残差分项 3. **预测合成**: $$\hat{X}_{t+1:t+H} = \text{Linear}_{\text{trend}}(T_t) + \text{Linear}_{\text{seasonal}}(S_t)$$ #### 关键优势 1. **计算效率**:线性复杂度$O(L)$ vs Transformer的$O(L^2)$ 2. **可解释性**:显式的趋势/季节分解结构 3. **训练速度**:参数量仅为同类模型的1/100 4. **长序列预测**:在ETT、Weather等数据集上SOTA ### 使用方法(基于PyTorch) #### 数据准备 ```python # 输入格式:(batch_size, seq_len, feature_dim) train_loader = DataLoader(TimeSeriesDataset(train_data, input_len=96, pred_len=24)) ``` #### 模型构建 ```python import torch.nn as nn class DLinear(nn.Module): def __init__(self, input_len=96, pred_len=24): super().__init__() self.decompose = MovingAverage(window_size=25) # 移动平均分解 self.linear_trend = nn.Linear(input_len, pred_len) self.linear_seasonal = nn.Linear(input_len, pred_len) def forward(self, x): trend = self.decompose(x) seasonal = x - trend return self.linear_trend(trend) + self.linear_seasonal(seasonal) ``` #### 训练配置 ```python model = DLinear() criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) ``` #### 预测流程 ```python # 输入:历史序列 (batch_size, 96, 1) # 输出:预测结果 (batch_size, 24, 1) pred = model(hist_data) ``` ### 典型应用场景 1. 电力负荷预测(ETT数据集) 2. 交通流量预测(PeMS数据集) 3. 销售趋势预测(M5数据集) 4. 气象数据预测(Weather数据集)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清流自诩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值