花拾录
← 返回知识库

词向量到注意力:用一个小语料亲手推演 Transformer 的计算过程

人工智能AI2026/09/240 阅读0 评论

Transformer 是现代大模型的基础,但只看公式容易一头雾水。本文用一个小语料,手算一遍从词向量到注意力的关键步骤,帮你真正理解内部计算。

1. 准备一个小语料

假设我们只有两个句子:

  • "猫 追 老鼠"
  • "狗 追 猫"

先构建词表:{猫, 追, 老鼠, 狗},每个词分配一个整数 ID(如 猫=0, 追=1, 老鼠=2, 狗=3)。然后为每个词随机初始化一个 d_model=4 维的词向量(实际训练会学习,这里为了演示固定为简单数值)。例如:

  • 猫: [1, 0, 0, 0]
  • 追: [0, 1, 0, 0]
  • 老鼠: [0, 0, 1, 0]
  • 狗: [0, 0, 0, 1]

2. 自注意力的核心:Q、K、V

自注意力让每个词参考句子中其他词的信息。对每个词向量 x,分别乘以三个可学习矩阵 W_Q、W_K、W_V(维度 d_k=4),得到 Query、Key、Value。为简化,设这三个矩阵都是单位矩阵,则 Q=K=V=x。

以句子 "猫 追 老鼠" 为例,三个词的 Q/K/V 就是它们的词向量。

3. 计算注意力分数与权重

注意力分数 = Q·Kᵀ / √d_k。对于第一个词 "猫":

  • 与 "猫" 的点积:1×1 + 0 + 0 + 0 = 1
  • 与 "追" 的点积:1×0 + 0×1 + 0 + 0 = 0
  • 与 "老鼠" 的点积:1×0 + 0 + 0×1 + 0 = 0 除以 √4 = 2,得到分数 [0.5, 0, 0]。

对分数做 softmax:

  • exp(0.5)≈1.6487,exp(0)=1,exp(0)=1
  • 总和≈3.6487
  • 权重≈[0.452, 0.274, 0.274]

这意味着 "猫" 在编码自身时,约 45% 关注自己,27% 关注 "追",27% 关注 "老鼠"。(实际中权重会因训练而更合理。)

4. 加权求和得到输出

用权重对 V 加权求和:

  • 猫的 V = [1,0,0,0]
  • 追的 V = [0,1,0,0]
  • 老鼠的 V = [0,0,1,0]

输出 = 0.452×[1,0,0,0] + 0.274×[0,1,0,0] + 0.274×[0,0,1,0] = [0.452, 0.274, 0.274, 0]。

这个新向量就是 "猫" 经过自注意力后的表示,它融合了上下文信息。

5. 多头注意力与残差

实际 Transformer 会并行做多次这样的计算(多头),每个头使用不同的 W_Q、W_K、W_V,最后拼接并线性变换。此外还有残差连接和层归一化,帮助训练稳定。

6. 动手建议

你可以用 Python + NumPy 实现上述过程:

  1. 定义词向量矩阵和权重矩阵;
  2. 计算 Q、K、V;
  3. 计算注意力分数并 softmax;
  4. 加权求和得到输出。

通过这个小例子,你会发现 Transformer 并不神秘——它本质上是在做可学习的加权平均。理解了这个核心,再去看 BERT、GPT 的论文就会轻松很多。

评论(0)

  • 还没有评论,来抢沙发~

相关文章