最新研究iTransformer: Transformer不适合多变量时序预测?

论文标题:

Inverted Transformers are Effective for Time Series Forecasting

论文作者:

Yong Liu , Tengge Hu , Haoran Zhang , Haixu Wu, Shiyu Wang, Lintao Ma, Mingsheng Long

导读: iTransformer是2024年时间序列预测领域的最新研究成果,目前在标准时间序列预测数据集上展现出最佳的性能(SOTA)。iTransformer的核心创新在于对经典Transformer架构的运用与转置设计。©️【深蓝AI】编译

1.方法引出

最近,线性预测模型蓬勃发展,导致修改基于transformer预测器架构的热情降低。如图1(上)所示,这些预测器利用transformer对时间序列的时间token进行全局依赖性建模,每个token由相同时间戳的多个变体组成。然而,由于性能下降和计算爆炸,transformer在预测具有较大回溯窗口的序列时面临挑战。此外,每个时间token的嵌入融合了代表潜在延迟事件和不同物理测量的多个变量,这可能无法学习以变量为中心的表征,并导致无意义的attention map。具体来说:

●同一时间点的点基本上代表了完全不同的物理意义,而这些点是由不一致的测量记录下来的,它们被嵌入到一个token中,多变量相关性被抹去了;

●由于同一时间点所代表的局部感受野和时间不一致事件过多,单个时间步形成的token难以揭示有益信息;

●即便序列变化会受到序列顺序的很大影响,在时间维度上没有适当地采用排列不变的attention机制;

因此,Transformer 在捕捉基本序列表征和刻画多变量相关性方面的能力较弱,限制了其对不同时间序列数据的处理能力和泛化能力。

在这里插入图片描述
图1|普通transformer(上)与提出的 iTransformer(下)之间的比较。Transformer 嵌入了时间token,其中包含每个时间步的多变量表示。iTransformer 将每个序列独立嵌入到变量token中,这样注意力模块就能描述多变量相关性,而前馈网络则能编码序列表征©️【深蓝AI】编译

在这项工作中,作者对 Transformer 组件的职责进行了反思,并在不对基本组件进行任何修改的情况下重新利用了 Transformer 架构。如图1(下)所示,本文提出的 iTransformer 只需在反转维度上应用attention和前馈网络。具体来说,单个序列的时间点被嵌入到变量token中,attention机制利用这些token来捕捉多变量相关性;同时,前馈网络应用于每个变量标记来学习非线性表示。通过实验, iTransformer 在多变量预测任务中实现了全面的SOTA。

在这里插入图片描述
图2|在多个数据集下的平均结果(MSE)©️【深蓝AI】编译

2.实现细节

在多变量时间序列预测中,给定历史观测数据 X = { x 1 , … , x T } ∈ T × N {\bf{X}} = \{ {{\bf{x}}_1}, \ldots ,{{\bf{x}}_T}\} \in {^{T \times N}} X={x1,,xT}T×N,有 T T T个时间步长和 N N N个变量,预测未来 S S S个时间步长 Y = { x T + 1 , … , x T + S } ∈ S × N {\bf{Y}} = \{ {{\bf{x}}_{T + 1}}, \ldots ,{{\bf{x}}_{T + S}}\} \in {^{S \times N}} Y={xT+1,,xT+S}S×N。为方便起见,将 X t , : {{\bf{X}}_{t,:}} Xt,:表示在第 t t t步同时记录的时间点, X : , n {{\bf{X}}_{:,n}} X:,n表示以 n n n为索引的每个变量的整个时间序列。值得注意的是,由于数据集中变量之间存在系统时滞, X t , : {{\bf{X}}_{t,:}} Xt,:可能不能反映在现实世界中的在某个时间点的同一事件。此外, X t , : {{\bf{X}}_{t,:}} Xt,:中的元素在物理测量和统计分布中可能彼此不同,而变量 X : , n {{\bf{X}}_{:,n}} X:,n通常与之共享。

iTransformer的结构如图3所示,其采用Transformer的纯编码器架构,包括嵌入、投影和Transformer模块:

在这里插入图片描述
图3|iTransformer的整体结构,它与Transformer的编码器具有相同的模块排列。(a)不同变量的原始序列被独立嵌入为token。(b)self-attention被应用于嵌入的变量token,以增强可解释性,揭示多变量相关性。©共享前馈网络提取每个token的序列表示。(d) 采用层归一化以减少变量之间的差异©️【深蓝AI】编译

2.1 完整序列嵌入为token

