iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING
#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING
#论文地址:https://arxiv.org/abs/2310.06625
#论文源码开源地址:https://github.com/thuml/Time-Series-Library
#论文所属会议:Machine Learning (cs.LG)
#论文所属单位:清华大学、蚂蚁集团

一、导读
最近,来自清华大学和蚂蚁集团的研究人员重新审视Transformer结构在时序分析中的应用,提出一个全新的反转视角——无需修改任何模块,即可实现Transformer在时序预测任务上的全面领先。
其中,作者提出的iTransformer,考虑多维时间序列的数据特性,未修改任何Transformer模块,而是打破常规模型结构,在复杂时序预测任务中取得了全面领先,试图解决Transformer建模时序数据的痛点。
二、研究背景
现实世界的时序数据往往是多维的,除了时间维之外,还包括变量维度。每个变量可以代表不同的观测物理量,例如气象预报中使用的多个气象指标(风速,温度,湿度,气压等),也可以代表不同的观测主体,例如发电厂不同设备的每小时发电量等。一般而言,不同的变量具有完全不同的物理含义,即使语义相同,其测量单位也可能完全不同。
传统的Transformer模型在时间序列预测中存在性能下降和计算爆炸的问题,同时对于具有较大回溯窗口的序列预测也存在挑战。此外,传统的Transformer模型将每个时间步的多个变量嵌入到同一个标记中,可能导致学习到的注意力图无意义。不同于自然语言中的每个词(Token)具有较强的独立语义信息,在同为序列的时序数据上,现有Transformer视角下看到的每个「词」(Temporal Token)往往缺乏语义性,并且面临时间戳非对齐与感受野过小等问题。也就是说,传统Transformer的在时间序列上的建模能力被极大程度地弱化了。
为此,作者提出了一种全新的倒置(Inverted)视角。如下图,通过倒置Transformer原本的模块,iTransformer先将同一变量的整条序列映射成高维特征表示(Variate Token),得到的特征向量以变量为描述的主体,独立地刻画了其反映的历史过程。此后,注意力模块可天然地建模变量之间的相关性(Mulitivariate Correlation),前馈网络则在时间维上逐层编码历史观测的特征,并且将学到的特征映射为未来的预测结果。相比之下,以往没有在时序数据上深入探究的层归一化(LayerNorm),也将在消除变量之间分布差异上发挥至关重要的作用。

三、模型结构
3.1 整体结构
不同于以往Transformer预测模型使用的较为复杂的编码器-解码器结构,iTransformer仅包含编码器,包括嵌入层(Embedding),投影层(Projector)和 个可堆叠的Transformer模块(TrmBlock)。




3.2 模块详解
3.2.1 层归一化:层归一化的提出最初是为了提高深度网络的训练的稳定性与收敛性。
在以往Transformer中,该模块将同一时刻的的多个变量进行归一化,使每个变量杂糅无法区分。一旦收集到的数据没有按时间对齐,该操作还将引入非因果或延迟过程之间的交互噪声。

而在倒置版本中(公式如上),层归一化应用于每个变量的特征表示(Variate Token),让所有变量的特征通道都处于相对统一的分布下。这种归一化的思想在处理时间序列非平稳问题时已经被广泛证明是有效的,只是在iTransformer中可以自然而然的通过层归一化实现。
此外,由于所有变量的特征表示都被归一化到正态分布,由变量取值范围不同造成的差异可以减弱。相反,在此前的结构中,所有时间戳的特征表示(Temporal Token)将被统一标准化,导致模型实际看到的是过平滑的时间序列。
3.2.2 前馈网络:Transformer利用前馈网络编码词向量
此前模型中形成「词」向量的是同一时间采集的多个变量,他们的生成时间可能并不一致,并且反映一个时间步的「词」很难提供足够的语义。在倒置版本中,形成「词」向量的是同一变量的整条序列,基于多层感知机的万能表示定理,其具备足够大的模型容量来提取在历史观测和未来预测中共享的时间特征,并使用特征外推为预测结果。
另一个使用前馈网络建模时间维的依据来自最近的研究,研究发现线性层擅长学习任何时间序列都具备的时间特征。对此,作者提出了一种合理的解释:线性层的神经元可以学习到如何提取任意时间序列的内在属性,如幅值,周期性,甚至频率谱(傅立叶变换实质是在原始序列上的全连接映射)。
因此相较以往Transformer使用注意力机制建模时序依赖的做法,使用前馈网络更有可能完成在未见过的序列上的泛化。
3.2.3 自注意力:自注意力模块在该模型中用于建模不同变量的相关性,这种相关性在有物理知识驱动的复杂预测场景中(例如气象预报)是极其重要的。
作者发现自注意力图(Attention Map)的每个位置满足如下公式:

