文章目录
- 05 | 位置编码不是位置信息:Transformer如何建立语言顺序感?
- 一、为什么Transformer需要“位置感知”?
- 二、什么是位置编码(Position Encoding, PE)?
- 三、相对 vs 绝对位置编码
- 四、可学习位置编码机制
- 五、PE机制的新变体
- 六、总结
05 | 位置编码不是位置信息:Transformer如何建立语言顺序感?
副标题:PE机制、绝对/相对位置编码的差异与演化
一、为什么Transformer需要“位置感知”?
Transformer架构不具备天然的顺序处理能力,不像RNN或LSTM按时间步递进,而是一次性接收所有token向量并进行并行计算。
这会导致一个问题:
模型无法知道哪些词在前,哪些词在后。
例如:
- “我爱你”和“你爱我”在未引入位置信息时,token嵌入是相同集合,语义无序。
二、什么是位置编码(Position Encoding, PE)?
位置编码是将序列中每个token的位置注入其embedding中的一种机制,确保模型能够处理顺序。
在原始Transformer中采用了基于正余弦函数的不可训练位置编码:
PE(pos, 2i) = sin(pos / 10000^{2i / d_model})
PE(pos, 2i+1) = cos(pos / 10000^{2i / d_model})
pos
: 当前token位置;i
: 当前维度索引;d_model
: 词向量总维度。
三、相对 vs 绝对位置编码
类型 | 描述 | 特点 |
---|---|---|
绝对位置编码 | 每个位置都有固定向量 | 可外推,但不关注词与词之间距离 |
相对位置编码 | 编码的是词与词之间的相对距离(如+2,-1) | 贴近语言结构,表现更优,结构复杂 |
相对位置编码示例(来自Transformer-XL):
- “他今天很高兴”
- “今天他很高兴”
虽然词语顺序不同,但“他”与“高兴”距离类似 → 相对位置编码可捕捉这种稳定性。
四、可学习位置编码机制
除了固定函数形式,也可使用 Learnable Position Embedding:
position_table = nn.Embedding(max_len, d_model)
position_embedding = position_table[position_id]
- 优点:可自动适应任务;训练中直接优化;
- 缺点:无法泛化到比训练序列更长的输入。
BERT、GPT-2 等模型初期版本采用该机制。
五、PE机制的新变体
为提升长文本建模能力,近年出现了多种新型PE方式:
-
RoPE(Rotary Position Embedding) - LLaMA 使用
- 用复数旋转方式对embedding进行位移;
- 保持方向与幅度,支持无限长输入。
-
ALiBi(Attention with Linear Biases)
- 不再构造位置向量,而是在 attention 分数中直接加入距离 bias。
-
T5 relative bias
- 将不同距离编码为“距离桶”,并作为 attention bias 输入。
六、总结
Transformer 本身没有“顺序感”,PE机制正是帮助模型在“并行计算”中找回“语言顺序”的方法。
其演化路线体现出:
- 从显式向量 → 注意力偏置
- 从不可训练函数 → 可学习表示
- 从位置本身 → 词对间距离感知
这条路径将Transformer从结构上进一步推向“语言几何”的深入建模阶段。