
>- 极致压缩技术 MLA(多头潜在注意力) 与 KV Cache。
>-MoE(混合专家)、无辅助损失负载均衡、MTP(多 Token 预测)。
〇、核心结论速览
DeepSeek V3 相对常规 Transformer 的核心改造共四处(外加 KV Cache 与混合精度):
| MLA | ||
| DeepSeek MoE | ||
| 无辅助损失的负载均衡 | ||
| MTP |
MLA 一句话原理:

MoE 一句话原理:模型总参数巨大(6710 亿),但每生成一个 token 只激活其中一小部分专家(约 370 亿,约 1/20),从而大幅降低推理显存与成本。
一、DeepSeek V3 背景与全局认识
1.1 行业坐标:5000 亿参数是 MoE 分水岭
- 当前主流大模型 5000 亿参数以上基本都是 MoE(混合专家,Mixture of Experts)。
- GPT-4 系列是 MoE,多数大模型都是 MoE。
- 例外:LLaMA 较特殊,其最大版本 LLaMA 3.1 405B(约 4050 亿参数)仍是稠密模型,不是 MoE。
- DeepSeek V3:671B = 6710 亿总参数,但推理时每个 token 只激活约 370 亿参数(约 1/20)。
- 这正是 MoE 的核心特性:总参数巨大,但每次推理只调用其中一部分模块,大幅降低推理显存与成本。
> 常见翻译坑:论文中 `671B` 指 6710 亿,部分翻译工具会误译成"670 亿";`transformer` 常被误译成"变形金刚"。读译文需留意。
1.2 训练与定位
- 训练数据:14.8 万亿(14.8T)token 做预训练,与 LLaMA 3.1(约 15T)量级相当。
- 后训练流程:SFT(有监督微调)+ 强化学习(RL),与常规大模型差别不大。
- 额外亮点:FP8 混合精度(见第七章延伸知识点)。
- 结果定位:性能在开源模型中领先,可与 OpenAI / Claude 等闭源模型打平手;最突出的是训练成本极低("模型界拼多多"),且成本低与上述几项创新直接相关。
> 重要提示:MLA 与 DeepSeek MoE 这两项创新,在 DeepSeek V2 论文(2024-06)中已彻底验证。
> V3 技术报告对这两点写得很简略(只给一坨公式 + 符号定义),单看 V3 看不懂,需回到 V2 论文对照阅读。
> 此外还有一篇专门讲 DeepSeek MoE 的论文(2024-01)以及一篇 loss-free 专项论文,合计本节参考四篇文献。
1.3 架构总览图

> 先建立全局地图,再看后续各章细节。下图为纯文本示意,方括号 `[]` 表示模块,`▼/→` 表示数据流向。
图 1:整体数据流(主模型)

图 2:单个 MoE 层内部(第 4–61 层)

- 256 个路由专家多而细(专家细分:拆得越多,单专家维度越小,总算力不变)。
- 共享专家绕过门控、每次都参与,承载公共知识。
- 偏移量在排序阶段调节负载,不污染损失函数(详见第五章)。

图 3:MTP 多 Token 预测(训练 vs 推理)

> 三大核心改造一图对应:MLA + KV Cache(图 1 注意力)、DeepSeek MoE(图 2)、MTP(图 3)。
二、关键术语:Latent(潜空间)
-Latent / Latent Space(潜空间):把语义丰富的高维表示压缩 / 映射到一个低维、短向量里。
- 本质就是特征提取——"取其精华、去其糟粕"。
- 例:把 1 万维向量压进几百维向量,必然是有损的特征提取。
- 这个词在后续图像领域会反复出现(如 Stable Diffusion 的 latent space),非常重要。
- MLA 中的 "Latent" 即指:把 KV 向量压进一个低维潜在向量再缓存。
三、KV Cache:为什么需要它,又为什么是负担
> 理解 MLA 的前提。先看自注意力的几种变体,再看 KV Cache 原理与显存压力。

3.1 多头自注意力的几种变体(都为解决 KV Cache 问题)
回顾标准 Transformer 单层结构:

DeepSeek 的改造:Attention → MLA,Feed-Forward → DeepSeek MoE。
四种注意力机制对比(按 KV 缓存量 / 性能折损排列):
| MHA | ||||
| GQA | ||||
| MQA | ||||
| MLA |
> MHA、GQA、MQA 是已有方案,三者通过"减少 KV 数量"省缓存,但都以牺牲性能为代价。
> MLA 是 DeepSeek 提出的新方案:保留完整多头计算,只在缓存环节做低秩压缩。
3.2 KV Cache 原理:为什么缓存 K、V 而不缓存 Q
设场景:已有 1300 个 token,要预测第 1301 个;相关度矩阵为 1300×1300(含因果掩码的下三角)。

