前言:当前大模型主要还是针对MOE和注意力层这两部分做优化,提出一些新的想法。先回顾V3版本的MLA/DSA思想

一DeepSeekV3版本的MLA(V3)和DSA(V3.2)

1.MLA与DSA的关系

MLA是高效的“地基”:MLA(Multi-head Latent Attention,多头潜在注意力)的核心思路是通过低秩压缩技术,把需要缓存的KV信息压缩到一个更小的低维空间中,以此来降低内存占用。

DSA是聪明的“调度系统”:DSA(DeepSeek Sparse Attention,DeepSeek稀疏注意力)是在MLA这个高效地基上,引入了一个聪明的“筛选系统”。它会快速筛选出每个token最相关的信息,然后只对这些最相关的信息进行计算,从而显著降低计算量

2.DeepSeek MLA(Multi-Head Latent Attention)(KV 低秩降维+QK 拆分 + 部分 RoPE)

核心思想:对 K 和 V 进行低秩分解与压缩,同时对 Q 和K做张量拆分,仅对部分子张量执行 RoPE 位置编码,从而减少 Attention 计算的内存带宽压力和 FLOPs 开销。

2-1具体步骤:KV低秩压缩,Q与低秩压缩的Kr拆分计算

①对输入的h进行低维投影(通过线性层来减少参数计算量)得到c_KV,1000*8192压缩到1000*512+512*8192

例如:c_KV = W_DKV × h (8192 → 512)

[B, 1000, 512]=[8192, 512]×[B, 1000, 8192]

(将高维的 K=8192(维度d)投影到低秩空间r=512(r≪d))

②Q K投影生成为两个q_C/q_R,k_C/k_R

③ 取q_R和k_R来做RoPE位置编码 ,得到RoPE(q_R) /RoPE(k_R)

④将两个q拼接成Q_final,两个k拼接成K_final

⑤Q与K做attention

目的:在几乎不损失精度的前提下,大幅提升训练和推理的吞吐量

2-2流程图:

h : [B, 1000, 8192]

├─► ①Q 的生成:

│  - c_Q = W_DQ * h          → [B, 1000, 1536]  (压缩表示)

│  - q_C = W_UQ * c_Q        → [B, 1000, 128]    (内容部分恢复)

│  - q_R = W_QR * h          → [B, 1000, 64]    (位置部分,未经压缩)

│  - Q_final = [q_C; RoPE(q_R)] → [B, 1000, 192]

├─► ②K 的生成(缓存关键):

│  - c_KV = W_DKV * h        → [B, 1000, 512]    ★ 压缩比 8192→512

│  - k_C = W_UK * c_KV      → [B, 1000, 128]    (内容部分恢复)

│  - k_R = W_KR * h          → [B, 1000, 64]    (位置部分,未经压缩)

│  - K_final = [k_C; RoPE(k_R)] → [B, 1000, 192]

其中这三个矩阵都是 可训练的参数,在模型初始化时随机生成(如采用正态分布或 Xavier 初始化),然后在训练过程中通过反向传播不断更新,使得压缩 / 解压过程能最大程度保留对注意力有用的信息。

W_DKV(压缩投影矩阵):形状为 [512, 8192]
W_UK(内容上投影矩阵):形状为 [128, 512]
W_KR( 位置投影矩阵):形状为 [64, 8192]

└─► ③V 的生成:

│-直接复用 c_KV

│- V_final = W_UV * c_KV  → [B, 1000, 128]

注:推理时 KV 缓存只存 c_KV(512维)和 k_R(64维),每个 token 仅 576 维。

2-3思考:为什么不直接对c_KV或者k_C加 RoPE?

回答:RoPE 的旋转操作会使“把解压矩阵W_UK吸收进 Query 投影”这一加速技巧无法执行,从而让 MLA 在推理时不得不现场解压并旋转完整的 Key 向量,损失计算效率。因此 MLA 把无需旋转的语义内容(走吸收路线)和需要旋转的位置信息(走独立低维路线)分离开,既保住了吸收加速,又极低成本地注入了位置感知。

