Embedding 矩阵 与 多头注意力
记录于 2026-05-18,对话整理
一个词是怎么变成数字的
每个词先通过分词器转为 ID,再查 Embedding 矩阵:
"猫" → ID: 2347 → 查 Embedding 矩阵第 2347 行
↓
[0.23, -0.81, 0.54, ..., 0.12] ← 512 个数这 512 个数就代表了"猫"这个词在语义空间里的坐标。
训练前 vs 训练后
| 阶段 | Embedding 里的数 |
|---|---|
| 训练前 | 随机初始化 |
| 训练后 | 语义相近的词自动靠近 |
训练后的向量空间:
"猫" ●
"狗" ● ← 距离近,语义相似
"汽车" ● ← 距离远
"飞机" ●为什么是 512 维?
512 是 Transformer 原始论文里定的超参数(d_model = 512)。维数越高,能表达的语义越丰富,但计算量也越大。不是固定的,GPT-3 用了 12288 维。
多头注意力:为什么要"多头"
单头 vs 多头
单头注意力只有一种"视角"——每次只从一个角度看词与词之间的关系。
多头注意力把 512 维分成多个子空间,每个头负责一种关注模式:
512 维 ÷ 8 头 = 每头 64 维
头 1:[0..63] 关注主谓关系("猫" 和 "跑")
头 2:[64..127] 关注修饰关系("快速" 修饰 "跑")
头 3:[128..191] 关注指代关系("它" 指代 "猫")
...
头 8:[448..511] 关注位置/顺序信息头数是固定的吗?
不固定,由 d_model ÷ d_head 决定:
d_model = 512,每头 64 维 → 8 头
d_model = 768,每头 64 维 → 12 头(BERT-base)
d_model = 1024,每头 64 维 → 16 头(BERT-large)叫"多头"而不是"8头",就是因为头数不固定。
子空间是什么意思
完整向量(512维)= 多个子空间的拼接
[ 头1的64维 | 头2的64维 | ... | 头8的64维 ]
"看主谓" "看修饰" "看位置"每个头在自己的 64 维子空间里独立计算注意力,最后把结果拼回来。这样模型能同时从多个角度理解词和词的关系。
整体流程回顾
"猫 快速 跑"
│
▼ Embedding(查表)
[512维] [512维] [512维]
│
▼ 多头注意力(分成8个子空间并行计算)
每头各算:这个词该关注哪些词?
│
▼ 拼回 512 维
│
▼ 前馈网络
│
▼ 下一层...(共 6~96 层)