核心观察——每新增一个 token(如要预测第 1302 个):
- 矩阵从 1300×1300 扩成 1301×1301,只多出最后一行(新 Q 与所有历史 K 的相关度)。
- 历史 token 两两之间的相关度系数早已算过,无需重算。
- 计算新增的这一行,需要:最新的 1 个 Q + 全部历史 K。
由此得出:
-Q 无需缓存:旧 Q 对应的相关度行都算完了,可丢弃;只关心最新 Q。
-K 必须缓存:每个新 Q 都要和全部历史 K 做点积。
-V 必须缓存:注意力加权求和(系数 × V)时,每个历史 V 都要参与。
> 这就是 KV Cache:缓存全部历史 K、V,避免下一步重复计算。代价是巨大的显存占用。
> 不缓存则每步都要重算所有相关度系数,速度极慢——所以只能在"省显存"上想办法。
3.3 显存压力实测(以 GPT-3 规格估算)
逐项累乘(单个 token、单层、KV 各一份的缓存量):

再换算成显存(FP32,每数字 4 字节):
约 30 亿 × 4 字节 ÷ 1024³ ≈ 11~12 GB
关键认知:
- 这 11~12GB 仅仅是缓存 1300 个 token(约 600 多汉字、还没开始生成回答) 的开销。
- 占用与序列长度呈严格线性关系:
- 1300 token → ~11GB
- 13000 token → ~110GB
- 13 万 token → ~1100GB
- 对照现实:
- 主流模型上下文已达 20 万 token(约 10 万汉字)。
- MiniMax-01 支持 400 万 token(约 200 万汉字)上下文。
- 而单张高端显卡显存仅 20~80GB 量级。
> 结论:不做压缩,KV Cache 在长上下文下根本不可行。MLA 应运而生。
四、MLA:低秩联合压缩(前半段核心)
4.1 思路
- 论文原话核心:对 KV 做 低秩(low-rank)联合压缩,以减少 KV 缓存。
- "低秩"= 向量长度变短即完成压缩。
- 做法:用神经网络(矩阵乘法 = 线性映射)把长向量压成短向量,用时再还原。

-K 和 V 被联合压缩进同一个潜在向量,再用两个不同的上采样网络分别还原出 K、V。
- 等于训练出三个配合的神经网络:1 个压缩(下采样)+ 2 个还原(上采样)。每层都各做一套。
- "挤海绵"类比:原始 QKV 计算中本就有冗余(海绵里水还很充分),不是压到极限硬挤;MHA/GQA/MQA/MLA 只是不同的拧法。
4.2 工程极致优化:还原矩阵合并,连还原都省掉
DeepSeek 进一步"抠效率到极致"——还原步骤可以完全免去:
V 侧:还原的 V 最终要与输出投影 `W^O` 相乘。
- 既然 `(还原 V) → 乘 W^O` 是两次连续矩阵乘法,可合并:把 W^UV 直接并入 W^O。
- → V 不还原,压缩向量直接用,还原动作被吸收进 W^O。
K 侧:还原的 K 最终要与新的 Q(由 `W^Q` 算出)做点积。
- 同理,把 W^UK 直接并入 W^Q。
- → K 不还原,还原动作被吸收进 W^Q。
> 数学依据:相邻矩阵相乘可预先合并成一个矩阵(结合律),推理时少做一遍乘法。
> 结果:MLA 实际上只是改造了 W^Q 和 W^O 两个投影矩阵,去掉了显式还原步骤。
4.3 RoPE 位置信息的处理
- 压缩会连同位置信息一起被压缩 / 破坏,因此 MLA 需额外处理位置编码(RoPE,旋转位置编码)。
- 论文中对此有专门设计(解耦的 RoPE 维度),本节未深入展开。
4.4 实际超参数(DeepSeek V3)
| 61 层 | ||
| 7168 | ||
| 128 个头 | ||
| 128 维 | ||
| KV 压缩维度 d_c | 512 | |
>认知修正:GPT-3 中"96 层 × 96 头、96×128=12288"是巧合;一般 `层数 ≠ 头数`、`头数 × 头维 ≠ 隐藏维`。
> 层数少 → 信息聚合轮次少 → 可用更短的向量承载,故 V3 隐藏维(7168)小于 GPT-3(12288)。
>遗留疑问(讲师亦未完全确定):Q 本不需要缓存,为何也要压缩?此处动机未明确。
> (注:通常解释是压缩 Q 可减少 Q 投影的训练参数量并配合 MLA 整体结构,但讲师未下定论。)
>MLA 定位小结:MLA 不提升模型智能,纯粹是存储优化;思路偏工程化(讲师评价"很工程化、听上去平淡,但确实抠到了极致")。
五、DeepSeek MoE

