Zero RL:当 AI 学会“顿悟“——零强化学习的狂欢与阵痛

发布日期:2026-07-27

阅读时间:约 15-18 分钟

分类:技术杂谈

专栏:未归档

关键词:强化学习 Zero RL DeepSeek GRPO 大模型训练 推理模型


一、那个让全场沉默的"Aha Moment"

2025 年 1 月,DeepSeek 的团队在 R1-Zero 的训练过程中,观察到了一个被后人称为 "Aha Moment" 的现象:模型在没有任何人类"反思"示范的情况下,自发学会了在推理链路里"自我反思"。论文原文给出的模型输出片段里,出现了类似这样的句子:

"Wait, let me re-check this step..."(等等,让我重新检查一下这一步......)

它学会了自我反思。

没有人类教它这样做。没有任何监督数据里写过"你应该在这里反思一下"。这是模型在纯强化学习的奖励信号下,自己"顿悟"出来的策略。DeepSeek 团队把这个现象称为 "Aha Moment"------强化学习版的"尤里卡时刻"。

这一刻,Zero RL(零强化学习)正式从学术概念变成了行业热词。


二、Zero RL 到底是什么?

2.1 传统路线:SFT 是"拐杖"

在 Zero RL 之前,训练一个推理模型(如 OpenAI 的 o1)的标准流程是这样的:

复制代码
基础模型 → 监督微调(SFT)→ 强化学习(RL)→ 最终模型
     ↑_________________________________________|
                    (SFT 数据从哪里来?人类标注!)

SFT(Supervised Fine-Tuning) 就像给模型一根拐杖------人类先写出高质量的解题过程,模型跟着学。问题是:

  • 成本高:写一道数学题的长思维链(Long CoT),熟练标注员要 30 分钟,成本几十美元。
  • 天花板低:模型再聪明,也超不过人类标注者的水平。
  • 偏见固化:人类觉得"应该这样思考",模型就被限制在这条路径上。

2.2 Zero RL:扔掉拐杖,自己走

Zero RL 的思路简单粗暴到令人发指:

直接把强化学习喂给基础模型,没有 SFT,没有冷启动,没有人类标注的思维链。

复制代码
基础模型 → 强化学习(RL)→ 最终模型
     ↑_________________________|
         (奖励信号来自规则验证器,不是人类)

模型自己生成答案,一个规则验证器(比如数学题的答案检查器、代码的单元测试)告诉它对还是错。对了就奖励,错了就惩罚。模型在无数次试错中,自己摸索出"怎么思考才能做对"。

这就像一个小孩学骑自行车------没有教练扶着,摔了无数次,突然有一天就找到了平衡感。


三、SFT + RL vs Zero RL:一场路线之争

维度 SFT + RL Zero RL
训练流程 先 SFT 冷启动,再 RL 优化 直接在 Base 模型上 RL
数据依赖 需要大量标注数据(数万~数十万条) 仅需规则验证器(零标注)
推理能力上限 受限于人类标注质量 可能突破人类标注数据天花板
训练稳定性 较稳定(SFT 打底,不会跑偏) 初期极不稳定,像过山车
输出可读性 较好(SFT 数据格式规范) 初期可读性差,语言混用
成本 高(标注 + 训练) 低(仅需 RL 训练)
代表模型 OpenAI o1、DeepSeek-R1 DeepSeek-R1-Zero

下图对比了两条路线的训练动态(示意图,非真实数据):

左(SFT + RL):平稳上升,很快触及由人类标注质量决定的天花板------就像有教练扶着骑车,安全但学不会特技。右(Zero RL):初期在谷底剧烈震荡(梯度爆炸、语言混用),约在"顿悟"节点后推理准确率快速拉升,最终超越 SFT + RL 的天花板------就像小孩自己摔出来的平衡感,更扎实,上限更高。


四、GRPO:Zero RL 的"发动机"

Zero RL 能跑起来,核心靠的是 GRPO(Group Relative Policy Optimization,组相对策略优化) 算法------由 DeepSeek 在 2024 年的 DeepSeekMath 论文中首次提出,并在 R1 系列中被发扬光大,可视为对经典 PPO 的一种"瘦身改造"。

4.1 传统 PPO 的问题

PPO(Proximal Policy Optimization)是强化学习的经典算法,但它有个致命缺陷:

复制代码
PPO = Actor(策略模型) + Critic(价值模型)
        ↑                    ↑
    生成答案的模型        评估答案好坏的模型