其中 q q qi, k k kj对应任意两个变量的Query和Key向量,作者认为整个注意力图可以在一定程度上揭示变量的相关性,并且在后续基于注意力图的加权操作中,高度相关的变量将在与其Value向量的交互中获得更大的权重,因此这种设计对多维时序数据建模更为自然和可解释。
综上所述,在iTransformer中,层归一化,前馈网络以及自注意力模块考虑了多维时序数据本身的特点,三者系统性互相配合,适应不同维度的建模需求,起到1+1+1 > 3的效果。
四、实验分析

作者在六大多维时序预测基准上进行了广泛的实验,同时在支付宝交易平台的线上服务负载预测任务场景的数据(Market)中进行了预测。

实验部分对比了10种不同的预测模型,包含领域代表性Transformer模型:PatchTST(2023)、Crossformer(2023)、FEDformer(2022)、Stationary(2022)、Autoformer(2021)、Informer(2021);线性预测模型:TiDE(2023)、DLinear(2023);TCN系模型:TimesNet(2023)、SCINet(2022)。
此外,文章分析了模块倒置给众多Transformer变体带来的增益,包括通用的效果提升,泛化到未知变量以及更加充分地利用历史观测等。
4.2 时序预测
如开篇雷达图所示,iTransformer在六大测试基准中均达到了SOTA,并在Market数据的28/30个场景取得最优效果(详见论文附录)。

在长时预测以及多维时间预测这一充满挑战的场景中,iTransformer全面地超过了近几年的预测模型。
五、iTransformer框架的通用性
在取得最佳效果的同时,作者在Reformer、Informer、Flowformer、Flashformer等Transformer变体模型上进行了倒置前后的对比实验,证明了倒置是更加符合时序数据特点的结构框架。
5.1 提升预测效果
通过引入所提出的框架,这些模型在预测效果上均取得了大幅度的提升,证明了iTransformer核心思想的通用性,以及受益于高效注意力研究进展的可行性。

5.2 泛化到未知变量
通过倒置,模型在推理时可以输入不同于训练时的变量数,文中将其与一种泛化策略——通道独立(Channel Independence)进行了对比,结果表明该框架在仅使用20%的变量时依然能够尽可能减少泛化误差。

5.3. 使用更长历史观测
以往Transformer系模型的预测效果不一定随着历史观测的变长而提升,作者发现使用该框架后,模型在历史观测增加的情况下展现出了惊人的预测误差减小趋势,在一定程度上验证了模块倒置的合理性。

