1415 字
7 分钟

大模型 2/?

2026-02-02
浏览量 加载中...

上一讲 大模型 1/? 我们讲解了 Embedding,这是 AI 理解自然语言的基础。但是 Embedding 存在一个致命问题。

Embedding 的局限#

Embedding 只解决了”词长什么样”,但没解决”词在当前句子里该怎么用”。

同一个 Token 在不同句子中,Embedding 是完全一样的,但语义却不同。

举个例子:

  • “他了个电话给我”
  • “他了我一拳”
  • “我们去球吧”

这三个”打”的 Embedding 完全相同,但在不同上下文中意思完全不同:打电话、打人、打球。

Tip

问题不是词义,而是上下文依赖。

Embedding 只解决了”词长什么样”,但没解决”词在当前句子里该怎么用”。

这就要引出大名鼎鼎的注意力机制了。

Attention#

Attention 要解决什么问题#

Attention(注意力机制)的目标不是生成新词,而是:

Note

让每个 Token 决定,在理解当前语义时,应该关注句子中的哪些 Token,以及关注多少。

通过 Attention,同一个 Token 会因为上下文不同,得到完全不同的表示。这一步,语言才第一次变成”句子级理解”。

接下来我们一步步来解释它是如何做到的。

Attention 的整体框架#

首先,我们先把注意力机制当做一个黑盒,看看它的输入和输出:

输入: Attention 并没有引入新的输入,它仍然只基于 Embedding 得到的矩阵 XX

输出: 一个融合了上下文信息的新矩阵,代表每个 Token 在当前句子中的语义表示

Q / K / V 是什么#

Attention 的计算需要三个东西:Q(Query)、K(Key)、V(Value)。

它们都是由同一个 Embedding 矩阵 XX 通过不同的线性变换得到的:

Q=XWqK=XWkV=XWvQ = XW_q \\ K = XW_k \\ V = XW_v

其中 Wq,Wk,WvW_q, W_k, W_v 是模型在训练过程中自动学习出来的参数,不需要我们自己定义。

为什么不能直接用 X?#

你可能会问:既然都是从 XX 来的,为什么不直接用 XXTXX^T 来计算相关性呢?

答案是:如果直接用 XXTXX^T,会陷入”自恋”状态。

  • 任何一个 Token 和自己的相似度一定是最大的( X1X1TX_1 \cdot X_1^T 最大)
  • 模型会过度关注自己,忽略上下文
  • Attention 会退化成”什么都不看”
Note

通过引入不同的 W_q 和 W_k,模型可以打破这种对称性,学会从其他 Token 中汲取更有用的信息。

Q / K / V 的角色#

有了这三个不同的表示,它们分别扮演什么角色呢?看着是不是很像查哈希表:

  • Q(Query):代表”我想找什么”,即当前 Token 的诉求
  • K(Key):代表”我有什么”,即每个 Token 能提供的标签
  • V(Value):代表”我的具体内容是什么”,即每个 Token 携带的实际语义

Attention 的计算流程#

Attention 的计算可以拆成三步:

  1. 计算”我和谁相关” —— QKTQK^T
  2. 把相关性变成权重 —— softmax(QKTdk)softmax(\frac{QK^T}{\sqrt{d_k}})
  3. 按权重汇总信息 —— 乘以 VV

完整的公式为:

Attention=softmax(QKTdk)VAttention = softmax(\frac{QK^T}{\sqrt{d_k}})V

第一步:计算相关性 QKTQK^T#

我们先以单个 Token 的视角来看: Q1KkTQ_1 \cdot K_k^T

假设我们 Embedding 的维度为 dkd_k,那么:

  • X1X_1 的 shape 为 (1,dk)(1, d_k)
  • Wq=Wk=(dk,dk)W_q = W_k = (d_k, d_k)
  • 最终 Q1Q_1 的 shape 为 (1,dk)(1, d_k)KkK_k 的 shape 为 (1,dk)(1, d_k)

Q1KkTQ_1 \cdot K_k^T 代表的就是当前 Token 想要寻找的信息与其他 Token 可提供信息的相关性。

为什么用内积?

向量内积如果值越大,说明两个向量的空间距离就越小。根据我们上一节 Embedding 学习到的知识,这其实也就说明两个 Token 的语义越接近。

第二步:归一化为权重#

现在我们有了相关性分数,但这些分数的数值范围不确定,需要转换为”注意力权重”。

为什么要除以 dk\sqrt{d_k}

因为内积的数值会随着维度增大而增大,而 softmaxsoftmax 对数值尺度非常敏感。如果不缩放,容易出现非 0 即 1 的极端情况。

除以 dk\sqrt{d_k} 可以让内积保持在合理范围内。

softmax 做了什么?

softmaxsoftmax 将相关性分数归一化到 0-1 之间,且所有权重之和为 1,形成一个概率分布。

经过 softmaxsoftmax 后, Q1Q_1 对每个 KkK_k 的分数就代表着 Token1Token_1TokenkToken_k 的注意力权重。

第三步:加权求和#

最后,用注意力权重对每个 Token 的实际信息( VV)进行加权求和。

每个 Token 最终得到的表示 = 根据注意力权重,从所有 Token 的 VV 中汇总信息。

Tip

注意力机制的本质: 根据 Q 和 K 的匹配度,决定从对应的 V 中抽取多少信息

从 Token 到句子#

上面我们讲的是单个 Token 的计算过程。对于整个句子:

假设句子有 nn 个 Token,那么:

  • XX 的 shape 为 (n,dk)(n, d_k)
  • Q,K,VQ, K, V 的 shape 都为 (n,dk)(n, d_k)
  • QKTQK^T 的 shape 为 (n,n)(n, n) —— 这是一个注意力矩阵,第 ii 行第 jj 列表示第 ii 个 Token 对第 jj 个 Token 的注意力
  • 最终输出的 shape 为 (n,dk)(n, d_k) —— 每个 Token 都得到了融合上下文信息后的新表示

总结#

通过 Attention,我们解决了 Embedding 的局限:

  • Embedding 给了每个词一个固定的表示
  • Attention 让每个词根据上下文动态调整表示

同一个 Token 在不同句子中,虽然 Embedding 相同,但经过 Attention 后会得到完全不同的表示。

这就是 Attention 的魔力所在。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

大模型 2/?
https://printsdf.dpdns.org/posts/llm-2/
作者
printsdf
发布于
2026-02-02
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-02-02,距今已过 81 天

部分内容可能已过时

评论区

Profile Image of the Author
printsdf
Hello, I'm printsdf.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
37
分类
12
标签
14
总字数
47,088
运行时长
0
最后活动
0 天前

目录