Transformer频域消偏提升时序预测准确性
Transformer在时间序列中已经应用比较广泛。但是最近一些针对Transformer的研究工作指出,Transformer的self-attention机制在建模序列数据时,比较倾向于学习低频的信息,而忽略了高频信息,造成频率偏差问题,影响了预测效果。
在时间序列预测中,这个问题也存在,为了解决这个问题,在KDD 2024上,大阪大学发表了一篇相关工作Fredformer,对Transfomrer在时间序列预测中的这种问题进行了解决。
论文标题:Fredformer: Frequency Debiased Transformer for Time Series Forecasting
下载地址:https://arxiv.org/pdf/2406.09009v4
1、背景
一些研究指出,transformer模型在进行时间序列预测时,会存在频率偏差问题,也就是模型只关注到了序列数据中的低频信息,忽略了高频信息。这个问题在时间序列预测领域同样存在。比如下图是一些基于Transformer的预测模型,可以看到在预测结果中,模型的预测是比较平滑的,反映了整体的趋势。但是对于高频趋势却预测不出来。
为了进一步验证这个问题,这篇文章首先进行了一些case study。预先设定3个频率,根据这些频率组成人造的时间序列数据,使用Transformer模型进行训练并预测。下图反应了各个频率的预测效果,训练到50轮后,k1作为低频信号已经被拟合的loss比较小了,但是k3这个高频信号却学得很差,说明Transformer时间序列预测模型也存在这种问题。而右侧的图调整了各个频率成分的权重后,高频的k3被拟合的更好了,k1反而拟合的不好。说明造成这种频率偏差问题的主要原因是各个成分的权重不同。这有点类似于多任务学习中,不同任务的数据量或者loss差别大,导致模型侧重于某几个任务的学习。
2、建模方法
为了解决上述的频率bias问题,本文从平衡各个频率成分的比例出发,同时又将各个频率成分的建模拆解开,尽量减小各个成分之间的影响。
整体的模型结构如下图所示。首先,通过傅里叶变换将时间序列映射到频域中。在频域中,将时间序列进行分patch处理,并对每个patch的数据进行频域中的归一化。通过这种方式,让每个频率成分在patch内单独建模,又让每个频率成分的振幅值域归一化到同一水平上,防止某一频率主导了模型学习。
对于每一个频率patch进行独立的Transfomrer建模。这个过程类似于iTransformer的操作,在变量维度使用Transformer。假设有N个频域patch,有C个变量,那么会有N个Transformer。每个Transformer在变量维度计算self-attention,每个频域的patch独立进行建模。通过这种方式,尽量减小各个频率之间的干扰。
最终,再将频域的表征通过逆向傅里叶变换映射回时域,通过一个MLP网络映射到最终输出结果。
3、实验效果
在实验中,作者对比了不同预测窗口的多变量时间序列预测效果,本文提出的方法取得了显著的效果提升。
从case分析来看,模型相比其他Transformer模型,在高频信号的预测上有一个显著的提升,对于极值点的预估更加准确。
本文转载自 圆圆的算法笔记,作者: Fareise