①“把解压矩阵W_UK吸收进 Query 投影”怎么理解?

②“不得不现场解压并旋转完整的 Key 向量”怎么理解?

3.DeepSeek DSA

核心思想:在高效的多头潜在注意力(MLA)机制基础上,引入一个轻量级的闪电索引器(Lightning Indexer),为每个查询(Query)从所有历史Token中动态筛选出相关性最高的少部分Token。随后,利用MLA组件仅对这些被选中的Token执行完整的、高维度的注意力计算,从而将原始平方级复杂度的注意力计算(O(L²))降低至近似线性复杂度(O(Lk))。

具体步骤:基于压缩后的低维Key(即c_KV),闪电索引器快速计算Query与所有Token的初步相关性,筛出K个Token,做后续的MLA

① 向量投影与动态权重生成 (Query & Key Projection):输入状态投影为查询(Query)、键(Key)和值(Value)向量。在此过程中,DSA不仅会融入旋转位置编码,还会为每个注意力头额外生成一组动态权重,用于后续自适应地调整各头的注意力得分。

② 索引器快速评分 (Lightning Indexer Scoring):闪电索引器(Lightning Indexer)凭借其小维度的键向量,计算查询与所有键的初步注意力得分,并乘上之前生成的逐头权重(per-head weights)。

③ 精准Top-k选择 (Top-k Selection):在获得所有位置的初步评分后,索引器为每个查询,从整个上下文中精准定位出得分最高的 k 个Token(例如k=2048)。

④ 执行稀疏MLA (Sparse MLA):在这些筛选出来的Token计算MLA。

总结:MLA与DSA完整步骤:本质上V3是在全序列上用MLA的低秩表示做DSA筛选,再对选出的子集做完整的MLA注意力。

二DeepSeekV4版本的HCA与CSA:DeepSeekV4的混合注意力机制 (Hybrid Attention Architecture)主要核心思想是HCA (Heavily Compressed Attention)和CSA (Compressed Sparse Attention),CSA/HCA架构是DSA思想在模型规模和上下文长度上的飞跃性应用。

1.HCA与CSA的关系:

①一个Token进入V4后,会经过多层Transformer

    ├── 某些层使用 CSA 机制处理

    ├── 某些层使用 HCA 机制处理 

    └── 两种层的输出维度完全一致,可无缝交替堆叠

②V4的Transformer层堆叠方式

第1层: CSA (精细语义提取)

第2层: CSA

第3层: HCA (全局语义压缩整合)

第4层: CSA

第5层: HCA

...

第N层: HCA

-低层多用CSA:此时特征还比较底层,需要精细捕捉长距离依赖,用4:1保守压缩+稀疏筛选更安全。

-高层多用HCA:特征已经比较抽象高级,可以承受128:1的激进压缩,用于全局语义整合和存储优化。

-关键设计约束:每一层的输出维度都是与输入完全一致。所以无论上一层是CSA还是HCA,下一层都可以无缝切换成另一种。

2.HCA (Heavily Compressed Attention):极致压缩,存得更省

核心思想:HCA继承了DeepSeek的MLA (Multi-head Latent Attention,多头潜在注意力) 技术,它会将需要记忆的高维信息向量,映射到一个低维的“潜在空间”中存储。当需要用到这些历史信息时,再从低维状态解压还原。这就像一个高效的文件压缩软件,能在不丢失核心信息的前提下,极大地节省存储空间。此外,V4革命性地引入了FP4+FP8混合精度(专家网络参数用FP4,其余用FP8),使得KV Cache的显存占用又被砍掉了一半。

具体步骤:先生成低秩KV,再极度压缩合并,但不丢弃,最后用Query跟这8个浓缩块做完整计算。

①先生成低秩Kr, Vr                                           [B,1000,8192]→Kr, Vr 各 [B,1000,低维度]

②每128个连续Token合并为一个entry              [B,1000,低维度]→[B,8,低维度]  极度压缩

③压缩后的entry以FP4精度存入KV Cache       [B,8,低维度]存储占用≈传统2%

