DeepSeek-R1技术笔记:强化学习驱动的推理模型详解
DeepSeek-R1技术笔记:强化学习驱动的推理模型详解
DeepSeek推出了全新的推理模型:DeepSeek-R1-Zero和DeepSeek-R1。最终,DeepSeek-R1在推理任务上的表现与 OpenAI-o1-1217 相当,整篇论文的亮点在于:在基础模型上应用强化学习,而不依赖监督微调(SFT)作为初步步骤,使模型能够自主探索Chain-of-Thought(CoT)来推理解决复杂问题。
图1:DeepSeek-R1的Benchmark表现
DeepSeek-R1在推理任务上的表现与 OpenAI-o1-1217 相当,整篇论文的亮点在于:在基础模型上应用强化学习,而不依赖监督微调(SFT)作为初步步骤,使模型能够自主探索Chain-of-Thought(CoT)来推理解决复杂问题。
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},然后通过最大化以下目标来优化策略模型:
图4:PPO与GRPO的对比
2. 奖励建模
奖励决定了强化学习的优化方向。为了训练DeepSeek-R1-Zero,我们采用了基于规则的奖励系统,主要包括两种类型的奖励:
- 准确性奖励:准确性奖励模型评估响应是否正确。例如,在具有确定性结果的数学问题中,模型需要以指定格式提供最终答案(例如在方框内),从而可以通过基于规则的验证来确认正确性。同样,对于 LeetCode 问题,可以使用编译器根据预定义的测试用例生成反馈。
- 格式奖励:采用了格式奖励模型,强制模型将其思考过程放在
和 标签之间。
3. 训练模板
设计了一个简单的指令模板,要求DeepSeek-R1-Zero首先生成推理过程,然后提供最终答案。
图6:DeepSeek-R1-Zero与OpenAI的o1-0912模型在各种推理相关基准测试中的比较分析
4. 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不依赖监督数据就能发展出强大的推理能力,但其存在可读性差和语言混合的问题。
DeepSeek-R1
为了解决DeepSeek-R1-Zero的缺点,让其对用户更友好。作者又设计了一个4阶段的流程,训练出DeepSeek-R1供最终落地使用。4阶段为:冷启动、面向推理的强化学习、拒绝采样和监督微调、面向所有场景的强化学习。
1. 冷启动
冷启动问题:是指在新用户、新物品或新场景下,由于缺乏足够的历史数据,使得模型难以进行有效的学习和预测。冷启动模型则是为了解决这一问题而设计的模型或方法,通常需要利用有限的初始数据或外部知识来引导模型的训练和预测。
像DeepSeek-R1-Zero没用监督数据便开始训练还是有些不稳定,如果要训练可落地使用的DeepSeek-R1,最好在训练早期能有一些CoT的数据来微调下模型(即冷启动模型)。为此,探索了2种方式:
- 使用带有长CoT示例的少样本提示,直接提示模型生成带有反思和验证的详细答案;
- 收集DeepSeek-R1-Zero的可读格式输出,并通过人工注释员的后处理来优化结果。将DeepSeek-R1-Zero可能混合多种语言或缺乏用于突出显示答案的 Markdown格式的响应进行过滤和修正,将输出格式定义为: |special_token∣
∣special_token∣ 。
就这样收集了数千条冷启动数据,来微调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微调。
4. 面向所有场景的强化学习
为了进一步使模型与人类偏好对齐,实施了第二阶段的强化学习,旨在提高模型的有用性和无害性。基于DeepSeek-V3的流程,对于有用性,专注于最终summary。对于无害性,作何评估模型的整个响应内容,包括推理过程和summary,以识别和减轻生成过程中可能出现的任何潜在风险、偏见或有害内容。
蒸馏
为了使更高效的小型模型具备像DeepSeek-R1一样的推理能力,作者直接使用 DeepSeek-R1生成80万条样本对开源模型 Owen和Llama进行了微调。研究结果表明,这种简单的蒸馏方法显著增强了小型模型的推理能力。对于蒸馏模型,仅应用监督微调,不包括强化学习阶段,尽管加入强化学习可以显著提升模型性能。
作者在论文中提到一个问题:模型是否可以通过大规模强化学习训练而不进行蒸馏来获得相当的性能?
为了回答这个问题,作者在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。
因此,可以得出两个结论:
- 将更强大的模型蒸馏到较小的模型中会产生出色的结果,而依赖本文提到的大规模强化学习的小模型需要巨大的计算能力,甚至可能无法达到蒸馏的性能;
- 虽然蒸馏策略既经济又有效,但超越智能边界可能仍然需要更强大的基座模型和更大规模的强化学习。
不成功的尝试
1. 过程奖励模型(PRM)
PRM是OpenAI在2023年Let’s Verify Step by Step论文中提出的,旨在生成过程中,分步骤对每一步进行打分,是更细粒度的奖励模型,可以引导模型采用更好的方法来解决推理任务。然而,在实践中,PRM 有三个主要限制,可能会阻碍其最终成功。
- 在一般推理中明确定义细粒度步骤具有挑战性。
- 确定当前中间步骤是否正确是一项艰巨的任务。使用模型进行自动注释可能无法产生令人满意的结果,而手动注释不利于扩展。
- 一旦引入基于模型的 PRM,不可避免地会导致奖励攻击,并且重新训练奖励模型需要额外的训练资源,这会使整个训练流程复杂化。
虽然PRM展示了重新排序模型生成的前N个响应或辅助引导搜索的良好能力,但在大规模强化学习过程中,其优势与引入的额外计算开销相比来说,十分有限。
2. 蒙特卡罗树搜索(MCTS)
蒙特卡罗树搜索(Monte Carlo Tree Search, MCTS)是1987年Bruce Abramson在他的博士论文中提出的一种树搜索算法,蒙特卡罗树搜索大概可以被分成四步:选择 (Selection),拓展 (Expansion),模拟 (Simulation),反向传播 (Back Propagation)。在选择阶段,递归选择最优子节点,当到达一个叶子结点时,若叶子结点不是终止节点,就创建其他节点,选择其一进行拓展,从拓展节点开始,进行模拟输出,直到游戏结束,根据模拟结果,反向传播更新当前序列,该方法的好处在于:可以在不训练模型的情况下,通过增加模型的推理时间,增强模型的推理性能。
受到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/能帮助你更快地离线化部署模型。
社区也出现了2个复现DeepSeek-R1训练流程的工作,感兴趣的伙伴可以移步阅读:
- Deepseek R1 Zero成功复现, 三阶段RL,Response长度涨幅超50%,涌现语言混杂,double-check, Verify, Let's Summarize!: https://zhuanlan.zhihu.com/p/21290410831
- DeepSeek R1 Zero中文复现教程来了!:https://mp.weixin.qq.com/s/Z7P61IV3n4XYeC0Et_fvwg