基于上述考虑,在iTransformer中,根据回溯序列 X : , n {{\bf{X}}_{:,n}} X:,n预测每个特定变量KaTeX parse error: Undefined control sequence: \buildrel at position 16: {{\bf{\mathord{\̲b̲u̲i̲l̲d̲r̲e̲l̲{\lower3pt\hbox…\scriptscriptstyle\frownKaTeX parse error: Expected 'EOF', got '}' at position 1: }̲} \over Y} }}_…的未来序列的过程简单表述为 在iTransformer中,根据回溯序列预测每个特定变量 的未来序列的过程简单表述如下:

h n 0 = Embedding ⁡ ( X : , n ) , H l + 1 = TrmBlock ( H l ) , l = 0 , ⋯   , L − 1 , ( 1 ) Y ^ : , n = Projection ⁡ ( h n L ) , \begin{aligned} \mathbf{h}_{n}^{0}& =\operatorname{Embedding}(\mathbf{X}_{:,n}), \\ \mathbf{H}^{l+1}& =\text{TrmBlock}(\mathbf{H}^l),l=0,\cdots,L-1, & \begin{pmatrix}1\end{pmatrix} \\ \hat{\mathbf{Y}}_{:,n}& =\operatorname{Projection}(\mathbf{h}_n^L), \end{aligned} hn0Hl+1Y^:,n=Embedding(X:,n),=TrmBlock(Hl),l=0,,L1,=Projection(hnL),(1)左右滑动查看完整公式

其中, H = { h 1 , … , h N } ∈ R N × D {\bf{H}} = \{ {{\bf{h}}_1}, \ldots ,{{\bf{h}}_N}\} \in {\mathbb{R} ^{N \times D}} H={h1,,hN}RN×D包含 N N N个维度为 D D D的嵌入token,上标表示层索引。Embedding: R T ↦ R D {\mathbb{R} ^T} \mapsto {\mathbb{R} ^D} RTRD和Projection: R D ↦ R S {\mathbb{R} ^D} \mapsto {\mathbb{R} ^S} RDRS均由多层感知器(MLP)实现。获得的变量token通过self-attention相互影响,并由每个TrmBlock中的共享前馈网络独立处理。具体来说,由于序列的顺序隐含地存储在前馈网络的神经元排列中,因此这里不再需要原始 Transformer 中的位置嵌入。

2.2 iTransformers组分

如图3所示,iTransformers由层归一化、前馈网络和self-attention模块组成的 L L L个模块堆叠组成。

2.3 层归一化

在典型的基于transformer的预测器中,该模块对同一时间点的多变量表示进行归一化处理,使变量之间逐渐融合。一旦收集到的时间点不代表同一事件,该操作还会引入非因果或延迟过程之间的交互噪声。在我们的转置版本中,归一化应用于单个变量的序列表示,如公式2所示:

LayerNorm ( H ) = { h n − Mean ( h n ) Var ( h n ) ∣ n = 1 , ⋯   , N }          ( 2 ) \text{LayerNorm}(\mathbf{H})=\left\{\left.\frac{\mathbf{h}_n-\text{Mean}(\mathbf{h}_n)}{\sqrt{\text{Var}(\mathbf{h}_n)}}\right|n=1,\cdots,N\right\} \;\; \;\; \begin{pmatrix}2\end{pmatrix} LayerNorm(H)={Var(hn) hnMean(hn) n=1,,N}(2)左右滑动查看完整公式

2.4 前馈网络

Transformer采用前馈网络(FFN)作为token编码的基本构件,并对每个token进行相同的编码。在普通transformer中,构成token的同一时间点的多个变量可能会错位,并且过于局部化,无法为预测提供足够的信息。在转置版本中,FFN利用的是每个变量token的序列表示。根据通用近似定理,它们可以提取复杂的表示来描述时间序列。通过转置模块的堆叠对观察到的时间序列进行编码,并利用密集的非线性连接对未来序列的表示进行解码,这与最近建立在MLP上的工作一样有效。

最近对线性预测的重新研究强调,MLP提取的时间特征可以在不同的时间序列中共享。本文提出了一个合理的解释,即MLP的神经元被训练来描绘任何时间序列的内在属性,如振幅、周期性和偶频频谱(神经元作为滤波器),与应用于时间点的self-attention相比,它是一种更有效的预测表征学习器。

2.5 self-attention

