Skip to main content

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 B Please put your final answer within \\boxed{}
  • Chat 模板:R1 风格前缀 + <think>\n 强制思考(仅 <think>…</think>,不要求 <answer> 标签)。
  • Reward 设计(常用版本)
    • Format:检查 <think>…</think>answer 结构,仅出现且顺序正确。
    • Correctness:从 answer 提取预测值,对比参考答案。
    • Language consistency:答案语言与提问一致。
    • 常用简化:格式与答案都对得 1 分,否则 0 分。
  • 主要训练参数
    • 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关键设置AIME24MATH500
DeepSeek-R1-Distill-Qwen-14B/53.394
Qwen2.5-14B-Base/3.335.2
exp3DeepScaleR · RLOO · kl=0.01 · n=8 · Instruct A · 1/0 奖励3.369.2
exp4DeepScaleR · REINFORCE · kl=0.01 · n=8 · Instruct A · 1/01070.6
exp6DeepScaleR · RLOO · kl=1e-4 · n=8 · Instruct A · 1/020 (+16.7)79.4
exp7DeepScaleR · RLOO · kl=0 · n=8 · Instruct A · 1/020 (+16.7)79.4
exp8DeepScaleR · REINFORCE · kl=0 · n=8 · Instruct A · 1/01073.2
exp9DeepScaleR · REINFORCE · kl=0 · n=1 · Instruct A · 1/03.367.8
exp11GSM8K+MATH · RLOO · kl=0 · n=8 · Instruct A · 1/06.679.2
exp12GSM8K+MATH · RLOO · kl=0 · n=8 · Instruct B · 1/013.378.8
exp13GSM8K+MATH · REINFORCE · kl=0 · n=8 · Instruct B · 1/03.371.4
exp14DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 1/01079.8 (+44.6)
exp15DeepScaleR · REINFORCE · kl=0 · n=8 · Instruct B · 1/06.675
exp16DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 格式对+答对=1,格式对答错=-11073
exp17DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 格式对+答对=1,格式对答错=-0.5,格式错=-11079.8 (+44.6)
exp21DeepScaleR · GRPO · kl=0 · n=8 · Instruct B · 1/06.678.8
exp22DeepScaleR · REINFORCE++ · kl=0 · n=8 · Instruct B · 1/06.680.4 (+45.2)
exp24DeepScaleR · GRPO · kl=0.001 · n=8 · Instruct B · 1/013.377
exp25DeepScaleR · REINFORCE++ · kl=0.001 · n=8 · Instruct B · 1/01080.4 (+45.2)

32B 系列

实验 ID关键设置AIME24MATH500
DeepSeek-R1-Distill-Qwen-32B/72.694.3
Qwen2.5-32B-Base/0.043.4
exp18DeepScaleR · RLOO · kl=0 · n=8 · Instruct B · 1/023.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 多阶段设计动机(每阶段重置基座、前序仅用于蒸馏)仍需进一步实验验证。