提升Transformer在不平稳时间序列预测上效果的方法
今天为大家介绍一篇NIPS 2022清华大学的工作:Non-stationary 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的学习能力。模型整体的实现比较简单,但是背后发现问题和解决问题的思路很值得学习。
推荐阅读:我的2022届互联网校招分享我的2021总结浅谈算法岗和开发岗的区别互联网校招研发薪资汇总
2022届互联网求职现状,金9银10快变成铜9铁10!!公众号:AI蜗牛车保持谦逊、保持自律、保持进步发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)
发送【1222】获取一份不错的leetcode刷题笔记发送【AI四大名著】获取四本经典AI电子书
提升Transformer在不平稳时间序列预测上效果的方法相关推荐
- 时间序列预测02:经典方法综述 自回归ARIMA/SRIMA 指数平滑法等
机器学习和深度学习方法可以在具有挑战性的时间序列预测问题上取得不俗的表现.然而,在许多预测问题中,经典的方法,如SARIMA和指数平滑法(exponential smoothing ),容易优于更复杂 ...
- 时间序列预测的7种方法
import pandas as pd#取数 #df=pd.read_csv('jetrail.csv') #print(df.head()) '''ID Datetime Count 0 0 25- ...
- 使用Domain Adaption提升小场景时间序列预测效果的方法
解决时间序列预测任务时,训练数据太少怎么办?在机器学习场景中,Domain Adaptation是一种解决数据稀疏的常用方法.其核心思路是利用数据充足的source domain样本进行充分学习,再将 ...
- 【时序】TCCT:用于时间序列预测的紧耦合卷积 Transformer
论文名称:TCCT: Tightly-coupled convolutional transformer on time series forecasting 论文下载:https://doi.org ...
- 入行时间序列预测必读的4篇论文(附代码)
时间序列预测是一个发展历史悠久的技术领域,传统的统计学算法(e.g. ARIMA, ETS, GARCH)以及近年来的机器学习(e.g. 广义线性模型,xgboost).深度学习算法(e.g. LST ...
- 如何用XGBoost做时间序列预测?
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 来源:Jason Brownlee,整理:数据派THU 本文约3300字 ...
- 独家 | 如何用XGBoost做时间序列预测?
作者:Jason Brownlee 翻译:wwl 校对:王雨桐 本文约3300字,建议阅读10分钟 本文介绍了如何用XGBoost做时间序列预测,包括将时间序列转化为有监督学习的预测问题,使用前向验证 ...
- python 分类变量xgboost_如何用XGBoost做时间序列预测?
作者:Jason Brownlee翻译:wwl校对:王雨桐本文约3300字,建议阅读10分钟本文介绍了如何用XGBoost做时间序列预测,包括将时间序列转化为有监督学习的预测问题,使用前向验证来做模型 ...
- TensorFlow搭建CNN实现时间序列预测(风速预测)
目录 I. 数据集 II. 特征构造 III. 一维卷积 IV. 数据处理 1. 数据预处理 2. 数据集构造 V. CNN模型 1. 模型搭建 2. 模型训练及表现 VI. 源码及数据 时间序列预测 ...
- 时间序列预测的8种常用方法简介
时间序列预测的7种方法 1. 朴素预测法(Naive Forecast) 如果数据集在一段时间内都很稳定,我们想预测第二天的价格,可以取前面一天的价格,预测第二天的值.这种假设第一个预测点和上一个观察 ...
最新文章
- vsearch2.8.1使用和命令简介——中文帮助文档(免费64位版usearch)
- CSS布局代码:两列布局实例
- Interview:算法岗位面试—11.07早上上海某机器人公司(上市)面试之项目考察、比赛考察、图像算法的考察等
- java8 遍历目录_使用java8API遍历过滤文件目录及子目录及隐藏文件
- jquery网页刷新后控件失效_jquery动态增减控件如何才能不刷新页面
- getclass方法_防止数据重复提交的6种方法(超简单)!
- open wrt 跟换主题_换变速箱油的常见疑问解答
- 连接impala出现method not supported_Impala在网易大数据的优化和实践
- WorldFirstClassOnline
- 一张图看懂什么是运维?
- 得到控制台窗口的句柄
- 菜鸟+Sa+注入工具组合=肉鸡成群
- 图片加载失败,img触发错误显示默认图片
- linux sftp put 文件夹,使用sftp命令上传文件夹方法
- 纽约州立大学水牛城分校计算机科学专业,纽约州立大学水牛城分校有哪些强势专业...
- 区块链学习(8) EOS环境安装和智能合约部署实战(绝对干货!)
- 苹果笔记本怎样设置解除屏保时不需要输入密码
- 实验一:鸢尾花数据集分类
- ElasticSearch商城商品搜索实战
- 学习虫师的《web接口开发与自动化测试1-5章》