在自然语言处理(NLP)领域,词语的顺序不仅仅是重要的,而是至关重要的。正如“狗追猫”和“猫追狗”这两个句子,相同的词语,表达的却是完全相反的意思。这种语言的根本原则对Transformer架构提出了独特的挑战。与前代模型LSTM和RNN不同,Transformer并行处理序列中的所有token,而非逐个处理。这种并行处理能力是Transformer最大的优势,实现了前所未有的速度和效率。然而,这也带来了一个关键问题:当我们同时处理所有词语时,如何保持语言的顺序性?

位置编码,这个巧妙的解决方案,让Transformer不仅能够理解词语的含义,还能理解它们在序列中的位置。如果没有位置编码,即使是最复杂的Transformer也会将语言简化为仅仅一袋词语,失去所有的语法结构和语义连贯性。本文将深入探讨Transformer中位置编码的各种方法,包括绝对位置编码相对位置编码以及更高级的方法如RoPEALiBi,帮助读者理解它们的工作机制、优缺点以及适用场景。

绝对位置编码(Absolute Positional Encoding):奠定基础

绝对位置编码(APE)基于一个直接的原则:序列中的每个位置都获得一个唯一的标识符。可以把它想象成给每个词语分配一个邮政地址——位置1得到地址“A”,位置2得到地址“B”,依此类推。这些位置向量可以通过两种主要方法生成:

  • 可学习的嵌入(Learnable Embeddings):随机初始化位置向量,并允许模型在训练过程中通过反向传播学习最佳表示。这种方法将位置编码视为网络中任何其他可学习的参数。例如,BERT模型就使用了可学习的绝对位置编码。在训练初期,这些编码是随机的,但随着训练的进行,模型逐渐学习到哪些位置编码更适合特定的任务。

  • 正弦函数(Sinusoidal Functions):最初的Transformer论文中引入了使用正弦和余弦函数数学生成的位置编码。这些函数为每个位置创建独特的、确定性的模式,并通过三角关系提供了编码相对距离的优雅属性。例如,位置 i 的编码向量的第 2k 个元素是 sin(i/10000^(2k/dmodel)),第 2k+1 个元素是 cos(i/10000^(2k/dmodel)),其中 d_model 是编码的维度。这种方法的优势在于它可以处理比训练期间遇到的序列更长的序列,因为正弦函数是周期性的。

实现细节

绝对位置编码的优点在于其简单性。这些编码保持与token嵌入相同的维度,从而可以进行直接的元素级相加。在输入层,在任何自注意力计算开始之前,每个token嵌入都会通过与其对应的位置编码进行增强:

enhanced_embedding = token_embedding + positional_encoding

这种增强的表示然后通过Transformer的注意力层流动,在整个网络中携带语义和位置信息。

局限性

尽管绝对位置编码非常优雅,但它面临着几个根本性的挑战:

  • 长度外推困难(Length Extrapolation Difficulties):当遇到比训练期间遇到的序列更长的序列时,模型会遇到很大的困难。如果一个在512个token序列上训练的模型突然遇到一个600个token的输入,它必须截断序列或使用它从未见过的位置编码。这种不熟悉通常会导致性能下降和不可预测的行为。例如,如果一个模型只在长度为 100 的序列上进行了训练,那么它可能很难泛化到长度为 200 的序列,因为模型没有学习到这些位置的表示。

  • 位置信息衰减(Positional Information Decay):当信息通过多个Transformer层传播时,原始的位置信号会逐渐减弱。深度网络必须越来越努力地保持位置感知,特别是对于被大距离分隔的token。想象一下一个有 20 层 Transformer 的模型。在第一层,位置编码可能仍然很强,但在第 20 层,原始位置信息可能已经几乎消失了,因为信息在每一层都被转换和聚合。

  • 缺乏局部性偏差(Lack of Locality Bias):自然语言表现出很强的局部性模式——相邻的词语通常比远处的词语具有更强的关系。然而,绝对位置编码以相同的方式处理位置5和6之间的关系,以及位置5和500之间的关系,迫使模型完全从数据中学习这种局部性偏差,而不是将其构建到架构中。例如,在一个句子中,“猫”和“喜欢”这两个词通常比“猫”和句子末尾的某个词关系更密切。

相对位置编码(Relative Positional Encoding):一种范式转变

相对位置编码代表着思维方式的根本转变。它不是问“这个token在哪里?”,而是问“这些token相距多远?”。这种基于距离的方法更自然地与人类处理语言的方式相一致——我们凭直觉理解“狗”和“叫”之间的关系比它们被多个子句分隔开时更强。

考虑这个有力的例子:

  • 句子1:“狗吃了香蕉”
  • 句子2:“昨晚,我们的狗吃了香蕉”

从语义角度来看,在两个句子中,“狗”和“香蕉”之间的关系应该相似。绝对位置编码会为每个句子中的这些词语分配不同的位置值,因为这些token的绝对位置在两个句子中有所不同,可能会产生不一致的表示。然而,相对位置编码通过关注token之间的距离关系而不是它们的绝对位置来保持一致性。

技术实现

