注意力机制要解决的核心问题是:当模型处理一个词时,应该"关注"句子中的哪些其他词?例如"小猫坐在垫子上,它很舒服"——处理"它"时,模型需要知道"它"指的是"小猫"而不是"垫子"。
Q
三个核心向量:Q / K / V
每个词生成三个向量:Query(我在找什么)、Key(我能提供什么)、Value(我的实际内容)。注意力分数 = softmax(Q·Kᵀ/√d),输出 = 分数 × V。就像在图书馆查资料——Q 是搜索词,K 是书的标签,分数高的书被重点阅读(V)。
H
为什么要"多头"?
单头注意力只能学一种关注模式,但语言中的关系是多维度的:指代关系(它→小猫)、因果关系(舒服→坐)、空间关系(垫子→上)。多头 = 把注意力计算并行做多次,每次用不同的 Q/K/V 投影矩阵,让每个"头"专注一种关系。就像看一幅画:一个人只能注意到颜色,但 8 个人分别关注颜色、线条、构图、光影……最后综合出完整理解。
⊕
计算过程
假设输入维度 512,8 个头,每个头处理 64 维。每个头独立完成 Q·Kᵀ→分数→加权 V 的完整注意力计算,最后将 8 个头的输出拼接回 512 维。总计算量不变,但模型能同时从 8 种视角理解词与词之间的关系。
!
MHA 的问题 → MLA 的动机
多头注意力的代价是:每个头都要单独缓存 K 和 V。8 个头 × 2(K+V)= 16 份缓存,序列越长显存越爆。而研究发现,不同头学到的 K/V 其实大量重叠——这正是 MLA 将它们压缩为一个共享低维向量的理论基础。
MLA 是 DeepSeek 提出的注意力机制优化方案,通过将高维的 Key 和 Value 投影到低维潜在空间进行存储与计算,在几乎不损失注意力质量的前提下,大幅压缩 KV 缓存的显存占用。
工作原理
传统多头注意力需要为每一层、每个头分别缓存完整的 K/V 向量。MLA 引入下投影矩阵 W_DKV 将隐藏状态压缩为低维潜在向量 c = W_DKV · h(维度 d_c 远小于 n_heads × d_head),推理时仅缓存 c。计算注意力时,再通过上投影矩阵恢复 K = W_UK · c、V = W_UV · c 参与正常计算。上投影矩阵是模型权重,不占缓存空间。
压缩比示例
传统缓存:每 token 需存储 2 × n_heads × d_head = 2 × 8192 = 16384 维;MLA 缓存:仅需存储 d_c = 512 维。压缩比约 1/32,显存占用减少 60%~75%,使超长上下文窗口和大批量推理成为可能。
01
K/V 矩阵天然低秩
对训练好的 Transformer 中任意一层的 K 或 V 矩阵做奇异值分解(SVD),会发现奇异值分布极度不均匀——前几十个奇异值占据总能量的 90% 以上,其余接近零。这说明 K/V 看起来是 8192 维的向量,但"有效信息"实际上只存在于一个几百维的子空间中,如同自然图像可被 JPEG 高倍压缩一样。
02
多头之间高度冗余
传统 MHA 中 64 个头各自独立计算 K/V,但研究发现不同头捕捉的信息大量重叠。GQA(分组查询注意力)让 8 个头共用一组 K/V 性能几乎不掉,已经验证了这一点。MLA 更进一步:不是手动分组共享,而是让模型自己学习一个最优的跨头信息压缩方式——所有头的 K/V 都从同一个压缩向量 c 中恢复。
03
注意力只需相对排序,不需绝对精度
注意力的核心是计算 token 之间的相对相似度排序(谁和谁更相关),而非保留绝对精确的高维表示。Johnson-Lindenstrauss 引理证明:高维空间中的点投影到足够维度的低维空间后,点与点之间的距离关系近似保持不变。因此低维投影足以维持注意力的排序质量。
04
从头训练,模型主动适应瓶颈
MLA 不是对已训练模型做后处理压缩,而是从头就带着瓶颈结构训练。模型被迫将所有重要信息塞进 d_c 维的瓶颈,训练梯度驱动 W_DKV 自动学习最优压缩策略——就像 AutoEncoder 一样,给定瓶颈,模型会自动学会什么该保留、什么该丢弃。因此几乎无损。
RoPE 位置编码处理
压缩后的 c 丢失了位置信息(RoPE 需作用在原始维度上),因此 MLA 额外保留一组小维度的独立 Key 向量专门承载 RoPE:K_rope = RoPE(W_rope · h),最终 K = concat(W_UK · c, K_rope)。额外缓存开销可忽略不计。
典型应用
DeepSeek-V3 全面采用 MLA 机制,使其在 671B 总参数规模下仍可高效部署,支持 128K 上下文窗口的高吞吐推理。相较于 GQA,MLA 在压缩率与性能之间实现了更优的帕累托前沿。
KV 缓存压缩低秩投影显存优化长上下文SVD 低秩JL 引理