MLA (多头潜在注意力)
MLA是怎么实现的
低秩:设 (token数n,每个token 128维) = (n,128),投影矩阵(n,512),用(n,512)^T @ (n,128) = (512,128) ,这就是压缩后的512个潜在token,每个潜在token是原先n个token的加权和。
联合压缩:K和V共享潜在表示
对比MLA和GQA
MLA (多头潜在注意力)
- 核心思想:不是让查询头去关注序列中所有的键/值,而是先将整个序列的键/值压缩成一个尺寸小得多的、固定的“潜在键/值”(Latent K/V)。然后,查询头只与这个被压缩后的“精华版”键/值进行交互。
- 解决的问题:主要是为了打破处理超长上下文时的 O(n²) 计算瓶颈。它的目标是让模型在处理初始输入(Prefill阶段)时,计算量不随序列长度的平方增长,而是接近线性增长。
- 工作方式:它改变的是注意力计算的对象——从完整的序列K/V变成了压缩后的潜在K/V。
简单比喻:
- 标准注意力:一个研究员(Query)为了写报告,需要阅读图书馆里所有的原始文献(全部的Key/Value)。文献越多,耗时越长。
- MLA:图书馆请了一位专家,先把所有原始文献读完,写成一份高度浓缩的摘要报告(Latent K/V)。研究员只需要读这份摘要报告,就能掌握核心信息。无论原始文献有多少,摘要报告的篇幅是固定的,大大节省了研究员的时间。
GQA (分组查询注意力)
- 核心思想:在标准的“多头注意力”(MHA)中,每个“查询头”(Query Head)都有自己专属的“键头”(Key Head)和“值头”(Value Head)。GQA 是一种折中方案,它让几组查询头共享同一对键/值头。
- 解决的问题:主要是为了降低推理(Inference)时的显存占用和内存带宽。在生成文本时,模型需要把过去所有token的键(K)和值(V)都缓存起来(即KV Cache)。MHA的KV Cache非常大。GQA通过减少K和V头的数量,极大地缩小了KV Cache的大小,从而加快了生成速度,尤其是在长序列生成时。
- 工作方式:它改变的是头的数量和共享方式,但每个查询头仍然需要关注序列中所有的键和值。计算复杂度在处理初始上下文时依然是 O(n²)。
简单比喻:
- 多头注意力 (MHA):有12个项目经理(Query),每个人都配一个专属的档案管理员(Key)和执行秘书(Value)。
- 分组查询注意力 (GQA):有12个项目经理,但他们被分成3组,每组4个人,共同使用一个档案管理员和一个执行秘书。
- 多查询注意力 (MQA):12个项目经理共用一个档案管理员和一个执行秘书。
| 特性 | DeepSeek 多头潜在注意力 (MLA) | 分组查询注意力 (GQA) |
|---|---|---|
| 主要目标 | 降低处理长上下文时的计算复杂度 (O(n²) -> O(n)) | 降低推理时的KV Cache大小和内存带宽 |
| 实现方式 | 将完整的K/V序列压缩成一个小的潜在K/V集 | 查询头分组,组内共享K/V头 |
| 作用阶段 | 主要优化上下文处理(Prefill)阶段 | 主要优化解码(Decoding)阶段 |
| 是否改变注意力对象 | 是,Q关注的是压缩后的潜在K/V | 否,Q仍然关注所有K/V |
结论: MLA是一种“降维”或“摘要”技术,通过压缩信息来减少计算量。而GQA是一种“节流”技术,通过减少头的数量来省钱(显存和带宽)。两者可以被同时应用在一个模型中,以分别优化长上下文处理能力和推理速度。