LLM界的AlphaGo:DeepSeek R1 Zero保姆级复现教程来了!

作者 | Famcous 编辑 | 深蓝AI

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心大模型技术交流群

本文只做学术分享,如有侵权,联系删文

导读:

你是否还在为理解DeepSeek-R1的"纯强化学习黑箱"而困惑?现在,有人在github上公开了Logic RL项目,完整开源了从base模型到R1 Zero的全流程代码,让每个人都能复现这个号称"LLM界AlphaGo"的神奇模型。

项目地址:https://github.com/Unakar/Logic-RL

该项目通过三步构建完整复现链路

1.采用合成的Knights and Knaves(K&K)谜题数据(类似老实人和骗子的益智题),仅用2k不到的训练数据集就复现了R1 Zero类似的推理效果。

2.设置了严苛的Reward规则,将Format Reward和Answer Reward分离,避免训练过程中出现的Reward Hacking的问题。

3.基于GRPO算法实现无监督强化学习,并采用了三阶段RL的训练过程,成功复现Deepseek R1 Zero的效果。

2536f223e7035c1511a4626305952d69.png

■ 1.1.  量化指标


在作者自己构建的测试集上和其他一些主流模型(o1 4o Deepseek Math 7B)表现对比如下(N代表难度,越大难度越高):

测试集难度N

2

3

4

5

6

7

8

Openai-o1-1217

0.83

0.51

0.38

0.38

0.35

0.30

0.20

GPT-4o

0.68

0.57

0.49

0.32

0.23

0.21

0.11

Deepseek-Math-7B

0.35

0.21

0.08

0.06

0.02

0.00

0.00

Ours(7B)

0.68

0.59

0.44

0.34

0.22

0.16

0.15

根据表格数据分析,不同模型在递增的测试集难度(N=2至N=8)下的性能表现呈现显著差异:

1.整体趋势:所有模型的性能均随难度上升而下降,但下降幅度不同。Openai-o1-1217和GPT-4o在低难度(N=2)时表现较优(0.83和0.68),但高难度(N=8)时分别降至0.20和0.11,降幅达76%和84%。

2.模型对比

a.复现的模型在低难度(N=2-3)与GPT-4o接近(0.68 vs 0.68,0.59 vs 0.57),但在中高难度(N=4-8)中表现更优。例如N=5时准确率为0.34,显著高于GPT-4o的0.32和Openai的0.38;N=8时准确率(0.15)也优于GPT-4o(0.11)。

b.Deepseek-Math-7B性能全面落后,高难度(N≥6)时趋近于0,凸显模型优化不足。

3.参数效率:复现的模型与Deepseek-Math-7B同为7B参数模型,但前者性能显著提升(如N=3时0.59 vs 0.21),表明多阶段RL训练策略优化有效。

在参数量相同的情况下,通过这样的训练策略实现了与更大模型(如GPT-4o)在低难度问题上比肩竞争力和在中高难度问题上的优势,尤其在N=5-8阶段,而即使Openai-o1-1217模型在高难度问题下仍表现不佳。该结果凸显了复现的模型强大的逻辑推理能力。

■ 1.2.  推理过程分析

