PatchTST:将时间序列分割为 Patch 的 Transformer

FreeGuideOnline 最新 2026-06-21

PatchTST 时间序列分割与 Transformer 模型详解

时间序列预测任务中,直接将原始点值喂入 Transformer 往往无法有效捕捉局部模式,且长序列会导致注意力机制的计算开销过大。PatchTST(Patch Time Series Transformer)提出了一种全新的思路:将时间序列分割为一系列子序列级 Patch,让 Transformer 在 Patch 粒度上进行建模。本教程将从零讲解 PatchTST 的核心动机、Patch 机制、模型结构以及为何它显著优于传统 Transformer。


为什么需要 Patch?

传统 Transformer 在处理时间序列时,每个时间步作为一个 Token。这带来两个严重问题:

  • 语义信息缺失:单个时间点没有明确的物理含义。例如,一个 0.5 的值单独出现,无法判断是上升趋势、下降趋势还是局部波动的起点。只有将连续若干个点组合在一起,才能形成有意义的“局部形状”。
  • 计算复杂度爆增:若序列长度为 L,标准自注意力的时间和空间复杂度均为 O(L²)。对于长达数千乃至上万个点的序列,完全不可承受。

Patch(片段)将一系列连续时间步聚合为一个更粗粒度的 Token,如同将一幅图像划分为大小相同的格块,每个块承载局部语义。时间序列 Patch 能直接编码局部趋势、周期形态、峰值结构等,同时将输入序列长度大幅压缩,从而降低计算量并提升模型对局部信息的敏感性。


什么是时间序列 Patch?

假设原始单变量序列为:

X ∈ R^{L}

定义 Patch 长度P跨步(Stride,即相邻 Patch 的间隔)为 S。则从 X 中可以切分出 N 个 Patch:

N = ⌊(L - P) / S⌋ + 1

每一个 Patch 为一段长度为 P 的连续点:

x_p^{(i)} = [X_{i·S}, X_{i·S+1}, …, X_{i·S+P-1}]

随后这些 Patch 被扁平化并线性映射到 D 维空间,构成 Transformer 的输入序列。整个过程将一个长序列转化为 N 个富含局部语义的 Token,序列长度从 L 骤降至 N,通常 N << L

图示:若 L=512, P=16, S=8,则 N = (512-16)/8 + 1 = 63,Transformer 实际处理的序列长度仅为 63,计算复杂度降低约 64 倍。


PatchTST 核心架构

PatchTST 由三个关键组件组成:Patch EmbeddingTransformer Encoder预测头,同时辅以实例归一化通道独立策略

1. 实例归一化(RevIN)

不同时间序列样本的均值和尺度差异极大。RevIN 在每个样本(实例)上计算均值与标准差,进行归一化后再送入模型,预测完成后逆向还原。这有效消除了分布漂移的干扰。

2. Patch Embedding

将划分出的 N 个 Patch(长度 P)通过一个可训练的线性投影层映射为维度 D 的嵌入向量,同时加上可学习的位置编码。由于 Transformer 需要知道 Patch 的先后顺序,PatchTST 使用与 Patch 数量匹配的位置编码。

3. 通道独立策略

多变量时间序列中,PatchTST 为每一个变量通道独立建模,即每个通道共享相同的 Transformer 权重但独立输入。这避免了不同变量在浅层特征融合时带来的噪声,极大降低了模型需要一次性处理的总序列长度。最终各通道的预测结果拼接成多变量输出。

4. Transformer Encoder

PatchTST 仅使用标准 Transformer 的编码器部分(不含解码器)。N 个嵌入向量经过多层多头自注意力和前馈网络后,提取全局上下文依赖。编码器最后一层的输出被收集并送入一个线性投影头,一次性生成预测窗口的所有未来值。


为什么 Patch 机制如此有效?

保留局部语义,降低噪声

Patch 将原始点值组合成有意义的局部片段。模型不必从孤立噪声点中学习模式,而是直接处理具有清晰形态的子序列,这对捕捉季节成分、趋势转折、短期震荡极为有利。

压缩序列长度,支持长时预测

序列长度从 L 变为 N 后,计算和内存消耗呈平方级下降。实际运算中,即便使用 512 输入步预测 96 甚至 336 个未来点,PatchTST 也仅需约 100 个 Token 级别的注意力,这使得它可轻松扩展至超长序列的长期预测。

提升感受野与并行性

不同于 RNN 逐步传递信息,Transformer 以 Patch 为单位的注意力可直接关联远距离的历史片段。每个 Patch 覆盖的 P 个点使其天然具备较大的局部感受野;通过全局注意力又迅速建立任意远距离 Patch 间的依赖,两者结合在长时预测中表现优异。

极度简单且通用

PatchTST 没有引入任何复杂的时序归纳偏置,如趋势分解、频率分析等,仅靠“Patch + Transformer Encoder”这一朴素组合即在多个基准上刷新纪录。其实现易于复现,也便于迁移到不同领域。


与普通 Transformer 的对比

特性 传统 Transformer PatchTST
输入 Token 每个时间步作为一个 Token 每个 Patch(多步)作为一个 Token
序列长度 等于输入序列长度 L 大幅缩减为 N
语义粒度 粒度过于细致,单点语义弱 局部形状语义丰富
计算复杂度 O(L²),长序列难以承受 O(N²)N << L
长时预测能力 通常较弱,需要稀疏注意力等额外措施 原生支持长序列,表现稳定
多变量处理 变量混合或使用图结构 通道独立,共享权重,简单高效

实验证明,PatchTST 在电力、交通、天气等主流数据集上的长期预测误差(MSE/MAE)显著优于 Informer、Autoformer、FEDformer 等专为长序列设计的模型。


动手实现要点

若自行实现 PatchTST,核心代码逻辑围绕以下三步展开:

  • 切分 Patch:利用 unfold 操作从输入序列中沿时间维提取重叠的 Patch 切片。
  • 投影与编码:将形状为 [Batch, N, P] 的张量 reshape 后经线性层映射到 [Batch, N, D],加上位置编码。
  • 预测量生成:Transformer Encoder 输出 [Batch, N, D],通过 Flatten 后接一个全连接层直接得到最后的预测序列。

提示:输出映射时常将编码器输出的所有 Token 进行平坦化再一次性投射到预测长度,比仅取最后一个 Token 可保留更丰富信息。


总结

PatchTST 通过将时间序列分割为具有局部语义的 Patch,大幅压缩序列长度,既保留了时序局部模式又使 Transformer 可高效处理长序列预测问题。其简洁的设计证明了:正确的数据表征方式往往比复杂的模型结构更为关键。对于希望深入时序预测的初学者,PatchTST 是理解现代深度学习预测模型的绝佳起点,也是实际应用中值得优先尝试的基线方法。