本文通过一个简单的四词句子“I like to draw”,手动演示GPT-2中注意力机制的计算全过程:从原始分数到softmax权重,再到值向量的加权平均,并解释残差连接的作用。让你彻底理解Attention到底在做什么。
“注意力”听起来是Transformer中最复杂的部分。人人都提它,但几乎没人动手算过。拨开面纱,剩下的算术连电子表格都能做:对几个数做指数,除以总和,然后加权平均。
真正值得思考的是:什么东西被平均?为什么权重和值由模型内部不同的机制产生?搞清这个区分,整个模块就不再神秘。
本文不描述注意力,而是手动运行它。用一句四个词的句子,追踪目标token的每一个数字,直至生成上下文嵌入。

我们的句子是四个token:
I like to draw
^
计算draw的注意力
在GPT风格的解码器中,因果掩码阻止任何token看到后面的token。因为draw是最后一个token,掩码没有阻挡:它可以关注I、like、to和自己。
模型已经将每个token映射为查询(query)和键(key),并将draw的查询与四个键做点积。假设四个原始得分如下:
raw scores = [1.8, 0.2, 0.6, -0.3](对应于 I, like, to, draw)
分数越高说明draw的查询与对应token的键越匹配。但这不是最终权重:它们可以为负,数值差异大,总和也不固定。在比较之前,模型会用键维度的平方根缩放,防止点积膨胀。因果掩码也在此时应用。为了算术清晰,上面的数字已经缩放和掩码过。
把任意实数变成一组正数且和为1的工具是softmax:
softmax(xᵢ) = e^xᵢ / Σⱼ e^xʲ
操作分三步:对每个分数求指数、求和、每个除以总和。
指数做了两件事:第一,所有结果变为正数(负分-0.3变为0.74);第二,放大了差距——稍大的输入产生更大的输出,最强匹配明显领先。
注意:上面显示的和为1.01,因为四舍五入。实际上精确和为1.00。Softmax总是返回一个真正的概率分布。
解读权重:draw最关注I(0.62),其次是to(0.19),然后是like(0.12),最后是自己(0.08)。
Softmax从不决定传递什么信息,它只决定每个token获得多少投票权。
那么,内容从哪里来?
自注意力对每个token运行三个独立的学习投影:查询和键产生权重,值产生内容。同一个输入token,三个不同的学习视角。

查询和键已经完成工作:设置权重。值投影回答不同的问题:将输入token表示乘以学习的值矩阵Wⱽ:
V = X Wⱽ
形状:X(4×768) · Wⱽ(768×768) → V(4×768)
每个token得到一个值向量:v(I)、v(like)、v(to)、v(draw)。这些不是输入嵌入的副本。投影将每个token重塑为携带模型认为有用的信息的表示。查询描述token在寻找什么;键描述它可能被什么找到;值是选中后发送的包裹。
现在两个部分汇合。Softmax权重缩放四个值向量,然后相加:
context(draw) = 0.62·v(I) + 0.12·v(like) + 0.19·v(to) + 0.08·v(draw)
为了直观,假设每个值只有三个数字(实际是768维):
v(I) = [0.9, 0.1, 0.4]
v(like)= [0.2, 0.8, 0.3]
v(to) = [0.5, 0.5, 0.6]
v(draw)= [0.3, 0.2, 0.9]
逐维加权求和:
最终上下文向量:[0.70, 0.27, 0.47]
实际维度为768,原理相同。因为v(I)权重最大,主导输出;v(draw)权重0.08,影响很小。

矩阵形式就是Transformer论文中的一行:
Attention(Q, K, V) = softmax(QKᵀ/√dₖ) V(对解码器如GPT-2,在Softmax前应用因果掩码)
权重回答“哪些token相关”,值回答“拉进来什么”。经典例子:
句子:“The animal didn’t cross the street because it was too tired.”
考虑处理“it”的注意力头。如果它给“animal”很高的权重,那么移动的不是“animal”这个词,而是“animal”的值向量到“it”的表示中。
context(it) = 高权重·v(animal) + 其他小贡献
模型将“animal”相关的信息复制到“it”中,这就是代词如何携带所指代物的含义。注意:不要假设值向量的某个维度编码了“动物”或“名词”。维度是学到的特征,很少映射到人能命名的概念。我们只能说向量持有了模型认为下游有用的信息。这是一个更弱但更诚实的说法。
很多图省略的步骤:注意力输出不替换draw的表示。Transformer保留输入表示,通过残差连接将注意力结果加到上面。

“输入”这里做了实际工作。不一定是最初的词嵌入,而是进入这个注意力块的表示。在深层,该向量已携带下面多层写入的信息。残差连接让模型保留token已知的信息,同时折叠刚收集的新上下文。
残差连接就像是模型在页边空白处写笔记,而不是重写整页。
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断