aopstudio 的个人博客

记录精彩的程序人生

AOP=art of programming=编程的艺术=程艺
  menu
65 文章
0 浏览
17 当前访客
ღゝ◡╹)ノ❤️

强化学习知识补课:同样的数据集,SFT 和 RL 学到的东西为什么不一样?

前言

我本人虽然学习的是自然语言处理专业,但当时跟着的学习资料主要是深度学习相关的,但对于强化学习的了解非常少。然而现在 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 这类方法的逻辑不一样。
它们通常不是把标准答案直接当成目标文本去拟合,而是:

  1. 给模型一个问题
  2. 模型先生成回答
  3. 用 reward model、verifier 或规则函数打分
  4. 根据分数更新模型

更准确地说,在这个训练过程中,模型的参数更新不是直接对着标准答案文本做拟合,而是根据评分信号间接进行优化

而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