5.1 MoE 的核心思想
为什么要把模型做大:
- 大语言模型本质:在海量"问题 → 回答"之间寻找一种映射规律(用上千亿参数去拟合输入到输出的关系)。
- 数据越多(如从 37.5 亿条到上百亿条),映射关系越难找 → 需要更多可学习参数来拟合。
- 难点:问题五花八门、跨领域差异巨大。不同领域的问答之间可共用的参数很有限,强行用同一套参数拟合一切,效率低。
MoE 的基本动机:既然不同问题难以共用参数,那就让模型分模块处理不同问题:
- 模型整体可以做得很大(如 6700 亿参数),但每次回答(每生成一个 token)只激活其中一部分模块。
- 注意:实际划分不是按人类可理解的领域(数学、金融、电商……)来分,而是模型训练中自发形成的、人类无法直接描述的分工。
人脑神经元类比:
- 人脑处理任务时,并非所有神经元都工作,只有一部分被"点亮"。
- 不同的电信号刺激同一神经元,会激活不同的神经元群(A 组 / B 组)。
- A 组与 B 组之间存在重叠,并非完全独立——MoE 的专家分工同理,不是泾渭分明的硬划分。
5.2 MoE 替代的是 Feed-Forward,而非整个模型
回顾 Decoder 单层结构:
一层 Decoder = 多头自注意力(MHA) + 前馈网络(Feed-Forward / FFN / MLP 全连接层)
-MoE 用来替代每一层里的 Feed-Forward 模块,而不是把大模型拆成几个小语言模型。
- Decoder 有很多层(如 96 层),则每一层的 FFN 都各自替换为一套 MoE 结构。
- 多头自注意力部分通常保持不变(在 V3 里则是改成 MLA)。
> 常见误解:以为 MoE 是把一个大 LLM 拆成几个小 LLM。错误。MoE 是在每层内部替换 FFN。