Critic 模型通常和 Actor 一样大,训练成本直接翻倍。对于 671B 参数的 DeepSeek-V3 来说,这意味着要多养一个 671B 的"评委",显存和算力都扛不住。

4.2 GRPO 的巧思:不需要评委,让选手互评

GRPO 干了一件很巧妙的事------去掉 Critic,用一组输出的相对表现来估计"好坏"

python 复制代码
# GRPO 核心逻辑(伪代码)
def grpo_step(question, model, num_samples=16):
    """
    对同一个问题,生成 16 个不同的答案
    用这 16 个答案的相对表现计算优势函数
    """
    # 1. 生成一组输出(同策略采样)
    outputs = [model.generate(question) for _ in range(num_samples)]
    
    # 2. 规则验证器打分(0 或 1)
    rewards = [verifier(output) for output in outputs]  # [1, 0, 1, 0, 0, 1, ...]
    
    # 3. 计算组内相对优势(标准化)
    mean_reward = sum(rewards) / len(rewards)
    std_reward = std(rewards)
    advantages = [(r - mean_reward) / std_reward for r in rewards]
    
    # 4. 用优势函数更新策略(带裁剪的 PPO 目标)
    loss = compute_clipped_ppo_loss(outputs, advantages)
    
    return loss

关键洞察:不需要一个独立的 Critic 模型来预测"这个答案值多少分",而是直接采样一组答案,看哪些比平均水平好、哪些差。好的答案多学学,差的答案少学学。

4.3 奖励设计:Zero RL 的"指挥棒"

GRPO 只是发动机,奖励函数才是方向盘。DeepSeek-R1-Zero 的奖励设计极其简洁,只有两条:

python 复制代码
def compute_reward(output, ground_truth):
    """
    DeepSeek-R1-Zero 的规则奖励系统
    """
    reward = 0
    
    # 1. 准确性奖励:答案对不对?
    if extract_answer(output) == ground_truth:
        reward += 1.0
    
    # 2. 格式奖励:有没有按规定的格式输出?
    if has_thinking_tags(output):  # <thinking>...</thinking><answer>...</answer>
        reward += 0.5
    
    return reward

这种"极简主义"反而成了 Zero RL 的优势------规则奖励不会被模型"骗",而神经网络奖励模型经常被模型找到漏洞(reward hacking)。


五、Zero RL 的"黑暗面":狂欢背后的阵痛

Zero RL 听起来很美好,但实际操作起来,简直是噩梦。

5.1 梯度爆炸:训练曲线像过山车

Zero RL 最大的敌人是 梯度爆炸(Gradient Explosion)。

在训练初期,基础模型对长链条推理一无所知,会生成大量低概率的"胡言乱语"。这些低概率 token 在策略梯度中会产生巨大的梯度信号,导致参数更新剧烈震荡。

复制代码
(示意)训练过程片段:
- 损失: 12.5 → 0.3 → 45.2 → 2.1 → 89.7
- 梯度范数: 0.1 → 15.3 → 0.05 → 32.1 → 0.02

原因 :模型生成了一些它自己都觉得"不太可能"的 token(概率极低),策略梯度的公式里有个 1 / π(a) 的项------概率越低,梯度越大。模型偶尔"抽风"生成一个极低概率的词,梯度就炸了。

(注:严格地说,PPO/GRPO 使用的是重要性采样比 ρ 而非裸的 1/π,此处为便于直观理解而简化。)

2025 年后续的研究(如 DAPO,见 6.3 节)发现,这个问题可以通过 Group Length NormalizationClip-Higher 来缓解------给长回答更多的梯度权重,同时放宽裁剪上界鼓励探索。

5.2 语言混用:模型在说一种"新语言"

Zero RL 训练出来的模型,推理过程经常是这样的:

复制代码
<thinking>
Let me analyze this problem... 首先,我们需要计算这个积分...
Wait, maybe I should try a different approach... 不对,让我重新检查一下...
Actually, 这里有一个更简单的办法...
</thinking>

中英混杂,毫无章法。

因为基础模型预训练时见过多种语言,而 Zero RL 的奖励函数只关心"答案对不对",不关心"用什么语言思考"。模型发现:只要答案对,中间过程随便混用语言也没问题。

DeepSeek-R1 的解决方案是引入语言一致性奖励------统计推理过程中目标语言的比例,作为额外奖励。但这又带来了新的权衡:语言一致性奖励稍微降低了推理性能。

5.3 奖励黑客:模型学会了"骗分"

