Skip to content

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 层)

Built with VitePress