DeepSeek-R1模型近期热度很高,它究竟是如何在提升性能的同时,有效控制训练成本的?其核心创新主要体现在三大方向:对Transformer架构的改进(MLA和MoE)、通过Multi-Token Prediction技术提升训练效率,以及算法、框架与硬件的协同设计(尤其是GRPO强化学习算法)。接下来,我们将逐一解析这些技术细节——请放心,这里不会堆砌公式,力求用通俗易懂的方式呈现。

这篇文章将系统梳理这些技术的运作原理,以及它们为何能够同时实现性能提升与成本降低。准备好了吗?让我们进入正题。
1. MLA多头潜在注意力
在Transformer架构中,注意力机制是支撑自然语言处理的核心。然而,标准的多头注意力(MHA)在推理阶段存在一个显著瓶颈:它需要缓存所有键值对,导致内存开销巨大。DeepSeek提出的多头潜在注意力(MLA)正是为了解决这一难题。
1.1 标准多头注意力
在标准MHA中,每个输入的token会通过投影矩阵生成查询(Q)、键(K)和值(V)。假设输入嵌入维度为d,头的数量为nh,每个头的维度为dh,那么整体投影可以表示为:
Q = XWQ, K = XWK, V = XWV
随后,输入被分割成nh个头,每个头独立计算注意力,最后拼接并通过输出投影矩阵变换。在推理时,每个token需要存储的KV缓存大小为2·nh·dh·L(L是层数)。对于大型模型而言,这无疑是一笔相当可观的内存开销。
1.2 低秩键值联合压缩
MLA的核心思路非常直接:将投影矩阵拆解为两个低秩矩阵。具体来说,它把键和值的投影矩阵分解为降维矩阵WDKV和上投影矩阵,从而使键和值能够被压缩成一个潜在向量c:
c = X · WDKV
由于降维后的维度dc远小于原来的nh·dh,每个token只需存储dc大小的向量,而非两倍的大向量,KV缓存因此大幅降低。推理时,键和值会从上投影矩阵中恢复,但这两个上投影矩阵可以被吸收到查询投影中,实际计算时无需显式恢复,从而进一步节省了计算资源。
1.3 解耦旋转位置嵌入
DeepSeek-V2引入了旋转位置嵌入(RoPE)来增强模型的位置感知能力,但标准RoPE在推理时会导致较高的计算成本,因为需要将位置信息合并到键和值中。解决方案是解耦RoPE:将查询和键分别拆分为两部分处理,一部分是标准的低秩部分,另一部分是独立的解耦RoPE部分。这样一来,查询和键各自维护一组独立的注意力权重,最后通过加权求和完成计算。在推理时,虽然解耦键的维度dhR也需要缓存,但总体KV缓存大小仍远小于标准MHA。以DeepSeek-V2为例,dc和dhR都设置得非常小,每个token的KV缓存仅约几十KB级别。
MLA通过低秩压缩与解耦RoPE,在显著减少KV缓存的同时,保持了甚至超越了标准MHA的性能,尤其适用于长上下文场景。
2 MOE(混合专家系统)
DeepSeek 671B中提到的MoE究竟是什么?简单来说,它是一种能够扩大模型规模,却无需让计算量随之膨胀的架构。MoE的做法是将传统Transformer中每个前馈网络(FFN)层替换为多个“专家”网络,每个专家本质上就是一个微小的FFN。输入token通过一个门控函数,被动态路由到最相关的几个专家进行处理,而并非所有参数都参与计算。
在MoE架构中,每个FFN层变成了一个专家集合。门控函数接收token的表示,输出每个专家的权重,然后选择top-k个专家进行前向计算。这样,尽管模型总参数量巨大,但每次推理仅激活一小部分参数,计算量因此变得可控。
2.1 细粒度专家分割
传统MoE中,每个FFN层被划分为固定数量的专家(例如N个),每个token激活K个。细粒度专家分割进一步将每个专家拆解为更小的子模块,这样FFN层被分割成mN个更小的专家,每个token激活mK个。更小的专家颗粒度提供了更大的组合灵活性,使模型能够更精细地适应不同输入。
2.2 共享专家隔离
共享专家隔离的初衷是减少参数冗余。在MoE中,一些通用知识(如语法规则、常见搭配等)会被多个专家重复学习。将这些通用知识剥离出来,由一组专门的“共享专家”负责,每个token除了自己的路由专家外,还会固定访问共享专家。为了保持计算量不变,路由专家的总数相应减少。这种方法既避免了冗余,又保留了多样化的专家能力。
2.3 负载均衡
自动学习的路由策略往往会导致负载不均衡:某些专家总是被选中,而其他专家几乎闲置。这会造成资源浪费,甚至影响训练稳定性。解决方案是引入负载均衡的辅助损失函数,监控每个专家的激活频率和亲和度,确保所有专家的使用率尽可能均匀。负载均衡不仅要考虑专家级别,还要兼顾设备级别和通信层面的平衡,以保证集群内所有GPU均匀受力。
2.4 辅助损失函数
负载均衡的辅助损失通常由专家级别的平衡损失构成,其形式化表达可以写为:
Lbalance = α · Σi (fi · Pi)
其中fi是第i个专家的激活频率,Pi是门控对它的亲和度,α是超参数。最小化这个损失会促使专家的激活频率和亲和度分布更加均匀。在实践中,α通常设置得非常小,以避免干扰主任务的学习。
小结
MoE通过将FFN层替换为多个专家,配合细粒度分割和共享专家隔离,在扩大参数规模的同时保持了计算效率。负载均衡策略则确保了专家被均衡使用,避免了资源浪费。
3 MTP(Multi-Token Prediction)
传统语言模型在训练时通常只预测下一个词,而MTP(多词预测)则更进一步:让模型同时预测连续的多个词。对于输入序列中的每个位置,模型不仅要预测下一个词,还要预测它后面第二个、第三个……直到第D个词。这相当于在每个训练步骤中增加了更多的预测目标,从而提高了样本利用率,让模型学得更快。
3.1 实现细节
MTP的实现包含几个关键部分:
多阶段预测:每个训练步骤中,模型需要生成一个因果链,预测多个后续词。为此,模型会添加多个预测头,每个头负责预测不同深度的词。
共享嵌入层和输出头:所有深度的预测共享同一个嵌入层和输出头,从而避免参数量过度增长,同时保证表示的一致性。
独立变换器块和线性投影层:每个深度还会配备一个独立的变换器块和一个线性投影层。这些层的输入由当前深度的嵌入和前一深度的输出嵌入拼接而成,这样不同深度的预测可以互相参考。
损失函数:MTP的训练目标是最大化多阶段的交叉熵损失。整体损失是各深度交叉熵损失的加权平均,权重因子λ通常设为0.3左右。
3.2 挑战
计算开销:多词预测意味着每个训练步需要执行多次前向计算(每个深度一次),训练时间会相应增加。
复杂性:实现多个预测头并设计良好的训练策略比单词预测复杂得多,需要仔细调参。
不过,MTP带来的样本效率提升通常足以抵消额外的计算开销,尤其在数据有限的情况下效果显著。
4 算法、框架和硬件的联合设计
大模型训练不单单是算法问题,还需要考虑如何在硬件上高效运行。DeepSeek在这个方向做出了多项创新,核心体现在两项技术:DualPipe管道并行和FP8混合精度训练。
4.1 DualPipe
DualPipe是一种管道并行算法,专门设计用于减少跨节点专家并行带来的通信开销。在大型模型训练中,专家可能分布在不同的GPU甚至不同节点上,token在路由时需要跨节点传输,通信开销很大。DualPipe通过重叠计算和通信来隐藏这部分开销。
实现细节
管道划分:DualPipe将每个计算块切成四个部分,其中反向计算块进一步拆分为输入和权重两部分。这种细粒度划分有助于减少管道气泡(计算和通信之间的空闲时间)。
双向调度:DualPipe从管道的两端同时送入数据,而不是单向依次流过。双向调度能够更好地填充管道,提高利用率。
通信隐藏:通过预留一部分GPU流处理器(SM)专门用于通信,DualPipe可以确保在芯片执行前向或反向计算的同时,通信在后台异步完成,从而实现接近零的通信开销。
内存消耗:DualPipe需要保留两个模型参数的副本,内存开销略有增加。但研究认为这部分代价可以接受,因为计算和通信效率的提升远超过额外内存的成本。
值得注意的是,最新研究表明,DualPipe的双向调度部分可能并非必要,可以通过“减半”程序简化,进一步降低内存消耗。
4.2 FP8混合精度训练
混合精度训练已经是行业标准,DeepSeek将这一思路推向了FP8——比FP16精度更低,计算速度更快。但有些操作对低精度非常敏感,比如嵌入层、输出头、MoE门控、归一化和注意力等,需要保持原始精度。因此,DeepSeek对这些部分保留了高精度(如FP32或BF16),而在矩阵乘等操作中使用FP8。
实现细节
精度选择:如上所述,敏感模块保留高精度,其余部分使用FP8。
量化策略:为了扩展FP8的动态范围,采用细粒度的tile-wise或block-wise量化,分组大小设为128。这样每个小块独立缩放,有效减少了量化误差。
高精度积累:FP8乘法结果精度有限,DeepSeek在低精度矩阵乘(GEMM)操作中使用高精度积累:定期将中间结果复制到CUDA核心的FP32寄存器中做全精度累加,保证最终结果的准确性。
5 GRPO
强化学习在大模型训练后期越来越重要,PPO是主流方法。但PPO需要额外一个价值模型(critic)来评估每个动作的好坏,训练起来成本高、难度大。GRPO(Group Relative Policy Optimization)则完全去掉了critic,转而使用组内相对比较来估计优势。
PPO:通过奖励和一个critic模型评估每个行为的价值,然后小步调整策略,确保稳定。流程清晰但需要维护两套模型。
GRPO:让模型自己生成一组结果,然后比较它们的相对质量(优势),直接优化策略。它不需要额外的critic,用组内比较替代了绝对价值估计。
5.1 GRPO目标函数的数学原理
GRPO的目标函数看起来有些复杂,但实际拆解开来并不难理解。它由两大部分组成:策略梯度更新项和KL散度正则化项。
策略梯度更新项
这部分的形式是:
核心思想是:通过策略梯度调整当前策略πθ,让它在优势为正的动作上提高概率,在优势为负的动作上降低概率。为了避免更新过于激进,引入了剪切机制,限制概率比的波动范围。
概率比rt(θ) = πθ(at|st) / πθold(at|st)
剪切操作将rt限制在[1-ε, 1+ε]范围内,ε通常取0.2。然后取剪切后与原始值中的最小值,这样当优势为正时降低激进程度,当优势为负时防止过度惩罚。最后对所有时间步、所有轨迹取平均,形成最终的梯度项。
KL散度正则化项
KL散度衡量当前策略πθ与参考策略πref之间的差异。负号和权重β表示这是一个惩罚项,目标是限制πθ偏离πref太远。当KL变大时,惩罚增加,迫使策略更新更加保守。β控制正则化强度,值越大,策略变化越小。
GRPO算法的整体工作流程
GRPO的工作流程可以归纳为五个步骤:
采样响应:对于每个输入问题,从旧策略中采样G个响应(图示中粉色方块表示输入,绿色表示生成)。
分配奖励:根据预定义的规则为每个响应打分,比如基于准确性、格式、语言一致性等(蓝色方块表示奖励)。
计算优势:比较每个响应的奖励与组内平均值和标准差,计算标准化的优势值(紫色方块)。公式为:Ai = (ri - mean(r)) / std(r)。
更新策略:通过最大化目标函数来调整策略参数,提高高优势响应的生成概率,降低低优势响应的概率。
KL散度惩罚:在更新时加入KL惩罚,防止新策略偏离参考模型太远,确保稳定性和通用推理能力(橙色方块)。
整个过程循环迭代,形成一个闭环优化。
6 训练后:对基础模型进行强化学习
预训练完成后,很多模型会通过监督微调(SFT)来适应下游任务。但DeepSeek探索了另一种路径:直接使用强化学习从基础模型开始优化,跳过或仅少量使用监督微调。
6.1 纯强化学习(Pure Reinforcement Learning)
DeepSeek-R1-Zero就是纯强化学习的产物——它基于DeepSeek-V3-Base,完全不使用任何监督微调数据,仅靠GRPO和精心设计的奖励函数来训练。
实现细节
基础模型:DeepSeek-V3-Base,不含任何SFT数据。
算法:GRPO,前面已经详细阐述。
奖励函数:两种关键奖励——准确性奖励(评估回答是否正确)和格式奖励(强制使用
思考和回答标签,使思考过程更加结构化)。训练模板:设计了一个模板,引导模型先生成推理过程,再给出最终答案。
纯强化学习的挑战也很明显:生成内容可能出现可读性差、语言不一致(比如中英混杂)等问题,需要通过后续优化来弥补。
6.2 强化学习与冷启动
DeepSeek-R1采用了更成熟的策略:先通过少量高质量的长链推理示例进行冷启动微调,然后进行强化学习,再结合拒绝采样和SFT,最后进行RL对齐。具体来说:
实现细节
冷启动阶段:收集数千条长链推理(CoT)示例微调基础模型,为后续RL提供一个稳定的起点。
推理导向的RL:冷启动后,进行与DeepSeek-R1-Zero相同的GRPO训练,额外引入语言一致性奖励(衡量CoT中目标语言词汇的比例),减少语言混杂。
拒绝采样和SFT:从RL训练好的检查点中采样,保留正确响应。收集约60万条推理相关样本和约20万条非推理样本(写作、角色扮演等通用任务),用于SFT。
RL对齐:最后再针对人类偏好进行一轮RL对齐,优化有用性和无害性,同时保持推理能力。
这种迭代训练方法让DeepSeek-R1在保持高准确性的同时,大幅提升了生成内容的自然度和多样性。