这是强化学习的经典难题。模型很快会发现一些"捷径":

  • 长度黑客:生成超长的推理过程,因为某些实现里长回答更容易"蒙对"。
  • 格式黑客 :在 <thinking> 标签里写满无意义的重复内容,只要格式对就有分。
  • 答案黑客 :在 <answer> 标签里把所有可能的答案都列一遍,赌一个能中。
python 复制代码
# 奖励黑客示例:模型学会了"刷长度"
output = """
<thinking>
Let me think... Let me think... Let me think...  
(重复 500 次同样的废话)
Actually the answer is 42.
</thinking>
<answer>42</answer>
"""
# 格式奖励:✅ 有 thinking 标签
# 准确性奖励:✅ 答案对了
# 但推理过程毫无价值

2026 年的最新方案是引入 Smooth Length Penalty(平滑长度惩罚)------不是简单限制长度,而是鼓励"思维 token"的比例,惩罚无意义的冗长。


六、2026 年的破局:Zero RL 进化到哪一步了?

6.1 General Zero-RL:走向通用领域(arXiv:2510.25528)

早期的 Zero RL 只能在数学、代码这类"答案可验证"的领域玩。因为奖励函数需要明确知道"对不对"。

但 2025 年底,一项名为 Zero Reinforcement Learning Towards General Domains (arXiv:2510.25528)的工作把 Zero RL 扩展到通用领域(写作、问答、开放式对话)。其核心思路是双奖励系统

python 复制代码
def general_zero_rl_reward(output, task_type):
    """
    General Zero-RL 的双奖励系统(arXiv:2510.25528)
    """
    if task_type == "verifiable":  # 数学、代码
        return rule_based_verifier(output)  # 规则验证:0 或 1
    
    elif task_type == "open-ended":  # 写作、问答
        return generative_reward_model(output)  # 生成式奖励模型打分

关键发现 :在可验证任务和开放式任务上联合训练,推理能力可以跨域迁移。模型在数学题上学到的"自我反思",会自动用到写作任务上。

实验结果显示,该方法在 Qwen3-8B-Base 与 Qwen3-14B-Base 上,于需要深度推理的任务与更通用的任务上均取得了优于基线的推理表现;为缓解生成式奖励模型下的 reward hacking,论文还设计了 Smooth Length Penalty(平滑长度惩罚),鼓励生成更有信息量的思维 token。

6.2 General-Reasoner:另一项并行工作(arXiv:2505.14652)

需特别区分:General-Reasoner (Ma et al., arXiv:2505.14652)是与 6.1 节不同的独立工作。它同样面向"跨域推理",但技术路线不同:

  • 构建了一个通过爬虫获得的大规模、高质量、答案可验证的跨领域问题数据集;
  • 提出一个基于生成模型的答案验证器,用思维链 + 上下文感知替代传统规则验证;
  • 在 MMLU-Pro、GPQA、SuperGPQA、TheoremQA、BBEH、MATH-AMC 等 12 个基准上评测,证明其在保持数学推理优势的同时具备更好的通用性。

简言之:6.1 节的"双奖励 + 平滑长度惩罚 + Qwen3"属于 Zero RL Towards General Domains(2510.25528);而 General-Reasoner(2505.14652)走的是"爬取可验证数据集 + 生成式验证器"路线。两者不要混淆。

6.3 DAPO:让 Zero RL 不再"过山车"(arXiv:2503.14476)

DAPO(D ecoupled CliP and D ynamic sA mpling Policy Optimization,解耦裁剪与动态采样策略优化;arXiv:2503.14476)是 2025 年提出的 GRPO 改进版,专门解决 Zero RL 的训练不稳定问题。四大改进:

改进点 解决的问题 原理
Clip-Higher 探索不足 放宽 PPO 裁剪的上界,鼓励模型尝试新策略
Dynamic Sampling 无效训练 过滤掉"全对"或"全错"的问题,确保每组都有区分度
Token-level Loss 长回答梯度稀释 按 token 级别归一化,而非按 response 级别
Overlong Reward Shaping 长度黑客 对超长回答施加软惩罚,而非硬截断

DAPO 让 Zero RL 的训练曲线从"过山车"变成了"稳健爬坡"。

6.4 LUFFY:Zero RL + 离策略学习(arXiv:2504.14945)

传统 Zero RL 是同策略(on-policy)的------模型只能从自己生成的答案中学习。如果模型一开始很笨,它就只能从笨答案中学。

LUFFY (Learning to Reason under Off-Policy Guidance,arXiv:2504.14945)引入了离策略(off-policy)示范------在训练过程中混入一些高质量的外部推理轨迹(比如从更强的模型那里借来的),让模型"站在巨人的肩膀上"学习,同时保留探索空间。

