sin-cos 解析
位置编码
How position is determined
这其实非常简单,它基于计算机科学中最基础的 “索引” (Index) 概念。Transformer 并不认识单词,它只认识单词在句子里的排队顺序。
我们在处理句子 "Thinking Machines" 时:
- Thinking: 是第 1 个词。在 Python/编程中,索引从 0 开始,所以 $pos = 0$。
- Machines: 是第 2 个词。所以 $pos = 1$。
- …: 如果后面还有词,就是 $pos = 2, 3, 4 \dots$
结论:$pos$ 就是单词在句子中的下标。当你输入第一个词时,模型自动认定 $pos=0$。
2. Sin/Cos
Google 团队设计了一个巧妙的公式,让每个位置都能生成一个独一无二的纹理。
结果对比:
| 单词 | Pos | 向量 (近似值) | 特征 |
| :—- | :—- | :—- | :—- |
| Thinking | 0 | [0.00, 1.00, 0.00, 1.00] | 干净的 0/1 |
| Machines | 1 | [0.84, 0.54, 0.01, 1.00] | 前面变化大,后面变化小 |
💡 直观比喻:时钟
- 位置编码的低维度(左边的数)就像秒针,走得很快(0.84)。
- 位置编码的高维度(右边的数)就像时针,走得很慢(0.01)。
- Transformer 通过看这“一排指针”的状态,就能精确知道现在是几点(单词在哪)。