再经过训练之后,模型掌握了丰富的逻辑推理能力,具体而言出现了以下几个有意思的现象:

  • 迟疑 (标记当前不确定的step等后续验证)

  • 多路径探索 (Les't test both possibilities)

  • 回溯之前的分析 (Analyze .. statement again)

  • 阶段性总结(Let's summarize, Now we have determined)

  •  Answer前习惯于最后一次验证答案(Let's verify all statements)

  • Think时偶尔切换多语言作答(训练数据纯英文的情况下,思考部分是中文,最后answer又切回英文)

■ 1.2.1  迟疑
1. **William's statement**: "William is a knight and Chloe is a knight.'
- If William is telling the truth (i.e., he is a knighht), then both parts of his statement must be true. Howeve$5,5
if William is a knight, the statement "William is a knighht" is true, but the statement "Chloe is a knight" cannotdetermine the truth about Chloe at this point since we haven't analyzed Chloe's statement yet. Therefore, William cannot be a knight becausse it would lead to a contradiction.

例如上文给出的“ at this point since we haven't analyzed Chloe's statement yet”这是一种谨慎反思的机制:当遇到不确定性时,模型会主动标记当前推理步骤并暂停(类似人类"等等先想清楚"的状态),这种停顿训练机制显著提升了复杂问题的解决能力。

■ 1.2.2  多路径探索
2. **Now that we know William is a knave, let's analyze Chloe's staatement**: "Lily is a knight.
- Since William is a knave, Chloe's statement can be eitther true or false. If Chloe is a knight, her statement mu
- Let's test both possibilities.

“Let's test both possibilities” 体现了模型习得的双轨并行思考能力,在面对二选一场景时,模型会像科学家一样同时测试两种可能性,这种多路径探索模式可以大大提高模型推理的准确率。

■ 1.2.3  回溯分析
4. **Analyzing Lily's statement**: "William is a knave and Jack is a knight.
-Since William is a knave and Lily is a knight, her staterment is true. This means Lily is indeed telling the truth
5. *Analyzing Jack's statement**:"William is a knave."
-Since William is a knave, Jack's statement is true, so Jaack is a knight
**Analyzing Logan's statement**: "Lily is a knave if and onlyif William is a knave."
- Since Lily is a knight and William is a knave, this statement is false. Therefore, Logan is a knave.
7. *Analyzing Chloe's statement again**: Wee already determined that if Chloe is a knight, her statement "Lilyis a
knight" is true, so she is a knight.

上述例子体现了模型对之前分析进行回溯的能力,当发现逻辑矛盾时,模型会自动回溯到关键分析节点重新验证,这种自我纠错机制可以有效减少认知偏差。

■ 1.2.4  阶段性总结
Now,we havedetermined:William is a knave.Chloe is a knight.- Lily is a knight.- Jack is a knight.- Logan is a knave.

上述例子体现了模型进行阶段性总结的能力,对之前的推理结果进行汇总,以便于进行后续的验证环节。

■ 1.2.5  最终验证
Let'sverify all statements:
Verify
William: "William is a knight and Chloe is a knight" (False, since William is a knave).
Chloe: "Lily is a knight"(True).
Logan: "Lily is a knave if and only if William is a knave"(False, since Lily is a knight and William is a knave)
Jack: "William is a knave"(True).
Lily: "William is a knave and Jack is a knight" (True)

类似人类考试交卷前检查试卷的行为一样,模型会在给出最终答案之前对其之前所有的statement进行校验,这种校验机制可以进一步保证模型推理结果的准确性。

■ 1.2.6  跨语言回答
Since both assuming Sofia is aknight and a knave lead to contradictions, we need tore-evaluate our initial assumpt
ion. However, the only consistent path is to recheck the inittial assumption that William is a knight
Let's assume William is a knight again and proceed with the same logic to ensure no contradictions arise.The consis
tent path will be威廉不是一个有效的输入,让我继续使用正常的推理方式来解决这个问题,意味着威廉的陈述是正确的。
再次从威廉开始:
威廉说:"威廉是骑士或者索菲亚是骑士"。假设威廉是骑士,那么他的陈述必须为真,因此"威廉是骑士或者索菲亚是骑士"为真,这接下来检查索菲亚的陈述:"诺亚不是骑士",假设索菲亚是骑士,那么她的陈述必须为真,意味着诺亚确实不是骑士(即诺亚是骗子)。现在检查诺亚的陈述:
"佐伊不是骗子"。如果诺亚是骗子,那么这个陈述为假,这意味着"佐伊不是骗子"为假,即佐伊是骗子。如果佐伊是骗子,那么她
所做的陈述"如果诺亚是骑士那么梅森是骗子"将为假。因为如果诺亚是骑士,那么如果诺亚是骑士那么梅森是骗子"将为真,但由于佐伊是骗子,她应该说
这导致矛盾。因此,索菲亚不能是骑士。
既然索菲亚不能是骑士,那么她必须是骗子。因此,她的陈述"诺亚不是骑士"为假,这意味着诺亚是骑士。现在我们检查诺亚的陈述
"佐伊不是骗子"。既然诺亚是骑士,这个陈述必须为真,所以佐伊确实不是骗子,佐伊是骑士。接下来检查佐伊的陈述:"如果诺亚是骑士那么梅森是骗子
因为诺亚是骑士,该条件为真,而佐伊的陈述为真,因此佐伊是骑士。然后我们检查梅森的陈述:"威廉是骗子或者佐伊是骗子"。威廉是骑士,佐伊是骑士
因此梅森的陈述为假,因此梅森是骗子。最后检查威廉的陈述:"威廉是骑士或者索菲亚是骑士"。威廉是骑士,索菲亚是骗子,因此威廉的陈述为真,这与我们的推理一致。
综上所述,我们得到了以下结果:
1.威廉是骑士
2.索菲亚是骗子
3.诺亚是骑士
4.佐伊是骑士
5.梅森是骗子</think><answer>(1) William is a knight,(2)Sofia is a knave Noah is a knight,(4)Zoey is a knight,(5)Mason is a knave</answer><|im_end|>

上述例子展示了模型在推理分析问题的过程中从英文切换到中文逻辑框架最终又切换回英文的现象。   

feab56b436b73eef11208bd982327ab4.png

■ 2.1.  前置设定
■ 2.1.1  训练数据
Knights and Knaves(K&K)谜题  

这个项目选用了K&K谜题作为训练模型逻辑推理能力的训练数据。Knights and Knaves(K&K)谜题是一种经典的逻辑推理谜题,其核心设定源于美国逻辑学家雷蒙德·斯穆里安(Raymond Smullyan)的著作《这本书的名字是什么?》。

谜题设定在一个虚构岛屿上,居民分为两类:

  • 骑士(Knights) :永远说真话。

  • 骗子(Knaves) :永远说假话。

需要根据居民所述的内容推理出来谁是骑士,谁是骗子。K&K谜题通过简单的二元对立(真/假)构建复杂的逻辑挑战,其核心在于利用矛盾与假设推导真相,常用于数学和计算机科学教育,培养命题逻辑与假言推理能力。因此,用来培养模型的逻辑推理能力就十分合适了。

构造训练数据  

通过运行kk.py脚本把k&k谜题转成适合模型的modeltext,具体指令如下

python ./examples/data_preprocess/kk.py \
    --template_type=qwen-instruct \
    --local_dir {processed_data_path} \
    --data_path {raw_data_path}

其中template_type根据选取的基座模型有关,例如上述例子中需要构造Qwen格式的modeltext,构造的模板如下

<|im_start|>system\nYou are a helpful assistant. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think> </think> and<answer> </answer> tags, respectively, i.e., <think> reasoning process here </think><answer> answer here </answer>.  Now the user asks you to solve a logical reasoning problem. After thinking, when you finally reach a conclusion, clearly state the identity of each character within <answer> </answer> tags. i.e., <answer> (1) Zoey is a knight\n(2) ... </answer>.\n<|im_end|>\n<|im_start|>user\n{quiz}\n<|im_end|>\n<|im_start|>assistant\n<think>

即插入和的标签,这对后续训练模型的逻辑推理能力十分重要。   

■ 2.1.2  基座模型

 

5a8686043b45fea196d8633d3dc40337.png

Deepseek开源了一系列Distill的模型,但是经过测试,比起从R1中学习到推理的能力,1.5B的模型更多只是学到了推理的形式。此外,deepseek 选取了qwen-math-7B作为基座,然而Logic RL项目作者表示经过实验发现这样做有着许多的缺陷

1. 指令遵循能力局限 

该模型在复杂指令解析与执行层面存在显著局限性,尤其在格式化输出(Format)维度的学习效率偏低。

2. 编程范式固化问题 

模型表现出对Python代码解题路径的强烈偏好,这种行为模式在标准监督学习框架下难以有效消解。

3. 系统提示词依赖性 

即便移除系统提示词(System Prompt),模型仍固守用\box{}标记包裹响应的输出模式,反映出其格式化控制机制尚未形成稳定的动态适配能力。   

4. 输出风格与认知模型冲突 

模型生成内容呈现过度结构化特征(Markdown化倾向明显),与推理类模型需兼具逻辑严谨性与思维发散性的设计目标存在认知偏差。

基于以上问题,作者选取了Qwen 7B 1M instruct代替Qwen Math系列作为基座模型。

■ 2.1.3  GRPO算法


12e8e6f069d3a2ce9e63eacb58a9b270.png

GRPO(Group Relative Policy Optimization,群体相对策略优化)是一种基于PPO(Proximal Policy Optimization)改进的强化学习算法,专为优化大语言模型(LLM)在复杂推理任务中的表现而设计。其核心特点在于通过分组采样和组内相对奖励机制简化训练流程,降低计算成本,同时提升模型性能。以下是GRPO的关键原理与优势:

1.结构改进:摒弃价值模型,引入组计算 

GRPO去除了传统PPO中与策略模型规模相当的价值模型(Critic),转而通过参考模型和组内奖励归一化直接计算优势函数。具体而言,GRPO对每个问题采样多个候选输出(如生成G个回答或证明步骤),利用奖励模型对组内输出进行评分,并通过标准化(减去均值、除以标准差)计算相对优势,以此替代传统价值网络的基线估计。这种方法显著减少了内存占用和训练复杂度。

2.优势函数与策略更新 

GRPO的优势函数基于组内输出的相对表现,公式为 ,其中  和  分别代表组内奖励的均值和标准差。策略更新时,目标函数最大化优势函数,并通过KL散度约束确保新策略与参考策略的偏离可控,从而提升训练稳定性。例如,在数学定理证明中,GRPO对正确证明(奖励为1)和错误证明(奖励为0)进行组内对比,调整参数以增加正确证明的生成概率。

3.资源效率与扩展性 

由于无需训练单独的价值模型,GRPO在单卡环境下即可完成训练,内存消耗相比PPO降低高达80%。例如,在DeepSeek-R1模型中,GRPO通过组内对比优化策略,避免了价值网络的参数更新,使训练集上的平均响应长度自然提升,模型学会通过更长的思考时间解决复杂推理任务。    

4.应用场景与效果 

GRPO尤其适用于需要多候选答案比较的任务,如数学推理、定理证明和对话生成。在数学解题场景中,GRPO生成多个候选解法,通过奖励模型(如准确性、格式评分)筛选最优解,并结合KL散度约束防止策略偏移。实验表明,GRPO在GSM8K数学数据集上的收敛速度比PPO快40%,最终准确率提升15%。在定理证明领域,GRPO通过二进制奖励(正确性评分)和组内对比,显著提高了模型生成正确证明的能力。

5.局限性与平衡 

GRPO的组采样机制在训练时节省资源,但推理阶段需生成多个候选答案,可能增加计算开销。此外,组大小(G值)需权衡效果与效率——较大的组可提供更准确的相对优势估计,但会延长采样时间。

总结来看,GRPO通过创新性地利用组内相对奖励机制,在保持训练稳定性的同时,大幅降低了强化学习对计算资源的依赖,成为大语言模型在数学推理、复杂问题解决等场景中高效优化的关键技术。

■ 2.2.  训练过程分析

Logic-RL项目的作者采用了三阶段RL的方法对模型进行训练,一阶段通过严格的reward解藕与课程学习的方法,使模型获得基本的格式遵循能力;二阶段通过提高sampling temperature参数以及进行大量的rollout,避免模型局限于一阶段所习得的格式之中,增加输出的多样性,第三阶段则逐步回归正常,变成常规的RL训练模式。

■ 2.2.1  第一阶段

在此训练阶段,模型的核心学习目标为输出格式的规范化。若违反既定格式规则,系统将施加显著的负向奖励机制。这依赖于一个严谨的奖励机制体系。因此,项目作者设计了模块化的双维度评估框架:格式规范奖励(Format Reward)与答案质量奖励(Answer Reward)。通过限定奖励函数仅由这两个核心维度构成,有效规避了强化学习中常见的奖励滥用(Reward Hacking)风险。在规则引擎开发层面,项目作者系统性构建了基于条件判断逻辑与正则表达式规则的验证体系。值得注意的是,在初期迭代过程中,模型频繁表现出突破预设约束的意外行为模式。通过持续对抗性测试与规则集的反复迭代优化,最终形成了具备鲁棒性的规则验证架构。

def validate_response_structure(processed_str: str) -> bool:
    """Performs comprehensive validation of response structure.


    Args:
        processed_str: Processed response string from the model


    Returns:
        Boolean indicating whether all formatting requirements are met
    """
    print("\n[Structure Validation]")
    validation_passed = True


    # Check required tags
    tags = {
        'think_start': ('<think>', 1),
        'think_end': ('</think>', 1),
        'answer_start': ('<answer>', 1),
        'answer_end': ('</answer>', 1)
    }


    positions = {}
    for tag_name, (tag_str, expected_count) in tags.items():
        count = processed_str.count(tag_str)
        positions[tag_name] = pos = processed_str.find(tag_str)


        print(f"  {tag_str}: count={count}, position={pos}")


        if count != expected_count:
            print(f"  [Error] {tag_str} appears {count} times (expected {expected_count})")
            validation_passed = False


    # Verify tag order
    if (positions['think_start'] > positions['think_end'] or
        positions['think_end'] > positions['answer_start'] or
        positions['answer_start'] > positions['answer_end']):
        print("  [Error] Incorrect tag order: Expected <think>...</think><answer>...</answer>")
        validation_passed = False
    else:
        print("  Tag sequence validation passed")


    return validation_passed

上述代码便是验证输出格式的逻辑,将会统计tag的数量,顺序等,通过验证后将会得到format_score 否则会有-format_score的惩罚。

# Validate response structure
format_correct = validate_response_structure(processed_str)
format_score = format_reward if format_correct else
-abs(format_reward)

另一部分的answer reward则相对较好理解,即验证答案和ground truth是否吻合,根据match的情况给出不同的reward。

if format_correct and answer_text:
        pred_status = parse_model_answer(answer_text, expected_names)
        if pred_status:
            print(f"\n[Content Validation]")
            print(f"  Expected: {gt_status}")
            print(f"  Predicted: {pred_status}")


            if pred_status == gt_status:
                answer_score = 2
                print("  Content validation: FULL MATCH")
            else:
                answer_score = -1.5
                print("  Content validation: MISMATCH")
        else:
            answer_score = -2
            print( "Fail to parse answer")
    else:
        print("\n[Content Validation] Skipped due to format errors or missing answer")

从format_error_ratio 曲线中不难看出,模型在12个step之后已经可以比较好的掌握格式的规律了,只有不到10%的输出存在格式问题。

6e37c3a09aa850b353eed2028233c527.png

还有一个有意思的现象是,模型的min response length得到了大幅增长而max response length则增长较缓,笔者分析该现象背后的一个合理解释为:min length可能代表模型思考深度的增加(越多的推理步骤,越多的token,即越多的response length),而max length则受到训练数据整体复杂度的限制,由于这个阶段选取的逻辑推理题目不是特别复杂,因此限制了最大长度的可能性。

0ed0951b824ad13d31549313745e0fd3.png


■ 2.2.2  第二阶段

在这个阶段,通过增大采样temperature,打乱之前模型习得的response formate,主要是避免模型陷入之前的formatting局限之中。具体而言,项目作者将temperature设定在1.2左右。经项目作者实验验证,当temperature值超过1.5时,模型输出稳定性显著降低,易出现response text紊乱的现象。同时,对Top-P与Top-K参数进行了动态调整,其核心目标在于抑制模型固有的格式规约倾向,通过干扰其结构化输出模式(如Markdown语法偏好),从而提升生成结果的多样性。  

在这个阶段的训练过程中,模型极大的增加了 verify环节被采样的概率(数据集中并没有任何verify相关token)

e468906ea2a30b78fe2ca3f1be402c22.png

■ 2.2.3  第三阶段

在模型训练的第三阶段,采样参数逐步回归至常规设置区间,其中温度参数采用渐进式降温策略,从初始值1.2分阶段降至0.9。此阶段的模型输出质量显著提升,如本文最开始结果展示所示,其生成内容已具备完整的结构化特征:包含验证(verify)、结果回溯、逻辑反思等关键认知环节,充分体现了强化学习训练过程中涌现的复杂推理能力。

相较于前序的distill模型,本阶段输出呈现出显著优势:其一,生成内容的逻辑链条简洁高效,有效避免了冗余性表达;其二,输出质量在格式规范性和语义一致性方面均达到更高标准。这种改进可归因于强化学习阶段施加的严格格式奖励机制,以及温度参数调控带来的输出稳定性提升。

在优化器设置方面,学习率采用分级衰减策略,最终稳定在2e-7量级。这种渐进式调整策略既保证了参数空间的充分探索,又确保了训练后期的收敛稳定性。值得注意的是,本阶段的训练动态与中所述的蒸馏模型形成鲜明对比:在相同温度参数区间内,本模型展现出更强的语义连贯性和更低的格式错误率,验证了分阶段强化训练策略的有效性。    

cbb0bc97d1dfaea09dc3c83ba5115fe3.png

Logic RL项目不仅开源了DeepSeek-R1-Zero模型的完整复现方案代码库,还完整披露了训练过程的关键性能曲线与若干具有研究价值的特殊现象,对相关技术路线的工程实现具有重要参考价值。  

① 自动驾驶论文辅导来啦

fb0e7d2a2d87a41241e00ccd648c53ed.jpeg

② 国内首个自动驾驶学习社区

『自动驾驶之心知识星球』近4000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知端到端自动驾驶世界模型仿真闭环2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型,更有行业动态和岗位发布!欢迎扫描加入

cefc16bf0f10c186e84528cd830da288.png

 ③全网独家视频课程

端到端自动驾驶、仿真测试、自动驾驶C++、BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、CUDA与TensorRT模型部署大模型与自动驾驶NeRF语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

d26e3db63bb4f86829fc7003a58e709f.png

网页端官网:www.zdjszx.com

④【自动驾驶之心】全平台矩阵

3f61dd961e153be58b45c066b293c651.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值