基于自注意力机制的可变长度序列编码算法:相对位置编码(Relative Positional Encoding)详解
字数 4144 2025-12-20 15:36:56

基于自注意力机制的可变长度序列编码算法:相对位置编码(Relative Positional Encoding)详解

题目描述

在自然语言处理中,Transformer模型的核心——自注意力机制(Self-Attention)——能够捕捉序列中任意两个元素之间的依赖关系。然而,标准的自注意力机制本身是“排列不变”的,即它不关心输入元素的顺序。为了引入序列的顺序信息,原始的Transformer使用了“绝对位置编码”(Absolute Positional Encoding),即将每个位置的索引编码成一个向量,与对应的词向量相加。

但绝对位置编码存在一个关键问题:它在训练时见过的位置(例如,句子长度512)之外的序列上泛化能力差。当我们处理比训练时更长的句子时,模型没有见过这些新的位置编码,性能会下降。此外,绝对位置编码可能难以捕捉元素之间的相对位置关系(例如,“单词A在单词B的前三个位置”)——这种关系对于句法、语义理解通常比绝对位置更重要。

相对位置编码便是解决上述问题的一种方案。它的核心思想是:不再为每个绝对位置学习一个固定的编码,而是建模序列中任意两个元素之间的相对距离。这样,无论序列多长,只要相对距离是模型见过的,它就能处理。本题目将详细讲解相对位置编码的基本原理、数学形式和经典实现。

解题过程

我们将循序渐进地讲解相对位置编码如何从直觉发展到公式,并通过一个经典实现(如Shaw et al., 2018 和 Huang et al., 2018 的变体)来阐明其细节。

第一步:理解自注意力机制与绝对位置编码的局限

  1. 回顾标准自注意力
    对于输入序列 \(X = (x_1, x_2, ..., x_n)\)(其中 \(x_i\) 是词嵌入向量),自注意力计算查询(Query)、键(Key)、值(Value)向量:
    \(Q = XW^Q, K = XW^K, V = XW^V\)
    注意力权重和输出为:
    \(A = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})\)
    \(\text{Output} = AV\)
    注意力分数 \(e_{ij} = \frac{q_i \cdot k_j}{\sqrt{d_k}}\) 决定了位置 \(i\) 的词在生成输出时对位置 \(j\) 的词的关注程度。但 \(e_{ij}\) 计算中没有包含 \(i\)\(j\) 的位置信息。

  2. 绝对位置编码的加入
    原始Transformer中,输入变为 \(x_i + p_i\),其中 \(p_i\) 是第 \(i\) 个位置的固定(如正弦波)或可学习的编码向量。此时,查询和键包含了绝对位置信息:
    \(q_i = (x_i + p_i)W^Q, k_j = (x_j + p_j)W^K\)
    注意力分数展开为:
    \(e_{ij} = \frac{(x_iW^Q + p_iW^Q) \cdot (x_jW^K + p_jW^K)}{\sqrt{d_k}} = \frac{x_iW^Q (x_jW^K)^T + x_iW^Q(p_jW^K)^T + p_iW^Q(x_jW^K)^T + p_iW^Q(p_jW^K)^T}{\sqrt{d_k}}\)
    这包含了四个部分:内容-内容、内容-位置、位置-内容、位置-位置交互。但位置信息以绝对形式嵌入,模型必须记住每个 \(p_i\) 的值

第二步:从绝对到相对——核心直觉

相对位置编码的直觉是:对于位置 \(i\)\(j\),真正重要的是它们之间的相对偏移 \(a_{i-j}\)\(a_{j-i}\)(比如 \(i - j\)),而不是 \(i\)\(j\) 各自的绝对数值。

基本思路:修改注意力分数的计算,用一组表示“相对距离”的可学习向量来替代或增强那些包含绝对位置 \(p_i, p_j\) 的项。我们希望模型学到:当两个词距离为 \(k\) 时(无论它们在整个序列的哪里),它们的相对位置交互应该是某个固定的模式。

第三步:经典相对位置编码公式推导(以Shaw et al. 2018为例)

