Reddit 用户实测:三款小模型用同一 GRPO 配方,结果却大相径庭
开发者用同一套 GRPO 流程对三款 316M–672M 小模型做后训练,发现 GRPO 对不同规模模型影响差异显著且无…
一位 Reddit 用户 john_enev 在 r/MachineLearning 板块分享了一项小规模实证工作:从零训练了三款参数量在 316M–672M 之间的 LLM,并使用完全相同的 SFT + GRPO 流程对它们做后训练。结果显示,三款模型在同一份「菜谱」下走出了三种不同的轨迹,且表现差异与模型规模之间没有清晰的单调关系。
实验设置
三款模型均在原生 PyTorch 中从零训练,V1、V2、V3 的关键配置如下:
- V1:353M 参数,d_model 1024 / 24 层,多头注意力(MHA),10B tokens,仅 FineWeb-Edu。
- V2:316M 参数,d_model 1024 / 24 层,差分注意力 + GQA 4:1,10B tokens,FineWeb-Edu。
- V3:672M 参数,d_model 1536 / 24 层,XSA + GQA 4:1,30B tokens,FineWeb-Edu + 代码 + 数学。
预训练验证损失按预期递减:2.8659 → 2.7844 → 2.5885,即更大的模型和更现代的注意力机制带来了更低的损失。
后训练结果
三款模型在 lm-evaluation-harness 上以同一任务版本与 shot 数评测,WikiText 词困惑度(WPL)的变化如下:
- V1:32.86(base)→ 51.31(SFT)→ 51.40(SFT→GRPO),GRPO 几乎无影响。
- V2:31.28 → 46.81 → 71.06,GRPO 使困惑度上升约 52%。
- V3:22.30 → 32.11 → 33.65,GRPO 后上升约 5%。
值得注意的是,SFT 阶段让三款模型的困惑度都明显恶化(这一规模下的常见现象),而 GRPO 阶段中:最小模型几乎不动、中等模型退化最严重、最大模型退化较小——这并不是作者事先能猜到的规律。下游任务(如 arc_easy)的变化方向与困惑度一致,V3 在 SFT 到 GRPO 之间掉了约 6 个点。
更反直觉的是,模型确实「学会了」GRPO 训练的内容:V3 在 5 个课程阶段中掌握了 4 个;但这并未迁移到分布外任务——GSM8K 仍接近 0,且模型倾向于一直写出冗长的解题过程而不停止。
作者自己指出的局限
作者坦诚这不是一项受控实验,并列出了三类混杂因素:
- 同时变更的变量:从 V2 到 V3,参数、token 数、数据混合、注意力机制(差分注意力 → XSA)同时变化,难以归因。
- 训练分布与评测分布不一致:GRPO 使用「裸 solver」模板训练,而 SFT 使用聊天格式,下游数字因此部分受混淆影响。
- 奖励函数缺陷:奖励仅检查最终是否出现可解析的正确数字,没有长度惩罚,也没有显式奖励停止。
作者还提到一个「事后才意识到」的盲点:模型在课程中推进后,他没有重新评估更早阶段的题目,因此目前无法区分「GRPO 退化了一般能力」与「顺序课程训练让模型遗忘了更早阶段」。
推理与可复现性
除训练外,作者还从零写了一个 GQA-aware 的 KV cache,对同一序列分别做单次完整前向与 prefill + decode 推理并比对 logits,最大差异约 1.4e-06(容差 1e-4)。生成 100 tokens 时相对全量重算的加速比为:32 token prompt 3.7×,128 token 6.2×,512 token 10.1×。
九份 checkpoint 均已上传至 Hugging Face,并附带一个可同时向 base、SFT、GRPO 三版模型发送同一 prompt 的 Space。作者表示,整套实验花费约 750 美元,因此没有做消融(例如不同 KL 系数),并欢迎社区对「GRPO 方差」这一现象给出解读。
总体而言,这是一份带有完整数据、诚实的失败记录与可复现工件的小规模研究笔记,而非改变格局的行业事件,但对正在做 RL 后训练的实践者有一定参考价值。
