Transformer模型中的相对位置编码原理与实现
字数 1572 2025-11-13 05:35:52

Transformer模型中的相对位置编码原理与实现

题目描述
在Transformer模型中,由于自注意力机制本身不具备位置信息,需要显式地引入位置编码。绝对位置编码(如正弦编码)将每个位置的固定向量加到词嵌入上,但这种方法在长序列或迁移到不同长度任务时泛化能力有限。相对位置编码通过建模词与词之间的相对距离,更灵活地捕捉序列中元素的相对关系。本题将详解相对位置编码的动机、经典方法(如Transformer-XL和DeBERTa中的实现)及其数学原理。

解题过程

  1. 绝对位置编码的局限性
    • 绝对位置编码(如原始Transformer的正弦函数)为每个位置分配独立编码,公式为:

\[ PE_{(pos,2i)} = \sin(pos / 10000^{2i/d_{\text{model}}}), \quad PE_{(pos,2i+1)} = \cos(pos / 10000^{2i/d_{\text{model}}}) \]

 其中$pos$为位置索引,$i$为维度索引。  
  • 问题:当测试序列长度超过训练时,模型可能无法泛化;且绝对位置无法直接表达词间相对关系(如"相邻"或"间隔k个词")。
  1. 相对位置编码的核心思想

    • 不再关注词的绝对位置,而是关注词对\((i,j)\)之间的相对距离\(j-i\)
    • 目标:修改自注意力计算,使注意力分数依赖于相对位置偏移。以查询-键交互为例,原始注意力分数为\(Q_i K_j^T\),改进后需融入相对位置信息。
  2. 经典方法:Transformer-XL的相对位置编码

    • 在自注意力计算中,将绝对位置编码替换为相对位置嵌入:
      • 步骤1:将注意力分数分解为内容相关和位置相关部分。
        原始注意力分数:\(A_{i,j} = (E_i + P_i)W_Q \cdot (E_j + P_j)W_K^T\)(其中\(E\)为词嵌入,\(P\)为绝对位置编码)。
      • 步骤2:展开后得到四项:

\[ A_{i,j} = E_i W_Q (E_j W_K)^T + E_i W_Q (P_j W_K)^T + P_i W_Q (E_j W_K)^T + P_i W_Q (P_j W_K)^T \]

 - 步骤3:Transformer-XL的改进:  
   1. 用相对位置嵌入$R_{i-j}$替代$P_j$,其中$R$为可学习的相对位置嵌入矩阵,索引为相对距离$k = j-i$。  
   2. 将查询项$P_i W_Q$替换为可训练向量$u$(用于内容偏置)和$v$(用于位置偏置)。  
   最终公式:  

\[ A_{i,j} = E_i W_Q (E_j W_K)^T + E_i W_Q (R_{i-j} W_R)^T + u (E_j W_K)^T + v (R_{i-j} W_R)^T \]

   - 第一项:基于内容的注意力;  
   - 第二项:内容与相对位置的交互;  
   - 第三项:全局内容偏置;  
   - 第四项:全局位置偏置。  
 - 优势:支持长序列泛化,且相对距离$k$的取值范围可裁剪(如$|k| \leq 4$),减少参数量。
  1. DeBERTa中的相对位置编码
    • DeBERTa将相对位置编码简化为仅依赖相对距离的标量偏置:

\[ A_{i,j} = Q_i K_j^T + \delta_{i-j} \]

 其中$\delta_{i-j}$是可学习的标量,与相对距离$i-j$对应。  
  • 实现时,预定义最大相对距离(如512),每个距离对应一个偏置参数,直接加到注意力矩阵上。
  1. 总结与对比
    • 相对位置编码更符合语言规律(如局部依赖),且对长度变化鲁棒。
    • 相比绝对编码,相对编码需修改注意力计算,但参数量通常更少。
    • 现代模型(如Sw
Transformer模型中的相对位置编码原理与实现 题目描述 在Transformer模型中,由于自注意力机制本身不具备位置信息,需要显式地引入位置编码。绝对位置编码(如正弦编码)将每个位置的固定向量加到词嵌入上,但这种方法在长序列或迁移到不同长度任务时泛化能力有限。相对位置编码通过建模词与词之间的相对距离,更灵活地捕捉序列中元素的相对关系。本题将详解相对位置编码的动机、经典方法(如Transformer-XL和DeBERTa中的实现)及其数学原理。 解题过程 绝对位置编码的局限性 绝对位置编码(如原始Transformer的正弦函数)为每个位置分配独立编码,公式为: \[ PE_ {(pos,2i)} = \sin(pos / 10000^{2i/d_ {\text{model}}}), \quad PE_ {(pos,2i+1)} = \cos(pos / 10000^{2i/d_ {\text{model}}}) \] 其中\(pos\)为位置索引,\(i\)为维度索引。 问题:当测试序列长度超过训练时,模型可能无法泛化;且绝对位置无法直接表达词间相对关系(如"相邻"或"间隔k个词")。 相对位置编码的核心思想 不再关注词的绝对位置,而是关注词对\((i,j)\)之间的相对距离\(j-i\)。 目标:修改自注意力计算,使注意力分数依赖于相对位置偏移。以查询-键交互为例,原始注意力分数为\(Q_ i K_ j^T\),改进后需融入相对位置信息。 经典方法:Transformer-XL的相对位置编码 在自注意力计算中,将绝对位置编码替换为相对位置嵌入: 步骤1:将注意力分数分解为内容相关和位置相关部分。 原始注意力分数:\(A_ {i,j} = (E_ i + P_ i)W_ Q \cdot (E_ j + P_ j)W_ K^T\)(其中\(E\)为词嵌入,\(P\)为绝对位置编码)。 步骤2:展开后得到四项: \[ A_ {i,j} = E_ i W_ Q (E_ j W_ K)^T + E_ i W_ Q (P_ j W_ K)^T + P_ i W_ Q (E_ j W_ K)^T + P_ i W_ Q (P_ j W_ K)^T \] 步骤3:Transformer-XL的改进: 用相对位置嵌入\(R_ {i-j}\)替代\(P_ j\),其中\(R\)为可学习的相对位置嵌入矩阵,索引为相对距离\(k = j-i\)。 将查询项\(P_ i W_ Q\)替换为可训练向量\(u\)(用于内容偏置)和\(v\)(用于位置偏置)。 最终公式: \[ A_ {i,j} = E_ i W_ Q (E_ j W_ K)^T + E_ i W_ Q (R_ {i-j} W_ R)^T + u (E_ j W_ K)^T + v (R_ {i-j} W_ R)^T \] 第一项:基于内容的注意力; 第二项:内容与相对位置的交互; 第三项:全局内容偏置; 第四项:全局位置偏置。 优势:支持长序列泛化,且相对距离\(k\)的取值范围可裁剪(如\(|k| \leq 4\)),减少参数量。 DeBERTa中的相对位置编码 DeBERTa将相对位置编码简化为仅依赖相对距离的标量偏置: \[ A_ {i,j} = Q_ i K_ j^T + \delta_ {i-j} \] 其中\(\delta_ {i-j}\)是可学习的标量,与相对距离\(i-j\)对应。 实现时,预定义最大相对距离(如512),每个距离对应一个偏置参数,直接加到注意力矩阵上。 总结与对比 相对位置编码更符合语言规律(如局部依赖),且对长度变化鲁棒。 相比绝对编码,相对编码需修改注意力计算,但参数量通常更少。 现代模型(如Sw