HCA — 长上下文的全景镜
把 1M 序列粗看成 8K 个超级 KV、不做 top-$k$ —— 给 CSA 当"远景搭档",配上"近视 + 远视"交替穿插。
HCA = Heavily Compressed Attention(重压缩 dense 注意力)
CSA 的对偶搭档: 把 $m'=128$ 个原始 KV 压成 1 个超级 KV,但所有 $n/m'$ 个超级 KV 全 dense 看,不做 top-$k$ 选择。 1M 序列 $\to$ 8K 个超级 KV,刚好落在 dense attention 能负担的尺度上。 HCA 提供"全局视野 + 低分辨率",CSA 提供"局部细节 + 高分辨率",二者通过 mHC 的残差路径累加互补。
- HCA vs CSA:互为对偶
- CSA:$m=4$ 轻压缩、top-$k=1024$ 选择、双流重叠;HCA:$m'=128$ 重压缩、不选择 dense over 8K、不重叠。三个设计选择全部反着来。
- 前 2 层的模型差异
- V4-Flash 前 2 层使用 pure SWA;V4-Pro 前 2 层使用 HCA。报告给出了这一配置差异,但没有将其解释为统一的“SWA warmup”规律。
- 层间调度
- 前两层之后,CSA 与 HCA 交替使用。Flash 的开头是 SWA-SWA,Pro 的开头是 HCA-HCA;后续层通过两类压缩注意力互补。
- Q/K RMSNorm
- 在 attention 前对每个 head 的 query / key 分别做 RMSNorm,以控制其尺度并缓解 attention logit 的异常值。忽略可学习缩放和数值项时,归一化向量的范数约为 $\sqrt{d_h}$;报告据此移除了此前的 QK-Clip,但这不是对任意参数下点积上界的严格证明。
- Partial RoPE
- RoPE(旋转位置编码)只在每 head 最后 $r=64$ 维做,其余 $c-r=448$ 维保持位置无关。原因:超级 KV 是多个原始位置的平均,没单一明确位置,全维 RoPE 会让"位置"被压缩失真。
- Attention Sink
- 为每个 attention head 学习一个 sink logit $z'_h$,把 $\exp(z'_h)$ 加到 softmax 分母,但不对应真实 value。这样真实位置的 attention score 总和可以小于 1,甚至接近 0。
1. 为什么 CSA 一个不够,要再加一个 HCA
CSA(Ch4)只让每个 query 的核心 attention 访问 top-$k$ 个压缩条目;HCA 则以更高压缩率保留覆盖整段历史的 dense 条目。报告采用两者交替的混合结构,但没有把 HCA 明确描述为修补 CSA“99.6% 盲区”。
- 约有 $1\text{M}/4=250\text{K}$ 个压缩候选条目;
- 每个 query 选择其中 $k=1024$ 个进入核心 attention。
这在两类场景下会出事:
- 全局聚合:HCA 的全部压缩条目参与 dense attention,为低分辨率的全局信息提供通路;
- 稀疏选择的补充:CSA 依赖 top-$k$ 选择,HCA 不经过 indexer。二者交替可以组合稀疏的高分辨率访问与稠密的重压缩访问。这是结构层面的解释,报告没有提供对应消融。
CSA 选 $k$ 个轻度压缩条目做稀疏 attention,保留更高分辨率。 HCA 反过来:把 $m'=128$ 个 token 压成一个超级 KV,但所有超级 KV 全 dense 看。 视野覆盖整个 1M 但分辨率低。两者交替穿插,layer-by-layer 互补。
2. HCA 的三个设计选择,每个都和 CSA 反着来
HCA = Heavily Compressed Attention。它的所有设计选择都可以从"和 CSA 互补"这个目标推出。
| 设计 | CSA | HCA | 原因 |
|---|---|---|---|
| 压缩率 | $m = 4$(轻) | $m' = 128$(压缩率是 CSA 的 32 倍) | $1\text{M}/128$ 约为 8K,使核心注意力可以覆盖全部压缩条目 |
| 是否做 top-$k$ | $k=1024$ 选超级 KV | 不做,dense over $n/m'$ | HCA 对全部压缩条目做稠密注意力,提供低分辨率全局视野 |
| 段间是否重叠 | 双流 a/b 重叠避免边界空洞 | 不重叠,每 $m'$ 个 KV 独立压一个 | 报告采用不重叠分段;未提供重叠 HCA 的对照实验 |
与 CSA 的成本不能只比较 8K 和 top-k=1024:CSA 还包含扫描压缩 indexer keys 的开销,而 HCA 没有 indexer。两者总成本取决于序列长度、head 配置与 kernel 实现;报告没有给出“HCA 便宜 4×”这一结论。
压缩公式比 CSA 干脆得多:
每个符号:
- $Z_{m'i:m'(i+1)-1}$:第 $i$ 段内 $m'$ 个 token 的"重要性"原始打分;
- $B$:$m'$ 维位置偏置(学习得到,让段内不同位置自带先验权重);
- $S$:段内 softmax 权重,每段 $m'$ 个值和为 1;
- $C^{\text{Comp}}_i$:段内 $m'$ 个原始 KV 向量的凸组合,一个超级 KV 携带"该段 128 个 token 的语义平均"。
HCA 的两条压缩公式翻成大白话只有"段内 softmax 加权平均"一句:
- 切段:把序列按 $m'=128$ 切片,每段 128 个 token 完全独立,没有重叠;
- 段内打分:每段内的 128 个 token 由 $Z_j$ 与可学习位置偏置 $B$ 共同产生权重,再经行方向 softmax 归一化;报告没有规定中心 token 默认权重更高;
- 加权平均:段内 128 个 KV 向量按权重加起来 = 1 个超级 KV。
与 CSA 相比,HCA 没有 $C^a/C^b$ 双流和跨段重叠。报告给出了这种更简化的重压缩结构,但没有说明这是因为重叠“得不偿失”,也没有量化边界信息损失。
HCA 没有 $C^a/C^b$ 双流,且按不重叠的 128-token 分段压缩。至于边界信息损失与计算成本如何权衡,报告没有给出单独消融。
压缩完后接 Shared-KV MQA + Grouped Output Projection(与 CSA 同源,见 Ch4 §6),但没有 top-$k$ 这一步,直接对全部 $n/m'$ 个超级 KV 做 dense attention。
3. 为什么是"CSA × HCA 交替"而非"全 CSA"或"全 HCA"
论文给出的层调度因模型而异:Flash 前 2 层为 SWA,Pro 前 2 层为 HCA;之后均为 CSA 与 HCA 交替。下面讨论两类注意力为何具有互补性。
① 为什么不全 CSA?
- 每层 CSA 的 top-$k$ 都独立选 $k$ 个超级 KV;不同层选的集合可能高度重叠;
- CSA 单层只让 top-$k$ 压缩条目进入核心 attention;
- 报告采用 CSA/HCA 交替结构,但没有公布“全 CSA 低 3–5 个点”的消融数据。
② 为什么不全 HCA?
- HCA 将 128 个位置加权压缩为一个条目,分辨率低于 CSA;
- 仅使用 HCA 可能不利于精细检索,但报告没有公布“全 HCA”配置的结果;
- 报告没有公布“全 HCA 低 20+ 个点”的消融数据,因此这里不对差距作定量判断。
③ 交替为什么"叠加"而非"挤占"?
从结构上看,CSA 提供稀疏、较高分辨率的访问,HCA 提供稠密、较低分辨率的访问;交替层让两类表示通过后续层和残差路径继续传播。报告未比较交替与并联方案,也没有把这一选择归因于 mHC。
前 2 层的配置
- Flash 前 2 层使用纯 SWA;
- Pro 前 2 层使用 HCA;
- 之后两款模型都交替使用 CSA 与 HCA。报告没有解释两款模型前两层差异的因果原因。
4. CSA / HCA 共享的三个实现细节
这些细节看起来琐碎,但每一个都对应一个具体的 numerical 失效模式。
① 每 head Q/K RMSNorm
报告称,对 attention queries 与 KV entries 施加 RMSNorm 可以有效防止 attention logits 爆炸,并因此不再使用 QK-Clip;没有披露未归一化时的 logit 数值或概率分布。
解法:在 attention 前对每 head 的 Q、K 各做一次 RMSNorm:
RMSNorm 控制 query 与 KV entry 的尺度,使点积更稳定。它降低了 exploding logits 的风险;报告的表述是“effectively prevents”,不等于对所有输入给出严格上界证明。
V4 核心 attention 的 head dimension $c$ 为 512,Indexer 的 head dimension $c^I$ 才是 128。讨论 core attention 的数值范围时不能套用 Indexer 的 128 维配置;报告只给出 Q/K RMSNorm 能有效抑制 logit 爆炸的定性结论。
② Partial RoPE:只在最后 64 维做位置编码
在 CSA 与 HCA 中,V4 对 attention query、压缩 KV entry 和 core attention output 的最后 64 维使用 RoPE。其余维度不施加 RoPE。
- query 与 KV entry:最后 64 维加入旋转位置编码;
- core attention output:由于 KV entry 同时充当 key 与 value,输出会携带绝对位置成分,因此最后 64 维再应用位置 $-i$ 的 RoPE;
- 结果:输出保留相对位置信息,使每个压缩 KV entry 的贡献与其到 query 的距离相关。
③ Attention Sink:让真实位置的权重和可以小于 1
标准 softmax 让所有真实位置的权重和等于 1。V4 为每个 attention head 引入一个可学习的 sink logit,并只把它加入归一化分母:
因为额外的 $\exp(z'_h)$ 不对应真实 value,所以 $\sum_j s_{h,i,j}$ 可以小于 1。模型能够按 head 学习把多少归一化质量留给真实位置;报告称总分甚至可以接近 0。
它与标准 softmax 的差别是:分母多了一项,但分子和 value 加权中没有新增真实位置。
- 标准 softmax:真实位置的权重和固定为 1;
- 加入 sink logit:分母变大,真实位置的权重和可以低于 1;
- $z'_h$ 可学习:每个 head 自行调节这部分额外分母质量。
下面的图把这部分额外分母质量画成一根“sink 柱”,便于观察;它只是视觉等价物,不代表模型中真的新增了一个 key / value。
这是一个教学示意:12 个真实 key 的基础 logit 设为 0,sink logit 设为 1.5,这些都不是 V4 学到的实测值。 把滑条设为 0(query 和谁都不相关): Sink OFF 时权重和必须为 1;Sink ON 时一部分分母质量可以由 sink 吸收,使真实 key 的总权重低于 1。 把滑条拉高,可以观察某个真实 key 的权重重新占主导。具体比例由示意参数决定,不能解释成 hidden state “不再受污染”的实验结论。
5. 代价 / 还没解决的问题
- 分段压缩有分辨率边界:HCA 每 128 个 token 聚合成一个条目,不具备 CSA 的双流重叠结构。后续层会交替使用 HCA 与 CSA,但报告没有用独立消融证明 CSA 专门修复了哪些 HCA 边界误差。
- $m'=128$ 是固定配置:4K 序列会得到 32 个压缩条目,1M 序列约得到 8K 个。报告没有比较短、长序列采用不同压缩率的效果,因此不能断言固定 128 在短上下文中“压得过多”。
- 层间调度采用固定交替:前两层之后,CSA 与 HCA 交替出现。报告没有给出其他层间排布的对照实验,也没有声称这一排布具有理论最优性。
- Partial RoPE 取 $r=64$:这是报告披露的模型配置;没有 $r=16$、$64$、$256$ 的消融,因而不能把 64 写成已经验证的经验最优值。
CSA 以较轻压缩配合稀疏选择,HCA 以 128 倍压缩保留低分辨率全局视野;两者在后续层交替。Flash 前 2 层使用 SWA,Pro 前 2 层使用 HCA。两类注意力共享 Q/K RMSNorm、Partial RoPE、Attention Sink、SWA 分支、Shared-KV MQA 与 Grouped Output Projection。固定压缩率和分段边界仍是需要权衡的设计选择。