④Query保持原始长度(1000个),不做合并  [B,1000,8192]

⑤Query与这8个entry做全对全稠密注意力        Q:[B,1000,...] K/V:[B,8,...]→[B,1000,8192]

补充过程:

原始: Q [1000, 8192],  K [1000, 8192],  V [1000, 8192]
↓ 低秩投影
低秩: Q_low [1000, d], K_low [1000, d], V_low [1000, d]   (d=512)
↓ 沿长度压缩 (每128个合并)
压缩后: K_comp [8, d], V_comp [8, d]
↓ 注意力计算 (Q_low 与 K_comp 点积)
attn_scores = softmax( Q_low @ K_comp^T )   → [1000, 8]
out_low = attn_scores @ V_comp            → [1000, d]
↓ 升维恢复
out = up_proj(out_low)                     → [1000, 8192]

3.CSA (Compressed Sparse Attention):智能精简,算得更少

核心思想:CSA引入了一个轻量级“索引器”(Indexer)。当处理一个句子时,索引器先对所有信息做一次快速粗筛,预估内容间的相关性。随后,它会精选出最相关的一小部分信息(top-k)进行正式的、高精度的注意力计算,而将大部分无关内容直接丢弃。

具体步骤:先把Token合并成块,索引器打分丢掉不相关的块,只对留下的做MLA+注意力。

①线性映射生成初始KV + 压缩权重                              [B,1000,8192]→ [B,1000,512]

②每4个连续Token加权合并                                          [B,1000,512]→[B,250,512]

③索引器对250个压缩块打分                                         [B,250,512]→[B,250,1]

④Top-K选择,只保留128个                                          [B,250,512]→[B,128,512] 丢弃了122个

⑤对这128个做MLA(低秩投影→拆分→部分RoPE)  [B,128,512]→K', V' 低秩版

⑥Query(保持原始1000长度)与这128个K'做注意力 Q:[B,1000,...] K':[B,128,...]→输出 [B,1000,8192]

补充过程:

原始: Q [1000, 8192],  K [1000, 8192],  V [1000, 8192]
↓ 线性映射 + 低秩投影(生成初始 KV 和压缩权重)
低秩: K_low [1000, d], V_low [1000, d]   (d=512)
↓ 每4个连续Token加权合并(沿长度维度压缩)
压缩块: K_blocks [250, d], V_blocks [250, d]   (250 = 1000/4)
↓ 索引器打分(轻量级线性层,每个块输出一个标量分数)
scores [250, 1]
↓ Top-K选择(保留分数最高的128个块,丢弃其余122个)
selected_K [128, d], selected_V [128, d]
↓ 对选中的128个块做MLA(低秩投影→拆分→部分RoPE)
MLA 压缩: K'_low [128, c], V'_low [128, c]   (c 为 MLA 潜在维度,例如 c=128)
↓ Query 也降维到相同低维空间(保持原始长度)
Q_proj [1000, c]   (由原始 Q 经过低秩投影得到)
↓ 注意力计算(Q_proj 与 K'_low 点积)
attn_scores = softmax( Q_proj @ K'_low^T )   → [1000, 128]
out_low = attn_scores @ V'_low              → [1000, c]
↓ 升维恢复(上投影回原始维度)
out = up_proj(out_low)                      → [1000, 8192]

总结:最终CSA与HCA的协同效应带来了惊人的实际收益:相比前代V3.2,在 100万Token上下文 的设置下,V4-Pro的单token推理计算量 (FLOPs) 仅为前者的27%,同时KV Cache占用也骤降至10%。

哲学视角

“压缩不是丢失,而是为了在无限序列中,用最轻的足迹抓住最真的关联。”
—— 从 MLA 的低秩降维到 DSA 的稀疏筛选,再到 V4 中 HCA 的激进合并与 CSA 的块级索引,这一层层递进的注意力设计,正是对“有限资源如何逼近无限上下文”这一工程哲学的精妙回答:用低维承载高维,用筛选取代遍历,在不完美的记忆中重塑近乎完美的连贯。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