Ch 05 · HCA
第一部分 · 架构 · 05

HCA — 长上下文的全景镜

把 1M 序列粗看成 8K 个超级 KV、不做 top-$k$ —— 给 CSA 当"远景搭档",配上"近视 + 远视"交替穿插。

名词速通 · 一分钟看懂 HCA

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。
一句话定位:HCA 是"全局广角镜"(视野 100%、分辨率 1/128),与 CSA"局部放大镜"(视野 0.4%、分辨率 1/4)通过 mHC 残差路径累加。配 Q/K RMSNorm + Partial RoPE + Attention Sink 三个共享细节解决长上下文的数值病。
HCA 架构:Sliding Window + Heavily Compressed KV via Token-Level Compressor,concat 后进 Shared KV MQA
图 5-1 · HCA 整体架构。与 CSA 对比,没有 Lightning Indexer、没有 Top-k Selector —— 只剩两条路:左侧 Sliding Window KV Entries 直接走,中间所有原始 KV 全部经过 Token-Level Compressor($m'=128$ 重压缩)变成 Heavily Compressed KV Entries,concat 后进入 Shared Key-Value Multi-Query Attention。整张图比 CSA 简洁很多 —— 这就是"重压缩 + 不做 selection"的视觉体现:用结构性的简单换 CSA 漏掉的全局信息。 来源:DeepSeek-V4 技术报告 §2.3.2 Heavily Compressed Attention,Figure 4,p. 11。

1. 为什么 CSA 一个不够,要再加一个 HCA

CSA(Ch4)只让每个 query 的核心 attention 访问 top-$k$ 个压缩条目;HCA 则以更高压缩率保留覆盖整段历史的 dense 条目。报告采用两者交替的混合结构,但没有把 HCA 明确描述为修补 CSA“99.6% 盲区”。

配置对比 · CSA 单层选择范围 1M 序列下,Pro 的 CSA:
  • 约有 $1\text{M}/4=250\text{K}$ 个压缩候选条目;
  • 每个 query 选择其中 $k=1024$ 个进入核心 attention。
一个 CSA 压缩条目由相邻两组、共 $2m$ 个位置的双流加权形成,相邻条目还会重叠,因此不能简单把 $k\times m$ 当作“可见原始 token 数”。未被本层选中的压缩条目不会直接进入该层核心 attention,但仍可能在其他层被选中。

这在两类场景下会出事:

  • 全局聚合:HCA 的全部压缩条目参与 dense attention,为低分辨率的全局信息提供通路;
  • 稀疏选择的补充:CSA 依赖 top-$k$ 选择,HCA 不经过 indexer。二者交替可以组合稀疏的高分辨率访问与稠密的重压缩访问。这是结构层面的解释,报告没有提供对应消融。
CSA 是"近视眼放大镜",HCA 是"远视眼广角镜"

CSA 选 $k$ 个轻度压缩条目做稀疏 attention,保留更高分辨率。 HCA 反过来:把 $m'=128$ 个 token 压成一个超级 KV,但所有超级 KV 全 dense 看。 视野覆盖整个 1M 但分辨率低。两者交替穿插,layer-by-layer 互补。

2. HCA 的三个设计选择,每个都和 CSA 反着来

HCA = Heavily Compressed Attention。它的所有设计选择都可以从"和 CSA 互补"这个目标推出。

设计CSAHCA原因
压缩率 $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 的对照实验
数值演练 · HCA 的代价是多少 1M 序列经 $m'=128$ 压缩后约有 7,813 个 HCA 条目(若用 $1{,}000{,}000/128$ 计算;“1M”若按 $2^{20}$ 计则为 8,192)。核心 attention 对这些条目做 dense MQA。

与 CSA 的成本不能只比较 8K 和 top-k=1024:CSA 还包含扫描压缩 indexer keys 的开销,而 HCA 没有 indexer。两者总成本取决于序列长度、head 配置与 kernel 实现;报告没有给出“HCA 便宜 4×”这一结论。

压缩公式比 CSA 干脆得多:

$$ S_{m'i:m'(i+1)-1} \;=\; \mathrm{Softmax}_{\text{row}}\!\big(Z_{m'i:m'(i+1)-1} + B\big) $$
$$ C^{\text{Comp}}_i \;=\; \sum_{j=m'i}^{m'(i+1)-1} S_j \odot C_j $$

每个符号:

  • $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 加权平均"一句:

  1. 切段:把序列按 $m'=128$ 切片,每段 128 个 token 完全独立,没有重叠
  2. 段内打分:每段内的 128 个 token 由 $Z_j$ 与可学习位置偏置 $B$ 共同产生权重,再经行方向 softmax 归一化;报告没有规定中心 token 默认权重更高;
  3. 加权平均:段内 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:

$$ \tilde{q}_h \;=\; \mathrm{RMSNorm}(q_h),\qquad \tilde{k}_h \;=\; \mathrm{RMSNorm}(k_h) $$

RMSNorm 控制 query 与 KV entry 的尺度,使点积更稳定。它降低了 exploding logits 的风险;报告的表述是“effectively prevents”,不等于对所有输入给出严格上界证明。

核心注意力与 Indexer 的维度不同

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 的距离相关。
配置怎么读 head dimension $c=512$,其中最后 64 维使用 RoPE,占 12.5%。报告给出了这一配置和对 core output 施加反向位置旋转的机制,但没有提供“全维 RoPE 会严重衰减”或 64 维已经最优的消融实验。

③ Attention Sink:让真实位置的权重和可以小于 1

标准 softmax 让所有真实位置的权重和等于 1。V4 为每个 attention head 引入一个可学习的 sink logit,并只把它加入归一化分母:

$$ s_{h,i,j} \;=\; \frac{\exp(z_{h,i,j})} {\sum_k \exp(z_{h,i,k}) + \exp(z'_h)} $$

因为额外的 $\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。

Demo · Attention Sink 让 softmax 学会"弃权"
交互
1.0 0.75 0.5 0.25 0 12 个真实位置 + 额外分母质量(最右) 每个 key 拿到的 softmax 权重 $\alpha_s$
logit = 0.0

这是一个教学示意: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。固定压缩率和分段边界仍是需要权衡的设计选择。