作者此外在消融实验部分详细说明了iTransformer模块排布的合理性。
六、总结
作者受多维时间序列的本身的数据特性启发,反思了现有Transformer在建模时序数据的问题,提出了一个通用的时序预测框架iTransformer。
iTransformer框架创新地引入倒置的视角观察时间序列,使得Transformer模块各司其职,针对性完成时序数据两个维度的建模难题,展现出优秀的性能和通用性。
面对Transformer在时序预测领域是否有效的质疑,作者的这一发现可能启发后续相关研究,使Transformer重新回到时间序列预测的主流位置,为时序数据领域的基础模型研究提供新的思路。
参考1&&参考2
相关文章:
iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING
#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING #论文地址:https://arxiv.org/abs/2310.06625 #论文源码开源地址:https://github.com/thuml/Time-Series-Library #论文所属会议:Mach…...
QT C++ AES字符串加密实现
使用方法:在.h中引入类库。然后在cpp中直接引入使用即可 类库的下载地址https://download.csdn.net/download/u012372365/88478671 具体代码: #include <QCoreApplication> #include <QTest> #ifdef __cplusplus #include "unit_tes…...
关于mysql json字段创建索引
前言: 创建索引的方式分为两种,CREATE index 和 ALTER TABLE; 被创建索引的关键字类型又分两种,数字(UNSIGNED)和字符串(char(128)) 一、给json对象属性param_value(假…...
“探索Linux世界:从CentOS安装到常见命令使用“
目录 引言一、安装CentOS二、Linux的常见命令文件夹和目录操作命令文件编辑命令vi或vim编辑器命令模式编辑模式末行模式 总结 引言 在计算机领域,Linux作为一种强大而灵活的操作系统,在服务器、嵌入式设备和个人电脑等领域广泛应用。本文将引导您了解并…...
SVN出现Cleanup failed to process the following paths...
SVN报错,需要执行SVN的清理命令clean up,但clean up时出现错误Cleanup failed to process the following paths... 解决办法: 1、clean up的窗口,勾选Break locks和Fix time stamps(简单方便);…...
gitee上传项目
目录 首先在gitee新建一个仓库 接下来创建好项目,先找到生成公钥SSH的目录 接下来是生成公钥SSH 仓库创建好后,接着开始链接项目 首先在gitee新建一个仓库 接下来创建好项目,先找到生成公钥SSH的目录 接下来是找目录:C盘&a…...
实现文件上传和下载
文件上传的前端页面: multiple表示支持一次上传多个文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head> <body> <form action"/ge…...
大数据-Storm流式框架(七)---Storm事务
storm 事务 需求 storm 对于保证消息处理,提供了最少一次的处理保证。最常见的问题是如果元组可以被 重发,可以用于计数吗?不会重复计数吗? strom0.7.0 引入了事务性拓扑的概念,可以保证消息仅被严格的处理一次。因此可…...
Kafka - 3.x Kafka消费者不完全指北
文章目录 Kafka消费模式Kakfa消费者工作流程消费者总体工作流程消费者组原理消费者组初始化流程消费者组详细消费流程 独立消费者案例(订阅主题)消费者重要参数 Kafka消费模式 Kafka的consumer采用pull(拉)模式从broker中读取数据…...
Gerrit | 重磅! 2.x 版本升级到 3.x 版本----转
Gerrit | 重磅! 2.x 版本升级到 3.x 版本 为什么要做版本升级? 2.x known bugs 重大问题不一一列举,这里仅仅是举几个例子: 安全或权限问题:普通用户能看到敏感数据,例如看到其他用户的 hashed api 密码,…...
使用c++编程语言,用递归的方法求第n个斐波那契数,代码如下
#include<iostream> using namespace std;int fib_1(int n) {if (n < 1){return n;}return fib_1(n - 1) fib_1(n - 2); }int main() {cout << fib_1(6);return 0; }...
git config pull.rebase false
git pull 默认使用merge 可以使用 git pull --rebase 命令使用rebase 或者配置 git config pull.rebase true 使 git pull命令执行 git pull --rebase git config pull.rebase false 的作用是设置 Git 在执行 git pull 命令时默认使用 merge 而不是 rebase。 git pull 命…...
Spring面试题:(一)IoC,DI,AOP和BeanFactory,ApplicationContext
IoC,DI,AOP思想 IOC就是控制反转,是指创建对象的控制权的转移。以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系。对象与对…...
RabbitMQ如何保证消息不丢失呢?
RabbitMQ 是一个流行的消息队列系统,用于在分布式应用程序之间传递消息。要确保消息不会丢失,可以采取以下一些措施: 持久化消息: RabbitMQ 允许你将消息标记为持久化的。这意味着消息将被写入磁盘,即使 RabbitMQ 服务…...
VR步进式漫游,轻松构建三维模型,带来展示新形式!
引言: 虚拟现实(Virtual Reality,简称VR)已经成为当今科技领域的一项创新力量,它正在逐渐渗透到不同的领域,其中步进式漫游是VR技术的一项重要应用,它能在各个行业的宣传中发挥重要作用。 一&a…...
英语——分享篇——常用人物身份
常用人物身份 家庭成员类 father 父亲 mother 母亲 grandmother(外)祖母 grandfather(外)祖父 son 儿子 daughter 女儿 uncle 叔叔,舅舅 aunt 婶母,舅母 brother 兄弟 sister 姐妹 nephew 侄子 niece…...
202310-宏基组学物种分析工具-MetaPhlAn4安装和使用方法-Anaconda3- centos9 stream
MetaPhlAn 4是一种基于DNA序列的微生物组分析工具,它能够从宏基因组测序数据中识别和分离微生物的组成。以下是安装和使用MetaPhlAn 4的步骤: 安装MetaPhlAn 4: 裸机环境,手动安装 1. 安装依赖项: MetaPhlAn 4需要…...
systrace/perfetto如何看surfaceflinger的vsync信号方法-android framework实战车载手机系统开发
背景: hi,粉丝朋友们: 大家好!近期分享了surfaceflinger相关的一些blog,有同学就对相关的一些内容产生了一些疑问。 比如:vsync查看问题,即怎么才可以说是vsync到来了。 比如perfetto中surfac…...
一文带你彻底弄懂js事件循环(Event Loop)
JavaScript事件循环是JavaScript运行时环境中处理异步操作的机制。它允许JavaScript在执行同步代码的同时处理异步任务,以避免阻塞线程并提供更好的用户体验。 本文将在浏览器异步执行原理基础上带你彻底弄懂js的事件循环机制。 浏览器JS异步执行原理 js是单线程…...
数据结构与算法:二叉树之“堆排序”
目录 一、树概念及结构 二、二叉树树概念及结构 特殊的二叉树 三、堆的概念及结构 四、堆的创建 1、声明结构体 2、初始化 3、销毁 4、添加新元素 5、交换元素 6、向上调整 7、判断堆是否为空 8、移除堆顶元素 9、向下调整 10、获取堆元素个数 五、使用堆排序…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
