注意力机制,逐步算清
手算 Q、K、V、softmax 和因果掩码。
对应资料:Attention Is All You Need [S008]
沿着对象与状态理解本章
先在可见性表里选一个查询行,决定哪些Key位置允许参与;再看如何缩放和混合。多头改变表示的分组方式,位置旋转改变Q/K的比较,反向传播计算参数的影响,三者不是同一个步骤。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
Mask是可见性表,不是额外语义
怎样防止读到未来,或者把PAD读成内容?
把注意力的分数表看成一张“谁可以读谁”的座位表。行代表接收者,列代表提供者;禁止格子不能参与概率分母。因果限制、PAD限制可以同时存在,但一个负责时间顺序,一个负责有效内容,不能互相替代。
输入与适用条件:前3帧用3个有效位置;第4帧是明确的屏蔽数值对照;第5帧另设past=3、new=2展示缓存偏移。图内始终标出当前条件。
1 / 5 · 处理绝对位置0
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
位置不是数字大小比赛。因果规则只允许当前查询读取自己和更早的Key;后面的位置即使已经在训练输入数组中,也不能读。
允许Key位置 ≤ 0默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
防止训练偷看目标,并排除只为组批存在的填充内容。
怎样实现
先按实际位置和有效长度构造关系,再核对所用API布尔mask语义。
可能的代价与误解
不同API的True可能表示允许或禁止;全行无可见Key还需明确策略,不能直接做普通softmax。
如何判断是否做对
用能暴露未来泄漏的数据,比较正确掩码与故意写错偏移的结果。
注意力公式的每个量对应什么
本篇对应《Attention Is All You Need》的核心机制。设三个Token的当前表示为矩阵X,投影得到Q、K、V。Query用来与Key匹配,匹配权重再作用于Value。它是模型内部连续计算,不是外部数据库检索。[S008]
Q = X Wq K = X Wk V = X Wv
scores = Q Kᵀ / √d_k
weights = softmax(scores + mask)
output = weights V
如果X有n行,每行隐藏维度d,Q和K每个头有d_k维,那么QKᵀ是n×n。它描述查询位置与被查询位置的配对分数。检查维度是理解公式最有效的方法之一。
手算一次组合
以下全部数值为原创教学例子。假设某位置对三个可见位置的分数是[0,1,2]。指数约为[1,2.718,7.389],归一化后权重约为[0.0900,0.2447,0.6652]。若Value某一维是[10,20,30],该维输出约为25.75。
输出不是直接复制30,而是加权组合。最高权重提供主要贡献,但另外两个仍有作用。真正模型还有多个头、残差和后续层,因此某个注意力最大位置不能完整解释最终回答。
加上因果掩码会怎样
假设当前位置只能看到前两个位置,第三个分数被掩码设为负无穷。softmax后第三个权重为零,前两个重新归一化为约[0.269,0.731]。Value第三项不应影响这个位置的输出。
这提供一个可测试性质:改变未来Value,当前因果输出应保持不变。配套实验用小矩阵验证这一点,不需要训练模型,也不声称复现任何商业模型的内部数值。
多头、位置与前馈为什么还需要
不同头使用不同投影,提供多个关系子空间;位置机制提供顺序信息;前馈网络对组合后的特征做非线性处理。它们共同形成表达能力,不能把模型简化成一个相似度矩阵。[S008][S012]
GQA让多个查询头共享较少KV头,影响缓存成本;MoE改变前馈专家的选择。二者都属于模型内部结构,和外部多个Agent协作不是一回事。[S013][S014]
两个常见误解
“注意力权重就是模型置信度。”不是。它是某层某头的信息组合权重,并非最终答案正确概率。
“有注意力就不会遗漏输入。”不是。计算允许信息交互,不保证训练后的网络对所有复杂约束都可靠使用。长上下文研究必须通过任务表现评价。[S085][S088]
完成本篇后,应能追踪矩阵形状、解释Mask、手算softmax,并知道公式没有承诺哪些能力。
继续深入:第1章 · 模型内部 或阅读拓展阅读目录1.3的逐项讲义。所有链接均为本地内容。
从两段内容到一个混合向量,而不是选中一句话
输入与条件。当前查询 q=[1,0],可见Key为 k0=[1,0]、k1=[0,1],对应Value为 v0=[10,0]、v1=[0,20]。每头宽度2。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1匹配 | 分别算q与两个Key的点积 | 得到 [1,0]。 |
| 2缩放 | 两个分数都除以√2 | 约 [0.707107,0]。 |
| 3归一化 | 对两个可见位置做softmax | 约 [0.669762,0.330238]。 |
| 4混合第1个特征 | 用两份Value的第1格加权 | 0.6697615493×10+0.3302384507×0≈6.697615。 |
| 5混合第2个特征 | 用两份Value的第2格加权 | 0.6697615493×0+0.3302384507×20≈6.604769。 |
| 6得到输出 | 把两格放一起 | 约 [6.697615,6.604769],不是任何一份原始Value。 |
把过程连起来。匹配分数决定读取份额,Value决定混合什么。只改Value时,读取份额可以完全不变,但输出会变。
边界与反例。直接给Q/K/V以隔离注意力运算;真实网络还需先由输入投影得到它们。
依据与适用范围:[SDPA]。示例输入和场景由本书明确设定。