您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
DeepSeek-R1技术笔记 (含图解和技术点介绍)
 
作者:艾宏峰
   次浏览      
 2025-2-20
 
编辑推荐:
本文主要介绍了DeepSeek-R1技术相关内容。希望对你的学习有帮助。
本文来自于知乎,由火龙果软件Linda编辑,推荐。

最近DeepSeek-R1简直杀疯了,所以我特地看了论文和一些相关技术点(包括GRPO、拒绝采样、PRM、MCTS),并做了相关笔记,希望能帮到大家跟进前沿工作。推荐指数:5星。不足之处,还望批评指正。文章可能会很长,读不完的伙伴建议收藏。

DeepSeek推出了全新的推理模型:DeepSeek-R1-Zero 和 DeepSeek-R1。最终,DeepSeek-R1 在推理任务上的表现与 OpenAI-o1-1217 相当,整篇论文的亮点在于:在基础模型上应用强化学习,而不依赖监督微调(SFT)作为初步步骤,使模型能够自主探索 Chain-of-Thought(CoT)来推理解决复杂问题。

图1:DeepSeek-R1的Benchmark表现

我自己绘制的DeepSeek-R1训练流程如下:

图2:DeepSeek-R1是如何训练来的?

本文目录:

一、DeepSeek-R1-zero

强化学习在推理任务中表现出显著的有效性,但之前工作严重依赖监督数据,而这些数据的收集非常耗时。为此,为了让大语言模型在没有监督数据的情况下也能发展出推理能力,作者提出了DeepSeek-R1-zero,它在基座模型DeepSeek-V3-Base上应用了强化学习,实现了自我进化,产生了推理能力。

1、GRPO

为了节省强化学习的训练成本,使用了组相对策略优化(Group Relative Policy Optimization, GRPO),它放弃了评论模型,而是从组分数中估计基线。具体来说,对于每个问题q,GRPO 从旧策略π_θ_old中采样一组输出{o_1,o_2,⋯  ,o_G},然后通过最大化以下目标来优化策略模型:

图3:GRPO优化目标

要解释GRPO,得先解释PPO,感兴趣的伙伴可以阅读文章[7][8][9]进行系统了解。我这边抽象地简要介绍下。首先,在强化学习中,智能体根据策略π,对当前状态s做出动作a,环境根据动作a评估出奖励r和新的状态,然后智能体又根据新的状态做出动作,不断持续多个回合,直到游戏结束。在整个过程中,我们希望策略不断更新,最终达到一个好的策略,帮我们在不同状态下选择出最好的动作。为此,常采样多个序列(每条序列内含多步下的状态和行为),然后评估奖励,通过设计优化目标,鼓励策略网络朝着高奖励的序列的方向进行更新。

策略更新有两种方法:On-policy和Off-policy,区别在于,on-policy方法指的是算法在训练过程中使用当前策略生成的数据来更新策略本身。也就是说,用于训练的数据必须来自当前正在优化的策略。而off-policy方法则允许使用其他策略(如旧策略或完全不同的策略)生成的数据来更新当前策略。常见的off-policy算法包括Q-Learning。(说白了,就是自己打游戏学习和看别人打游戏后学习的区别)。虽然前者速度慢,但效果上限高。因此,PPO(Proximal Policy Optimization)借鉴了off-policy算法的一些概念去改进on-policy算法,即把旧策略的数据也复用起来,然后用当前策略(新策略)生成的数据来调整旧策略的数据,使其用够用于新策略的更新,从而降低训练成本。

在使用旧策略数据的时候,涉及到一个问题:你的经验虽好,但可能我学不来。归根结底就是双方采样分布差异不能太大(青铜跟白银学还行,直接学王者很难,毕竟饭要一口一口吃),为此,就引入了重要性采样和KL散度。

重要性采样就是新旧策略的概率比(可理解为旧策略为别的玩家,新策略为你),即新模型输出(o1, o2, ..., oi)的概率, 除以老模型的概率,用于修正新旧分布之间的差异。A代表优势,概率比乘优势则为奖励,最大化奖励本质上是让新策略在旧策略的样本上,尽可能多地保留高奖励的输出。若新策略的某样本相比旧策略的样本,概率低,则减少对它的考虑,该样本重要性低。当然为了防止比值过大,使得策略更新过于剧烈,影响模型训练的稳定性,当出现差异大的概率比,PPO会截断。而KL是保证新旧策略差异不大,否则会惩罚。

然而PPO,需要额外训练一个价值模型(Critic)来估计优势A,而GRPO直接使用组内样本的奖励计算基线无需Critic模型,降低了计算成本。

图4:PPO与GRPO的对比

2、奖励建模

