5. Positional Encoding 位置编码

5. Positional Encoding 位置编码

1. 动机

  1. 为什么要加位置编码?

    • Self-Attention 本身不感知输入顺序,把序列当成无序集合(Set),缺乏序列(Sequence)信息。
    • 必须人为注入"位置信息",让模型知道"顺序" (Transformer需要)。
  2. 和其他架构对比:

    • CNN 通过卷积核隐式捕捉局部顺序
    • RNN 按时间步显式感知顺序
    • Transformer 完全依赖位置编码来感知顺序

2. 位置编码的实现

  • 基本方法

    • 给长度为 n、维度为 d 的输入 XRn×d,为每个位置 i 添加一个位置向量(位置信息) Pi,构成位置编码矩阵 PRn×d,输入变为 X+P,从而加入位置信息。。
  • 位置编码矩阵 P(正弦-余弦编码):

    Pi,2j=sin(i100002j/d),Pi,2j+1=cos(i100002j/d)
    • i:位置索引
    • j:维度索引的一半
    • d:总维度
  • 绝对位置信息:计算机的二进制编码

  • 相对位置信息

    • 有编码的频率参数 wj=1/100002j/d ,那么,
      • Pi,2j,Pi,2j+1:第i个位置的编码的两个分量

      • Pi+δ,2j,Pi+δ,2j+1:第i+δ个位置的编码分量

      • δ:两个位置之间的距离(如δ=1就是前后相邻)

      • 这个旋转矩阵(只跟δwj有关)可以把位置 i 的编码线性投影到任意位置 i+δ,方便模型计算和理解相对位置信息

[cos(δwj)sin(δwj)sin(δwj)cos(δwj)][Pi,2jPi,2j+1]=[Pi+δ,2jPi+δ,2j+1]

3. 例子:英汉翻译任务中的位置编码

  1. 英汉翻译任务中的位置编码

    1. 例如句子"你好吗?",首先会进入词向量层,被转为 4×4 的词向量矩阵。
    2. 然后进行位置编码,将位置信息加到原始词向量上。
    3. 具体地,用正弦和余弦公式,生成一个 4×4 的位置编码矩阵。
    4. 将每个词的词向量与对应位置编码直接相加,得到新的输入特征。
  2. 原理说明

    1. 为什么直接加位置编码不会破坏词向量信息?

      • 训练数据充足,几乎所有"词+位置"组合模型都能见到并学习。
      • 神经网络足够深、参数足够多,能有效区分并利用"词向量+位置编码"的复杂特征。
    2. 这种方法极大丰富了输入特征空间。例如:有3个词语(a, b, c)和3个位置编码(x, y, z),每个词都可以和3个位置组合,得到9种独特的新表示:

      • 词语向量
        • a=[a1,a2,a3,a4]
        • b=[b1,b2,b3,b4]
        • c=[c1,c2,c3,c4]
      • 位置编码向量
        • x=[x1,x2,x3,x4]
        • y=[y1,y2,y3,y4]
        • z=[z1,z2,z3,z4]
      • a 的组合:a+xa+ya+z
      • b 的组合:b+xb+yb+z
      • c 的组合:c+xc+yc+z
    3. 有一种特殊情况,在数学上称为"碰撞", 不同的词向量和位置编码组合结果,恰好是同一个向量表示(如a+x=b+y)。 这种情况出现时,会使训练数据产生歧义,但是由在高纬度空间,w=[w1,...,wn]n=512 即使某个维度出现"碰撞",对整个维度来说几乎没有影响。

4. 总结

  • Self-Attention 层
    • X 当作 Key、Value、Query 来对序列抽取特征。
    • 完全并行,但对长序列计算复杂度高。
  • 位置编码的作用
    • 在输入中加入位置信息,使得 Self-Attention 能记忆位置信息。

参考

李沐《手动深度学习》:自注意力和位置编码
Bilibili:自注意力和位置编码
YouTube:如何理解Transformer的位置编码,PositionalEncoding详解


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

5. Positional Encoding 位置编码
http://neurowave.tech/2025/04/19/7-5-位置编码/
作者
Artin Tan
发布于
2025年4月19日
更新于
2025年6月30日