注意力机制本身是排列不变的(permutation invariant),这意味着交换输入序列中任意两个元素的位置,注意力输出的结果也会相应地交换位置,但注意力权重矩阵本身不会改变。这一特性使得纯注意力模型无法区分"今天天气很好"和"天气今天很好"这两个句子的区别。
位置编码的存在就是为了打破这种排列不变性,让注意力模型能够感知输入序列中各元素的相对或绝对位置信息。位置编码的设计和与注意力的交互方式,直接决定了模型的序列建模能力。
Transformer原始论文提出了经典的正弦余弦位置编码。对于位置pos和维度i,位置编码定义为:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model)) PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
这种编码具有优雅的数学性质:
GPT系列和BERT等模型采用了可学习的位置编码。在训练过程中初始化一组可训练的位置嵌入向量,通过反向传播优化这些参数。
可学习位置编码的优势在于灵活性——模型可以根据任务需求学习最优的位置表示。然而,其局限也很明显:
相对位置编码的基本理念是:在很多自然语言任务中,元素之间的相对距离比绝对位置更重要。"苹果"和"树上"的相邻关系,比它们分别出现在第3和第4个位置更重要。
相对位置编码直接在注意力计算中编码两个元素之间的距离信息,而不是为每个元素分配一个独立的位置编码。
Transformer-XL首次在语言建模中展示了相对位置编码的有效性。其注意力计算公式修改为:
Attention(Q_i, K_j) = (Q_i · K_j + Q_i · R_{i-j}) / sqrt(d_k)
其中R是一个可学习的相对位置嵌入矩阵,i-j表示两个位置之间的距离。这种设计有以下特点:
T5模型采用了桶式(bucketed)相对位置编码,将相对距离离散化到若干个"桶"中:
这种设计的直觉是:近距离的位置关系信息量更大,需要更精细的区分;远距离的关系虽然信息量较小,但模型仍需要感知"某个元素在较远处"的信息。
T5的桶式编码将无限的距离空间映射到了有限的编码空间,同时保持了近距离的精细区分能力。
DeBERTa提出了另一种相对位置编码方案,将位置信息同时注入到注意力分数的Q和K中:
Attention(Q_i, K_j) = ((Q_i + q_{i-j}) · (K_j + k_{i-j})) / sqrt(d_k)
通过展开计算,这等价于在标准注意力分数基础上添加了四项相对位置交叉项。DeBERTa的实验表明,同时在Q和K中引入位置信息的方案比只在K中引入的方案表现更好。
旋转位置编码(Rotary Position Embedding, RoPE)是目前大语言模型中应用最广泛的位置编码方案,被LLaMA、Qwen、ChatGLM等主流模型采用。
RoPE的核心思想是:通过在嵌入空间中施加旋转变换来编码位置信息。具体地,对于位置m处的二维特征向量(m·x, m·y),RoPE将其旋转m个单位:
[x_m, y_m] = [x·cos(mθ) - y·sin(mθ), x·sin(mθ) + y·cos(mθ)]
当Q和K都经过旋转变换后,它们的点积自然包含了两个位置之间的相对角度信息:
(Q_m · K_n) = Σ q_i · k_i · cos((m-n)θ_i)
这意味着注意力分数自动携带了m-n(相对位置)的信息。
RoPE之所以成为主流选择,源于其多方面的优势:
虽然RoPE理论上可以外推,但在实际应用中,直接使用训练窗口外的序列长度会导致性能显著下降。研究者提出了多种扩展策略:
ALiBi(Attention with Linear Biases)是一种极简的位置编码方案,直接在注意力分数上添加与距离成正比的线性偏置:
Attention(Q, K)_{i,j} = (Q_i · K_j) / sqrt(d_k) - m * |i - j|
其中m是一个正的斜率参数,不同注意力头可以有不同的斜率。
ALiBi的优势在于极简性:
然而,ALiBi在需要精确位置信息的任务(如需要知道具体位置的任务)上表现不如RoPE。
选择位置编码方案需要考虑以下因素:
位置编码是注意力机制中不可或缺的组件。从最初的绝对位置编码到各种形式的相对位置编码,再到如今的旋转位置编码RoPE,位置编码的设计经历了从简单到复杂再到简洁优雅的演化。RoPE通过数学上的旋转变换,将位置信息自然地融入注意力计算,兼顾了表达力、效率和可扩展性,已成为大语言模型的标配选择。理解各种位置编码的设计原理和适用场景,对于模型设计和优化具有重要的指导意义。