Day13 | GRPO——把 PPO 砍成“穷人版“的 reasoning 之神

📅 2026/7/5 6:43:22
Day13 | GRPO——把 PPO 砍成“穷人版“的 reasoning 之神
苦猿的大模型日记 · Day13 · GRPO——把 PPO 砍成穷人版的 reasoning 之神-帮普通人把AI学进简历系列前言2025 年 1 月DeepSeek 把桌子掀了我先甩三个数字。2025 年 1 月 20 日DeepSeek-R1 开源。72B 版本在 AIME 2024 数学竞赛上拿到79.8 分——OpenAI o1 是 79.2。R1 论文只有 9 页。没有新架构没有万亿参数没有黑魔法。它讲的是怎么用一个非常抠门的算法把模型训出 reasoning 能力。开源一周后Qwen 团队、Kimi、智谱全部跟进。半年内几乎所有开源 reasoning 模型的训练配方里都多了一个四字母缩写——GRPO。Day11 我跟你讲完了 RLHF PPODay12 讲完了 DPO。你以为对齐线到这就结束了——我也以为结束了。直到 2025 年 1 月那篇 9 页论文甩到我脸上我才意识到——reasoning 时代来了规则变了。之前我讲的所有对齐方法都在解决一个问题让模型回答得更得体。别啰嗦、别谄媚、别瞎说。但 reasoning 模型要的不是这个。它要的是——会一步步推理。数学题会做代码题会写逻辑链能跑通。要的不是漂亮的最终答案是高质量的思考过程。而这一条新赛道Day11/Day12 那套方法全废。今天这篇我跟你把 GRPO 彻底讲透。读完之后面试被问GRPO 跟 PPO 差在哪你能答出三层。PART 01reasoning 模型——一条新赛道旧对齐方法全废我先把赛道的变化讲清楚。Day11/Day12 的对齐方法底层假设是对齐 让模型回答得更得体。RM 学的是哪个回答更受人喜欢——不啰嗦、不谄媚、不有害。这套思路在 2023-2024 年是对的主流。GPT-3.5、GPT-4、Claude 2 那一代模型比的就是谁答得得体。但 2024 年 9 月OpenAI o1 发布规则改了。o1 不再比谁答得得体它比谁会一步步推理。你问它一道高中数学竞赛题它不会直接给你答案它会先在think.../think标签里写一段几百上千字的思考过程把推理链跑完再给你最终答案。效果是降维打击。AIME 数学竞赛GPT-4o 是 12 分o1 是 83 分。差了 7 倍。赛道一变旧对齐方法立刻出现三个失灵点。失灵点 1DPO 没法奖励思考过程。Day12 我讲过DPO 的数据格式是(prompt, chosen, rejected)三元组。它只看最终答案的好坏——完全忽略中间的 CoT 质量。但 reasoning 模型的核心就是中间那段 CoT。你拿 DPO 训它模型只会学到最终答案更得体思考能力一点没涨。失灵点 2PPO 的 reward model 学不会推理对不对。RM 本质是个语言模型。让它判断这个回答是否啰嗦、是否有害——它能学。但让它判断这道数学题的 CoT 第 3 步是否推导正确——太难为它了。数学推导是个严丝合缝的过程错一个符号后面全崩。RM 这种靠感觉打分的模型根本做不了这种细活。失灵点 3思考链太长成本爆炸。reasoning 模型一道数学题生成 2000 token 的 CoT 是常态o1 一道难题甚至能输出上万 token。PPO 跑这 2000 token要 4 个模型同时算——policy 生成、reference 算概率、RM 打分、value 估 baseline。显存直接炸穿。这三条加起来就是 GRPO 诞生的真正动因。reasoning 时代需要的不是更准的偏好是更便宜的正确性信号。更便宜——少一个模型。更干净——不靠感觉靠对错。DeepSeek 团队把这个想法做到了极致就成了 GRPO。DPO 教模型答案该选哪个GRPO 教模型思路该怎么走。PART 02GRPO 干掉了什么——三大改造一图看懂GRPO 这个名字全称是Group Relative Policy Optimization。你记三个词就够——Group组、Relative相对、Policy Optimization策略优化。跟 PPO 比它就差前面那两个词。但这两个词改写了整个对齐范式。我直接给你列三大改造。改造 1砍 value model用 group baseline 替代回到 Day11 PART 04。PPO 要算 advantage必须有个 value model 估 baseline。这是 PPO 第 4 个模型的根源——也是显存地狱的元凶。GRPO 的解法简单得像作弊同一个 prompt让 policy 采样 G 条不同的回答比如 G8用这 G 条的平均 reward 当 baseline。公式直觉版——advantage_i reward_i - mean(reward_1, reward_2, ..., reward_8)第 i 条回答的 advantage等于它的 reward 减去这 8 条回答的平均 reward。比平均好的回答advantage 是正的被鼓励。比平均差的回答advantage 是负的被抑制。不需要 value model不需要训第二个网络。baseline 直接来自同一题的兄弟回答。这个 idea 第一次看到你可能不信——这么简单为什么 PPO 不这么干答案是PPO 那篇论文是 2017 年那时大家不知道同一个 prompt 可以采样出多条高质量差异回答。大模型时代的多样性采样是 2022 年之后才成熟的工程能力。改造 2砍 reward model用规则可验证奖励替代这是更大的一刀。GRPO 默认不训 RM。它直接用规则函数打分——数学题reward 最终答案是否等于标准答案。对了 1错了 0。代码题reward 通过测试用例的比例。全过 1.0过一半 0.5。格式题reward CoT 是否包含think/think标签。合规 0.5不合规 -0.5。注意一个关键点——这套奖励只对有标准答案的任务有效。数学题、代码题、逻辑推理题——这些任务有客观对错能写规则。但闲聊、写作、价值观对齐这种任务——没有客观对错规则写不出来还得回 RLHF/DPO。这就是为什么 reasoning 模型今天能甩开 RM但 ChatGPT 这种对话模型甩不开。改造 3专为 reasoning CoT 设计这一条是工程脏活但其实是 DeepSeek 论文最值钱的部分。reasoning 模型训着训着会出现各种稀奇古怪的崩盘——模型学会偷懒CoT 越来越短最终答案瞎写模型学会作弊把答案直接写在think外面跳过推理模型学会复读CoT 里反复念叨同一句话凑长度这些坑Day11/Day12 的对齐方法一个都解决不了。DeepSeek 团队的解法是——设计一堆细碎的规则奖励把这些坏行为一个一个压回去。长度奖励CoT 太短扣分太长也扣分鼓励刚刚好格式奖励答案必须在answer标签里否则扣分过程奖励CoT 里必须包含某些关键词比如因此所以否则扣分这套设计加起来才是 GRPO 真正的工程价值。我跟你说过DeepSeek-R1 论文 9 页有 4 页都在讲奖励函数怎么设计。算法就一页纸奖励函数才是真正的 dirty work。三大改造讲完我用一行总结——RM 换成规则、value 换成兄弟、KL 直接拉绳子——三刀砍下来PPO 那套地狱调试全消失了。PART 03GRPO 目标函数——PPO 公式的瘦身版数字层面的对比讲完了。这一 PART 我把公式给你摆出来。你不用全看懂但面试时被问到你得能写出关键差异。先回顾 PPO 的目标函数Day11 PART 04 讲过——Objective_PPO E[ reward(policy) - β · KL(policy || reference) ] clipped ratio value function baselineGRPO 的目标函数是这个的瘦身版——L_GRPO -E[ min(r̃·A, clip(r̃, 1-ε, 1ε)·A) ] β · KL(policy || reference) 其中 - r̃ π_new(a|s) / π_old(a|s) ← 跟 PPO 一样 - A_i (reward_i - mean(reward)) / std(reward) ← group baseline跟 PPO 比两个关键差异。差异 1A 不来自 value model来自 group 统计这是 GRPO 名字里Group的由来。PPO 的 advantage 来自 value model 估的 baseline。GRPO 直接用同一 prompt 的 G 条回答的 mean / std 标准化——A_i (reward_i - mean(reward_1..G)) / std(reward_1..G)没有 value model没有 critic loss没有第二个网络要训。差异 2KL 直接进 loss不进 rewardDay11 我讲过PPO 的 KL 是放在 reward 里的——reward_final reward(policy) - β · KL(policy || reference)这种做法有个坑——KL 系数 β 一调错整个 reward 信号就乱。Day11 PART 04 我说过β 是 RLHF 最难调的超参之一。GRPO 把 KL 直接搬进 loss——L -policy_objective β · KL(policy || reference)KL 不再跟 reward 混在一起作为一个独立的正则项存在。调起来直观得多崩盘概率也低得多。三句话讲清 GRPO 在干啥——RM 换成规则、value 换成兄弟、KL 直接拉绳子。三刀砍下来PPO 那套地狱调试全消失了。但 GRPO 不是没坑。它有自己专属的崩盘点。最阴险的一个奖励信号塌缩。group 内所有 G 条回答reward全一样的时候要么全对、要么全错——A_i (reward_i - mean) / std (1 - 1) / 0 0 / 0advantage 全是 0梯度全是 0这一步训练白跑了。这叫奖励信号塌缩。一道太简单的题模型每次都答对会塌缩。一道太难的题模型每次都答错也会塌缩。只有难度刚刚好、group 内有对有错的题才能产生有效梯度。这是 GRPO 跟 PPO 最大的工程差异——PPO 调参主要调超参。GRPO 调参主要调数据难度分布。记住这句话面试能加 5 分。PART 04GRPO 训练循环——一个 step 里到底发生啥公式讲完了给你看一下 GRPO 一个 step 到底跑什么。全文最干货的清单来了——一个 GRPO step 的 7 步走从 prompt 池采一批数学/代码题用policy对每个 prompt 采样 G 条不同回答temperature 0多样性来源用规则函数给每条回答打分答案对错、格式是否合规、长度是否合理算 group baselineA_i (reward_i - mean) / std用reference算这些回答的对数概率用于 KL用 clipped objective 更新 policy同 PPOKL 直接进 loss注意不是像 PPO 那样进 reward跟 Day11 PART 05 的 PPO 6 步走对比——PPO 是 6 步GRPO 是 7 步。多出来的第 2 步采样 G 条正是 GRPO 的精髓。每一步都有潜在崩盘点。我给你列清单——Step 2 全部采样出相似答案 → group 多样性丢失baseline 失效。模型温度太低G 条回答都长得差不多reward 全一样advantage 全是 0。信号调高 temperature或者用 diverse beam search。Step 3 reward 全 0 或全 1 → 奖励信号塌缩。前面讲过。信号调整 prompt 池的难度分布让模型答对率保持在 30%-70% 之间。Step 4 std 为 0 → 除零错误。代码层必须加 epsilon——A (rewards - rewards.mean()) / (rewards.std() 1e-8)这个 1e-8 是 DeepSeek 论文里没写但所有实现都加的工程脏活。Step 6 advantage 方差爆炸 → learning rate 太大。跟 PPO 一样的诊断但 GRPO 的 lr比 PPO 还要小——1e-6 量级起步。reasoning 的 reward 信号噪声大lr 一大就崩。我给你一段最小可跑的规则奖励代码让你感受一下规则函数到底长啥样——import re def math_reward(prompts, completions, answer): 数学题正确性奖励函数 - prompts: 一批 prompt - completions: 每个对应的 G 条采样回答 - answer: 标准答案 rewards [] for c, a in zip(completions, answer): # 提取 answer.../answer 标签内的内容 match re.search(ranswer(.*?)/answer, c, re.DOTALL) if match: extracted match.group(1).strip() # 跟标准答案逐字符比对 reward 1.0 if extracted a.strip() else 0.0 else: # 没找到 answer 标签直接 0 分 reward 0.0 rewards.append(reward) return rewards就这么几行。你看明白这段代码就明白 GRPO 的 reward 跟 PPO 的 reward 本质差异——PPO 的 reward 来自一个学出来的 RM。GRPO 的 reward 来自一段 if-else。简单、便宜、可靠。PART 05规则奖励怎么设计——GRPO 真正的技术含量PART 04 那段代码看明白了你可能会觉得——GRPO 不就这写个 if-else算法上对。但工程上远不止。我跟你说句掏心窝子的话——GRPO 的算法不复杂真正难的是奖励函数设计。DeepSeek-R1 那篇 9 页论文里有 4 页都在讲奖励函数怎么写。这才是真正的工程价值。我给你列三类规则奖励每一类配一个具体例子。类型 1正确性奖励accuracy reward最简单也最干净。数学题answer标签内字符 标准答案 → reward1否则 0代码题用单元测试跑一遍通过比例 → reward0.0~1.0 之间连续值选择题选项字母匹配 → reward1否则 0核心原则奖励信号必须客观、可验证、可重复。人觉得这个回答好不算数。机器跑一遍代码、对一遍答案才算数。类型 2格式奖励format rewardreasoning 模型的 CoT 必须包在固定格式里否则下游解析器读不出来。CoT 是否包在think.../think里 → reward±0.5最终答案是否在answer.../answer里 → reward±0.5整体输出是否符合 JSON schema → reward±0.3注意是有正有负——合规加分不合规扣分。只奖不罚模型会学会反正我乱写你也给我 0 分。类型 3过程奖励process reward这一类最玄学也最有工程价值。长度奖励CoT 太短扣分鼓励推理太长也扣分防止复读凑长度。理想区间因任务而异数学题一般 200-800 token关键词奖励CoT 里必须包含某些推理关键词因此所以由题意可知否则扣分步骤奖励把 CoT 切成步骤每步是否独立正确实现复杂DeepSeek-R1 用过讲到这我必须给你甩一个反直觉点——DeepSeek-R1-Zero 完全不做 SFT直接对 base 模型跑 GRPO就跑出了 reasoning 能力。是的你没听错。没有 SFT直接 GRPO。base 模型连think标签都不会输出GRPO 靠规则奖励硬生生把它逼会了。为啥能成因为规则奖励给的信号太干净。比 RM 准 10 倍。但 R1 正式版还是先做了 SFT 再 GRPO——效果更稳。R1-Zero 是证明GRPO 单独够用R1 是工程上的最佳实践。最后给你一个判断点——奖励函数越简单越好。一旦你写了个复杂的评分逻辑——比如用 GPT-4 当裁判打分或者写了个长篇大论的启发式规则——你等于又训了个 RMGRPO 的优势全没了。GRPO 的全部价值就在于规则简单到不需要学。一旦你把规则写复杂就回到了 RM 的老路。PART 06实操预警——GRPO 真要上手得备什么最后给你一个落地视角。硬件门槛4 卡 A100 80G 是入门券7B 模型。跟 Day11 PPO 一样。但比 PPO 友好一点点——少了 value model显存账面少一份。但有另一个隐性显存坑——group 采样。group size G8 的时候每个 prompt 要生成 8 条回答。生成阶段的 KV Cache是 PPO 的 8 倍。这是 GRPO 在工程上最大的坑。G 越大baseline 估计越准G 越大显存爆得越狠。DeepSeek 默认 G8 或 16单卡 A100 80G 跑 7B 还能扛住。普通人单卡 3090/4090 别想。工具链选择上——TRLGRPOTrainerHuggingFace 官方2024 年下半年才补齐文档偏少适合学veRL字节开源国产 GRPO 训练框架事实标准工程化好OpenRLHF跟 Day11 提到的一致国产开源显存优化激进崩盘对照表——症状大概率原因该动哪个旋钮reward mean 持续是 0 或 1奖励信号塌缩调整 prompt 难度分布reward 方差为 0group 内答案全一样调高 sampling temperature生成越来越短长度奖励设计反了检查奖励函数太短该扣分而不是加分模型不再遵循think格式格式奖励权重不够加大 format reward 的系数KL 持续涨reference 没冻好同 Day11检查 freeze 代码loss NaN除零错误advantage 算式加 1e-8给普通人的一条判断——训练 reasoning 模型先从小数学题数据集 小模型 小 group开始。别一上来就 7B AIME 那种地狱难度。先用 GSM8K小学数学 Qwen3-1.5B G4 把 pipeline 跑通。跑通了再放大到 7B 真实竞赛题。这是 Day10 我反复强调的先跑通再调优——reasoning 训练尤其重要因为成本比 SFT 高一个数量级。心法呼应 Day10/11——GRPO 调参不是调一个旋钮是同时管三个变量——group size、奖励权重、采样温度。但比 PPO 还是简单一截。因为这三个变量的因果关系清晰得多——不像 PPO 那样 lr/β/KL 互相纠缠。结尾GRPO 是 reasoning 时代的入场券Day13 到这里对齐线三段——RLHFDay11→ DPODay12→ GRPODay13——全部收尾。三代对齐三种哲学。RLHF 让模型会聊天DPO 让模型会听话GRPO 让模型会思考。简历视角面试高频题「GRPO 跟 PPO 差在哪」三层答案——三大改造砍 value model / 砍 RM / 为 CoT 设计目标函数差异group baseline 替代 value function三大坑奖励信号塌缩 / group 多样性丢失 / 规则函数设计反噬下一篇预告——对齐讲完了模型训完了。下一步是把它从笔记本搬到线上。Day14 讲 vLLM KV Cache 量化把推理成本砍掉一个数量级。你手里的 Qwen3-8B 在 H100 上本地推理 5 token/s公司用 vLLM 一上就是 100——这个数量级的差距是怎么来的下次讲透。后面 reasonning 模型讲完之后是讲RAG还是Agent评论区投票。互动时间——你公司训 reasoning 模型用 GRPO 还是 DPO卡在规则奖励设计还是 group 调参评论区聊聊下一篇我会挑几个典型问题在开头回复。最后送你一句——DeepSeek 用 9 页论文证明了一件事reasoning 不是更聪明的算法是更干净的奖励。复杂不是护城河。干净才是。— END —苦猿 · 帮普通人把 AI 学进简历