5. 只改 Q 为什么够:注意力是指数族
5.1 把一次读出拆成三个对象
第 4 章的 40 层里,4 层 Full(自己算 KV 与地址)、4 层 Reindex(复用 KV、重算地址)、30 层 Reuse(KV 与地址都复用),最前还有 2 层纯 SWA。也就是说有一大批层只复用别人算好的 KV 与 Top-K,自己只算 Q。这听起来像是在"用同一份材料做几十道不同的菜",很可疑。这一章把它证清楚:固定材料的注意力,仍然是一个 512 维的指数族;改 Q 就是在族内任意移动。
先约定一次稀疏注意力的读出。设被选中的条目集合是 \(A\),每个条目是一个向量 \(c_j\in\mathbb{R}^d\)(参考实现里 key 和 value 是同一个 \(c_j\),这正是第 1.4 节 MLA 的结论),把它们按行堆成矩阵 \(C_A\in\mathbb{R}^{|A|\times d}\)。那么
\[ \begin{aligned} o(q)&=\sum_{j\in A}p_j(q)\,c_j,\\ p(q)&=\operatorname{softmax}\!\big(\tfrac{1}{\sqrt d}\,C_A q\big). \end{aligned} \]三个可变输入各管一件事:内容 \(C_A\)(读什么)、地址 \(A\)(从哪读,离散)、查询 \(q\)(怎么读)。三种模式就是"这三样里刷新哪几样":Full 三样都刷,Reindex 刷地址与查询,Reuse 只刷查询。
三者有一条单向依赖:\(C\to A\to\) 读出,而 \(q\) 只在读出端注入。所以复用只能自上而下——可以"复用内容顺带复用地址"(Reuse),可以"复用内容但重选地址"(Reindex);反过来"换了内容却沿用旧地址"技术上能算(旧编号仍然有效),但拿到的 Top-K 已经不对应新内容,等于用陈旧地址读新记忆。CSA2 的三种模式因此不是三个并列的设计,而是这条依赖链上从"最全"到"最省"的三个档位。这里的 \(q\) 专指主注意力的查询;Indexer 有自己的查询 \(q^I\)(第 2.3 节),地址由它决定。
5.2 输出一定落在凸包里
\(p_j\ge 0\) 且 \(\sum_j p_j=1\),所以 \(o(q)\) 是 \(\{c_j\}\) 的凸组合(convex combination)。凸组合的意思:每个坐标都介于 \(c_j\) 对应坐标的最小值与最大值之间。因此
\[ o(q)\in\operatorname{conv}\{c_j:j\in A\} \qquad\text{对一切 }q . \]这条结论在数学基础第 7.4 节出现过一次,当时只说了"不会凭空造出超出候选范围的值"。现在要问的是更强的问题:改 \(q\) 能在这个凸包里走多远?
先手算一个两维的例子,把后面所有公式都落到实处。取三个条目
\[ c_1=(1,0),\quad c_2=(0,1),\quad c_3=(1,1), \] \[ d=2,\qquad \sqrt d=1.4142 . \]代入三个查询:
q p (c1,c2,c3) o 1.41 0.42 0.16 0.42 0.84 0.58 -1.41 0.21 0.58 0.21 0.42 0.79 0.00 0.33 0.33 0.33 0.67 0.67
第一行:\(q\) 与 \(c_1,c_3\) 对齐,权重偏向它们,输出靠近线段 \(c_1c_3\) 的中间。第二行:反号,权重倒向 \(c_2\),输出跑到三角形的另一侧。第三行:全零查询,三个条目打分相同,输出正好是重心 \((2/3,2/3)\)。
这张表就是"只改 Q"的全部内容:三个条目一个都没变,只改查询,输出就在三角形内从 \((0.845,0.578)\) 走到 \((0.424,0.788)\)。它们都在 \(\operatorname{conv}\{c_1,c_2,c_3\}\) 里,也都在它的内部——因为三行概率没有一个是零。
5.3 改 Q 的一次微小移动:Jacobian 就是协方差
看局部。对 \(q\) 求导。先算 softmax 的导数,这是一条要背下来的式子:
\[ \frac{\partial p_j}{\partial q} =\frac{1}{\sqrt d}\,p_j\Big(c_j-\sum_{i}p_i c_i\Big) \] \[ =\frac{1}{\sqrt d}\,p_j\,(c_j-o). \]推导只要两步:\(\partial z_j/\partial q=c_j/\sqrt d\);对 \(\log p_j=z_j-\log\sum_i e^{z_i}\) 求导得 \(\partial_z \log p_j=\delta_{jk}-p_k\)。两者相乘即可。
再把它代进输出 \(o=\sum_j p_j c_j\):
\[ \frac{\partial o}{\partial q} =\frac{1}{\sqrt d}\sum_j p_j\,(c_j-o)\,c_j^{\top} =\frac{1}{\sqrt d}\,\Sigma_p , \] \[ \Sigma_p=\sum_j p_j c_jc_j^{\top}-oo^{\top}. \]其中 \(\Sigma_p\) 叫协方差矩阵。这个式子的意思是 \(\Sigma_p=\sum_j p_j(c_j-o)(c_j-o)^\top\),即每个条目相对均值的偏差张成的加权外积和。
于是得到一句可以当工具用的话:注意力输出对查询的 Jacobian,就是当前权重下条目的协方差(除以 \(\sqrt d\))。它是半正定对称矩阵,秩不超过 \(d\),也不超过 \(|A|-1\)(因为 \(\sum_j p_j(c_j-o)=0\) 给出一个零方向)。
回到例子,在 \(q=(1.414,0)\) 处,\(p=(0.4223,0.1554,0.4223)\)、\(o=(0.8446,0.5777)\),算得
\[ \frac{\partial o}{\partial q}=\Sigma_p/\sqrt2 =\begin{pmatrix}0.0928&-0.0464\\ -0.0464&0.1725\end{pmatrix}. \]用差分验算:对 \(q\) 的第二个分量加 \(\pm10^{-6}\),输出变化率是 \((-0.0464,\,0.1725)\),与上面第二列一致。这一步值得亲手按一遍,它是"梯度正常回流"这句话的具体含义:Reuse 层没有 Indexer、没有 Top-K,但 \(\partial o/\partial q\) 是光滑的,梯度照常传回 \(W_q\)。
5.4 改 Q 的全局效果:对基线分布做指数倾斜
局部看完了看整体。把源层(发布这份 KV 与 Top-K 的那层)的查询记为 \(q^\ast\),它对应的分布 \(p^\ast=\operatorname{softmax}(C_Aq^\ast/\sqrt d)\) 叫基线分布。本层的查询写成 \(q=q^\ast+\Delta q\)。注意内积是可加的:\(\langle q,c_j\rangle=\langle q^\ast,c_j\rangle+\langle\Delta q,c_j\rangle\),而 \(p^\ast_j\propto e^{\langle q^\ast,c_j\rangle/\sqrt d}\) 只是被缩放了一个与 \(j\) 无关的常数,所以
\[ p_j(q)=p^\ast_j\cdot\frac{e^{t_j}}{\sum_i p^\ast_i e^{t_i}}, \qquad t=\frac{1}{\sqrt d}\,C_A\,\Delta q . \]也就是
\[ p_j(q)\ \propto\ p^\ast_j\,e^{\,t_j}. \]这个操作在统计里有名字:指数倾斜(exponential tilting)。它的含义是"先按基线概率给每个条目一个底分,再按 \(t_j\) 抬升或压低"。三种极端都在里面:取 \(t\) 为常数,分布不变;取 \(t\) 沿某个方向拉开,分布向该方向暴露的面集中;只有当目标条目是该凸包的一个顶点(能被某个线性泛函唯一暴露)时,才能把分布压到它的 one-hot。中间就是软插值。
"任意条目都能被单独选出来"不成立。反例:\(c_1=-1,\;c_2=0,\;c_3=1\) 在同一条直线上,无论 \(q\) 取什么值,中间那条的概率最大只能到 \(1/3\)。它不在凸包的顶点上,就没有任何倾斜能让它独占。
能实现哪些 \(t\)?只有那些能写成 \(C_A\Delta q\) 的。所有可达的倾斜构成一个线性子空间:
\[ \mathcal T=\{C_A\Delta q:\Delta q\in\mathbb{R}^{d}\}=\operatorname{col}(C_A), \] \[ \dim\mathcal T=\operatorname{rank}(C_A)\le\min(d,|A|). \]代入第 4 章的配置:\(d=512\)(潜在维),\(|A|=K+W=512+128=640\)(512 条选中 + 128 条窗口)。于是
\[ \dim\mathcal T\le 512<640-1=639 . \]640 个条目上的概率分布处在一个 639 维的单纯形里,而这里只能到达其中至多 512 维的一片。至少 127 个方向的重新加权,是任何 \(\Delta q\) 都做不到的。这不是缺陷,是"共用一份记忆"必须付的价——下一节算清楚这个价的边界。
5.5 像集:恰好是凸包的相对内部
现在问最完整的问题:让 \(q\) 取遍整个 \(\mathbb{R}^d\),\(o(q)\) 的像集是什么?答案不是"凸包"这么含糊,而是凸包的相对内部(relative interior,记 \(\operatorname{relint}\)):去掉边界面的那部分。
把基线权重写成 \(\rho_j=p^\ast_j>0\)(\(\sum_j\rho_j=1\)),并定义对数配分函数
\[ \psi(q)=\log\sum_{j=1}^{n}\rho_j\,e^{\langle q,c_j\rangle}, \] \[ p_j(q)=\rho_j\,e^{\langle q,c_j\rangle-\psi(q)} . \](把 \(1/\sqrt d\) 并进 \(q\) 的尺度里,下式不再显式写出。)对 \(q\) 求导,指数项给出概率,于是
\[ \nabla\psi(q)=\sum_j p_j(q)\,c_j=o(q). \]第一步(包含):\(o\) 是凸组合,所以 \(\nabla\psi\) 的像在 \(\operatorname{conv}\{c_j\}\) 里。
第二步(边界到不了):\(\rho_j>0\) 且指数因子恒正,所以每个 \(p_j(q)>0\);一个坐标严格为正的凸组合不可能落在边界面上。所以像在相对内部。
第三步(内部全都能到):取任意目标 \(u\in\operatorname{relint}\operatorname{conv}\{c_j\}\),看泛函
\[ g(q)=\langle q,u\rangle-\psi(q). \]\(g\) 是凹函数(\(\psi\) 是 log-sum-exp,凸)。要证它有最大值点,光有上界不够——凹函数可能有上界却取不到(例如 \(-e^{-x}\) 就有一条渐近上界)。关键要用到 \(u\) 在相对内部:令 \(L=\operatorname{span}\{c_j-c_1\}\) 是凸包所在的有效子空间。因为 \(u\) 在相对内部,存在 \(\varepsilon>0\),使每个 \(v\in L,\ \|v\|=1\) 都满足
\[ \max_j\langle v,\,c_j-u\rangle\ \ge\ \varepsilon . \]对 \(q=\|q\|v\in L\),取使内积最大的 \(j^\ast\),则
\[ \begin{aligned} \psi(q)&\ \ge\ \log\rho_{j^\ast}+\langle q,c_{j^\ast}\rangle\\ &\ \ge\ \log\rho_{\min}+\|q\|\big(\langle v,u\rangle+\varepsilon\big), \end{aligned} \]其中 \(\rho_{\min}=\min_j\rho_j>0\)。于是
\[ g(q)\ \le\ -\|q\|\,\varepsilon-\log\rho_{\min}, \] \[ g(q)\ \longrightarrow\ -\infty\qquad(\|q\|\to\infty). \]所以 \(g\) 在 \(L\) 上连续、在无穷远处趋于 \(-\infty\),必在某点取到最大值;一阶条件 \(\nabla g=0\) 就是 \(u=\nabla\psi(q)=o(q)\)。\(g\) 在 \(L^\perp\) 方向上不变,不影响结论。这顺带处理了顶点不满维的情形(例如所有 \(c_j\) 落在一条直线上)。
\(\{o(q):q\in\mathbb{R}^d\}=\operatorname{relint}\operatorname{conv}\{c_j:j\in A\}\)。只要内容与地址固定,改 Q 可以在凸包内部到达任何一点——而 Full 层能做的,是换一份 \(C_A\)(换掉顶点),把输出挪到凸包之外,或者换掉整个指数族的"倾斜几何"。
顺带说明为什么这条结论不矛盾于 5.4 节的 512 维上界:凸包本身活在 \(\mathbb{R}^{512}\) 里,最多 512 维;639 维说的是"概率分布"的空间,不是"输出"的空间。同一个输出可以由许多不同的分布给出(\(640>512\),映射不单射),所以分布侧受限、输出侧仍可满。
5.6 与 Full 的差距:三件事做不到
把 Full 层和 Reuse 层摆在一起,Full 层有三个随层独立变化的自由度:
- (F1) 查询 \(q^l\):都有,Reuse 唯一保留的就是它。
- (F2) 键值内容 \(\{c_j^l\}\):决定凸包的顶点位置,也决定倾斜可达的方向 \(\operatorname{col}(C_A)\)。Reuse 冻结。
- (F3) 选择集 \(S^l\):决定哪些顶点存在,离散。Reuse 冻结。
对固定的 \((C^\ast,S^\ast)\) 有严格包含 \(\text{Reuse}\subseteq\text{Full}\),而且 Full 还对所有 \((C,S)\) 取并。缺口正好是三件 Reuse 做不到的事:
- 召回上限:\(j\notin S^\ast\) 且不在局部窗口里的内容根本不在 \(A\) 里,任何 \(\Delta q\) 都够不着它。在复用段内,上游选错下游确实补不回来;但跨段看,后续 Reindex / Full 可以重选地址(下一条),所以这是"这一段内的上限",不是永久损失(2.4 节)。
- 顶点不可移:输出被钉在 \(\operatorname{conv}\{c^\ast_j\}\) 内。Full 层换 \(v_j\) 就能把输出放到凸包外(比如让某个条目带上相反的符号方向),Reuse 不能。
- 倾斜几何不可换:可达分布的集合是由 \(C_A^\ast\) 决定的那个固定指数族。Full 换掉 \(C^l\) 等于换掉整个族;Reuse 只能在这个族里挑一个成员。
还有一个必须说清的细节:RoPE 的影响取决于实现里到底存了什么、算什么。真实注意力比较的是不同位置:\(\langle R_tq,\,R_jk_j\rangle=q^{\top}R_t^{\top}R_jk_j\),不能用一个"同位置"的恒等式把旋转消掉。本节所有结论都建立在候选集固定、键和值是同一个向量的理想化模型上。如果实现里 K 旋转、V 不旋转,读出映射的 Jacobian 一般不再是半正定的值协方差,像集也不自动是相对内部——这属于实现细节,要回代码核对,不能靠"旋转是正交的"一句话带过。
5.7 这套数学解释了哪几个设计
- 为什么 30 层 Reuse 不会退化成"4 层模型":每层还有自己的 \(q\)、自己的局部窗口 KV、输出投影与 FFN,层输入也逐层变化,而在凸包内部改 Q 可以走到任意一点。全局顶点在同一个复用块内是固定的(这正是 Reuse 的定义),要到下一个 Full 层才换一批——但"顶点不变"不等于"输出不变"。
- 为什么 Reindex 值得存在:它给的是 F3(换地址)。当召回出错时,这是比改 Q 更有效的修法:把错的顶点换进来,而不是在旧顶点里重新分配质量。
- 为什么 HSI 候选池不能随便加:候选池一旦固定,F3 的可选范围就被限死;训练时若允许搜全历史、推理时只给名单,就是"族被换掉但模型没被告知",分布立刻错位。所以报告强调 HSI 是后训练阶段引入、训推同构。
- 为什么 SWA 永远存在:局部窗口是每层新鲜生成的,它给 \(A\) 注入了一组"本层自己的顶点",是 Reuse 层唯一的非冻结来源——所以它必须精确(用 FP8 而不是 FP4,见 4.5 节)。
报告之外还有一层推测:既然每层的 KV 空间是一个随深度变化的高维流形,或许可以用"Q 感知的参数"把下一层的空间映射回当前层,从而连 Q 都不必每层重算。原文把这类想法归入内部实验,没有给出结论。读到这里的人可以自己判断它的可行性:它要解决的是 F2,而 F2 正是上面证明里唯一不能靠 \(\Delta q\) 绕过的自由度。
5.8 容易算错的地方
- 把"凸组合"当成"凸包内部"。凸组合允许某些系数为 0,那就在边界上;\(\rho_j>0\) 才保证严格内部。训练中某些权重会饱和到接近 0,实际输出会贴近边界面。
- 把 639 当成"能到达的分布维数"。639 是单纯形的维数,是上界;实际可达 ≤512。
- 漏掉 \(\sqrt d\)。Jacobian 是 \(\Sigma_p/\sqrt d\),不是 \(\Sigma_p\);用差分验算时数值会对不上(差 1.414 倍)。
- 以为指数倾斜能改变排序之外的任何东西。它只能重新分配质量,不能引入新条目;\(t\) 只能把已有的 \(p^\ast_j\) 按比例缩放。
- 把 RoPE 当成"破坏共享",或者反过来当成"完全无害"。旋转是正交的,但它按位置作用在不同向量上,不能用一个"同位置"的恒等式消掉;结论成立的前提是"候选集固定、K 与 V 同源"。真正影响共享自由度的是 (F2)(F3)。