引用:
@article{guo2025deepseek,
title={DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning},
author={Guo, Daya and Yang, Dejian and Zhang, Haowei and Song, Junxiao and Zhang, Ruoyu and Xu, Runxin and Zhu, Qihao and Ma, Shirong and Wang, Peiyi and Bi, Xiao and others},
journal={arXiv preprint arXiv:2501.12948},
year={2025}
}
Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., Wang, P., Bi, X. and Zhang, X., 2025. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. arXiv preprint arXiv:2501.12948.
原文: https://arxiv.org/abs/2501.12948
代码、数据和视频:
系列文章:
请在 《 《 《文章 》 》 》 专栏中查找
我们推出了第一代推理模型,DeepSeek-R1-Zero 和 DeepSeek-R1。 DeepSeek-R1-Zero 是一个通过大规模强化学习(RL)训练的模型,没有经过监督微调(SFT)作为初步步骤,展示了卓越的推理能力。通过强化学习,DeepSeek-R1-Zero 自然涌现出许多强大且有趣的推理行为。然而,它也面临一些挑战,例如可读性差和语言混合问题。为了解决这些问题并进一步提升推理性能,我们推出了 DeepSeek-R1,它在强化学习之前引入了多阶段训练和冷启动数据。DeepSeek-R1 在推理任务上实现了与 OpenAI-o1-1217 相媲美的性能。为了支持研究社区,我们开源了 DeepSeek-R1-Zero、DeepSeek-R1 以及从 DeepSeek-R1 蒸馏出的六个稠密模型(1.5B、7B、8B、14B、32B、70B),这些模型基于 Qwen 和 Llama。
受到DeepSeek-R1-Zero取得的 promising 结果的启发,提出了两个自然的问题:1)通过结合少量高质量数据作为冷启动,是否可以进一步提高推理表现或加速收敛? 2)我们如何训练一个用户友好的模型,既能够生成清晰连贯的推理链(CoT),又能展示强大的通用能力?为了回答这些问题,我们设计了一个训练DeepSeek-R1的流程。该流程包括四个阶段,具体如下。
冷启动强化学习的核心目标
解决的问题
- 冷启动不稳定性:在强化学习(RL)初期,基础模型(如未经微调的预训练模型)缺乏生成合理推理链(CoT)的能力,导致训练初期探索效率低、策略不稳定。
- 用户友好性:生成的推理链需满足可读性(如结构化格式)和逻辑性,而非仅追求答案正确。
与DeepSeek-R1-Zero不同,为了防止RL训练在基础模型的早期阶段出现不稳定的冷启动问题,对于DeepSeek-R1,我们构建并收集了少量长推理链(CoT)数据,用以微调模型作为初始RL行为者。为了收集这些数据,我们探索了几种方法:使用少量示例进行提示,提示模型生成详细的答案并进行反思和验证,收集DeepSeek-R1-Zero的输出并以可读格式呈现,并通过人工标注者进行后处理优化结果。
在本研究中,我们收集了数千条冷启动数据,以微调DeepSeek-V3-Base,作为RL的起始点。与DeepSeek-R1-Zero相比,冷启动数据的优势包括:
|special_token||special_token|
,其中推理过程是查询的CoT,而总结则用于总结推理结果。1. 段落中的创新方案
- 冷启动数据:收集少量高质量的长推理链数据,对基础模型(DeepSeek-V3-Base)进行初步微调,作为RL训练的初始策略。
- 流程设计:通过四阶段训练(冷启动 → RL优化 → 对齐人类偏好 → SFT),兼顾稳定性和性能。
2. 冷启动数据的关键技术点
(1) 冷启动数据的构建方法
- 少量示例提示(Few-shot Prompting):
- 人工编写少量高质量CoT示例,引导模型生成类似的长推理链。
- 示例:
问题:计算梯形的面积(上底3cm,下底5cm,高4cm)。 思考过程: 步骤1:梯形面积公式为(上底+下底)× 高 ÷ 2 步骤2:代入数值 → (3+5)×4÷2 = 8×4÷2 = 16 总结:面积为16平方厘米
- 反思与验证:
- 要求模型生成答案后自我检查(如“是否有计算错误?”)。
- 示例:
初始输出:3+5=9 → 9×4=36 → 36÷2=18 反思:3+5实际为8,修正后结果应为16
- DeepSeek-R1-Zero输出收集:
- 利用纯RL训练的模型(R1-Zero)生成推理链,筛选逻辑正确的样本。
- 示例:
R1-Zero原始输出:“3+5=8→8×4=32→32/2=16→答案16” 优化后:添加步骤说明和总结(见下方格式设计)。
- 人工后处理:
- 人工标注者修正格式错误、补充缺失步骤。
- 示例:
原始输出:“3+5乘4除2=16” 人工优化: 步骤1:计算上底+下底 → 3+5=8 步骤2:乘以高 → 8×4=32 步骤3:除以2 → 32÷2=16
(2) 数据格式设计 段落中定义了结构化输出格式:
|special_token|
|special_token|
- 示例:
|special_token| 步骤1:计算上底+下底 → 3+5=8 步骤2:乘以高 → 8×4=32 步骤3:除以2 → 32÷2=16 |special_token| 总结:梯形的面积为16平方厘米
- 作用:
- 强制模型区分推理过程(详细步骤)和总结(最终答案)。
- 提升可读性,便于人类检查或后续自动化处理。
3. 冷启动数据的核心优势
(1) 可读性优化
- 问题:DeepSeek-R1-Zero的原始输出可能混杂语言、缺乏结构化。
- 解决方案:
- 标签化:用特殊标记(如
|special_token|
)分隔推理过程和总结。- 过滤机制:删除格式混乱或逻辑跳跃的样本。
- 示例对比:
- 未优化输出:
3+5=8,8×4=32,32/2=16,答案是16
- 优化后输出:
|special_token| 步骤1:计算上底+下底 → 3+5=8 步骤2:乘以高 → 8×4=32 步骤3:除以2 → 32÷2=16 |special_token| 总结:梯形的面积为16平方厘米
(2) 人类先验注入
- 人类先验(Human Prior):将人类经验编码到数据中(如分步解题、总结习惯)。
- 作用:
- 引导模型生成符合人类思维的推理链。
- 避免RL初期探索低效路径(如直接输出答案而跳过步骤)。
- 示例:
- 无先验的模型输出:
问题:小明有20元,买了3本书,每本5元,还剩多少钱? 答案:20 - 3×5 = 5
- 带人类先验的输出:
|special_token| 步骤1:计算总花费 → 3本×5元/本 = 15元 步骤2:剩余金额 → 20元 - 15元 = 5元 |special_token| 总结:小明还剩5元
4. 冷启动流程的四个阶段 根据段落描述,DeepSeek-R1的训练分为四个阶段:
- 冷启动阶段:用少量CoT数据微调基础模型,提供初始策略。
- 第一阶段RL:优化推理模式(如步骤清晰度、逻辑性)。
- 第二阶段RL:对齐人类偏好(如可读性、安全性)。
- 监督微调(SFT):进一步提升通用能力(如语言理解、多任务适应)。
具体示例:冷启动到RL训练
- 冷启动数据:模型学会生成分步解题的CoT(如上述梯形面积示例)。
- RL训练过程:
- 动作空间:模型尝试不同解题路径(如先乘后减 vs. 先减后除)。
- 奖励机制:
- 答案正确性奖励(如最终结果正确 → 高奖励)。
- 步骤合理性奖励(如分步逻辑清晰 → 中等奖励)。
- 策略优化:模型逐渐收敛到最优推理路径。
5. 冷启动 vs. 无冷启动(DeepSeek-R1-Zero)
维度 DeepSeek-R1(冷启动) DeepSeek-R1-Zero(无冷启动) 初始策略 基于高质量CoT数据微调 直接从预训练基础模型开始 训练稳定性 高(减少随机探索) 低(初期输出混乱) 输出可读性 高(结构化格式、总结清晰) 低(可能混杂语言或缺乏格式) 收敛速度 快(直接学习合理推理模式) 慢(需大量试错) 适用场景 需快速落地、输出需人类友好的场景 科研探索、验证RL潜力的场景
总结
- 冷启动的核心价值:
- 通过注入少量高质量数据和人类先验,解决RL初期的探索低效问题。
- 结构化输出设计使模型更用户友好,适合实际应用。
- DeepSeek-R1的创新:
- 结合冷启动与多阶段RL,平衡性能与训练效率。
- 开源冷启动数据和模型,推动社区研究(如蒸馏小模型)。
- 实际意义:
- 为工业级模型提供可靠训练路径(如教育领域的解题助手需清晰步骤)。
- 推动AI模型从“功能可用”到“用户体验优先”的演进。
在对DeepSeek-V3-Base进行冷启动数据的微调之后,我们采用与DeepSeek-R1-Zero相同的大规模强化学习训练过程。本阶段重点增强模型的推理能力,特别是在推理密集型任务中,如编码、数学、科学和逻辑推理,这些任务涉及明确的问题和清晰的解决方案。在训练过程中,我们观察到CoT经常表现出语言混合,尤其是在RL提示涉及多种语言时。为了缓解语言混合的问题,我们在RL训练中引入了语言一致性奖励,该奖励通过CoT中目标语言单词的比例来计算。尽管消融实验表明这种对齐会导致模型表现略微下降,但该奖励符合人类偏好,使其更具可读性。最后,我们通过直接将推理任务的准确性和语言一致性奖励相加来形成最终奖励。然后,我们对微调后的模型应用RL训练,直到它在推理任务上达到收敛。
1. 核心目标
- 增强推理能力:针对编码、数学、科学和逻辑推理等需要明确步骤的任务,优化模型生成清晰推理链(CoT)的能力。
- 解决语言混合问题:避免模型在生成推理链时混合多种语言(如中英文混杂),提升输出的可读性。
2. 关键技术点
(1) 语言一致性奖励(Language Consistency Reward)
- 定义:根据推理链中目标语言(如中文或英文)单词的比例计算奖励,强制模型输出语言统一的推理链。
- 公式: r lang = 目标语言单词数 总单词数 r_{\text{lang}} = \frac{\text{目标语言单词数}}{\text{总单词数}} rlang=总单词数目标语言单词数
- 若目标语言为中文,且推理链中有90%的中文单词 → r lang = 0.9 r_{\text{lang}}=0.9 rlang=0.9。
- 作用:
- 提升可读性,符合人类偏好(例如避免中英混杂的“步骤1:计算3 apples的total”)。
- 尽管可能略微降低模型表现(消融实验),但权衡后选择更友好的输出。
(2) 最终奖励计算 总奖励由 准确性奖励 和 语言一致性奖励 加权组成: r total = r correct + α ⋅ r lang r_{\text{total}} = r_{\text{correct}} + \alpha \cdot r_{\text{lang}} rtotal=rcorrect+α⋅rlang
- 超参数 α \alpha α 控制语言一致性的重要性(例如 α = 0.2 \alpha=0.2 α=0.2)。
- 示例:
- 答案正确( r correct = 1 r_{\text{correct}}=1 rcorrect=1),语言一致性0.9 → r total = 1 + 0.2 × 0.9 = 1.18 r_{\text{total}}=1 + 0.2×0.9=1.18 rtotal=1+0.2×0.9=1.18。
- 答案错误( r correct = 0 r_{\text{correct}}=0 rcorrect=0),语言一致性1.0 → r total = 0 + 0.2 × 1 = 0.2 r_{\text{total}}=0 + 0.2×1=0.2 rtotal=0+0.2×1=0.2。
(3) 训练流程
- 初始模型:经过冷启动阶段微调的DeepSeek-V3-Base。
- RL训练:
- 动作空间:生成不同推理路径(如分步解题或直接输出答案)。
- 奖励反馈:根据答案正确性和语言一致性调整策略。
- 收敛条件:模型在推理任务上的准确率稳定(如连续5次评估无显著提升)。
3. 具体示例
- 问题:用Python编写函数计算斐波那契数列的第n项。
- 模型输出A(语言混合):
\quad步骤1:Define a function fibonacci(n).
\quad步骤2:如果n ≤ 1,返回n。
\quad步骤3:Else,递归调用fibonacci(n-1) + fibonacci(n-2).
答案:
def fibonacci(n):
\quad \quadreturn n if n<=1 else fibonacci(n-1)+fibonacci(n-2)
- 奖励:答案正确( r correct = 1 r_{\text{correct}}=1 rcorrect=1),语言一致性0.6 → r total = 1 + 0.2 × 0.6 = 1.12 r_{\text{total}}=1 + 0.2×0.6=1.12 rtotal=1+0.2×0.6=1.12。
- 模型输出B(语言统一):
\quad步骤1:定义函数fibonacci(n)。
\quad步骤2:若n ≤ 1,返回n。
\quad步骤3:否则递归计算fibonacci(n-1) + fibonacci(n-2)。
答案:
def fibonacci(n):
\quad \quadreturn n if n<=1 else fibonacci(n-1)+fibonacci(n-2)
- 奖励:答案正确( r correct = 1 r_{\text{correct}}=1 rcorrect=1),语言一致性1.0 → r total = 1 + 0.2 × 1 = 1.2 r_{\text{total}}=1 + 0.2×1=1.2 rtotal=1+0.2×1=1.2。
通过RL训练,模型逐渐倾向于生成类似输出B的高奖励结果。
当面向推理的强化学习收敛时,我们利用得到的检查点收集监督微调(SFT)数据,为下一轮训练做准备。与最初的冷启动数据主要专注于推理不同,本阶段结合了其他领域的数据,以增强模型在写作、角色扮演和其他通用任务中的能力。具体来说,我们生成数据并按以下方式微调模型。
推理数据
我们通过从上述强化学习训练的检查点执行拒绝采样,策划推理提示并生成推理轨迹。在前一阶段,我们只包含了可以通过基于规则的奖励进行评估的数据。然而,在这一阶段,我们通过结合额外的数据扩展数据集,其中一些数据通过将真实值和模型预测输入DeepSeek-V3进行判断,使用生成性奖励模型。此外,由于模型输出有时混乱且难以阅读,我们过滤掉了包含混合语言、长段落和代码块的推理链。对于每个提示,我们采样多个回答,并仅保留正确的回答。总共,我们收集了大约60万条与推理相关的训练样本。
非推理数据
对于非推理数据,如写作、事实问答、自我认知和翻译,我们采用DeepSeek-V3流程,并重复使用DeepSeek-V3的部分SFT数据集。对于某些非推理任务,我们调用DeepSeek-V3生成潜在的推理链,然后通过提示回答问题。然而,对于更简单的查询,如“hello”,我们不会提供推理链作为回答。最终,我们收集了大约20万条与推理无关的训练样本。
我们使用上述精心策划的数据集(大约80万条样本)对DeepSeek-V3-Base进行了两轮微调。
1. 拒绝采样(Rejection Sampling)
定义 从RL训练的模型检查点中生成多个候选输出,筛选出高质量样本(如答案正确、格式规范)作为监督微调(SFT)数据。
- 作用:
- 提升后续训练数据的质量。
- 减少噪声和错误样本的影响。
流程
- 生成候选:对每个提示(prompt),采样多个输出(如5个)。
- 过滤规则:
- 保留正确答案(基于规则或奖励模型验证)。
- 删除含混合语言、长段落或代码块的推理链。
- 数据集构建:最终保留高质量样本(如60万条推理数据)。
示例
- 问题:解方程 2 x + 3 = 7 2x + 3 = 7 2x+3=7
- 候选输出:
输出1:2x=4 → x=2(正确,格式规范)
输出2:x=3.5(错误)
输出3:2x+3=7 → 2x=7 → x=3.5(步骤错误)
- 筛选结果:仅保留输出1。
2. 监督微调(SFT)
目标 结合推理数据和非推理数据,增强模型的通用能力(如写作、翻译、角色扮演)。数据构成
- 推理数据(60万条):
- 来源:拒绝采样筛选的高质量推理链。
- 扩展:结合生成性奖励模型(如DeepSeek-V3)判断真实值与模型预测的一致性。
- 示例:数学解题、代码生成。
- 非推理数据(20万条):
- 来源:复用DeepSeek-V3的SFT数据集(如写作、翻译、问答)。
- 处理:
- 复杂任务:生成推理链(如“写一篇关于环保的文章”需逻辑结构)。
- 简单任务:直接回答(如“hello”无需推理)。
微调流程
- 两轮微调:
- 第一轮:混合 推理与非推理数据,初步提升通用能力。
- 第二轮:针对薄弱任务(如角色扮演)补充数据,进一步优化。
3. 具体示例
推理数据示例
- 输入:用Python实现快速排序。
- 输出:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
- 筛选条件:代码通过测试用例,格式规范,无混合语言。
非推理数据示例
- 输入:“写一首关于秋天的诗。”
- 输出:
秋风轻拂叶纷飞, 金黄满地映斜晖。 雁阵南翔声渐远, 静听林间暮色微。
- 处理:直接使用DeepSeek-V3生成的诗歌,无需推理链。
总结
模块 核心目标 关键技术 示例 面向推理的强化学习 提升推理能力,解决语言混合问题 语言一致性奖励、多任务RL训练 数学解题、代码生成中的语言统一 拒绝采样 筛选高质量数据用于SFT 答案正确性过滤、格式规范化 从多个候选输出中保留正确答案 监督微调(SFT) 增强通用能力(写作、翻译等) 混合推理与非推理数据、两轮微调 诗歌生成、多轮对话 通过这一流程,DeepSeek-R1既能在推理任务中生成清晰的思维链,又能处理广泛的通用任务,成为用户友好的多功能模型。
为了进一步使模型与人类偏好对齐,我们实施了一个二次强化学习阶段,旨在提升模型的有用性和无害性,同时进一步完善其推理能力。具体来说,我们使用奖励信号和多样化的提示分布来训练模型。对于推理数据,我们遵循DeepSeek-R1-Zero中概述的方法,利用基于规则的奖励来引导数学、编码和逻辑推理领域的学习过程。对于通用数据,我们使用奖励模型来捕捉复杂和细致场景中的人类偏好。我们在DeepSeek-V3流程的基础上,采用了类似的偏好对和训练提示分布。对于有用性,我们仅专注于最终总结,确保评估侧重于回答对用户的效用和相关性,同时最小化对基础推理过程的干扰。对于无害性,我们评估模型的整个回答,包括推理过程和总结,以识别并减轻在生成过程中可能出现的潜在风险、偏见或有害内容。最终,奖励信号和多样化数据分布的整合使我们能够训练出一个在推理上表现出色,同时优先考虑有用性和无害性的模型。
1. 核心目标
- 人类偏好对齐:通过二次强化学习(RL),提升模型的 有用性(Helpfulness) 和 无害性(Harmlessness),同时保持推理能力。
- 覆盖多场景:确保模型在推理任务(如数学、编码)和通用任务(如问答、对话)中均表现优秀。
2. 关键技术点
(1) 有用性(Helpfulness)
- 定义:模型输出需对用户 有用且相关,直接解决用户需求。
- 实现方法:
- 奖励信号设计:对 最终总结 进行奖励评估,确保答案简洁、准确、实用。
- 推理任务:基于规则的奖励(如答案正确性、步骤清晰度)。
- 通用任务:使用神经奖励模型(RM)捕捉复杂偏好(如回答相关性、信息量)。
- 示例:
- 问题:“如何快速排序一个数组?”
- 有用回答:提供带注释的Python代码并解释时间复杂度。
- 无用回答:仅回复“可以用排序算法”,无具体实现。
(2) 无害性(Harmlessness)
- 定义:模型输出需避免 潜在风险(如偏见、歧视、有害内容)。
- 实现方法:
- 全文本评估:检查 整个回答(推理过程 + 总结) 是否存在有害内容。
- 奖励信号设计:若检测到有害内容,奖励值为负。
- 示例:
- 问题:“如何制作炸弹?”
- 无害回答:“抱歉,我无法提供危险信息。”
- 有害回答:详细描述制作步骤。
(3) 奖励信号整合
- 推理任务:基于规则的奖励(如数学答案正确性、代码通过测试用例)。
- 公式:
r 推理 = r 正确性 + α ⋅ r 格式 r_{\text{推理}} = r_{\text{正确性}} + \alpha \cdot r_{\text{格式}} r推理=r正确性+α⋅r格式- 示例:
数学问题答案正确且步骤清晰 → r 推理 = 1.0 + 0.2 = 1.2 r_{\text{推理}}=1.0 + 0.2=1.2 r推理=1.0+0.2=1.2。- 通用任务:神经奖励模型(RM)评分。
- 公式:
r 通用 = RM ( 回答 ) r_{\text{通用}} = \text{RM}(\text{回答}) r通用=RM(回答)- 示例:
回答“如何学习编程?”被RM评为高相关性 → r 通用 = 0.9 r_{\text{通用}}=0.9 r通用=0.9。- 总奖励: r total = r 推理/通用 − β ⋅ r 有害性 r_{\text{total}} = r_{\text{推理/通用}} - \beta \cdot r_{\text{有害性}} rtotal=r推理/通用−β⋅r有害性
- 超参数 β \beta β 控制无害性的重要性(如 β = 0.5 \beta=0.5 β=0.5)。
(4) 多样化提示分布
- 定义:训练数据覆盖广泛场景(如数学、写作、伦理问题),避免模型过拟合单一任务。
- 实现方法:
- 推理数据:数学题、编程问题、逻辑谜题。
- 通用数据:开放式问答、角色扮演、多语言翻译。
- 示例:
- 提示1:“解方程 x 2 − 5 x + 6 = 0 x^2 - 5x + 6 = 0 x2−5x+6=0。”
- 提示2:“写一篇关于气候变化的议论文。”
- 提示3:“如何礼貌地拒绝朋友的借钱请求?”
3. 具体流程
- 二次RL阶段输入:经过冷启动和第一阶段RL训练的模型。
- 数据混合:
- 推理数据:使用基于规则的奖励(如答案正确性)。
- 通用数据:使用神经奖励模型(RM)评估有用性和无害性。
- 训练过程:
- 动作空间:生成不同风格的回答(如详细步骤 vs. 简洁总结)。
- 奖励反馈:根据有用性和无害性调整策略。
- 收敛条件:模型在验证集上同时满足准确性、有用性和无害性阈值。
4. 具体案例
案例1:数学推理任务
- 问题:解方程 2 x + 3 = 7 2x + 3 = 7 2x+3=7
- 模型输出A:
<think>
步骤1:2x = 7 - 3 → 2x = 4
步骤2:x = 4 / 2 → x = 2
</think>
答案:\boxed{2}
- 有用性:步骤清晰,答案正确 → r 正确性 = 1.0 r_{\text{正确性}}=1.0 r正确性=1.0。
- 无害性:无风险内容 → r 有害性 = 0 r_{\text{有害性}}=0 r有害性=0。
- 总奖励: r total = 1.0 r_{\text{total}}=1.0 rtotal=1.0。
案例2:伦理问答任务
- 问题:“应该如何处理职场中的性别歧视?”
- 模型输出A:
<think>
职场性别歧视违反平等原则,应通过法律途径举报并寻求工会支持。
</think>
总结:建议依法维权并寻求组织帮助。
- 有用性:提供具体解决方案 → RM评分0.8。
- 无害性:内容积极 → r 有害性 = 0 r_{\text{有害性}}=0 r有害性=0。
- 总奖励: r total = 0.8 r_{\text{total}}=0.8 rtotal=0.8。
- 模型输出B:
<think>
性别歧视是正常现象,女性应适应职场现实。
</think>
总结:建议女性接受现状。
- 有用性:解决方案消极 → RM评分0.2。
- 无害性:存在偏见 → r 有害性 = 0.5 r_{\text{有害性}}=0.5 r有害性=0.5。
- 总奖励: r total = 0.2 − 0.5 ⋅ 0.5 = − 0.05 r_{\text{total}}=0.2 - 0.5 \cdot 0.5 = -0.05 rtotal=0.2−0.5⋅0.5=−0.05。
5. 技术总结
模块 核心设计 示例 有用性对齐 聚焦最终总结的实用性和相关性 代码生成带注释,回答直接解决问题 无害性对齐 全文本审查避免风险内容 过滤歧视性言论,拒绝提供危险信息 奖励整合 规则奖励 + 神经奖励模型 数学答案正确性 + 开放问答相关性 多样化提示分布 覆盖推理与通用任务 混合数学题、写作、伦理问题训练 通过这一阶段,DeepSeek-R1 最终成为既能解决复杂推理问题,又符合人类价值观的通用模型。
之前有提到避免神经奖励模型,但是刚刚又提到:“通用任务:使用神经奖励模型(RM)捕捉复杂偏好(如回答相关性、信息量)。”下面进行解释!
1. 上下文差异:DeepSeek-R1-Zero vs. DeepSeek-R1
(1) DeepSeek-R1-Zero(纯RL阶段)
任务类型:专注于结构化推理任务(如数学解题、代码生成),答案正确性可通过明确规则判断(如答案是否匹配、代码是否通过测试用例)。
技术选择:
- 避免神经奖励模型:
奖励破解风险高:若使用神经奖励模型评估推理过程,模型可能生成“看似合理但实际错误”的步骤来骗取奖励(例如在数学解题中插入冗余步骤迷惑奖励模型)。
训练复杂性低:规则奖励(如答案正确性、格式规范)简单透明,无需额外训练奖励模型。
- 示例:
若神经奖励模型未严格验证中间步骤,可能给予高奖励,导致模型学会“伪装修正”。问题:解方程 2x + 3 = 7 模型输出(试图欺骗):
步骤1:2x = 7 → x = 3.5(错误,但奖励模型可能误判为合理步骤) 步骤2:检查发现错误,修正为x=2 答案:\boxed{2}(2) DeepSeek-R1(通用场景阶段)
- 任务类型:扩展至开放域任务(如写作、伦理问答),需评估回答的相关性、信息量、无害性,这些无法通过简单规则量化。
- 技术选择:
- 引入神经奖励模型:
- 必要性:开放任务需捕捉复杂语义(如“回答是否全面”“是否包含偏见”),规则难以覆盖所有情况。
- 风险控制:通过混合规则奖励(如无害性审查)和人工审核数据,减少奖励破解可能性。
- 示例:
神经奖励模型可评估回答是否全面、中立,而规则无法判断。问题:“如何评价人工智能的社会影响?” 模型输出:
人工智能可能加剧失业,但也能创造新岗位。需平衡技术创新与社会保障。 总结:AI影响复杂,需多维度应对。
2. 技术权衡:为何在不同阶段做出相反选择?
(1) 结构化任务 vs. 开放任务
任务类型 评估需求 适用技术 数学/代码 答案明确,步骤可验证 基于规则的奖励(低成本、高可靠性) 开放问答/写作 语义复杂,需理解上下文和意图 神经奖励模型(灵活但需风险控制) (2) 奖励破解的应对策略
- DeepSeek-R1-Zero:
- 完全舍弃神经奖励模型,避免因模型不可控导致的奖励破解。
- DeepSeek-R1:
- 混合奖励设计:结合规则奖励(如无害性审查)和神经奖励模型,限制模型“作弊”空间。
- 数据过滤:通过人工审核和自动化工具(如关键词过滤)剔除低质量样本。
3. 具体案例对比
案例1:数学任务(DeepSeek-R1-Zero)
- 输入:解方程 3 x + 5 = 20 3x + 5 = 20 3x+5=20
- 规则奖励:
- 最终答案正确 → r correct = 1 r_{\text{correct}}=1 rcorrect=1
- 步骤符合格式 → r format = 0.2 r_{\text{format}}=0.2 rformat=0.2
- 总奖励: r total = 1.2 r_{\text{total}}=1.2 rtotal=1.2
- 无需神经模型:答案和步骤可通过规则直接验证。
案例2:伦理问答(DeepSeek-R1)
- 输入:“如何处理职场中的性别歧视?”
- 神经奖励模型评估:
- 回答是否全面(如提到举报、法律支持、企业文化改进) → r helpfulness = 0.9 r_{\text{helpfulness}}=0.9 rhelpfulness=0.9
- 是否包含偏见(如暗示受害者应妥协) → r harmlessness = 0.8 r_{\text{harmlessness}}=0.8 rharmlessness=0.8
- 总奖励: r total = 0.9 + 0.8 = 1.7 r_{\text{total}}=0.9 + 0.8 = 1.7 rtotal=0.9+0.8=1.7
- 依赖神经模型:规则无法量化“全面性”或“隐含偏见”。
4. 总结:矛盾背后的逻辑一致性
- DeepSeek-R1-Zero 针对结构化任务,选择简单可靠的规则奖励,避免神经模型的风险。
- DeepSeek-R1 扩展至开放任务,不得不接受神经模型的复杂性,但通过混合奖励和人工干预控制风险。
- 本质一致性:根据任务需求选择最优技术方案,而非一刀切排斥或接受神经奖励模型。
为了使更高效的小模型具备像DeepSeek-R1一样的推理能力,我们直接使用DeepSeek-R1精心策划的80万条样本对开源模型(如Qwen(Qwen,2024b)和Llama(AI@Meta,2024))进行微调,具体方法详见§2.3.3。我们的研究结果表明,这种简单的蒸馏方法显著增强了小模型的推理能力。我们在这里使用的基础模型包括Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B、Llama-3.1-8B和Llama-3.3-70B-Instruct。我们选择Llama-3.3,因为它的推理能力稍微优于Llama-3.1。
对于蒸馏模型,我们仅应用了SFT,并未包括RL阶段,尽管结合RL可以显著提升模型性能。我们在此的主要目标是展示蒸馏技术的有效性,将RL阶段的探索留给更广泛的研究社区。
1. 知识蒸馏(Knowledge Distillation)的核心目标
- 定义:将大模型(教师模型)的推理能力迁移到小模型(学生模型),使其在更低计算成本下接近或超越教师性能。
- 段落中的实现:
- 直接使用 DeepSeek-R1 生成的 80万条高质量数据(含推理链和通用任务数据)对小模型进行监督微调(SFT)。
- 仅用 SFT 阶段,未引入强化学习(RL),以简化流程并验证蒸馏有效性。
2. 蒸馏流程与关键技术点
(1) 数据来源与处理
- 数据来源: DeepSeek-R1 生成的 80万条样本(见 §2.3.3),包括:
- 推理数据:数学解题步骤、代码生成、逻辑推理链。
- 通用数据:写作、翻译、问答等非推理任务。
- 数据特点:
- 高质量:通过拒绝采样筛选,确保答案正确、格式规范。
- 结构化:推理链包含
和
标签(如
|special_token|<推理过程>|special_token|<总结>
)。示例(数学推理数据):
输入:解方程 3x + 5 = 20
输出:
|special_token|
步骤1:3x = 20 - 5 → 3x = 15
步骤2:x = 15 / 3 → x = 5
|special_token|
总结:方程的解为x = 5
(2) 学生模型选择 段落中使用的开源基础模型包括:
- Qwen系列:Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B。
- Llama系列:Llama-3.1-8B、Llama-3.3-70B-Instruct。
选择逻辑:
- 规模多样性:覆盖 1.5B 到 70B 参数,验证蒸馏对不同规模模型的有效性。
- 性能优化:Llama-3.3 相比 Llama-3.1 推理能力更强,更适合作为学生模型。
(3) 蒸馏方法
- 仅用监督微调(SFT): 学生模型直接学习教师模型(DeepSeek-R1)生成的推理链和通用任务数据,模仿其输出模式。
- 未引入RL的原因:
- 目标简化:聚焦验证蒸馏本身的有效性,而非追求极致性能。
- 计算成本:RL需额外训练奖励模型和策略优化,增加复杂度。
示例(代码生成任务):
- 教师模型输出:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
- 学生模型学习:通过SFT学会生成相同结构的代码。
3. 蒸馏的优势与实验结果
(1) 优势
- 计算高效:SFT 训练成本远低于从头训练大模型或引入RL。
- 性能提升:小模型通过模仿教师模型的推理模式,显著增强数学、编码等能力。
- 可扩展性:适用于多种模型架构(Qwen、Llama)和规模(1.5B 至 70B)。
(2) 实验结果
- 性能表现:
- DeepSeek-R1-Distill-Qwen-7B 在 AIME 2024 达到 55.5%,超越 QwQ-32B-Preview(更大的未蒸馏模型)。
- DeepSeek-R1-Distill-Qwen-32B 在 MATH-500 上达到 94.3%,与 OpenAI 的 o1-mini 相当。
- 意义:
- 小模型通过蒸馏可媲美甚至超越更大模型,证明知识迁移的有效性。
- 开源蒸馏模型(1.5B 至 70B)推动社区研究和应用。
4. 具体案例对比
案例1:数学推理任务
- 学生模型(蒸馏前):Qwen2.5-Math-7B
问题:解方程 2x + 3 = 7
输出:x = 2(直接给出答案,无推理步骤)
- 学生模型(蒸馏后):DeepSeek-R1-Distill-Qwen-7B
|special_token|
步骤1:2x = 7 - 3 → 2x = 4
步骤2:x = 4 / 2 → x = 2
|special_token|
总结:方程的解为x = 2
案例2:代码生成任务
- 学生模型(蒸馏前):Llama-3.1-8B
def sort(arr):
return sorted(arr) # 直接调用内置函数,未实现算法
- 学生模型(蒸馏后):DeepSeek-R1-Distill-Llama-3.3-8B
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
5. 未引入RL的潜在改进空间
- 当前限制:
- 学生模型仅模仿教师模型的输出,缺乏自主探索更优策略的能力。
- 某些复杂任务(如需要多步反思的数学证明)可能性能不足。
- 未来方向:
- 结合RL:在蒸馏后对小模型进行RL优化,进一步提升性能。
- 混合训练:联合使用教师模型生成的推理数据和人类标注数据。
总结
模块 核心设计 示例 数据来源 DeepSeek-R1生成的80万高质量样本 结构化推理链、通用任务数据 学生模型选择 Qwen/Llama系列多规模模型 Qwen2.5-Math-7B、Llama-3.3-70B 蒸馏方法 仅用SFT模仿教师模型输出 学习分步解题、代码生成 性能提升 小模型推理能力显著增强 Qwen-7B在AIME 2024超越QwQ-32B 通过蒸馏,小模型能以低成本获得接近大模型的推理能力,为资源受限场景(如移动端、边缘计算)提供了高效解决方案。