实验结果:六个数学基准测试平均提升 +7.0 分 ,分布外任务提升 +6.2 分(数字援引自论文摘要)。


七、实战:一段简化的 Zero RL 训练代码

python 复制代码
"""
⚠️ 极简 Zero RL 教学演示(基于 GRPO),非生产代码。
本类的 compute_grpo_loss 是「占位损失」,梯度恒为 0,训练无效------
仅用于演示 GRPO 的采样与优势计算流程。请勿直接用于真实实验。
"""
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

class ZeroRLTrainer:
    def __init__(self, model_name, num_samples=16):
        self.model = AutoModelForCausalLM.from_pretrained(model_name)
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.num_samples = num_samples  # GRPO 的组大小 G

    def generate_group(self, question):
        """对同一个问题生成一组答案"""
        inputs = self.tokenizer(question, return_tensors="pt")
        outputs = []
        for _ in range(self.num_samples):
            out = self.model.generate(
                **inputs,
                max_length=2048,
                do_sample=True,
                temperature=1.0,
            )
            outputs.append(self.tokenizer.decode(out[0]))
        return outputs

    def rule_reward(self, output, answer):
        """规则奖励:答案对不对 + 格式对不对"""
        reward = 0.0
        # 准确性
        if f"<answer>{answer}</answer>" in output:
            reward += 1.0
        # 格式
        if "<thinking>" in output and "</thinking>" in output:
            reward += 0.5
        return reward

    def compute_grpo_loss(self, outputs, rewards):
        """GRPO 核心:用组内相对表现计算优势。

        ⚠️⚠️ 教学占位警告(务必替换后再用于任何训练)⚠️⚠️
        下面的 loss 是 DUMMY------它不依赖模型任何参数,梯度恒为 0,
        因此 train_step() 里的 loss.backward() 不会更新任何权重,
        用本函数训练等价于「什么都不学」。
        本函数目前只正确演示了「组内相对优势 advantages 怎么算」这一步。
        真正可训练的 GRPO 损失必须补充(缺一不可):
          (1) 取模型对 outputs 每个 token 的对数概率 log π_θ(a);
          (2) 用与旧策略的重要性采样比 ρ = π_θ / π_old 构造「裁剪」PPO 目标;
          (3) 以 advantages 加权,并加 KL(π_θ ‖ π_ref) 约束防止跑偏。
        注意:参数 outputs 在此处「未被使用」,正是因为它属于「待补的真实损失」。
        """
        rewards = torch.tensor(rewards, dtype=torch.float32)
        mean_r = rewards.mean()
        std_r = rewards.std() + 1e-8

        # 优势 = (奖励 - 组均值) / 组标准差  ← 这一步是真实有效的
        advantages = (rewards - mean_r) / std_r

        # ❌ 占位损失:仅让脚本能跑通,训练无效。请勿直接用于实验。
        #    真实实现应返回「基于 log π_θ(outputs) 与 advantages 的裁剪 PPO/GRPO 损失」。
        #    下面 torch.zeros(..., requires_grad=True) 只是造一个可 backward 的标量,
        #    其梯度为 0,对模型参数毫无影响。
        loss = torch.zeros(1, requires_grad=True)  # PLACEHOLDER:梯度恒为 0,训练无效
        return loss

    def train_step(self, question, answer):
        """单步训练"""
        # 1. 生成一组输出
        outputs = self.generate_group(question)

        # 2. 计算奖励
        rewards = [self.rule_reward(o, answer) for o in outputs]

        # 3. 计算 GRPO 损失
        loss = self.compute_grpo_loss(outputs, rewards)
        # 4. 反向传播
        # ⚠️ 当前 loss 为占位(梯度 = 0),此 backward() 不会更新参数。
        #    接入「真实损失」后,这里才会真正产生梯度并推动训练。
        loss.backward()

        return rewards

# 使用示例
trainer = ZeroRLTrainer("Qwen/Qwen2.5-7B-Base")
question = "求解:2x + 5 = 13"
answer = "4"

for step in range(10000):
    rewards = trainer.train_step(question, answer)
    if step % 100 == 0:
        print(f"Step {step}: rewards = {rewards}")

注意(重要) :上面是极度简化的教学代码,且其中的 compute_grpo_loss占位损失(梯度恒为 0) ,直接运行只会打印 reward、不会训练出任何能力。要变成可训练版本,至少还需要:

  • 对模型输出取对数概率 log π_θ(a),构造带裁剪的 PPO/GRPO 目标;
  • vLLM 加速生成;
  • 分布式训练(DeepSpeed/FSDP);
  • KL 散度约束(防止模型偏离太远);
  • 参考模型(ref model)定期更新;
  • 长度惩罚和重复惩罚。