一种经典做法是完全移除查询和键中的绝对位置编码,并将相对位置信息作为一个偏置项加到注意力分数上

  1. 定义相对位置嵌入
    我们定义一组可学习的向量 \(a^K = (a_{-K}, a_{-K+1}, ..., a_{K})\),其中 \(K\) 是一个最大相对距离(例如,K=4,考虑前后最多4个位置)。向量 \(a_k \in \mathbb{R}^{d_k}\)。如果相对距离 \(i-j\) 的绝对值大于 \(K\),则用 \(a_K\)\(a_{-K}\) 来近似。

  2. 修改注意力分数计算
    原始的注意力分数 \(e_{ij} = \frac{q_i \cdot k_j}{\sqrt{d_k}}\)
    现在我们将其重新定义为:
    \(e_{ij} = \frac{x_iW^Q \cdot (x_jW^K + a^K_{i-j})}{\sqrt{d_k}}\)
    注意,这里 \(q_i = x_iW^Q\)不再包含任何绝对位置信息。而键向量则被替换为“内容键向量” \(x_jW^K\) 加上一个相对位置嵌入向量 \(a^K_{i-j}\),这个向量只依赖于从 \(j\)\(i\) 的偏移量(即,当计算位置 \(i\)\(j\) 的注意力时,我们考虑“目标位置i相对于源位置j的偏移”)。

  3. 展开理解
    将上述公式展开:
    \(e_{ij} = \frac{x_iW^Q \cdot x_jW^K + x_iW^Q \cdot a^K_{i-j}}{\sqrt{d_k}}\)
    对比绝对位置编码展开式的四项,这里只剩下了两项

    • 第一项 \(\frac{x_iW^Q \cdot x_jW^K}{\sqrt{d_k}}\):纯粹的内容-内容相关性。
    • 第二项 \(\frac{x_iW^Q \cdot a^K_{i-j}}{\sqrt{d_k}}\):一个偏置项,表示“位置 \(i\) 的内容”与“从 \(j\)\(i\) 的相对位置”之间的相关性。这个偏置项是可学习的,它的大小取决于相对距离

    为什么这样做更好?

    • 长度外推:模型不再记忆绝对位置索引,只记忆一组有限的相对距离向量(例如,±4以内)。当序列变长,只要相对距离在训练见过的范围内,模型就能正确处理。即使相对距离超过K,模型也会用边界向量处理,这比遇到全新的绝对位置更鲁棒。
    • 强调相对关系:模型直接对“向前k个位置”或“向后k个位置”这样的关系进行建模,这可能更符合语言的结构。

第四步:更高效的实现与扩展(Huang et al. 2018 / Transformer-XL)

Shaw等人的方法在计算上有一个缺点:对于每个注意力头,都需要为所有位置对 \((i, j)\) 计算 \(q_i \cdot a^K_{i-j}\),这涉及到矩阵乘法,可能较慢。