奖励决定了强化学习的优化方向。为了训练 DeepSeek-R1-Zero,我们采用了基于规则的奖励系统,主要包括两种类型的奖励:

准确性奖励:准确性奖励模型评估响应是否正确。例如,在具有确定性结果的数学问题中,模型需要以指定格式提供最终答案(例如在方框内),从而可以通过基于规则的验证来确认正确性。同样,对于 LeetCode 问题,可以使用编译器根据预定义的测试用例生成反馈。

格式奖励:采用了格式奖励模型,强制模型将其思考过程放在<think>和<think>标签之间。

由于作者担心奖励攻击(reward hacking),所以没用结果或过程神经奖励模型(outcome or process neural reward model)。另外,也没有重新训练奖励模型,,因为需要额外的训练资源,使整个训练流程复杂化。

奖励攻击:Agent通过利用奖励函数设计的漏洞缺陷,以不符合预期的方式获得高额奖励的行为。发生原因有:奖励函数不完善(没全面考虑环境复杂性,存在盲区)、优化目标的短视性(倾向于短期回报)、探索与利用的失衡(探索时可能偶发有害高奖励策略)。

3、训练模板

设计了一个简单的指令模板,要求DeepSeek-R1-Zero首先生成推理过程,然后提供最终答案。

图5:DeepSeek-R1-Zero指令模板

4、DeepSeek-R1-Zero 的性能、自我进化过程和顿悟时刻

性能:达到了与OpenAI-o1-0912相当的水平。

图6:DeepSeek-R1-Zero与OpenAI的o1-0912模型在各种推理相关基准测试中的比较分析

图7: DeepSeek-R1-Zero在AIME 2024基准测试中的表现。随着强化学习的进行,DeepSeek-R1-Zero的表现稳步提升。

自我进化:DeepSeek-R1-Zero的思考时间在整个训练过程中持续增加。这种增加不是外部调整的结果,而是模型与强化学习环境交互的结果。随着测试时间计算的增加,自发地出现了复杂的行为。如,反思(模型重新审视和重新评估其先前步骤),以及探索问题解决的替代方法等行为。

图8:DeepSeek-R1-Zero在强化学习过程种的平均响应长度变化

顿悟时刻:DeepSeek-R1-Zero学会了通过重新评估其初始方法,为问题分配更多的思考时间。这种行为不仅是模型推理能力增长的证明,也是强化学习如何导致意外和复杂结果的一个引人入胜的例子。

图9:顿悟时刻

虽然DeepSeek-R1-Zero不依赖监督数据就能发展出强大的推理能力,但其存在可读性差和语言混合的问题。

二、DeepSeek-R1

为了解决DeepSeek-R1-Zero的缺点,让其对用户更友好。作者又设计了一个4阶段的流程,训练出DeepSeek-R1供最终落地使用。4阶段为:冷启动、面向推理的强化学习、拒绝采样和监督微调、面向所有场景的强化学习。

1、冷启动

冷启动问题:是指在新用户、新物品或新场景下,由于缺乏足够的历史数据,使得模型难以进行有效的学习和预测。冷启动模型则是为了解决这一问题而设计的模型或方法,通常需要利用有限的初始数据或外部知识来引导模型的训练和预测。[3]

像DeepSeek-R1-Zero没用监督数据便开始训练还是有些不稳定,如果要训练可落地使用的DeepSeek-R1,最好在训练早期能有一些CoT的数据来微调下模型(即冷启动模型)。为此,探索了2种方式:

使用带有长CoT示例的少样本提示,直接提示模型生成带有反思和验证的详细答案;

收集DeepSeek-R1-Zero的可读格式输出,并通过人工注释员的后处理来优化结果。将DeepSeek-R1-Zero可能混合多种语言或缺乏用于突出显示答案的 Markdown格式的响应进行过滤和修正,将输出格式定义为:

|special_token∣<reasoning_process>∣special_token∣<summary>。

就这样收集了数千条冷启动数据,来微调 DeepSeek-V3-Base。

2、面向推理的强化学习

接下来在微调后的DeepSeek-V3-Base上,应用了与DeepSeek-R1-Zero相同的强化学习训练过程。但为了缓解语言混合问题,在强化学习训练期间引入了语言一致性奖励,该奖励计算为目标语言的单词在CoT中的比例。尽管消融实验显示这种对齐会导致模型性能略有下降,但这种奖励与人类偏好一致,使其更具可读性。最终奖励=推理任务的准确性+语言一致性奖励。该阶段主要提升在编码、数学、科学和逻辑推理等推理密集型任务中的表现。

3、拒绝采样和监督微调

为了增强模型在写作、角色扮演和其他通用任务中的能力。利用前面强化学习训练好的DeepSeek-V3-Base去生成监督微调(SFT)数据,去微调DeepSeek-V3-Base模型。监督数据的生成主要围绕以下两种:

