zl程序教程

您现在的位置是:首页 >  Java

当前栏目

提升Transformer在不平稳时间序列预测上效果的方法

2023-02-18 16:34:16 时间

今天为大家介绍一篇NIPS 2022清华大学的工作:Non-stationary Transformer。这篇文章主要针对不平稳时间序列预测问题,提出了一种新的Transformer结构,既能保留原始序列的重要信息,又能消除原始数据的不平稳性,显著提升了不平稳时间序列的预测效果

Transformer在时间序列预测中的各种应用,可以参考之前的文章如何搭建适合时间序列预测的Transformer模型?

  • 论文标题:Non-stationary Transformers: Rethinking the Stationarity in Time Series Forecasting
  • 下载地址:https://arxiv.org/pdf/2205.14415.pdf

1

时间序列中的不平稳性

时间序列的不平稳性(non-stationarity)是一个比较难处理,且真实世界中很常见的问题。时间序列的不平稳性指的是随着时间的变化,观测值的均值、方差等统计量发生变化。不平稳性会导致在训练集训练的模型,在测试集上效果较差,因为训练集和测试集属于不同时间,而不同时间的数据分布差异较大。

业内解决这种统计量随时间变化的不平稳问题主要方法是,对时间序列数据做一些诸如归一化等平稳化处理。例如对每个序列样本使用z-normalization处理成0均值1方差的,这样就可以解决不同时间步的样本统计量不一致的问题。但是这种解决方法会对Transformer模型带来一个负面影响:平稳化后的序列虽然统计量一致了,但是这个过程中也让数据损失了一些个性化的信息,导致不同序列的Transformer中的attention矩阵趋同。文中将这个现象叫作over-stationarization

如下图所示,对于一个序列的3个时间窗口的子序列,不进行归一化处理的attention分布差别很大,而使用了归一化处理后,3个序列的attention分布趋同了。这也是导致Transformer模型在一些non-stationary数据上效果不好的原因之一。

为了解决这个问题,这篇文章提出了一种新的Transformer结构Non-stationary Transformers,核心包括两个部分:一个是对输入序列的归平稳化处理的预测结果反平稳化处理方法;另一个是让Transformer能够处理平稳化序列的同时,学习不平稳化数据中的attention规律。

2

平稳化处理

文中对原始输入序列采用了简单有效的平稳化方法,对于每个输入序列,利用输入序列的均值和方差将其转换为0均值1方差的高斯分布,以此消除不同时间窗口时间序列统计量的差异:

对于模型的输出结果,使用均值和方差做反向处理,得到最终预测结果:

3

De-stationary Attention

为了让Transformer能够直接从平稳化前的时间序列中学习attention pattern,本文提出了De-stationary Attention。对于每个Attention层,由于输入的是平稳化后的序列,其和平稳化前序列的关系可以表达成如下公式:

并可以进一步转换为如下表达式:

因此,想要使用平稳化前的序列计算attention,核心就是去计算3项:平稳化的方差、Q在时间维度上的均值、平稳化前序列经过Transformer得到的K。文中采用一个MLP网络来学习这两个部分,MLP的输入是原始平滑前的时间序列,公式如下:

通过这种方式,既能让模型在平稳化后的序列上学习,又能让模型根据非平稳化前完整的序列信息学习Transforomer的attention pattern。模型的整体结构如下图所示。

4

实验结果

在实验部分主要对比了文中提出的模型和各类Transformer模型的效果,对比了96、192、336、720等不同时间窗口的效果,Non-stationarity Transformer遥遥领先。

将Non-stationarity Transformer的主要模块加入到各类Transformer模型中,可以显著提升它们的效果,这也进一步验证了文中提出的de-stationary attention模块的有效性。

最后,通过一些case的可视化分析可以发现,Non-stationarity Transformer可以更准确的刻画序列未来的趋势性和波动性。

5

总结

本文从一个Transformer在非平稳时间序列预测上的问题出发,提出了简单有效的改进,让Transformer在处理平稳化序列的同时,能够从原始非平稳化序列中提取有用的信息,提升attention的学习能力。模型整体的实现比较简单,但是背后发现问题和解决问题的思路很值得学习。

END