与在输入层添加的绝对位置编码不同,相对位置编码在注意力计算期间动态集成。这种集成需要对标准自注意力机制进行修改。该方法为键和值引入了专门的嵌入层,由相对距离参数化。对于最大相对距离L,我们创建大小为(2L + 1,d_model)的嵌入矩阵,其中d_model表示隐藏维度。超出[-L,L]的距离被截断到这些边界。

例如,在加性相对位置编码中,为键和值添加的嵌入层如下所示:

在自注意力中添加了新的Reltive PE的嵌入

在此图中,嵌入层的维度为(7 x 5),其中5是自注意力中的隐藏维度,而7等于2L+1,L为3,因为我们处理的是[-3,3]之间的相对距离。它使用两个位置嵌入直接修改注意力层的计算。这些嵌入在每个注意力层中学习,并更直接地影响token之间的交互。

修改后的注意力计算:

自注意力机制经过特定修改以结合相对位置信息:

  • 增强的键表示: k_j = k_j + a_ijK
  • 增强的值表示: v_j = v_j + a_ijV

其中a_ijK和a_ijV是仅依赖于相对距离(j-i)的学习嵌入。

  • 对齐分数计算: (省略)
  • Softmax权重计算保持不变
  • 上下文向量计算:(省略)

优于绝对编码的优势

  • 卓越的长度泛化(Superior Length Generalization):由于相对位置编码仅依赖于token距离而不是绝对位置,因此模型可以自然地处理比其训练数据更长的序列。一个在512个token序列上训练的模型可以无缝地处理1000个token的输入。实验表明,使用相对位置编码的模型在处理长序列时的性能明显优于使用绝对位置编码的模型。

  • 保留的位置信号(Preserved Positional Signals):通过在每个注意力层中结合可学习的位置嵌入,相对位置编码减轻了困扰绝对方法的信号衰减问题。每一层都能够学习到与当前层相关的相对位置编码,从而使得位置信息能够更好地在网络中传递。

  • 自然的局部性偏差(Natural Locality Bias):基于距离的公式固有地将模型偏向于附近的token,与语言的自然结构相一致,其中局部关系通常占主导地位。模型更容易学习到相邻词语之间的关系,而不需要从头开始学习。

权衡和考虑因素

  • 计算开销(Computational Overhead)相对位置编码引入了额外的参数和计算复杂性。每个注意力层都需要其自己的位置嵌入参数,从而增加了内存需求和训练时间。

  • 缓存限制(Caching Limitations)相对位置编码的动态性质阻止了键和值表示的有效缓存,导致与绝对方法相比,推理速度较慢。

  • 实现复杂性(Implementation Complexity):将相对位置信息集成到注意力计算中增加了架构复杂性,使得模型更难实现和调试。

高级方法:超越传统方法

  • RoPE(旋转位置编码)

    旋转位置嵌入代表了一种创新的方法,它完全绕过了向量加法。相反,RoPE通过与它们的位置成比例的角度旋转查询和键向量。当通过点积计算注意力分数时,结果值通过角度差自然地编码相对距离。这种几何方法提供了计算效率,同时保持了相对定位的优势,使其在现代大型语言模型中越来越受欢迎。例如,Llama 2 使用了 RoPE,使其能够在长序列上保持高性能。

  • ALiBi(带有线性偏差的注意力)

    ALiBi采用了一种令人耳目一新的简单方法来进行相对定位。它不是修改嵌入或向量表示,而是根据token距离直接将线性惩罚应用于注意力分数:

    attention_score_modified = attention_score — m_h × |i — j|

    其中m_h是特定于头的斜率参数。j-i是查询qi和键kj之间的距离。在因果语言建模的情况下,我们始终有j-i ≤ 0,从而导致对远处token的注意力较低。这种简单性实现了卓越的外推能力——模型可以处理比其训练数据长许多倍的序列,而性能下降最小。

如何选择正确的方法

位置编码策略的选择取决于您的特定要求:

  • 当满足以下条件时选择绝对编码:

    • 处理固定长度的序列
    • 优先考虑实现简单性
    • 计算效率至关重要
  • 当满足以下条件时选择相对编码:

    • 处理可变长度的序列
    • 长度外推至关重要
    • 模型性能证明了增加的复杂性是合理的
  • 当满足以下条件时考虑高级方法:

    • 处理非常长的序列(RoPE,ALiBi)
    • 计算效率和性能都至关重要

结论

位置编码是Transformer架构的基石,提供了自注意力所缺乏的空间意识。虽然绝对位置编码是最初的解决方案,但该领域越来越倾向于相对位置编码,如RPE、RoPE和ALiBi。这些更复杂的方法提供了更好的泛化、更强的归纳偏差和更强大的性能,使模型能够处理不断增加的上下文长度,并更好地捕获人类语言的复杂结构。对于任何处理序列数据的机器学习工程师来说,对这些技术的深入理解不仅有益,而且至关重要。

总之,从最初的绝对位置编码到如今的相对位置编码(包括RoPE和ALiBi),位置编码技术的发展不断推动着Transformer模型在处理长序列和理解复杂语言结构方面的能力。掌握这些技术对于构建高性能的大模型至关重要。希望本文能够帮助读者更好地理解位置编码的原理和应用,并在实际项目中做出更明智的选择。