详细内容或原文请订阅后点击阅览
为什么 Transformers 需要时间序列的位置编码:视觉指南
从标量观察到自我关注,以及位置信息如何恢复序列顺序这篇文章《为什么 Transformers 需要时间序列的位置编码:视觉指南》首先出现在《走向数据科学》上。
来源:走向数据科学在深入研究时间序列的基础模型时,我意识到如果不首先了解变压器,我就无法真正理解它们。我不想将这些模型用作黑匣子,因此我开始向后追溯这些想法,从基础模型到变压器,从变压器到自注意力。有趣的是,虽然 Transformer 最初是为语言而构建的,但核心思想自然而然地融入了时间序列。这两种模式非常不同,但它们有一些基本的共同点:都是序列,并且在这两种情况下,顺序都会改变意义。
在语言中,狗咬人与人咬狗有很大不同。
时间序列没有什么不同。昨天 30∘30^\circ30∘ 和今天 20∘20^\circ20∘ 的温度与昨天 20∘20^\circ20∘ 和今天 30∘30^\circ30∘ 的情况不同。这些值可能相同,但它们的顺序会改变序列的含义。
问题是,如果 self-attention 同时查看所有观察结果,变压器如何知道哪个观察结果先出现,哪个观察结果稍后出现,或者两个观察结果相距多远?
这个问题让我想到了位置编码。
最令我惊讶的是,如此简单的数学思想如何能够赋予 Transformer 一种秩序感。从那时起,确切的技术已经有了很大的发展,但根本的问题仍然是一样的。
本文是我从头开始构建这种直觉的尝试,从一个简单的时间序列开始,遵循从原始观察到自我关注,最后到位置编码的路径。
从标量观察到向量表示
考虑一个简单的时间序列,其中包含五个工作日记录的温度:
每个观察 xtx_txt只是一个标量。然而,变压器对维度 dmodeld_{model}dmodel 的向量进行操作。因此,需要首先将标量观测值映射到该表示空间中。
一个简单的方法是通过学习的线性投影,即嵌入:
给我们一个向量表示序列:e1,e2,e3,e4,e5e_1, e_2, e_3, e_4, e_5e1,e2,e3,e4,e5
嵌入是序列的深层、抽象表示,采用多维数值向量的形式,对其特征进行编码并且模型可以理解。[1]
每个 ete_tet捕获有关该时间步的观测值的信息,但此时,它只是观测值的表示。
这里重要的词是学习。该模型没有给出温度的预定义向量表示,例如 18∘18^\circ18∘。参数 WeW_eWe和 beb_ebe是在训练过程中学习的,以便生成的表示对任务有用。
此时,ete_tet代表观察到的内容。它尚未告诉模型观察结果发生在序列中的位置。
自注意力如何构建上下文?
自注意力允许每个观察使用序列其余部分的信息。
假设我们要更新周五的表示。该模型首先从每个 ete_tet 创建三个学习投影:
矩阵 WQW_QWQ、WKW_KWK和 WVW_VWV也在训练期间学习。模型不会事先被告知有用的查询、键或值应该是什么样子。
对于星期五,其查询 q5q_5q5与所有观测值的键进行比较:k1,k2,k3,k4,k5k_1, k_2, k_3, k_4, k_5k1,k2,k3,k4,k5。
每次比较都会产生一个注意力分数:
这些分数通过 softmax 函数传递,将其转换为注意力权重:
衡量更新周五表示时观察“j”的相关程度。缩放因子 dk\sqrt{d_k}dk可防止点积随着查询和键向量维度的增加而变得太大。
最后,这些权重用于组合值向量:
因此,e5e_5e5是融合序列其余部分信息之前的 Friday 表示,而 z5z_5z5是自注意力之后的上下文感知表示。
简而言之:
查询和键了解哪些观察结果彼此相关。值携带组合起来形成新表示的信息。
如果我们打乱序列会发生什么?
现在重要的问题来了。
假设重新排列相同的五个温度观测值。
值本身没有改变;只有订单有。在学习投影之后,我们仍然拥有相同的一组值表示,只是重新排列。
自注意力仍然可以将每个表示与所有其他表示进行比较。应用相同的查询、键和值投影,并且仍然可以计算相同类型的成对关系。
消失的是时间结构。
e(27∘)e(27^\circ)e(27∘) 中没有任何内容表明它最初来自星期四。 e(18∘)e(18^\circ)e(18∘) 中没有任何内容表明它发生在 e(27∘)e(27^\circ)e(27∘) 之后。此外,如果星期三和星期五具有相同的温度值,则学习的投影会将它们映射到相同的嵌入向量。如果没有位置信息,模型就无法区分哪些嵌入来自周三,哪些嵌入来自周五。
这是关键限制:
自注意力可以学习哪些观察是相关的,但是如果没有额外的位置信号,它没有内置的方法来知道这些观察在序列中发生的位置。
位置信息应该告诉模型什么?
如果 self-attention 不知道观察的顺序,那么下一个问题是:什么样的位置信息会有用?
至少,我们希望模型知道:
观察值属于哪个位置?位置 2 应与位置 20 区分开。
哪个观察结果出现在另一个观察结果之前或之后?模型应该能够区分 t−1t-1t−1 和 t+1t+1t+1。
两个观测值相距多远?在时间序列中,t−1t-1t−1,t−7,t-7,t−7 和 t−30t-30t−30 之间的差异可能很重要。
附近的位置以结构化方式相关。位置 10 和位置 11 不应该看起来像两个完全不相关的标识符。
该表示在较长的序列中仍然有用。理想情况下,随着序列的增长,位置方案仍应提供有意义的结构。
对于时间序列,第三个属性特别有用。由于短期依赖性,模型可能会关心一步前的观察结果,或者由于每周季节性模式而关心七步前的观察结果。
因此,位置信息应该做的不仅仅是简单地为每个时间步分配一个唯一的标签。它应该为模型提供顺序和相对距离的结构化表示。
我们如何表示位置?
我们现在知道缺少哪些信息。下一个问题是如何表示它。
表示位置的简单方法是为每个时间步分配一个数字:
为什么是正弦和余弦?
从最简单的二维例子开始:
···
但是将原始位置直接输入到模型中并不理想。这些值随着序列长度而不断增长,并且单个数字无法为模型提供位置关系的丰富表示。
最初的 Transformer 解决方案之一是正弦位置编码,其中每个位置都使用不同频率的正弦和余弦函数来表示。
随着 ttt 的变化,位置向量围绕圆平滑移动,这允许附近的位置具有不同但仍然相关的表示。
更重要的是,向前移动相同数量的步数会在位置表示中产生相同类型的变化。例如,无论我们从位置 3 移动到位置 10 还是从位置 20 移动到位置 27,7 个位置的偏移量都具有相同的数学关系。这对于时间序列很有用,因为相对距离通常很重要:
可以代表非常不同的时间关系。
完整的正弦位置编码将这个想法扩展到多个维度:
不同的维度使用不同的频率。有些在附近位置变化很快,而另一些变化则慢得多。
考虑这个问题的一种有用方法是有尽可能多的时钟以不同的速度运行。他们的解读共同为每个立场赋予了结构化的立场签名。
因此,我们不是只给 timestep (t) 一个数字,而是给它一个向量:
包含有关其位置及其与其他位置的关系的信息。
结合值和位置
添加位置信息后,每个时间步表示为:
其中ete_tet表示观测值,ptp_tpt表示其在序列中的位置。
自注意力现在从这个组合表示构建其查询和键:
因此,当模型计算注意力分数时,
比较不再仅基于观察值。查询向量和键向量是根据已包含位置信息的表示创建的。
因此,模型可以学习依赖于两者的关系:
观察到的内容,以及
序列中观察结果发生的位置。
对于时间序列,这意味着模型可能会了解到,一个时间步前的观察应该与七个时间步前的观察进行不同的处理,即使它们的值相似。
因此,位置编码不会明确告诉模型哪些滞后是重要的。它为自注意力提供了了解哪些位置关系对任务很重要所需的信息。
摘要
我们从一个简单的问题开始:自注意力可以将每个观察与其他每个观察进行比较,但它本身并不知道这些观察发生的顺序。
解决方案是用位置表示 ptp_tpt 来丰富每个值表示 ete_tet:
然后,自注意力从 hth_tht 而不是仅从值表示构建其查询、键和值。这意味着注意力机制不仅可以根据观察到的内容来学习关系,还可以根据观察在序列中发生的位置来学习关系。
对于定期采样的时间序列,这使得模型可以访问 t−1、t−7 或 t−24 等关系。一步的滞后可能捕获短期依赖性,而七步或二十四步的滞后可能对应于季节性模式。
所以更广泛的问题不仅仅是:
我们如何告诉 Transformer 这是位置 7?
而是:
参考文献
然而,位置编码表示序列位置,不一定是现实世界的时间。如果观察间隔不规则,则相隔一个位置并不总是意味着相隔一小时或一天。这就是更丰富的时间编码和时间特征变得重要的地方。
正弦位置编码只是将顺序注入 Transformer 的一种方法。其他方法包括学习位置嵌入(位置向量本身是在训练过程中学习的)和相对位置编码(更直接关注两个观测值之间的距离而不是它们的绝对位置)。
对于时间序列,问题可能会变得更加丰富。序列位置可能还不够:模型可能还需要知道实际的时间戳、日历效应、周期性或观察之间的不规则间隙。
模型执行任务实际需要什么时间概念?
这让我回到了探索的起点:时间序列基础模型。现代架构可能使用更复杂的方法,例如旋转或学习的位置表示,而不是原始的正弦公式。但理解简单的正弦结构为我们奠定了理解这些方法存在的原因的基础。
我们现在已经为为什么需要位置信息、如何表示位置信息以及自注意力如何使用它奠定了基础。有了这种直觉,当我们将来遇到更先进的位置编码技术时,应该会更容易理解它们。
注:本文中的图形由作者概念性设计,并在 AI 图像生成工具的帮助下生成和完善。
[1] Peixeiro, Marco。使用基础模型进行时间序列预测:如何构建高精度预测模型。曼宁,2025。
[2] Davidson、Graeme 和 Lei Ma.PyTorch 的时间序列:应对现实世界预测挑战的现代深度学习工具包。 Packt 出版,2026 年。