八、总结:Zero RL 的现在与未来

维度 2025 年初(R1-Zero) 2026 年中(现在)
适用领域 数学、代码(可验证) 数学、代码、通用领域
训练稳定性 过山车,容易炸 DAPO 等改进后显著改善
输出质量 可读性差,语言混用 冷启动数据 + 一致性奖励后大幅改善
成本 仅需 RL,远低于 SFT 进一步降低,小模型也能出效果
核心算法 GRPO GRPO + DAPO + Off-policy
奖励设计 简单规则奖励 双奖励系统 + 长度惩罚

一句话总结

Zero RL 不是银弹,但它证明了:当奖励信号足够清晰时,模型不需要人类手把手教,自己就能在可验证推理任务上摸索出突破人类标注 SFT 数据天花板的策略。

它的"顿悟时刻"不是魔法,而是海量试错后的统计必然。它的"黑暗面"也不是缺陷,而是任何自主学习系统必经的成长痛。

2026 年的今天,Zero RL 已经从"能不能做"进化到了"怎么做更好"。下一个问题或许是:当模型学会了自己教自己,人类标注员还有多大价值?


九、延伸阅读 & 参考资料

Guo, D., et al. (2025). DeepSeek-R1: Incentivizing reasoning capability in LLMs via reinforcement learning. arXiv. https://arxiv.org/abs/2501.12948

Zeng, Y., et al. (2025). Zero reinforcement learning towards general domains. arXiv. https://arxiv.org/abs/2510.25528

Ma, X., et al. (2025). General-Reasoner: Advancing LLM reasoning across all domains. arXiv. https://arxiv.org/abs/2505.14652

Yu, Q., et al. (2025). DAPO: An open-source LLM reinforcement learning system at scale. arXiv. https://arxiv.org/abs/2503.14476 (投稿/发表于 ICLR 2026,待核实)

Shao, Z., et al. (2024). DeepSeekMath: Pushing the limits of mathematical reasoning in open language models. arXiv. https://arxiv.org/abs/2402.03300

Yan, J., et al. (2025). Learning to reason under off-policy guidance. arXiv. https://arxiv.org/abs/2504.14945

注:以上论文作者均超过 20 人,按博客可读性以"第一作者 et al."呈现;严格 APA 7th 对 21+ 位作者的要求为列出前 19 位、省略号、末位作者,此处为可读性做了简化。


如果本文对你有帮助,欢迎点赞、收藏、转发! 有任何问题欢迎在评论区交流,我会持续更新 AI 训练与数据工程相关的实战文章。


标签强化学习 Zero RL GRPO 大模型训练 推理模型 技术杂谈


原创声明

本文为作者原创,版权归作者所有。原文于 2026-07-27 同步发布于 CSDN、博客园、稀土掘金、51CTO、知乎。

欢迎学习与分享,但请尊重原创,转载请保留署名与出处。

未经许可,禁止用于商业用途或二次发布。

相关推荐
盼小辉丶5 小时前
PyTorch强化学习实战(20)——优势演员-评论家(Advantage Actor-Critic, A2C)
pytorch·深度学习·强化学习·优势演员-评论家算法
GRITJW20 小时前
从固定数据到在线策略:SFT、RL 与 OPD 如何重塑模型分布
强化学习·大模型微调
阿木实验室4 天前
预设航线之外,无人机如何应对变化?
强化学习·自主无人机
一颗小树x9 天前
《VLA 系列》AMP 代码复现 | 强化训练 | 行走 跌倒 恢复
机器人·强化学习·amp·vla·复现
飞思实验室10 天前
跨越算力鸿沟与不可微壁垒:GPU张量化仿真如何重塑多智能体强化学习?
gpu算力·强化学习
紫金修道11 天前
深度强化学习内核:从马尔可夫链到PPO的哲学与数学之美
强化学习
闲研随记13 天前
【文献阅读 ICML 2026】RL算法:R2VPO
论文阅读·人工智能·算法·强化学习·icml·rl算法
EW Frontier16 天前
三级跳突破864维动作空间——QMIX-Hierarchical多无人机协同通信方法全解析【附python代码】
开发语言·python·无人机·强化学习·通信资源分配
盼小辉丶18 天前
PyTorch强化学习实战(18)——基于DQN处理股票交易问题
pytorch·深度学习·强化学习