Transformer模型中的相对位置编码(Relative Positional Encoding)原理与自注意力机制增强
题目描述
在标准的Transformer模型中,位置编码(Positional Encoding)通过绝对位置信息(即每个词在序列中的具体位置索引)向模型注入序列的顺序信息。然而,绝对位置编码在泛化到训练时未见过的序列长度或需要建模相对位置关系(如距离较远的两个词之间的依赖)时存在局限。相对位置编码(Relative Positional Encoding)作为一种改进方案,旨在使模型直接关注词与词之间的相对距离,从而更好地捕捉序列的内在结构。本题要求深入讲解相对位置编码的核心思想、具体实现方式(以Shaw et al. 2018和Dai et al. 2019的经典方法为例),并分析其如何增强自注意力机制。
解题过程
我们循序渐进地讲解,从问题背景到具体实现。
1. 背景与动机:绝对位置编码的局限
在原始Transformer(Vaswani et al. 2017)中,位置编码通过正弦和余弦函数生成,并与词嵌入相加,为每个位置提供一个唯一的表示。这种方法的局限性包括:
- 长度外推性差:模型在训练时固定了最大序列长度,难以处理更长的序列。
- 相对关系建模不直接:模型需要通过学习才能从绝对位置中推导出相对距离(如“距离为3”),这增加了学习负担。
- 对局部和全局依赖的适应性:绝对编码对所有位置同等对待,而自然语言中,相对位置往往比绝对位置更重要(例如,“动词”通常出现在“名词”附近)。
相对位置编码的核心思想是:在自注意力计算中,直接引入词与词之间的相对距离信息,使得注意力权重能够显式地依赖于它们的相对位置偏移。
2. 核心思想:将相对位置信息注入注意力权重
标准自注意力公式(缩放点积注意力)为:
\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V \]
其中,\(Q, K, V\) 是查询、键、值矩阵,\(d_k\) 是键的维度。绝对位置编码通过将位置编码 \(P\) 加到词嵌入 \(E\) 上,即 \(X = E + P\),然后计算 \(Q = XW_Q, K = XW_K, V = XW_V\)。
相对位置编码则改变注意力得分的计算,使其包含一个与相对位置 \(i-j\) 相关的偏置项 \(a_{i,j}\):
\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T + B}{\sqrt{d_k}}\right) V \]
其中,\(B\) 是一个矩阵,其元素 \(B_{i,j} = a_{i-j}\) 表示位置 \(i\) 和 \(j\) 之间的相对位置偏置。这样,模型可以直接学习到“位置 i 相对于位置 j 的注意力偏好”。
3. 具体实现方法(以Shaw et al. 2018为例)
我们以经典论文“Self-Attention with Relative Position Representations”为例,详细说明实现步骤。
步骤1:定义相对位置嵌入表
- 假设最大相对距离为 \(k\)(例如,k=3表示只考虑前后3个位置内的相对关系)。
- 创建一个可学习的嵌入表 \(R \in \mathbb{R}^{(2k+1) \times d}\),其中每一行对应一个相对位置偏移 \(\delta = i-j\),取值范围从 \(-k\) 到 \(k\)。
- 对于超出 \(\pm k\) 的相对距离,可以截断到最近边界(如 \(\delta = \text{clip}(i-j, -k, k)\)),或使用额外的“边界”表示。
步骤2:修改注意力得分计算
原始注意力得分 \(e_{i,j} = \frac{q_i \cdot k_j}{\sqrt{d_k}}\),其中 \(q_i\) 和 \(k_j\) 是第 i 个查询和第 j 个键向量。
现在引入两个与相对位置相关的项:
- 内容相关项:用 \(q_i\) 与相对位置嵌入 \(R_{i-j}\) 的点积,替代部分键向量交互。
- 位置相关项:用可学习的偏置标量 \(u\) 和 \(v\) 调整。
具体公式变为:
\[e_{i,j} = \frac{q_i \cdot k_j^T + q_i \cdot R_{i-j}^T + u \cdot k_j^T + v \cdot R_{i-j}^T}{\sqrt{d_k}} \]
- 第一项 \(q_i \cdot k_j^T\):标准的内容-内容交互。
- 第二项 \(q_i \cdot R_{i-j}^T\):内容-位置交互(查询与相对位置嵌入)。
- 第三项 \(u \cdot k_j^T\):全局内容偏置(u是一个可学习的查询向量)。
- 第四项 \(v \cdot R_{i-j}^T\):全局位置偏置(v是一个可学习的位置向量)。
步骤3:高效计算优化
由于 \(R_{i-j}\) 只依赖于相对距离,可以预先计算所有可能的相对位置嵌入,并在注意力计算中通过索引高效获取。这避免了序列长度的平方复杂度增加,保持与标准注意力相同的 \(O(n^2 d)\) 时间复杂度。
4. 另一种经典方法:Dai et al. 2019(Transformer-XL)
在Transformer-XL中,相对位置编码被进一步简化,以支持超长序列建模(片段级递归)。
- 关键改进:将绝对位置编码从输入层移除,完全用相对位置编码代替。
- 公式简化为:
\[e_{i,j} = \frac{q_i \cdot k_j^T + q_i \cdot R_{i-j}^T + b}{\sqrt{d_k}} \]
这里去除了全局内容偏置,仅保留内容-位置交互和一个可学习的标量偏置 \(b\)(或向量)。这使得模型在递归跨片段时,位置信息保持一致(因为相对距离不变),从而更好地捕捉长期依赖。
5. 相对位置编码的优势
- 长度外推性增强:由于相对距离范围固定(如±k),模型可以处理比训练时更长的序列。
- 更自然的语言建模:相对位置直接对应语法结构(如局部依赖),模型更容易学习到如“动词-宾语”这类关系。
- 计算效率:通过共享相对位置嵌入,参数量不随序列长度增长,且计算优化后不增加额外开销。
6. 总结与扩展
相对位置编码已成为现代Transformer变体(如XLNet、T5、DeBERTa)的核心组件。它通过将位置信息从“静态的绝对坐标”转变为“动态的相对关系”,显著提升了模型对序列结构的理解能力。在实际实现中,开发者可以根据任务需求调整最大相对距离 k,或结合绝对位置编码(如ALiBi)形成混合方案。
通过上述步骤,我们完整地讲解了相对位置编码的原理、实现细节及其对自注意力机制的增强作用。