与买桂花同载酒 🌙

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 通过看这“一排指针”的状态,就能精确知道现在是几点(单词在哪)。