一种更高效且广为流传的变体(见于Transformer-XL、DeBERTa等模型)是将相对位置编码分解为两个独立的、可学习的偏置项:

  1. 公式表达
    \(e_{ij} = \frac{q_i \cdot k_j}{\sqrt{d_k}} + b_{i-j}\)
    其中,\(q_i = x_iW^Q, k_j = x_jW^K\)查询和键向量中均不含绝对位置编码\(b_{i-j}\) 是一个可学习的标量偏置,它的值只依赖于相对距离 \(i-j\)

  2. 实现方式

    • 我们有一个长度为 \(2K+1\) 的偏置参数表 \(B = (b_{-K}, ..., b_0, ..., b_K)\)
    • 计算注意力分数矩阵时,我们先计算标准的内容-内容分数矩阵 \(S = QK^T / \sqrt{d_k}\)
    • 然后,我们构造一个相对位置偏置矩阵 \(R\),其元素 \(R_{ij} = b_{i-j}\)(需要对 \(|i-j| > K\) 的情况进行截断)。
    • 最终的注意力分数矩阵为 \(A' = S + R\)
    • 最后,对 \(A'\) 的每一行(对应于每个查询位置 \(i\))应用softmax,得到注意力权重。
  3. 优势

    • 计算高效:偏置矩阵 \(R\) 可以预先计算,或者在计算时通过高效的广播和索引操作得到,避免了Shaw方法中与向量的点积运算。
    • 概念清晰:将“相对位置影响”建模为一个直接加到注意力分数上的偏置。模型在学习时,会为不同的相对距离学习一个固定的“偏好”或“惩罚”值。

第五步:总结与延申

相对位置编码通过将位置信息从“绝对的、与具体索引绑定”转变为“相对的、描述元素间距离关系”,带来了两大核心优势:

  1. 更好的长度外推性:只要相对距离是模型“见过”的,它就能处理更长的序列。
  2. 更强的建模归纳偏置:直接建模相对位置关系,更贴合语言、代码等序列的内在结构。

扩展:后来的工作(如RoFormer的旋转位置编码RoPE、ALiBi等)提出了更巧妙的、无需显式可学习向量表的相对位置编码方法。它们将相对位置信息通过复数旋转(RoPE)或线性衰减偏置(ALiBi)直接注入到注意力计算中,在保持相对位置信息的同时,通常具有更好的理论性质和长度外推能力。

至此,我们从绝对位置编码的问题出发,逐步推导了相对位置编码的动机、核心思想、经典数学形式以及高效实现,完成了对此算法的详细讲解。

基于自注意力机制的可变长度序列编码算法:相对位置编码(Relative Positional Encoding)详解 题目描述 在自然语言处理中,Transformer模型的核心——自注意力机制(Self-Attention)——能够捕捉序列中任意两个元素之间的依赖关系。然而,标准的自注意力机制本身是“排列不变”的,即它不关心输入元素的顺序。为了引入序列的顺序信息,原始的Transformer使用了“绝对位置编码”(Absolute Positional Encoding),即将每个位置的索引编码成一个向量,与对应的词向量相加。 但绝对位置编码存在一个关键问题 :它在训练时见过的位置(例如,句子长度512)之外的序列上泛化能力差。当我们处理比训练时更长的句子时,模型没有见过这些新的位置编码,性能会下降。此外,绝对位置编码可能难以捕捉元素之间的相对位置关系(例如,“单词A在单词B的前三个位置”)——这种关系对于句法、语义理解通常比绝对位置更重要。 相对位置编码 便是解决上述问题的一种方案。它的核心思想是:不再为每个绝对位置学习一个固定的编码,而是 建模序列中任意两个元素之间的相对距离 。这样,无论序列多长,只要相对距离是模型见过的,它就能处理。本题目将详细讲解相对位置编码的基本原理、数学形式和经典实现。 解题过程 我们将循序渐进地讲解相对位置编码如何从直觉发展到公式,并通过一个经典实现(如Shaw et al., 2018 和 Huang et al., 2018 的变体)来阐明其细节。 第一步:理解自注意力机制与绝对位置编码的局限 回顾标准自注意力 : 对于输入序列 \( X = (x_ 1, x_ 2, ..., x_ n) \)(其中 \( x_ i \) 是词嵌入向量),自注意力计算查询(Query)、键(Key)、值(Value)向量: \( Q = XW^Q, K = XW^K, V = XW^V \) 注意力权重和输出为: \( A = \text{softmax}(\frac{QK^T}{\sqrt{d_ k}}) \) \( \text{Output} = AV \) 注意力分数 \( e_ {ij} = \frac{q_ i \cdot k_ j}{\sqrt{d_ k}} \) 决定了位置 \( i \) 的词在生成输出时对位置 \( j \) 的词的关注程度。但 \( e_ {ij} \) 计算中没有包含 \( i \) 和 \( j \) 的位置信息。 绝对位置编码的加入 : 原始Transformer中,输入变为 \( x_ i + p_ i \),其中 \( p_ i \) 是第 \( i \) 个位置的固定(如正弦波)或可学习的编码向量。此时,查询和键包含了绝对位置信息: \( q_ i = (x_ i + p_ i)W^Q, k_ j = (x_ j + p_ j)W^K \) 注意力分数展开为: \( e_ {ij} = \frac{(x_ iW^Q + p_ iW^Q) \cdot (x_ jW^K + p_ jW^K)}{\sqrt{d_ k}} = \frac{x_ iW^Q (x_ jW^K)^T + x_ iW^Q(p_ jW^K)^T + p_ iW^Q(x_ jW^K)^T + p_ iW^Q(p_ jW^K)^T}{\sqrt{d_ k}} \) 这包含了四个部分:内容-内容、内容-位置、位置-内容、位置-位置交互。 但位置信息以绝对形式嵌入,模型必须记住每个 \( p_ i \) 的值 。 第二步:从绝对到相对——核心直觉 相对位置编码的直觉是:对于位置 \( i \) 和 \( j \),真正重要的是它们之间的 相对偏移 \( a_ {i-j} \) 或 \( a_ {j-i} \)(比如 \( i - j \)),而不是 \( i \) 和 \( j \) 各自的绝对数值。 基本思路 :修改注意力分数的计算,用一组表示“相对距离”的可学习向量来替代或增强那些包含绝对位置 \( p_ i, p_ j \) 的项。我们希望模型学到:当两个词距离为 \( k \) 时(无论它们在整个序列的哪里),它们的相对位置交互应该是某个固定的模式。 第三步:经典相对位置编码公式推导(以Shaw et al. 2018为例) 一种经典做法是 完全移除查询和键中的绝对位置编码,并将相对位置信息作为一个偏置项加到注意力分数上 。 定义相对位置嵌入 : 我们定义一组可学习的向量 \( a^K = (a_ {-K}, a_ {-K+1}, ..., a_ {K}) \),其中 \( K \) 是一个最大相对距离(例如,K=4,考虑前后最多4个位置)。向量 \( a_ k \in \mathbb{R}^{d_ k} \)。如果相对距离 \( i-j \) 的绝对值大于 \( K \),则用 \( a_ K \) 或 \( a_ {-K} \) 来近似。 修改注意力分数计算 : 原始的注意力分数 \( e_ {ij} = \frac{q_ i \cdot k_ j}{\sqrt{d_ k}} \)。 现在我们将其重新定义为: \( e_ {ij} = \frac{x_ iW^Q \cdot (x_ jW^K + a^K_ {i-j})}{\sqrt{d_ k}} \) 注意,这里 \( q_ i = x_ iW^Q \), 不再包含任何绝对位置信息 。而键向量则被替换为“内容键向量” \( x_ jW^K \) 加上一个相对位置嵌入向量 \( a^K_ {i-j} \),这个向量只依赖于从 \( j \) 到 \( i \) 的偏移量(即,当计算位置 \( i \) 对 \( j \) 的注意力时,我们考虑“目标位置i相对于源位置j的偏移”)。 展开理解 : 将上述公式展开: \( e_ {ij} = \frac{x_ iW^Q \cdot x_ jW^K + x_ iW^Q \cdot a^K_ {i-j}}{\sqrt{d_ k}} \) 对比绝对位置编码展开式的四项,这里 只剩下了两项 : 第一项 \( \frac{x_ iW^Q \cdot x_ jW^K}{\sqrt{d_ k}} \):纯粹的内容-内容相关性。 第二项 \( \frac{x_ iW^Q \cdot a^K_ {i-j}}{\sqrt{d_ k}} \):一个偏置项,表示“位置 \( i \) 的内容”与“从 \( j \) 到 \( i \) 的相对位置”之间的相关性。这个偏置项是可学习的, 它的大小取决于相对距离 。 为什么这样做更好? 长度外推 :模型不再记忆绝对位置索引,只记忆一组有限的相对距离向量(例如,±4以内)。当序列变长,只要相对距离在训练见过的范围内,模型就能正确处理。即使相对距离超过K,模型也会用边界向量处理,这比遇到全新的绝对位置更鲁棒。 强调相对关系 :模型直接对“向前k个位置”或“向后k个位置”这样的关系进行建模,这可能更符合语言的结构。 第四步:更高效的实现与扩展(Huang et al. 2018 / Transformer-XL) Shaw等人的方法在计算上有一个缺点:对于每个注意力头,都需要为所有位置对 \( (i, j) \) 计算 \( q_ i \cdot a^K_ {i-j} \),这涉及到矩阵乘法,可能较慢。 一种更高效且广为流传的变体(见于Transformer-XL、DeBERTa等模型)是将相对位置编码分解为两个独立的、可学习的偏置项: 公式表达 : \( e_ {ij} = \frac{q_ i \cdot k_ j}{\sqrt{d_ k}} + b_ {i-j} \) 其中,\( q_ i = x_ iW^Q, k_ j = x_ jW^K \), 查询和键向量中均不含绝对位置编码 。\( b_ {i-j} \) 是一个可学习的 标量偏置 ,它的值 只依赖于相对距离 \( i-j \)。 实现方式 : 我们有一个长度为 \( 2K+1 \) 的偏置参数表 \( B = (b_ {-K}, ..., b_ 0, ..., b_ K) \)。 计算注意力分数矩阵时,我们先计算标准的内容-内容分数矩阵 \( S = QK^T / \sqrt{d_ k} \)。 然后,我们构造一个 相对位置偏置矩阵 \( R \),其元素 \( R_ {ij} = b_ {i-j} \)(需要对 \( |i-j| > K \) 的情况进行截断)。 最终的注意力分数矩阵为 \( A' = S + R \)。 最后,对 \( A' \) 的每一行(对应于每个查询位置 \( i \))应用softmax,得到注意力权重。 优势 : 计算高效 :偏置矩阵 \( R \) 可以 预先计算 ,或者在计算时通过高效的广播和索引操作得到,避免了Shaw方法中与向量的点积运算。 概念清晰 :将“相对位置影响”建模为一个直接加到注意力分数上的偏置。模型在学习时,会为不同的相对距离学习一个固定的“偏好”或“惩罚”值。 第五步:总结与延申 相对位置编码通过将位置信息从“绝对的、与具体索引绑定”转变为“相对的、描述元素间距离关系”,带来了两大核心优势: 更好的长度外推性 :只要相对距离是模型“见过”的,它就能处理更长的序列。 更强的建模归纳偏置 :直接建模相对位置关系,更贴合语言、代码等序列的内在结构。 扩展 :后来的工作(如RoFormer的旋转位置编码RoPE、ALiBi等)提出了更巧妙的、无需显式可学习向量表的相对位置编码方法。它们将相对位置信息通过复数旋转(RoPE)或线性衰减偏置(ALiBi)直接注入到注意力计算中,在保持相对位置信息的同时,通常具有更好的理论性质和长度外推能力。 至此,我们从绝对位置编码的问题出发,逐步推导了相对位置编码的动机、核心思想、经典数学形式以及高效实现,完成了对此算法的详细讲解。