位置编码是Transformer (architecture)架构在Deep learning中的一个基本组成部分。Transformer以并行而非顺序的方式处理输入序列,因此它们缺乏内在的顺序感。位置编码为每个token的嵌入添加一个独特的信号,表示其在序列中的位置,使模型能够理解词序和距离。这项技术在2017年具有开创性的论文《Attention Is All You Need》中被引入,并已成为Large language model和其他序列处理系统不可或缺的部分。
核心思想是在输入嵌入进入transformer的注意力层之前对其进行修改。对于序列中的每个位置,生成一个向量来编码该位置的索引。该向量被添加到token嵌入中,产生一个同时携带语义和位置信息的组合表示。注意力机制随后可以利用这些位置信号,根据token之间的相对距离来计算它们之间的关系。
正弦编码
原始transformer论文提出了一种正弦位置编码方案。对于位置pos和维度i,编码值为:
- PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
- PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
其中d_model是嵌入维度。这种选择有几个理想的特性。正弦和余弦函数产生的值在一个有界范围内,并且每个位置的编码是确定性的。更重要的是,位置之间的线性关系使模型能够轻松学习相对位置:对于任何固定的偏移量k,PE(pos+k)可以表示为PE(pos)的线性函数。这一特性有助于注意力机制泛化到比训练时更长的序列。
频率沿维度递减,较低维度振荡迅速,较高维度则缓慢。这创建了一种多尺度的表示,类似于大脑编码空间信息的方式。原作者选择这种方法是因为它不需要学习参数,并且理论上可以处理任意长度的序列。
学习式位置嵌入
正弦编码的替代方案是在训练期间学习位置嵌入。在这种方法中,每个位置索引被分配一个可训练的向量,这些向量与模型的其余部分一起优化。模型为其任务学习最合适的位置表示。
学习式嵌入被用于早期的transformer实现中,包括原始的BERT模型。它们提供了灵活性,因为模型可以适应特定的数据分布。然而,它们仅限于训练时定义的最大序列长度,并且需要额外的参数。对于非常长的序列,内存成本可能会变得显著。
正弦编码和学习式编码都已被广泛采用。许多现代模型,如GPT变体,使用学习式嵌入,而其他模型,如原始transformer,使用正弦编码。研究表明,这两种方法在许多任务上表现相当,但学习式嵌入因其实现简单而常常更受青睐。
在Transformer架构中的作用
在transformer架构中,位置编码应用于输入阶段。输入token首先通过一个学习到的嵌入矩阵转换为嵌入。然后,位置编码向量与token嵌入逐元素相加。这个组合向量通过多头注意力层。
注意力机制从输入计算查询、键和值向量。位置信息影响这些计算,使模型能够根据相对位置关注token。例如,在一个句子中,模型可以学习到一个动词应该关注其主语,而主语通常位于几个位置之前。
如果没有位置编码,transformer会将输入视为一个词袋,丢失所有顺序信息。这将使语言建模和翻译等任务变得不可能。因此,位置编码是一项关键的创新,使transformer能够有效处理序列数据。
变体与改进
自最初提出以来,已经开发了许多位置编码的变体。一个值得注意的变体是相对位置编码,它编码token之间的距离而不是绝对位置。这种方法在Transformer-XL和T5等模型中引入,可以更好地泛化到更长的序列,并且更具可解释性。
另一个变体是旋转位置编码(RoPE),用于LLaMA和PaLM等模型。RoPE根据位置对查询和键向量应用旋转矩阵,保留相对信息,同时允许模型外推到更长的序列。这种方法在最近的大型语言模型中变得流行。
其他方法包括ALiBi(带线性偏置的注意力),它根据距离向注意力分数添加线性偏置,以及T5等模型中使用的学习式相对偏置。这些方法通常消除了显式位置嵌入的需要,简化了架构。
在大型语言模型中的应用
位置编码是所有现代Large language model不可或缺的一部分。诸如GPT-3、GPT-4、Claude和Gemini等模型依赖位置信息来生成连贯且上下文适当的文本。编码方法的选择会影响模型处理长文档、代码和其他结构化数据的能力。
例如,OpenAI的GPT模型使用学习式位置嵌入,而Google DeepMind的Chinchilla和Gopher使用旋转编码。对更长上下文窗口的趋势推动了更高效、可扩展的位置编码方法的研究。
位置编码在多模态模型中也发挥作用,这些模型处理图像、音频和文本。在视觉transformer中,位置编码被添加到图像块中以保留空间布局。在语音识别中,它们帮助建模时间顺序。
理论与实践考量
从理论角度来看,位置编码是一种归纳偏置,将关于序列顺序的先验知识注入模型。正弦编码线性表示相对位置的能力是一个关键的理论优势。然而,一些研究人员认为学习式嵌入可以捕获更复杂的位置关系。
在实践中,编码的选择影响训练稳定性和性能。正弦编码是固定的,不需要额外参数,这可以减少过拟合。学习式嵌入可能更灵活,但可能需要更多数据才能有效训练。
另一个考量是外推,,即处理比训练时更长的序列的能力。正弦编码理论上可以外推到任意长度,但在实践中,注意力机制通常难以处理未见过的长度。学习式嵌入完全无法外推,因为它们是为固定的最大长度定义的。这推动了诸如RoPE和ALiBi等改进外推方法的研究。
未来方向
关于位置编码的研究仍在继续发展。随着对长上下文模型需求的增加,正在开发新方法以高效编码数十万或数百万个token的序列中的位置。分层位置编码和连续表示等技术正在被探索。
一些最近的模型,如Mamba和其他状态空间模型,提出了不需要显式位置编码的注意力替代方案。然而,transformer仍然占主导地位,位置编码仍然是一个关键的研究领域。
截至2025年,该领域正朝着更自适应和数据驱动的位置表示发展,但2017年引入的基本概念仍然是基础性的。
结论
位置编码是一种简单而强大的技术,使transformer能够处理序列数据。通过将顺序信息注入token嵌入,它使模型能够理解语言、代码和其他有序数据。正弦编码和学习式编码都已被证明是有效的,持续的研究继续完善这些方法。对于任何研究现代Artificial intelligence和Machine learning的人来说,理解位置编码是必不可少的。