大模型 2/?
上一讲 大模型 1/? 我们讲解了 Embedding,这是 AI 理解自然语言的基础。但是 Embedding 存在一个致命问题。
Embedding 的局限
Embedding 只解决了”词长什么样”,但没解决”词在当前句子里该怎么用”。
同一个 Token 在不同句子中,Embedding 是完全一样的,但语义却不同。
举个例子:
- “他打了个电话给我”
- “他打了我一拳”
- “我们去打球吧”
这三个”打”的 Embedding 完全相同,但在不同上下文中意思完全不同:打电话、打人、打球。
问题不是词义,而是上下文依赖。
Embedding 只解决了”词长什么样”,但没解决”词在当前句子里该怎么用”。
这就要引出大名鼎鼎的注意力机制了。
Attention
Attention 要解决什么问题
Attention(注意力机制)的目标不是生成新词,而是:
让每个 Token 决定,在理解当前语义时,应该关注句子中的哪些 Token,以及关注多少。
通过 Attention,同一个 Token 会因为上下文不同,得到完全不同的表示。这一步,语言才第一次变成”句子级理解”。
接下来我们一步步来解释它是如何做到的。
Attention 的整体框架
首先,我们先把注意力机制当做一个黑盒,看看它的输入和输出:

输入: Attention 并没有引入新的输入,它仍然只基于 Embedding 得到的矩阵
输出: 一个融合了上下文信息的新矩阵,代表每个 Token 在当前句子中的语义表示
Q / K / V 是什么
Attention 的计算需要三个东西:Q(Query)、K(Key)、V(Value)。
它们都是由同一个 Embedding 矩阵 通过不同的线性变换得到的:
其中 是模型在训练过程中自动学习出来的参数,不需要我们自己定义。
为什么不能直接用 X?
你可能会问:既然都是从 来的,为什么不直接用 来计算相关性呢?
答案是:如果直接用 ,会陷入”自恋”状态。
- 任何一个 Token 和自己的相似度一定是最大的( 最大)
- 模型会过度关注自己,忽略上下文
- Attention 会退化成”什么都不看”
通过引入不同的 W_q 和 W_k,模型可以打破这种对称性,学会从其他 Token 中汲取更有用的信息。
Q / K / V 的角色
有了这三个不同的表示,它们分别扮演什么角色呢?看着是不是很像查哈希表:
- Q(Query):代表”我想找什么”,即当前 Token 的诉求
- K(Key):代表”我有什么”,即每个 Token 能提供的标签
- V(Value):代表”我的具体内容是什么”,即每个 Token 携带的实际语义
Attention 的计算流程
Attention 的计算可以拆成三步:
- 计算”我和谁相关” ——
- 把相关性变成权重 ——
- 按权重汇总信息 —— 乘以
完整的公式为:
第一步:计算相关性
我们先以单个 Token 的视角来看:
假设我们 Embedding 的维度为 ,那么:
- 的 shape 为
- 最终 的 shape 为 , 的 shape 为
代表的就是当前 Token 想要寻找的信息与其他 Token 可提供信息的相关性。
为什么用内积?
向量内积如果值越大,说明两个向量的空间距离就越小。根据我们上一节 Embedding 学习到的知识,这其实也就说明两个 Token 的语义越接近。
第二步:归一化为权重
现在我们有了相关性分数,但这些分数的数值范围不确定,需要转换为”注意力权重”。
为什么要除以 ?
因为内积的数值会随着维度增大而增大,而 对数值尺度非常敏感。如果不缩放,容易出现非 0 即 1 的极端情况。
除以 可以让内积保持在合理范围内。
softmax 做了什么?
将相关性分数归一化到 0-1 之间,且所有权重之和为 1,形成一个概率分布。
经过 后, 对每个 的分数就代表着 对 的注意力权重。
第三步:加权求和
最后,用注意力权重对每个 Token 的实际信息( )进行加权求和。
每个 Token 最终得到的表示 = 根据注意力权重,从所有 Token 的 中汇总信息。
注意力机制的本质: 根据 Q 和 K 的匹配度,决定从对应的 V 中抽取多少信息
从 Token 到句子
上面我们讲的是单个 Token 的计算过程。对于整个句子:
假设句子有 个 Token,那么:
- 的 shape 为
- 的 shape 都为
- 的 shape 为 —— 这是一个注意力矩阵,第 行第 列表示第 个 Token 对第 个 Token 的注意力
- 最终输出的 shape 为 —— 每个 Token 都得到了融合上下文信息后的新表示
总结
通过 Attention,我们解决了 Embedding 的局限:
- Embedding 给了每个词一个固定的表示
- Attention 让每个词根据上下文动态调整表示
同一个 Token 在不同句子中,虽然 Embedding 相同,但经过 Attention 后会得到完全不同的表示。
这就是 Attention 的魔力所在。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分内容可能已过时
printsdf's Blog