Transformer的位置编码(Positional Encoding)原理与计算过程
题目描述
在Transformer模型中,由于自注意力机制本身不包含序列位置信息,需要引入位置编码来为输入序列的每个位置添加顺序特征。要求详细讲解位置编码的数学原理、设计思想以及具体计算步骤。
1. 位置编码的作用与需求
- 自注意力机制是置换不变(permutation-invariant)的,即打乱输入序列的顺序不会改变输出结果,但自然语言等序列数据依赖顺序信息
- 位置编码需满足以下性质:
- 能为每个时间步生成唯一编码
- 相对位置关系可被模型捕捉
- 编码值范围有界,避免梯度爆炸
- 可泛化到比训练时更长的序列
2. 正弦余弦位置编码的数学形式
原始Transformer使用周期函数组合:
对于位置\(pos\)(0-indexed)和维度\(i\)(\(0 \leq i < d_{model}\)),编码计算为:
\[PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) \]
\[PE_{(pos,2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) \]
其中\(d_{model}\)是词嵌入维度(如512),\(2i\)和\(2i+1\)分别对应偶数维和奇数维
3. 设计原理详解
- 频率递减结构:\(10000^{2i/d_{model}}\)中的指数项使波长从\(2\pi\)到\(20000\pi\)递增,低维(小\(i\))对应高频变化,高维对应低频变化
- 相对位置线性表达:对任意偏移量\(k\),\(PE_{pos+k}\)可表示为\(PE_{pos}\)的线性函数,证明如下:
令\(\omega_i = 10000^{-2i/d_{model}}\),根据三角函数公式:
\[ \begin{aligned} \sin(\omega_i (pos+k)) &= \sin(\omega_i pos)\cos(\omega_i k) + \cos(\omega_i pos)\sin(\omega_i k) \\ \cos(\omega_i (pos+k)) &= \cos(\omega_i pos)\cos(\omega_i k) - \sin(\omega_i pos)\sin(\omega_i k) \end{aligned} \]
这表明模型可通过学习线性变换来捕捉相对位置
- 奇偶维交替:相邻维度使用正弦和余弦保证位置信息遍布所有维度
4. 具体计算示例
假设\(d_{model}=4\),计算\(pos=1\)的位置编码:
- \(i=0\)(第0、1维):\(\omega_0=10000^{0/4}=1\)
\(PE_{(1,0)}=\sin(1/1)=\sin(1)\approx0.8415\)
\(PE_{(1,1)}=\cos(1/1)=\cos(1)\approx0.5403\) - \(i=1\)(第2、3维):\(\omega_1=10000^{-2/4}=0.01\)
\(PE_{(1,2)}=\sin(1\times0.01)\approx0.0100\)
\(PE_{(1,3)}=\cos(1\times0.01)\approx0.9999\)
最终编码为\([0.8415, 0.5403, 0.0100, 0.9999]\)
5. 与词嵌入的整合
位置编码与词嵌入通过相加合并:
\[X = Embedding(token) + PE(pos) \]
- 二者维度相同,直接逐元素相加
- 通常会对词嵌入和位置编码分别进行缩放,保证数值范围匹配
6. 其他位置编码变体
- 可学习的位置编码:将\(PE\)作为可训练参数,但泛化性可能受限
- 相对位置编码:关注位置间的相对距离而非绝对位置
- 旋转位置编码(RoPE):通过旋转操作融入相对位置信息,常用于大语言模型
总结
正弦余弦位置编码通过三角函数周期性、波长几何级数变化等设计,既保证唯一性又支持外推,成为Transformer架构处理序列顺序的关键组件。