原文:
https://zhuanlan.zhihu.com/p/20751924531
一、
DeepSeek
[1]
核心理论创新
1.
MLA
[2]
大模型架构创新
自GPT采用Transformer架构取得成功以来,经典Transformer架构一直是很多大模型的标配。但这不意味着Transformer是完美无缺的。DeepSeek在Transformer架构的基础上也做了很多创新,主要为:
多头潜在注意力
即MLA 。
MLA用于高效推理,源自DeepSeek V2的原创,其显著降低了推理显存的消耗。MLA主要通过改造注意力算子压缩KV 缓存大小,将每个查询KV量减少93.3%,实现了在同样容量下存储更多KV缓存,极大提升了推理效率。
个人认为,MLA之后,应该还会有QMLA(量化MLA)或者CMLA(压缩MLA),甚至是超越现有Attention模式的技术出现,而用了很多年的Transformer也将经历大的变革。真正的颠覆创新可能,正摆在DeepSeek和国内其他大模型团队的面前。
2.
GRPO
[3]
对齐技术创新
DeepSeek-R1
[4]
的核心算法是 Group Relative Policy Optimization(GRPO)。其目标是优化策略模型,使其在特定任务中表现最佳。与传统策略优化方法不同,GRPO 不依赖与策略模型同规模的评价模型,而是通过组内评分的方法估计基线,简化了计算过程。具体来说,对于每个问题,GRPO 从旧策略 πθoldπθold 中对一组输出 {o1,o2,⋯ ,oG}{o1,o2,⋯,oG} 进行采样,然后通过最大化以下目标来优化策略模型 :
奖励建模
:对于每个输出,根据预设的奖励机制计算其对应的奖励,奖励综合考虑准确性奖励、格式奖励和语言一致性奖励等。为了训练
DeepSeek-R1-Zero
[5]
,采用基于规则的奖励系统,主要包括两种类型的奖励:
准确性奖励
准确性奖励旨在衡量模型给出的响应是否准确无误。以数学问题为例,当问题存在明确的答案时,模型需要按照特定格式(如在特定的框内)给出最终答案,这样就能依据既定规则对答案的正确性进行有效验证。再比如在解决 LeetCode 问题时,可借助编译器,依据预先设定好的测试用例来生成反馈,以此判断模型给出的解题方案是否正确,进而确定模型应获得的准确性奖励分值。
格式奖励
为了规范模型输出,除了运用准确性奖励模型,我们还引入了格式奖励模型。此模型主要作用是促使模型把思考过程置于特定的 < 标签之中。通过这种方式,使得模型输出的结构更加清晰、规范,方便后续对模型输出内容的分析与处理,同时也能引导模型以更有条理的方式展示其推理过程 。
3.
MoE
[6]
混合专家模型优化
为了让1991年就提出的MoE架构更好的融入大模型体系,克服传统MoE模型的训练难题。DeepSeek采用了细粒度专家+通才专家的思路,不再使用少数大专家的结构,而是使用大量极小的专家结构。这个思路的本质在于将知识空间进行离散细化,以更好的逼近连续的多维知识空间,是一个非常好的方法。
无辅助损耗负载均衡
策略可在不依赖辅助损失函数的情况下平衡分配计算/训练负载,更好的提高训练稳定性。
传统的规避路由崩溃的方法是强制“平衡路由”,即通过训练策略让每个专家在足够大的训练批次中被激活的次数大致相等。这一策略也就是“辅助损失”。但这种强制性的辅助损失会由于训练数据的结构不均衡特征,导致同领域的专家能力分散到不同的专家模块之中,极度损害MoE模型的性能。理想的 MoE 应该有一些经常访问高频通用信息,并具备其他访问较少的专业领域专家。如果强制平衡路由,将失去实现此类路由设置的能力,并且必须在不同的专家之间冗余地复制信息。
DeekSeek采用了“增加共享专家+无辅助损耗负载平衡”的方法解决这一问题。
DeepSeek将专家分两类:共享专家和路由专家。共享专家始终会被路由,训练中重点确保路由专家的路由均衡。
无辅助损耗负载均衡(Auxiliary-Loss-Free Load Balancing)方法是将特定于专家的偏差项添加到路由机制和专家亲和力中。偏差项不会通过梯度下降进行更新,而是在整个训练过程中持续监控并进行调整以确保负载平衡。如果训练中某个专家没有获得合理的命中次数,可以在每个梯度步骤中微调偏差项增加命中概率。
通过动态调整,DeepSeek-V3 在训练过程中获得了比有辅助损失均衡模型更好的性能。
从模型架构分析看,我们认为这种分配策略可能还不是理论最优的,但该方法已比强制辅助损失有了显著的改进。
MoE 用于高效训练,其由多个专家模型组成,通过部分激活给定任务所需的特定专家,而不是激活整个神经网络,从而降低计算消耗。MoE非DeepSeek原创,但DeepSeek早在V2之前的 代码和数学模型,就从稠密架构转向 MoE架构。V3模型中更是大胆地使用了高难度的256个路由专家和1个共享专家,并创新的采用冗余专家,来实现负载均衡策略和训练目标。
二、DeepSeek训练方式创新
1. 传统训练方式思考
DeepSeek-R1 是人工智能进步浪潮中的最新强音。对于机器学习研究与开发社区而言,这是一次重要发布,原因包括:
-
• 它是一个开源权重模型,同时提供了更小、更精炼的版本;
-
• 它分享并反思了一种训练方法,用于重现类似
OpenAI O1
[7]
的推理模型。
与现有的大多数 LLM 一样,DeepSeek-R1 也是一次生成一个 token,不同的是,它在解决数学和推理问题时表现尤为出色,因为它能够通过生成“思考 token”来解释其思维链,从而花更多时间处理问题。
通过三个步骤创建高质量 LLM 的通用方法:
1.语言建模阶段
:在这个阶段,我们使用海量网络数据训练模型,以预测下一个词。此阶段的产物是一个基础模型。
2.监督微调阶段
:通过监督微调,使模型在遵循指令和回答问题方面更加实用。此阶段生成的是一个指令调优模型,或称为监督微调(SFT)模型。
3.偏好调优阶段
:最后,通过偏好调优进一步优化模型行为,使其与人类偏好更一致,最终得到一个偏好调优的 LLM,用户可以通过 Playground 和应用程序与之交互。
2. 强化学习训练方式
DeepSeek-R1 遵循这一通用方法。第一阶段的细节源自之前关于 DeepSeek-V3 模型的论文。R1 使用了那篇论文中的基础模型(而不是最终的 DeepSeek-V3 模型),并同样经历了 SFT 和偏好调优步骤,但其具体实现方式有所不同。
在 R1 的创建过程中,有三点需要特别强调。
这是大量的长链式思维推理示例(多达 60 万个)。这些数据的获取极为困难,并且在人类标注的规模上成本高昂。这也就是为什么创建这些数据的过程成为需要特别强调的第二个重点。
这些数据是由 R1 的前身模型生成的,一个尚未命名但专注于推理的“兄弟”模型。该模型的灵感来源于一个名为 R1-Zero 的第三个模型(稍后我们会讨论)。它的意义不在于它本身是一个优秀的 LLM,而在于它的创建过程仅需少量标注数据,并结合大规模强化学习,从而生成了一个在解决推理问题上表现出色的模型。
随后,这个专注推理的模型输出结果可以被用来训练一个更加通用的模型,使其在执行其他非推理任务时,也能达到用户对 LLM 的期望水平。
它分成两步:
在这里,强化学习(RL)被用来创建中期推理模型。随后,该模型被用于生成 SFT 推理示例。而使得创建这个模型成为可能的,是一个早期实验中开发的名为 DeepSeek-R1-Zero 的模型。
R1-Zero 的特别之处在于,它无需标注的 SFT 训练集就能够在推理任务中表现出色。它的训练过程直接从一个预训练的基础模型开始,通过强化学习(RL)训练完成(没有经过 SFT 步骤)。它的表现如此出色,以至于可以与 O1 媲美。
这点意义重大,因为数据一直是推动机器学习模型能力的燃料。那么,这个模型如何能够摆脱这种历史呢?这指向了两个关键因素:
现代基础模型已经跨越了某个质量和能力的阈值
(例如,这个基础模型是在 14.8 万亿高质量 token 上训练的)。
与通用聊天或写作请求不同,推理问题可以通过自动化方式进行验证或标注
。以下是一个例子来说明这一点,这可以是 RL 训练步骤中的一个提示/问题:
“编写 Python 代码,接收一个数字列表,将其按顺序排序,但在列表开头添加 42。”
像这样的问题天然适合多种自动化验证方式。例如,当我们将问题呈现给正在训练的模型时,它可能会生成一个答案。然后,我们可以通过以下方式进行验证:
-
• 使用软件代码检查器(linter)验证生成的代码是否是正确的 Python 代码。
-
• 执行生成的 Python 代码,检查它是否能够成功运行。
-
• 使用其他现代编程 LLM 生成单元测试,验证代码是否实现了预期功能(即使这些 LLM 本身并非推理专家)。
-
• 更进一步,我们可以测量代码的执行时间,并使训练过程偏向于更高效的解决方案——即便这些解决方案只是多个正确的 Python 实现之一。
在训练过程中,我们可以向模型提供类似的问题,并生成多个可能的解决方案进行评估。
我们可以自动检查(无需人工干预)并得出以下结论:
-
-
• 第二个结果确实是 Python 代码,但并未解决问题。
-
• 第三个是一个可能的解决方案,但未通过单元测试。
-
这些信号都可以直接用于改进模型。当然,这个过程是在多个示例(以小批量形式)和连续的训练步骤中完成的。
这些奖励信号和模型更新是模型在强化学习训练过程中持续改进任务的方式,正如论文中的图 2 所示。
与这种能力的提升相对应的是生成的回应长度,模型生成更多的思维 token 来处理问题。
这个过程是有效的,但尽管 R1-Zero 在推理问题上得分很高,它仍然面临一些其他问题,使得它的可用性不如预期。
尽管 DeepSeek-R1-Zero 展示了强大的推理能力,并能够自主发展出意想不到且强大的推理行为,但它也面临一些问题。例如,DeepSeek-R1-Zero 在可读性差和语言混杂等方面存在困难。
R1 旨在成为一个更易用的模型。因此,R1 并不像 R1-Zero 那样完全依赖于强化学习过程,而是如前所述,在两个地方得到了应用:
1.创建一个中期推理模型,用于生成 SFT 数据点。
2.训练 R1 模型,以改进推理和非推理问题的表现(使用其他类型的验证器)。
为了使中期推理模型更具实用性,它在几千个推理问题的示例上进行监督微调(SFT)训练(其中一些是从 R1-Zero 生成并过滤出来的)。论文将此称为“冷启动数据”。
冷启动
:与 DeepSeek-R1-Zero 不同,为了防止基础模型在强化学习训练的初期阶段出现不稳定的冷启动问题,对于 DeepSeek-R1,我们构建并收集了一小部分长链推理(CoT)数据,以微调模型作为初始的 RL 行为者。为了收集这些数据,我们探索了几种方法:使用少量示例提示(few-shot prompting)来提供长链推理作为示范,直接提示模型生成详细的答案,并进行反思和验证,收集 DeepSeek-R1-Zero 输出的可读格式,并通过人工标注者进行后处理以改进结果。
如果你对监督微调(SFT)的概念不熟悉,它是通过将训练示例以提示和正确完成的形式呈现给模型来进行的过程。以下是第 12 章中的一张图,展示了几个 SFT 训练示例: