从直觉到证明3Blue1Brown 中文导学教材
3.8 注意力:按上下文加权信息

3.8 注意力:按上下文加权信息

分别追踪查询、键和值,观察分数如何变成每行和为一的权重。

例题练习Lean 对照原课

一步一步建立直观

先预测,再点“演示本步”核对右图。每一步都重设到指定情形,随后可以自由修改参数。

01从一个问题出发选择要读取的信息

把查询看成当前要找的特征,把键看成可供匹配的索引,把值看成真正需要传递的内容。右图直接调两个匹配分数的差,省去向量点积,只观察匹配之后的读取阶段。分数相等时,两个值具有相同权重,输出落在它们的中点。

02权重移动,输出也随之移动

提升第二项分数后,它的指数权重增大,输出向第二个值移动。由于权重非负且总和为一,单次标量加权结果始终落在两个值之间。读数与图形共同显示这个凸组合约束;经过后续线性层或残差相加后,整体输出则不再受同一界限约束。

03温度改变选择的锐利程度

固定分数差而降低温度,较大分数占据更大份额;提高温度则趋向平均。softmax 仍然是连续加权,不是简单地取最大值。非常小的温度会使数值敏感,程序还应使用稳定计算方法。这里的两个标量值只是便于检查机制的缩小模型。

3.8.1 同一个词为什么需要不同上下文表示

想象“银行”出现在取款句子与河岸翻译任务中。初始 token 表示本身不足以决定当前语境,需要从周围位置读取信息。注意力为每个位置建立一份按上下文改变的加权汇总,而不是给所有位置固定同一平均值。

查询负责提出匹配需求,键负责供匹配,值负责携带真正传递的内容。查询与键点积得到分数,再通过归一化产生权重。键与值分开,使“怎样找到信息”和“取回什么信息”能使用不同变换。

3.8.2 用两个值理解汇总,再放回矩阵

只有两个标量值二与十时,权重 (0.75,0.25)(0.75,0.25) 给出四;把第二权重增大,输出向十移动。非负且和为一的权重保证汇总位于两值之间。交互实验会同时展示分数、温度、权重和输出,便于区分这四个对象。

真实单头中,每个查询都对多个键计算一行分数,所以出现 QKTQK^T。除以 dk\sqrt{d_k} 是缩放分数的设计;因果掩码让当前位置不能偷看未来 token。对每行独立归一化,再乘 VV,便批量完成所有查询的汇总。

凸包解释只约束这一步的值平均,后续输出投影、多个头和残差连接都会改变最终位置。查询“寻找某类词”的比喻有助于理解可能行为,但某个训练模型究竟学了什么,仍须查看参数和实验,不能从命名直接断言。

定义 3.8.1 归一化指数权重

给定实数分数 sjs_j 与正温度 TT,令 aj=esj/T/∑kesk/Ta_j=e^{s_j/T}/\sum_k e^{s_k/T}。各权重为正,且总和为一。

命题 3.8.1 一次注意力读取是凸组合

若标量值都在区间 [m,M][m,M] 中,则加权输出 ∑jajvj\sum_j a_jv_j 也在 [m,M][m,M] 中。

证明 · 展开纸笔推导

逐项有 ajm≤ajvj≤ajMa_jm\le a_jv_j\le a_jM,因为各权重非负。求和后得到 m∑jaj≤∑jajvj≤M∑jajm\sum_j a_j\le\sum_j a_jv_j\le M\sum_j a_j。

使用权重和为一便得到结论。本命题只约束这一次加权汇总,未约束接下来的线性输出变换、残差相加或整个网络的数值范围。

□

数学表述 3.8.1

查询向量表达“正在寻找什么”,键向量用于匹配,值向量提供被汇总的信息。每个位置根据自身查询选择不同的权重。

以 token 为行:Q=XWQ,K=XWK,V=XWVQ=XW_Q,K=XW_K,V=XW_V, Attention(Q,K,V)=softmaxrow(QKTdk+M)V.\operatorname{Attention}(Q,K,V)=\operatorname{softmax}_{\mathrm{row}}\!\left(\frac{QK^T}{\sqrt{d_k}}+M\right)V. 因果掩码 MM 禁止关注未来位置。每一行的有限权重非负且和为 11。

例 3.8.1 把概念用于具体计算

两个标量值 u=2,v=10u=2,v=10,权重 (0.75,0.25)(0.75,0.25) 得输出 44,位于 [2,10][2,10] 内。

练习 3.8.1

权重 (0.2,0.8)(0.2,0.8) 时结果?

展开解答与检查

8.48.4。查询与键的维数相同,值维数可以不同。

Lean 对照 3.8.1 命题、证明与适用边界

完整证明两标量值的凸组合处在二者之间,保留权重 0≤w≤10\le w\le1 的条件。

NeuralNetworks.attention_convex

theorem attention_convex (u v w : ℝ) (hw : 0 ≤ w) (hw₁ : w ≤ 1)
    (huv : u ≤ v) : u ≤ w*u+(1-w)*v ∧ w*u+(1-w)*v ≤ v := by
  constructor
  · nlinarith [mul_nonneg (sub_nonneg.mpr hw₁) (sub_nonneg.mpr huv)]
  · nlinarith [mul_nonneg hw (sub_nonneg.mpr huv)]

查看完整定义与上下文 ↗ · 全书证明范围

原课对照 观课问题、视频与图示

分别追踪查询、键和值,观察分数如何变成每行和为一的权重。

官方课程与图示 ↗ · 原视频 ↗

点击后连接 YouTube;播放器不可用时可通过上方原链接观看。