以往的预测通常采用attention机制来促进时间依赖性建模,而转置模型则将整个单变量序列视为一个独立的过程。具体来说,通过对每个时间序列 H = { h 1 , … , h N } ∈ R N × D {\bf{H}} = \{ {{\bf{h}}_1}, \ldots ,{{\bf{h}}_N}\} \in {\mathbb{R} ^{N \times D}} H={h1,,hN}RN×D,self-attention模块采用线性投影得到query、key和value Q , K , V ∈ R N × d k {\bf{Q}},{\bf{K}},{\bf{V}} \in {\mathbb{R}^{N \times {d_k}}} Q,K,VRN×dk,其中 d k d_k dk为投影维数。 q i , k j ∈ R d k {{\bf{q}}_i},{{\bf{k}}_j} \in {\mathbb{R}^{{d_k}}} qi,kjRdk表示一个(变量)token的特定query和key,softmax前的得分的每一项都被表述为 A i , j = ( Q K ⊤ / d k ) i , j ∝ q i ⊤ k j {{\bf{A}}_{i,j}} = {({\bf{Q}}{{\bf{K}}^{\rm{ \top }}}/\sqrt {{d_k}} )_{i,j}} \propto {\bf{q}}_i^{\rm{ \top }}{{\bf{k}}_j} Ai,j=(QK/dk )i,jqikj。由于每个token之前都在其特征维度上进行了归一化处理,因此每一项可以在一定程度上揭示出变量间的相关性,整个分数图 A ∈ R N × N {\bf{A}} \in {\mathbb{R}^{N \times N}} ARN×N显示了配对变量token之间的多变量相关性。基于这种直觉,可以认为所提出的机制在多变量序列预测方面更自然、更可解释。

iTransformer 的伪代码如下所示:

在这里插入图片描述
图4|iTransformer的伪代码©️【深蓝AI】编译

3.结果展示

3.1 多元预测的主要结果

本文在大量具有挑战性的多变量预测基准以及支付宝在线交易的服务器负载预测(通常有数百个变量,用Dim表示)中对iTransformer进行了评估。iTransformer在预测高维时间序列方面表现尤为突出。

在这里插入图片描述
表1|数据集详细说明。Dim表示每个数据集的变量编号;Dataset Size 分别表示(训练、验证、测试)拆分的时间点总数;Prediction Length 表示要预测的未来时间点,每个数据集中包含四个预测设置;频率表示时间点的采样间隔©️【深蓝AI】编译

在这里插入图片描述
表2|多变量时间序列预测基准(平均结果),红色与蓝色分别表示最优与次优结果©️【深蓝AI】编译

在这里插入图片描述
表3|支付宝交易平台在线交易负载预测(平均结果),红色与蓝色分别表示最优与次优结果©️【深蓝AI】编译

3.2 Transformer通用性能提升

通过引入所提的框架,Transformer及其变体的性能得到了显著提高,证明了iTransformer方法的通用性,与高效attention机制的效果。

在这里插入图片描述
表4|提出的反转框架获得的性能提升,包括平均性能和相对MSE降低(提升)©️【深蓝AI】编译

3.3 对未见变量的泛化

从技术上讲,iTransformer可以在推理过程中使用任意数量的变量进行预测。我们将每个数据集的变量分成五折,用20%的变量训练模型,并用部分训练好的模型预测所有变量。

在这里插入图片描述
图5|对未见变量的泛化性能©️【深蓝AI】编译

3.4 更好地利用回溯窗口

随着回溯窗口长度的增加,iTransformers 的预测性能有了显著提高

在这里插入图片描述
图6|回溯长度 T ∈ 48 , 96 , 192 , 336 , 720 T∈{48, 96, 192, 336, 720} T48,96,192,336,720和固定预测长度 S = 96 S=96 S=96时的预测性能。虽然基于transformer预测器的性能并不一定受益于回溯长度的增加,但转置框架增强了原始transformer及其变体在扩大回溯窗口时的性能©️【深蓝AI】编译

3.5 模型分析

●得益于转置transformer模块:如图7左所示,转置transformer能学习到更好的时间序列表示

●如图7右所示:转置self-attention模块学习可解释的多变量相关性

在这里插入图片描述
图7|序列表示和多变量相关性分析。左图:Transformers和iTransformers的MSE和CKAs相似度比较。CKAs相似度越高,表明更有利于准确预测;右图:原始时间序列与通过转置self-attention学习的分数图的多变量相关性案例可视化©️【深蓝AI】编译

3.6 模型消融

在变量维度上利用attention、在时间维度上利用前馈的 iTransformer 性能最佳。在这些设计中,原始Transformer(第三行)的性能最差,这表明传统架构与该任务的责任不匹配。

在这里插入图片描述
表5|iTransformer上的消融。我们在各自维度上替换不同的分量,以学习多变量相关性(Variate)和序列表示(Temporal),这里列出了所有预测长度的平均结果©️【深蓝AI】编译

3.7 模型效率

