专栏名称: 计算机视觉工坊
专注于计算机视觉、VSLAM、目标检测、语义分割、自动驾驶、深度学习、AI芯片、产品落地等技术干货及前沿paper分享。这是一个由多个大厂算法研究人员和知名高校博士创立的平台,我们坚持工坊精神,做最有价值的事~
目录
相关文章推荐
51好读  ›  专栏  ›  计算机视觉工坊

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

计算机视觉工坊  · 公众号  ·  · 2025-02-15 00:00

正文

请到「今天看啥」查看全文


来源:深蓝AI

添加小助理:cv3d001,备注:方向+学校/公司+昵称,拉你入群。文末附3D视觉行业细分群。

扫描下方二维码,加入 「3D视觉从入门到精通」知识星球 ( 点开有惊喜 ) ,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料: 近20门秘制视频课程 最新顶会论文 、计算机视觉书籍 优质3D视觉算法源码 等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!


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

项目地址: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的效果。


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

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



■ 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  基座模型


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算法



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': ('', 1), 'think_end': ('', 1), 'answer_start': ('', 1), 'answer_end': ('', 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 ......") validation_passed = False else: print(" Tag sequence validation passed")
    return validation_passed

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

# Validate response structureformat_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%的输出存在格式问题。


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


■ 2.2.2  第二阶段


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


■ 2.2.3  第三阶段


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

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

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


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

译|

Famcous

审核|apr

本文仅做学术分享,如有侵权,请联系删文。

3D视觉交流群,成立啦!

目前我们已经建立了3D视觉方向多个社群,包括 2D计算机视觉 最前沿 工业3D视觉 SLAM 自动驾驶 三维重建 无人机 等方向,细分群包括:

工业3D视觉 :相机标定、立体匹配、三维点云、结构光、机械臂抓取、缺陷检测、6D位姿估计、相位偏折术、Halcon、摄影测量、阵列相机、光度立体视觉等。

SLAM :视觉SLAM、激光SLAM、语义SLAM、滤波算法、多传感器融合、多传感器标定、动态SLAM、MOT SLAM、NeRF SLAM、机器人导航等。

自动驾驶 :深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器、多传感器标定、多传感器融合、3D目标检测、路径规划、轨迹预测、3D点云分割、模型部署、车道线检测、Occupancy、目标跟踪等。

三维重建 :3DGS、NeRF、多视图几何、OpenMVS、MVSNet、colmap、纹理贴图等

无人机 :四旋翼建模、无人机飞控等

2D计算机视觉 :图像分类/分割、目标/检测、医学影像、GAN、OCR、2D缺陷检测、遥感测绘、超分辨率、人脸检测、行为识别、模型量化剪枝、迁移学习、人体姿态估计等

最前沿 :具身智能、大模型、Mamba、扩散模型、图像/视频生成等

除了这些,还有 求职 硬件选型 视觉产品落地、产品、行业新闻 等交流群

添加小助理: cv3d001,备注: 研究方向+学校/公司+昵称 (如 3D点云+清华+小草莓 ), 拉你入群。

▲长按扫码添加助理:cv3d001

3D视觉工坊知识星球

「3D视觉从入门到精通」知识星球 ( 点开有惊喜 ) ,已沉淀6年,星球内资料包括: 秘制视频课程近20门 (包括 结构光三维重建、相机标定、SLAM、深度估计、3D目标检测、3DGS顶会带读课程、三维点云 等)、 项目对接 3D视觉学习路线总结 最新顶会论文&代码 3D视觉行业最新模组 3D视觉优质源码汇总 书籍推荐 编程基础&学习工具 实战项目&作业 求职招聘&面经&面试题 等等。欢迎加入3D视觉从入门到精通知识星球,一起学习进步。

▲长按扫码加入星球
3D视觉工坊官网: www.3dcver.com

大模型、扩散模型、具身智能、3DGS、NeRF 结构光、相位偏折术、机械臂抓取、点云实战、Open3D、缺陷检测 BEV感知、Occupancy、Transformer、模型部署、3D目标检测、深度估计、多传感器标定、规划与控制 无人机仿真 C++、三维视觉python、dToF、相机标定、ROS2 机器人控制规划、LeGo-LAOM、多模态融合SLAM、LOAM-SLAM、室内室外SLAM、VINS-Fusion、ORB-SLAM3、MVSNet三维重建、colmap 、线面结构光、硬件结构光扫描仪等。

长按扫码学习3D视觉精品课程

3D视觉模组选型:www.3dcver.com

点这里 👇 关注我,记得标星哦~

一键三连「分享」、「点赞」和「在看」

3D视觉科技前沿进展日日相见 ~







请到「今天看啥」查看全文


推荐文章
caoz的梦呓  ·  跨界的魅力
8 年前
HEBEFLORA  ·  夏季收花养护 Tips
7 年前