5.3 专家(Expert)的构成
每个专家存储两样东西:
1.一个向量:相当于这个专家"擅长干什么活"的摘要(人类无法直接读懂其含义)。
2.一个神经网络(FFN):真正干活的部分,结构与原来的 Feed-Forward 几乎一致。
> 专家向量、专家网络初始均为随机值,训练过程中才逐渐分化出各自的"专长"。
> 初始阶段每个专家"像蠢猪一样什么都不会",分工是磨合训练出来的,而非预先设计。
5.4 门控网络(路由):决定哪些专家干活
每生成下一个 token 时,需要决定本轮激活哪几个专家。有两种实现方式:
方式一:基于专家向量的相似度计算
1. 输入数据是一个向量;每个专家也有一个代表自己的向量。
2. 输入向量与每个专家向量做点乘(点积 / 内积),得到相关度。
- 注意修正:自注意力中的相关度系数其实也是点积,不是余弦相似度。
- 点积公式:`A·B = |A| × |B| × cos θ`,与余弦相似度形式相近(差一个模长归一化)。
3. N 个专家 → 算出 N 个相关度 → 经 Softmax 归一化为 0~1 的系数(总和为 1)。
4.取 Top-K:只保留相关度最高的 K 个专家,其余系数抹为 0。
方式二:门控网络直接输出(无专家向量)
1. 去掉专家向量,门控本身就是一个神经网络。
2. 输入数据进来 → 门控网络直接输出 N 个相关度数字 → Softmax → 取 Top-K。
3. 每个专家只需保留自己的 FFN,不再单独维护描述向量。
> 门控网络参数初始也是随机的,"瞎分活"。随着总误差(Loss)反向传播,门控网络逐渐学会
> "某类活分给某个专家更好",专家也在被反复分配中"熟能生巧",最终自发形成分工。
5.5 Top-K 激活与加权输出
- 设定每次激活的专家数量(如 32 选 2、64 选 4),一般不会太多。
- 落选专家系数置 0,入选专家保留原相关度系数。
- 真正干活时,专家 FFN 的输出要乘上各自的相关度系数做加权:
- 例:专家 1 系数 0.4、专家 2 系数 0.2 → 输出分别乘 0.4、0.2 后融合。
- 系数越高代表该专家"话语权"越大。
5.6 共享专家(Shared Expert)
- 动机:不同任务之间仍存在公共知识 / 公共工作需要处理。
- 共享专家不经过门控网络判断,每次输入都一定参与计算。
- 在固定激活总数下,共享专家会挤占路由专家名额*
- 例:原计划激活 4 个专家,划出 1 个做共享专家 → 路由专家只选 3 个。
- DeepSeek 设计原则:在与对照模型相同计算量下比效果,不靠多占算力取胜("我不占你便宜")。
5.7 DeepSeek MoE 的两大创新
> 课程参考了 4 篇论文:DeepSeek V2、V3、专门的 DeepSeek MoE(2024-01)、以及 loss-free 相关论文。
> 单看 V3 论文看不懂,需结合 V2 与专项论文。
创新一:专家细分(Fine-Grained Expert Segmentation)
-问题:专家数量太少时,每个专家仍要承担过多类型的知识,负担重、表现不佳。
-做法:把专家拆得更细,让分工更明确、各自水平更高。
-关键约束——保持计算量公平:把 1 个专家分割成 M 个小专家时,每个小专家的中间层维度同步缩小为原来的 1/M。
> 数值示例:
>- 原 32 个专家,每个处理 1000 维向量。
>- 拆成 M=5 倍 → 160 个专家,每个维度变为 1000 / 5 = 200 维。
>- 160 × 200 维 与 32 × 1000 维 计算复杂度完全相同。
> 配套地,激活数量也等比例增加:专家从 N 变 2N,则 Top-K 从 2 变 4,依旧"不占便宜"。
创新二:共享专家(见 5.6)
- 同样遵循"算力公平"原则:划出共享专家后,路由专家相应减少,维持总激活数不变。
5.8 DeepSeek V3 的实际超参数
| 8 个专家 |
> 200+ 专家的规模非常夸张,远多于一般公司,正源于"专家细分"思想。
5.9 对比:GPT-4 的 MoE(2023)
- 约 16 个专家,参数总量约 1.8 万亿。
- 共 120 层,每层一个 MoE;按 16 专家 × 单专家约 1100 亿 → 仅 16 个专家就约 1.7~1.8 万亿参数。
- 思路:GPT-4 专家少而大;DeepSeek 专家多而细。
六、无辅助损失的负载均衡(Auxiliary-Loss-Free Load Balancing)
> 属于 DeepSeek MoE 架构的一部分,V3 的新做法。
6.1 要解决的问题:GPU 负载不均
- 不同专家常部署在不同 GPU 上,且参数尺寸相同。
- 若总逮着少数几个专家干活 → 部分 GPU 很忙、部分 GPU 闲着 → 算力浪费。
6.2 V2 旧做法:辅助损失(Auxiliary Loss)
- 在损失函数(总误差)中人为追加惩罚:某专家近几轮接活太多 → 给它的总误差额外加一块。
- 副作用:专家会"自我怀疑"——
- 总误差变大并非因为它预测下一个字的概率不准,而是因为"出场太多"。
- 专家据此去调整参数 → 训练被干扰,预测准确率受损。
- 这是一种为照顾计算效率而牺牲性能的做法。
6.3 V3 新做法:Loss-Free 偏移量
-不再往损失函数里塞额外误差("free"= 把额外误差免掉,并非"免费")。
- 改为:在计算 Top-K 排序时,给每个相关度系数加一个偏移量(bias):
- 累计统计每个专家历史接活次数。
- 接活越多 → 偏移量为较大负值(排序吃亏,降低被选概率)。
- 接活越少 / 没接过 → 偏移量为正值(更易被选中)。
- 用"原相关度 + 偏移量"做 Top-K 选择,从而在不污染 Loss 的前提下均衡负载。
> 讲师个人观点:对负载均衡策略不太认同。训练时专家学到擅长某类活,
> 推理时却因 GPU 调度把活分给别的(并不擅长的)专家,注定会降低回答质量——
> 这是有限资源下的权衡取舍,而非完美方案。
七、多 Token 预测(MTP, Multi-Token Prediction)
7.1 结构
- 一个主模型(堆叠 61 层 Decoder)+ 若干 MTP 辅助模块(每个仅 1 层 Transformer Block)。
- 主模型与辅助模块共享部分参数:
- Embedding 层 shared;
- 输出头 Output Head(即 Linear 层)shared;
- 这些共享参数不再重复训练。
7.2 工作方式(训练阶段)
- 主模型:基于 token1~4 预测 token5(标准预训练,输出目标称 target token)。
- 辅助模块依次向后多预测:
- 模块 1:基于 token2~5 预测 token6;
- 模块 2:基于 token3~6 预测 token7;……
- 每个辅助模块可一次预测多个 token,让同一个位置的 token 被提前预测多次。
7.3 带来的好处
1.提升输出连贯性:多个子模型按语义连贯性提前"操心"后续 token。
2.提升稳定性:主模型预测某 token 时,可融合若干子模型的概率分布。
- 选词本身就不是取概率最高的一个,而是 Top-K(如 top 5/10)+ 温度系数(temperature)引入随机性。
- 温度越大随机性越强,越小越确定。
- 主模型与辅助模型的概率分布加权融合后再取 Top-K → 减少主模型在关键词(如否定词"不")上的大波动,输出更稳。
7.4 推理阶段的处理
- MTP 子模块主要用于训练时提升主模型性能。
- 推理时通常直接丢弃子模块,主模型可独立正常运行。
- 也可保留子模块做推测解码(speculative decoding),在主模块并发压力大时由子模块"跳出来帮忙",改善生成延迟。
八、延伸知识点
8.1 混合精度(Mixed Precision)
- 核心思路:32 位浮点数占 4 字节、8 位浮点数占 1 字节 → 用更小精度存中间结果省显存/内存。
- 但全用 8 位会严重损失精度,故 DeepSeek 按模块区分精度:
-保留高精度(FP32/原始精度) 的核心模块:Embedding、最后的 Linear 层、MoE 门控模块、归一化、注意力层中算相关度系数的部分。
-改用 8 位浮点:其余不太重要的中间计算。
- 论文中明确写出了哪些部分用 8 位、哪些用 32 位。
8.2 RM 模型(奖励模型)的小创新
DeepSeek 在强化学习的 RM(用于给回答打分)上分两类:
1.基于模型的 RM:传统方式,神经网络学习训练得到。
2.基于规则的 RM:针对数学题、考试题、写代码等可规则判定的问题,直接用纯规则解析判分(如 `3+3×5` 答 15 即对、12 即错),完全不用神经网络。
> 其余预训练、SFT、强化学习流程与常规大模型差别不大。论文核心创新一般写在最前面的摘要里。
8.3 点积 vs 余弦距离的使用场景
- 一般两段文本之间(如 RAG 检索)多用余弦距离。
- 未经规划/归一化的场景可能直接用点积。
- 两者公式相近,区别在于是否除以模长。(讲师表示具体边界自己也难精确总结。)
九、全课小结
DeepSeek V3 相对常规 Transformer 的核心改造(外加 KV Cache 与混合精度):
1.KV Cache 是刚需也是负担:缓存历史 K、V 避免重算(Q 不必缓存),但显存随上下文长度线性膨胀,长上下文下不可承受。
2.MLA = 低秩联合压缩:把每层的 K、V 联合压成一个低维潜在向量(V3 中 7168 → 512,约 14 倍)再缓存,用时上采样还原;还原矩阵 `W^UK`/`W^UV` 分别并入 `W^Q`/`W^O`,连显式还原都省去。性能折损远小于 GQA / MQA。定位是存储优化,不提升智能。
3.DeepSeek MoE:专家细分(多而细、维度等比缩小)+ 共享专家,且始终遵循"同计算量下比效果"的公平原则。
4.无辅助损失负载均衡:用偏移量在 Top-K 排序阶段均衡 GPU 负载,避免 V2 辅助损失污染训练。
5.MTP 多 Token 预测:训练期辅助主模型提升性能与连贯性,推理期可丢弃或用于推测解码。
> 讲师总评:这些创新带有工程化色彩,量级不算特别大,但确有借鉴意义。
>MLA 最有亮点(小向量压缩后还原、精度影响小),MTP 也较有意思;
> 对负载均衡策略持保留意见(为 GPU 利用率牺牲了部分模型性能)。
> 复习重点:KV Cache 与 MLA 这一段建议重点再看。
夜雨聆风