本文利用多变量序列的变量生成能力,提出了一种多变量序列训练策略。虽然每批经过部分训练的变量的性能(左图)与采样率保持稳定,但训练过程的内存占用(右图)却可以大大减少。

在这里插入图片描述
图8|高效训练策略分析。虽然在不同采样比例的每批部分训练变量上的性能(左)保持稳定,但内存占用(右)可以大大减少©️【深蓝AI】编译

4.结论

本文对Transformer的架构进行了反思,发现Transformer原始组件在多变量时间序列方面的能力尚未得到充分开发。因此,作者提出iTransformer,将独立时间序列视为标记,通过self-attention捕捉多变量相关性,并利用层归一化和前馈网络模块学习更好的序列全局表示,以用于时间序列预测。通过实验,iTransformer在真实世界基准测试中取得了全面的SOTA。不本文广泛分析了反转模块和架构选择,为未来改进基于Transformer 的预测器指明了方向。

笔者小tip:

本文只采用了编码器做嵌入,预测的数据由前馈网络生成。没有使用接收目标序列的解码器。在时间序列的实际应用中,可以发现使用目标序列的解码器会导致很多问题。个人认为本文中使用的简化解码器有望减轻这些麻烦。

笔者|Sienna

审核|Los

移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态。

  • 29
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用TensorFlow实现Transformer进行多步多变量时序预测的完整代码: ```python import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 加载数据集 def load_data(): data = np.load('data.npz') x_train = data['x_train'] y_train = data['y_train'] x_test = data['x_test'] y_test = data['y_test'] return x_train, y_train, x_test, y_test # 定义Transformer模型 class Transformer(tf.keras.Model): def __init__(self, d_model, n_heads, d_ff, input_len, output_len): super().__init__() self.encoder = tf.keras.layers.Dense(d_model, activation='relu') self.decoder = tf.keras.layers.Dense(output_len) self.encodings = [tf.keras.layers.Dense(d_model, activation='relu') for i in range(input_len)] self.decodings = [tf.keras.layers.Dense(d_model, activation='relu') for i in range(output_len)] self.attention = [tf.keras.layers.MultiHeadAttention(num_heads=n_heads, key_dim=d_model) for i in range(output_len)] self.dropout = tf.keras.layers.Dropout(0.1) self.ffn = tf.keras.Sequential([ tf.keras.layers.Dense(d_ff, activation='relu'), tf.keras.layers.Dense(d_model) ]) def call(self, inputs): encodings = [self.encoder(inputs[:, i]) for i in range(inputs.shape[1])] encodings = tf.stack(encodings, axis=1) for i in range(len(self.attention)): query = self.decodings[i](inputs[:, -(i+1)]) query = tf.expand_dims(query, axis=1) attention_output = self.attention[i](query, encodings) attention_output = tf.squeeze(attention_output, axis=1) attention_output = self.dropout(attention_output) attention_output = self.ffn(attention_output) inputs = tf.concat([inputs, attention_output], axis=1) outputs = self.decoder(inputs[:, -output_len:]) return outputs # 定义训练函数 def train_model(model, x_train, y_train, epochs, batch_size): optimizer = tf.keras.optimizers.Adam(learning_rate=0.001) loss_fn = tf.keras.losses.MSE for epoch in range(epochs): for i in range(0, len(x_train), batch_size): x_batch = x_train[i:i+batch_size] y_batch = y_train[i:i+batch_size] with tf.GradientTape() as tape: y_pred = model(x_batch) loss = loss_fn(y_batch, y_pred) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) if epoch % 10 == 0: print('Epoch', epoch, 'Loss', loss.numpy()) # 定义测试函数 def test_model(model, x_test, y_test): y_pred = model(x_test) loss = tf.keras.losses.MSE(y_test, y_pred) print('Test Loss', loss.numpy()) plt.plot(y_test[:, 0], label='True') plt.plot(y_pred[:, 0], label='Pred') plt.legend() plt.show() # 加载数据集 x_train, y_train, x_test, y_test = load_data() # 定义模型参数 d_model = 64 n_heads = 4 d_ff = 128 input_len = x_train.shape[1] output_len = y_train.shape[1] # 初始化模型 model = Transformer(d_model, n_heads, d_ff, input_len, output_len) # 训练模型 epochs = 100 batch_size = 32 train_model(model, x_train, y_train, epochs, batch_size) # 测试模型 test_model(model, x_test, y_test) ``` 需要注意的是,这里的数据集应该是经过预处理的,包括特征归一化和数据集划分等。同时,由于Transformer模型的训练时间较长,建议在GPU上运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值