Transformer模型中的相对位置编码原理与实现
字数 1572 2025-11-13 05:35:52
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:展开后得到四项:
- 步骤1:将注意力分数分解为内容相关和位置相关部分。
- 在自注意力计算中,将绝对位置编码替换为相对位置嵌入:
\[ 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$),减少参数量。
- DeBERTa中的相对位置编码
- DeBERTa将相对位置编码简化为仅依赖相对距离的标量偏置:
\[ A_{i,j} = Q_i K_j^T + \delta_{i-j} \]
其中$\delta_{i-j}$是可学习的标量,与相对距离$i-j$对应。
- 实现时,预定义最大相对距离(如512),每个距离对应一个偏置参数,直接加到注意力矩阵上。
- 总结与对比
- 相对位置编码更符合语言规律(如局部依赖),且对长度变化鲁棒。
- 相比绝对编码,相对编码需修改注意力计算,但参数量通常更少。
- 现代模型(如Sw