前言
我本人虽然学习的是自然语言处理专业,但当时跟着的学习资料主要是深度学习相关的,但对于强化学习的了解非常少。然而现在 LLM 的效果增强越来越依赖于强化学习,因此我也开始补补强化学习的课。这篇文章讲的就是强化学习里面很基础的内容,但原先对于强化学习基本一无所知的我现在才终于完全搞明白,在此把自己刚弄明白的这个基础问题整理下来,既当作学习记录,也希望能帮到和我一样对强化学习刚入门的人。
我对于强化学习的了解开始主要源于 DeepSeek-R1,当时它通过 GRPO 的强化学习训练方式使得模型的推理能力大大增强,也掀起了一股热潮。网络上后来也出现了各种低资源复现 GRPO 训练的代码,其中 Unsloth 是比较有影响力的一家,但我看了它的训练数据,发现它用的是 GSM8K ,这个数据集最开始的时候是用来给 GPT 做 SFT 训练以增强数学推理能力的数据,而我原本以为强化学习的训练数据集应该和 SFT 完全不同才对。于是我就有了一个疑问:
既然数据集可以一样,那强化学习训练方式和 SFT 到底有什么区别?
这篇文章就来说说这一点。
SFT:直接学答案文本
SFT 的训练目标很直接:给定输入,让模型去拟合目标输出序列。
对语言模型来说,本质上就是最小化目标答案的 token-level loss,也就是逐 token 学习“下一个词应该是什么”。这也是 Hugging Face 对 SFTTrainer 的标准描述。
所以在 SFT 里:
- 模型直接看到标准答案
- 标准答案就是监督目标
- 训练本质是模仿答案文本
一句话概括:
SFT 学的是“标准答案长什么样”。
PPO、GRPO 等强化学习方法:先作答,再看得分
PPO 和 GRPO 这类方法的逻辑不一样。
它们通常不是把标准答案直接当成目标文本去拟合,而是:
- 给模型一个问题
- 模型先生成回答
- 用 reward model、verifier 或规则函数打分
- 根据分数更新模型
更准确地说,在这个训练过程中,模型的参数更新不是直接对着标准答案文本做拟合,而是根据评分信号间接进行优化。
而GRPO,通常还会对同一个 prompt 一次生成多个回答,再根据这些回答的 reward 和组内相对表现来更新。
所以它们学的是:
什么样的回答更容易拿高分。
而不是简单地模仿标准答案。
一个直观例子
假设题目是:
一个箱子里有 3 个苹果,又放进去 2 个,一共有多少个?
标准答案是 5。
如果是 SFT
训练时,模型会对当前位置给出一个当前的 token 概率分布,然后把这个分布和目标答案 5 对应的正确 token 进行比较,并据此更新参数:
- 提高正确答案
5被输出的概率 - 降低其他错误 token 被输出的概率
在工程上,这个过程通常是在一个 batch 内完成的:比如一次喂给模型很多道题和它们各自的标准答案,算完这一批的 loss 后统一更新。也就是说,SFT 的更新依据是:这一批标准答案和模型当前预测之间的差异。
所以 SFT 的核心是:
直接朝着标准答案文本去拟合。
如果是 PPO / GRPO
对于一批 prompt,模型会先采样出回答;而在 GRPO 中,通常还会对同一个 prompt 一次生成多个答案。比如对这个问题,模型可能生成:
- 答
4,低分 - 答
6,低分 - 答
5,高分
接着,训练会根据这一批回答的得分来统一更新参数:
- 对低分的输出,减少模型生成它们的倾向
- 对高分的输出,增强模型生成它们的倾向
因此,PPO / GRPO 学到的不是“把标准答案逐 token 背下来”,而是:
让高 reward 的输出变得更可能出现,让低 reward 的输出变得更不可能出现。
Unsloth 的 GRPO 示例正好说明了这一点
Hugging Face 的 GRPO with Unsloth 教程里,GSM8K 数据集保留了 answer 列;但训练时这列答案主要被用在 reward function 里,与模型生成结果比对,再转换成 reward。课程页也给了类似 problem_reward(completions, answers, **kwargs) 的例子:把数据集里的 answers 当作正确答案,用来判断模型 completion 是否答对。
这说明:
在这个 GRPO 示例里,标准答案的作用是判题,不是监督模仿。
模型不是直接学 gold answer 文本,而是间接通过 reward 学习。
总结
所以,虽然 SFT 和 PPO / GRPO 可能使用同一个数据集,甚至这个数据集里都包含标准答案,但它们训练时“答案”扮演的角色并不一样:
在 SFT 里
标准答案是:
- 监督目标
- token-level loss 的直接依据
- 模型要去拟合的文本
在 PPO / GRPO 里
标准答案更常见的是:
- verifier 的参考依据
- reward 的计算依据
- 用来判断模型当前输出“好不好”的标准
所以问题的关键不在于:
数据集里有没有标准答案
而在于:
标准答案到底是被拿来“直接监督模型”,还是被拿来“给模型打分”。
如果是前者,更接近 SFT。
如果是后者,更接近 PPO、GRPO 这类强化学习方法。
更进一步的说,相比 SFT,RL 的优势在于:它不只是教模型“标准答案长什么样”,还可以进一步优化“什么样的输出更值得保留”。这让它更适合处理那些很难用单一标准答案完整描述、但可以通过评分区分好坏的问题。
但这并不意味着可以跳过 SFT 直接从零做 RL。因为 RL 提供的通常只是“这次答得好不好”的信号,而不是像 SFT 那样直接告诉模型“应该怎么答”。如果模型一开始连基本的语言能力和指令跟随能力都没有,RL 往往很难稳定训练起来。
所以更合理的理解是:SFT 负责让模型学会“怎么回答”,RL 负责让模型学会“怎样回答得更好”。
标题:强化学习知识补课:同样的数据集,SFT 和 RL 学到的东西为什么不一样?
作者:aopstudio
地址:https://neusoftware.top/articles/2026/03/17/1773749207063.html