推理数据(60万条):对前面强化学习训练好的DeepSeek-V3-Base使用拒绝采样(rejection sampling)生成推理轨迹,然后拒绝采样。之后,过滤掉混合语言、长段落和代码块的Chain-of-Thought。对于每个提示,采样多个响应并仅保留正确的响应;

非推理数据(20万条):对于非推理数据,如写作、事实问答、自我认知和翻译,采用DeepSeek-V3的流程并重用DeepSeek-V3的部分监督微调数据集。对于某些非推理任务,调用DeepSeek-V3在回答问题之前生成潜在的Chain-of-Thought。然而,对于更简单的查询,例如“你好”,不会在响应中提供 CoT。

总共80万条样本对DeepSeek-V3-Base做了2个epoch的SFT微调。

拒绝采样(Rejection Sampling):首先使用训练好的模型生成大量的候选输出,对于DeepSeek-R1是多个候选推理路径。通过某种筛选机制(如人工评审或自动评分系统,对于DeepSeek-R1是用DeepSeek-V3做判断)从这些候选输出中挑选出高质量的样本。[4]

4、面向所有场景的强化学习

为了进一步使模型与人类偏好对齐,实施了第二阶段的强化学习,旨在提高模型的有用性和无害性。基于DeepSeek-V3的流程,对于有用性,专注于最终summary。对于无害性,作何评估模型的整个响应内容,包括推理过程和summary,以识别和减轻生成过程中可能出现的任何潜在风险、偏见或有害内容。

图10:DeepSeek-R1和其他代表性模型的对比

三、蒸馏

为了使更高效的小型模型具备像DeepSeek-R1一样的推理能力,作者直接使用 DeepSeek-R1生成80万条样本对开源模型 Owen和Llama进行了微调。研究结果表明,这种简单的蒸馏方法显著增强了小型模型的推理能力。对于蒸馏模型,仅应用监督微调,不包括强化学习阶段,尽管加入强化学习可以显著提升模型性能。

图11:在推理相关的benchmark上,蒸馏模型的对比

作者在论文中提到一个问题:模型是否可以通过大规模强化学习训练而不进行蒸馏来获得相当的性能?

为了回答这个问题,作者在Qwen-32B-Base上进行了大规模强化学习训练,使用数学、代码和STEM数据,训练了超过10K步,得到了DeepSeek-R1-Zero-Qwen-32B。实验结果如图8所示,表明经过大规模强化学习训练的32B基础模型达到了与QwQ-32B-Preview相当的性能。然而,从DeepSeek-R1蒸馏的DeepSeek-R1-Distill-Qwen-32B 在所有基准测试上均显著优于DeepSeek-R1-Zero-Qwen-32B。

因此,可以得出两个结论:

- 将更强大的模型蒸馏到较小的模型中会产生出色的结果,而依赖本文提到的大规模强化学习的小模型需要巨大的计算能力,甚至可能无法达到蒸馏的性能;

- 虽然蒸馏策略既经济又有效,但超越智能边界可能仍然需要更强大的基座模型和更大规模的强化学习。

图12:在推理相关的benchmark上,蒸馏和RL模型的对比

四、不成功的尝试

1、过程奖励模型(PRM)

PRM是OpenAI在2023年Let’s Verify Step by Step论文[5]中提出的,旨在生成过程中,分步骤对每一步进行打分,是更细粒度的奖励模型,可以引导模型采用更好的方法来解决推理任务。然而,在实践中,PRM 有三个主要限制,可能会阻碍其最终成功。

- 在一般推理中明确定义细粒度步骤具有挑战性。

- 确定当前中间步骤是否正确是一项艰巨的任务。使用模型进行自动注释可能无法产生令人满意的结果,而手动注释不利于扩展。

- 一旦引入基于模型的 PRM,不可避免地会导致奖励攻击,并且重新训练奖励模型需要额外的训练资源,这会使整个训练流程复杂化。

虽然PRM展示了重新排序模型生成的前N个响应或辅助引导搜索的良好能力,但在大规模强化学习过程中,其优势与引入的额外计算开销相比来说,十分有限。

想要了解PRM,推荐阅读文章【聊聊PRM(过程奖励模型)】[6]。简单来说,奖励模型可分为结果奖励模型 (Outcome-supervised Reward Model, ORM) 和过程奖励模型 (Process-supervised Reward Model, PRM) 。前者不管推理多少步,只对完整生成结果进行一次打分。后者则会对生成过程中的步骤进行打分。打分示例如下图所示:

图13: PRM

2、蒙特卡罗树搜索(MCTS)

