1. 为什么我们需要位置编码?
在自然语言处理任务中,序列的顺序信息至关重要。"我爱北京"和"北京爱我"这两个句子虽然包含完全相同的词语,但含义却截然不同。Transformer模型最初的设计中,自注意力机制本身并不具备捕捉序列顺序的能力,这就是位置编码诞生的根本原因。
1.1 Token Embedding的局限性
当我们把词语转换为Token Embedding时,很多人会误以为词序信息已经被自然包含其中。实际上,Token Embedding只是将每个词映射到一个高维空间中的固定点,这个映射过程完全不考虑词语在句子中的位置关系。举个简单的例子:
假设我们有三个词的句子:"猫/追/老鼠",经过Embedding层后:
- "猫" → [0.2, -0.3, 0.5]
- "追" → [0.1, 0.4, -0.2]
- "老鼠" → [-0.3, 0.1, 0.6]
无论这三个词在句子中的顺序如何排列,它们的Embedding向量都不会改变。这意味着模型无法区分"猫追老鼠"和"老鼠追猫"的区别。
1.2 位置编码的核心作用
位置编码的核心价值在于为模型提供序列中元素的相对和绝对位置信息。它通过以下两种主要方式实现:
- 绝对位置编码:为每个位置分配一个独特的编码向量
- 相对位置编码:编码元素之间的距离关系
在Transformer的原始论文中,使用的是正弦/余弦函数的固定位置编码。这种设计有几个精妙之处:
- 可以处理比训练时更长的序列
- 不同位置的编码之间存在线性关系,便于模型学习相对位置模式
- 正弦函数的周期性有助于模型捕捉重复出现的模式
提示:位置编码不是简单的"位置编号",而是一种结构化的位置表示方法。好的位置编码应该既能表示绝对位置,又能方便地推导出相对位置关系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 绝对位置编码的局限性实验分析
2.1 语序打乱实验设计
为了验证位置编码的实际效果,我们设计了以下对照实验:
- 实验组A:正常语序 + 位置编码
- 实验组B:随机打乱语序 + 位置编码
- 对照组C:正常语序 + 无位置编码
- 对照组D:随机打乱语序 + 无位置编码
实验使用相同的Transformer模型架构,在WikiText-2数据集上
