Transformer的位置编码(Positional Encoding)原理与计算过程
字数 1732 2025-10-29 11:31:55

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架构处理序列顺序的关键组件。

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架构处理序列顺序的关键组件。