蒙特卡罗树搜索(Monte Carlo Tree Search, MCTS)是1987年Bruce Abramson在他的博士论文中提出的一种树搜索算法,蒙特卡罗树搜索大概可以被分成四步:选择 (Selection),拓展 (Expansion),模拟 (Simulation),反向传播 (Back Propagation)。在选择阶段,递归选择最优子节点,当到达一个叶子结点时,若叶子结点不是终止节点,就创建其他节点,选择其一进行拓展,从拓展节点开始,进行模拟输出,直到游戏结束,根据模拟结果,反向传播更新当前序列,该方法的好处在于:可以在不训练模型的情况下,通过增加模型的推理时间,增强模型的推理性能。[10][11][12]。

图14:MCTS

受到AlphaGo和AlphaZero启发,如果对大模型使用该方法,来增强推理时间,该方法会将答案分解为较小的部分,以允许模型系统地探索解决方案的空间。为此,先提示模型去生成多个标签,这些标签对应于搜索中所需的具体推理步骤。对于训练,首先通过MCTS,在预训练的价值模型引导下,使用收集的提示词去找到答案。随后,使用生成的问答对来训练演员模型和价值模型,不断迭代该过程。

然而,这种方法在扩展到训练时,遇到了2个挑战:

- 与国际象棋不同,国际象棋的搜索空间相对明确,而token的生成呈现出指数级的搜索空间。为了解决这个问题,为每个节点设置了最大拓展限制,但这可能导致模型陷入局部最优;

- 价值模型直接影响生成的质量,因为它指导搜索过程的每一步。但训练一个好的价值模型本身就很困难,这使得模型难以迭代改进。虽然AlphaGo的核心成功依赖于训练价值模型以逐步提高其性能,但由于token生成的复杂性,这一原则不适用于DeepSeek的设置。

总之,虽然MCTS在与预训练的价值模型配对时,可以在推理过程中提高性能,但通过自我搜索迭代提升模型性能仍然是一个重大挑战。

五、局限性与未来工作

DeepSeek-R1的局限性与未来工作有:

- 通用能力:目前,DeepSeek-R1在函数调用、多轮对话、复杂角色扮演和 JSON 输出等任务中的能力不如 DeepSeek-V3。

- 语言混合:DeepSeek-R1目前针对中文和英文进行了优化,在处理其他语言的查询时可能会出现语言混合问题。例如,即使查询使用的是非英文或中文的语言,DeepSeek-R1也可能使用英文进行推理和响应。

- 提示工程:在评估DeepSeek-R1时,我们观察到它对提示非常敏感。Few-shot提示会持续降低其性能。因此,我们建议用户直接描述问题并使用Zero-shot设置指定输出格式以获得最佳结果。

- 软件工程任务:由于评估时间较长,影响了强化学习过程的效率,大规模强化学习尚未广泛应用于软件工程任务。因此,DeepSeek-R1在软件工程基准测试中并未显示出相对于DeepSeek-V3的巨大改进。未来的版本将通过实施对软件工程数据的拒绝采样或在强化学习过程中引入异步评估来提高效率。

六、代码工作

DeepSeek已开源DeepSeek-R1模型和蒸馏模型:

使用https://ollama.com/能帮助你更快地离线化部署模型。

 
   
次浏览       
相关文章

基于图卷积网络的图深度学习
自动驾驶中的3D目标检测
工业机器人控制系统架构介绍
项目实战:如何构建知识图谱
 
相关文档

5G人工智能物联网的典型应用
深度学习在自动驾驶中的应用
图神经网络在交叉学科领域的应用研究
无人机系统原理
相关课程

人工智能、机器学习&TensorFlow
机器人软件开发技术
人工智能,机器学习和深度学习
图像处理算法方法与实践

最新活动计划
DeepSeek大模型应用开发实践 4-19[在线]
DeepSeek助力职场效率提升 3-22[在线]
智能化软件测试技术培训3-8[北京]
OpenGauss数据库调优实践 3-11[北京]
基于 UML 和EA进行分析设计 3-20[北京]
业务建模&领域驱动设计 3-27[北京]
 
 
最新文章
AIGC技术与应用全解析
详解知识图谱的构建全流程
大模型升级与设计之道
自动驾驶和辅助驾驶系统
ROS机器人操作系统底层原理
最新课程
人工智能,机器学习和深度学习
人工智能与机器学习应用实战
人工智能-图像处理和识别
人工智能、机器学习& TensorFlow+Keras框架实践
人工智能+Python+大数据
成功案例
某综合性科研机构 人工智能与机器学习应用
某银行 人工智能+Python+大数据
北京 人工智能、机器学习& TensorFlow框架实践
某领先数字地图提供商 Python数据分析与机器学习
中国移动 人工智能、机器学习和深度学习