Deepseek-R1-Zero复现实验整理
原理简介
- 模仿 DeepSeek-R1-Zero:对话格式为
User: {question},Assistant: <think>…</think> answer,通过训练促使模型先在<think>中推理再给出答案。 - 主要监督信号:格式正确性、答案正确性、语言一致性(与提问语言一致,避免混杂)。
实验设置
- 基座模型:Qwen2.5-14B-Base;Qwen2.5-32B-Base。
- 训练数据
- DeepScaleR(AIME、AMC、Omni-MATH、Still,约 4 万条,难度高)。
- GSM8K + MATH 混合(约 1.5 万条,较简单)。
- 在用户问题末尾添加格式指令:Instruct A
Please reason step by step, and put your final answer within \\boxed{};Instruct BPlease put your final answer within \\boxed{}。
- Chat 模板:R1 风格前缀 +
<think>\n强制思考(仅<think>…</think>,不要求<answer>标签)。 - Reward 设计(常用版本)
- Format:检查
<think>…</think>answer结构,仅出现且顺序正确。 - Correctness:从 answer 提取预测值,对比参考答案。
- Language consistency:答案语言与提问一致。
- 常用简化:格式与答案都对得 1 分,否则 0 分。
- Format:检查
- 主要训练参数
- 14B:16×8 卡(8 Actor,4 Ref,4 vLLM);32B:24×8 卡(8 Actor,8 Ref,8 vLLM)。
- train_batch_size=256,micro_train_batch_size=1;rollout_batch_size=256,micro_rollout_batch_size=1。
- generate_max_len=16384。
- loss_type∈{RLOO, REINFORCE, GRPO, REINFORCE++}。
- init_kl_coef∈{0.01, 0.0001, 0.0}。
- n_samples_per_prompt∈{1, 8};max_epochs=1;num_episodes=2。
- weight_decay=0.1;actor_lr=5e-7;critic_lr=9e-6。
测评结果(OpenR1)
14B 系列
| 实验 ID | 关键设置 | AIME24 | MATH500 |
|---|---|---|---|
| DeepSeek-R1-Distill-Qwen-14B | / | 53.3 | 94 |
| Qwen2.5-14B-Base | / | 3.3 | 35.2 |
| exp3 | DeepScaleR · RLOO · kl=0.01 · n=8 · Instruct A · 1/0 奖励 | 3.3 | 69.2 |
| exp4 | DeepScaleR · REINFORCE · kl=0.01 · n=8 · Instruct A · 1/0 | 10 | 70.6 |
| exp6 | DeepScaleR · RLOO · kl=1e-4 · n=8 · Instruct A · 1/0 | 20 (+16.7) | 79.4 |
| exp7 | DeepScaleR · RLOO · kl=0 · n=8 · Instruct A · 1/0 | 20 (+16.7) | 79.4 |
| exp8 | DeepScaleR · REINFORCE · kl=0 · n=8 · Instruct A · 1/0 | 10 | 73.2 |
| exp9 | DeepScaleR · REINFORCE · kl=0 · n=1 · Instruct A · 1/0 | 3.3 | 67.8 |
| exp11 | GSM8K+MATH · RLOO · kl=0 · n=8 · Instruct A · 1/0 | 6.6 | 79.2 |
| exp12 | GSM8K+MATH · RLOO · kl=0 · n=8 · Instruct B · 1/0 | 13.3 | 78.8 |
| exp13 | GSM8K+MATH · REINFORCE · kl=0 · n=8 · Instruct B · 1/0 | 3.3 | 71.4 |
| exp14 | DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 1/0 | 10 | 79.8 (+44.6) |
| exp15 | DeepScaleR · REINFORCE · kl=0 · n=8 · Instruct B · 1/0 | 6.6 | 75 |
| exp16 | DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 格式对+答对=1,格式对答错=-1 | 10 | 73 |
| exp17 | DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 格式对+答对=1,格式对答错=-0.5,格式错=-1 | 10 | 79.8 (+44.6) |
| exp21 | DeepScaleR · GRPO · kl=0 · n=8 · Instruct B · 1/0 | 6.6 | 78.8 |
| exp22 | DeepScaleR · REINFORCE++ · kl=0 · n=8 · Instruct B · 1/0 | 6.6 | 80.4 (+45.2) |
| exp24 | DeepScaleR · GRPO · kl=0.001 · n=8 · Instruct B · 1/0 | 13.3 | 77 |
| exp25 | DeepScaleR · REINFORCE++ · kl=0.001 · n=8 · Instruct B · 1/0 | 10 | 80.4 (+45.2) |
32B 系列
| 实验 ID | 关键设置 | AIME24 | MATH500 |
|---|---|---|---|
| DeepSeek-R1-Distill-Qwen-32B | / | 72.6 | 94.3 |
| Qwen2.5-32B-Base | / | 0.0 | 43.4 |
| exp18 | DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 1/0 | 23.3 (+23.3) | 83.6 (+40.2) |
重点分析
- Aha moment:通过检测
<think>中的关键词(如“wait”)发现自发反思行为。早期步骤即可出现,说明基座已具备拟人化反思;但反思并不保证正确。强制<think>仅出现一次可能压制自然多轮思考。 - KL 系数(exp3/6/7):较大 KL (0.01) 限制了思维链延长,reward 和长度不同时增长;较小或 0 的 KL 提升 Benchmark。推测前期不需要 KL 约束,后期再拉回以防过拟合。
- 数据集难度(exp7 vs exp11):简单题(GSM8K+MATH)不会出现长度与 reward 同增;难题显著提升困难 Benchmark 分数。RL 数据难度建模和课程学习是潜在方向。
- 采样数 n_samples_per_prompt(exp8 vs exp9):n=8 明显优于 n=1,且更易观察到长度与 reward 同步上升;采样越多,advantage 估计更准,体现 RL scaling law。可探索难度自适应采样、高温或熵正则以提升探索效率。
- Chat 模板(exp7 vs exp14):仅去掉 “think step by step” 指令,性能变化不大;模型仍自发思考,提示可能影响探索效率但限制探索范围。可尝试更简或更富原则的模板。
- Reward 设计(exp14/16/17):奖励形态强烈影响长度;但数学题上,只要“答对得 1 分”效果相近。可建模为带约束 RL:先高权重格式约束,再提升正确性权重。
- 模型大小(exp14 vs exp18):32B 训练/测试精度更高;14B 输出更长思维链,可能因为基座弱需更长推理。
- 算法对比(RLOO/REINFORCE/GRPO/REINFORCE++):Reward 曲线相近,REINFORCE 略低;最终效果 REINFORCE++≈RLOO > GRPO > REINFORCE。REINFORCE++ 在相似 KL 增长下效果更好,policy loss 更平稳。
思考与开放问题
- 思维链长度增长类似 test-time scaling:允许更多推理时间即可提升精度。
- 影响思维链涌现的因素:题目难度、训练步数、奖励形态(惩罚答错可促使多想一步)。
- 高效的思维链数据格式、R1 多阶段设计动机(每阶段重置基座、前序仅用于蒸馏)仍需进一步实验验证。