LLM 常识扫盲 (draft)

注意力

如今长上下文 (1M) 开源模型普遍采用稀疏注意力机制,在解码阶段一个 query 能看到的信息并非像全注意力 (Full Attention) 那样能注意到所有的前缀 token。一些常见的稀疏注意力机制如使用索引器挑选 topk 个最相关块的精读或原始 token 等降低了计算的复杂度,但同时也会令使用者对 LLM 对上下文的召回能力感到困惑。

以下举两个近期热门的开源模型的注意力机制的例子。

常见开源模型的注意力机制

DeepSeek V4

DeepSeek V4 注意力机制
DeepSeek V4 注意力机制

DeepSeek 采用了 CSA (压缩稀疏注意力) + HCA(重度压缩注意力) 的机制,对上下文的印象来源于(假设当前上下文长度为 1M):

  1. HCA,原文每相邻 128 token 为一组压缩为 1 token1 的 78122 token 的信息,全部注入
  2. CSA,原文 4 token 一组压缩为 1 token 的 250K token 的信息,由 Indexer 精选 1024 token 注入
  3. SWA,距离当前 query 最近的 128 token 的无损信息

总共大约 8964 tok 信息(如果能填满 1M 上下文)。

注意 deepseek 对历史上下文的读取中唯一无损的内容只有 SWA 里离 query 最近的 128 个 token,其他都是经过压缩的。

GLM 5.2

GLM 5.2 注意力模型
GLM 5.2 注意力机制

GLM 5.2 的注意力模型与 DeepSeek-V3 类似,使用 DSA 选出与当前最相关的未压缩的 2048 token 信息,加上离当前 query 最近的 4096 token。总共大约 6144 tok 信息。

带来的一些问题

知道了这些开源大模型有可能会对上下文进行压缩表达之后,你就应该理解在某些情况下让部分大模型做大海捞针型的上下文召回任务是比较困难的,例如 DeepSeek V4 对上下文的所有认知都是经过压缩的,你不太应该指望它在一些从一大段文本里找到某个数字或者跨段落多跳精确定位的任务里表现得有多好了。

思维链

由于这种不同的 query 会注意到上下文前缀中有限的不同的 token 的机制,让 LLM 输出多一点 token 来注意上下文中不同的 token 以覆盖前文中尽可能多的信息往往能达成不错的效果。

这也属于思维链 (CoT) 的一部分作用。在 CoT 的过程中,每一个新生成的 token 都会作为全新的 query 去“扫描”并关注前缀中不同的局部信息,从而拼凑出更完整的上下文全貌。

当然思维链的作用不止于此,在混合专家模型中,模型每生成一个新的 token,都可能触发不同的路由策略去激活不同的专家网络,以赋予 LLM 更丰富的洞察能力与世界知识。而在稠密模型中,新的 token 也会引导隐藏状态在特征空间中游走,激活前馈网络中不同的知识子空间,达成一致的效果。

从这个角度来看,CoT 正在部分取代过去冗长且低效的 System Prompt3 。因为本质上你的 Prompt 其实并没有给模型提供新的知识,而是一种静态约束,告诉 LLM 去激活某些对应的参数来干活。而 CoT 则是让他自己填充自己的上下文,使其能够更加自主、平滑地寻址并激活解决问题所需的参数路径。

生成速度

用户能感知到的延迟来自两个阶段,一个是 Prefill,一个是 Decode。

Prefill 是指把当前所有输入装入 kv cache 的阶段,过程中要计算整个上下文每一个 token 之间的注意力得分,复杂度是 $O(n^2)$ 的。他影响着首 token 延迟 (TTFT) 的大小,也就是从你按下回车键到第一个 token 出来的时间。如果 infra 做的好,kv cache 还没有过期,那 prefill 的大部分计算量都会被省去。并且由于每一层注意力计算中 token 与 token 之间 QKV 没有前后依赖性,所以可以做并行计算,效率比 Decode 高。

Decode 指的是增量生成阶段,就是模型吐字的阶段,过程中要计算最新的 query 对上下文中需要注意的 token 之间的 QKV,每生成一个新 token 的复杂度是 O(n)。

这里要注意 Decode 和 Prefill 要计算的东西本质上都是一样的,只不过 Prefill 可以并行计算所以更快。

前文提到的稀疏注意力可以极大的减少 Prefill/Decode 的计算量,将每个 token 的计算由 $O(n)$ 变成 $O(k)$。以 1M 上下文的 Prefill 为例,满注意力 (Full Attention) 需要 $10^{12}$ 的计算量,而 DeepSeek-V4 无论前缀多长,参与计算的只有固定的 HCA + CSA + SWA 选出的 8964 个 token,计算量约为 $10^8$,快了一万倍。


  1. 或者说 1 个特征向量

  2. 7812=1M/128

  3. 这也是某些推理模型在角色扮演任务上表现不佳的部分原因