极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_概率分布

「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」,与行业顶尖专家一起探索科技的无限可能!投稿请联系:17278094563(微信号)

本文首先将阐述强化学习(RL)和监督微调(SFT)在实现方式上的区别,然后通过一个具体案例,详细说明如何对奖励函数进行优化。

从简单例子入手理解 SFT 和 RL

监督微调(SFT)- 像老师教学生

监督微调(Supervised Fine-Tuning,简称 SFT)相当于作为老师,自己先列出很多问题,再告诉模型标准的回答,比如用数据(训练集)教它:

极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_XML_02

我们让模型一遍又一遍模仿训练语料中的标准答案,直到我们符合要求。

SFT 具体步骤(算法的介绍)
  1. 我们拿出一个问题:苹果什么颜色?
  2. 模型自己尝试回答:比如它乱回答成 蓝色
  3. 我们就立马纠正,告诉它正确的答案应该是红色,给它一个明确的误差信号: [ 误差 = - log P("红色") ]
  4. 然后模型用这个误差信号帮助它更新自己说法,让下次“红色”概率增加。

所以,监督学习过程如下:

for 问题, 标准答案 in 数据集:
    模型答案 = 模型生成(问题)
    误差 = 计算交叉熵Loss(模型答案, 标准答案)
    模型更新(误差)
  • 1.
  • 2.
  • 3.
  • 4.

优点:安全、稳定

缺点:模型永远只能模仿,不太能创造性地发现新答案。

强化学习(RL)– 让模型自己摸索

强化不直接教标准答案,而是用“鼓励”和“惩罚”引导模型。

我们问模型:“1加1等于?”

  • 它如果乱说了:“香蕉!”,我们立刻给个负面奖励(-1);
  • 如果它说对了:“2”,我们给它正面奖励(+2)。

模型得到这些奖励和惩罚之后,会慢慢去摸索和记忆,知道怎么才能得到更多奖励(而不是直接告诉它标准答案)。

强化学习大致算法:

# RL过程:
for 问题 in 数据集:
    # 让鹦鹉自由生成多个答案(探索)
    多个答案 = 模型生成多个可行答案(问题) 

    # 每个答案给奖励
    for 每个答案 in 多个答案:
        奖励 = 奖励函数(每个答案)
        更新策略(奖励 * log(生成该答案概率))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

优势:模型能够自己发现最优策略,能主动“探索”,学得更主动;

危险:但探索过猛容易产生 KL 爆冲、梯度爆炸、最终模型崩盘。

极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_概率分布_03

SFT 和 RL 选择

大多数情况下训练模型先 SFT 再 RL 更安全、更高效,尤其是对能力尚弱的小模型或需要严格格式输出的任务。不过这并不是绝对法则,下面补充几点可作为快速校验的要点。

为什么“先 SFT 后 RL”通常更好

训练稳定性

  • 直接 RL(尤其是小模型)容易出现 KL 爆冲、梯度爆炸,模型甚至崩盘。
  • SFT 先把策略锚定在“基本正确、格式合规”的空间,再让 RL 微调,KL 跳变小很多,收敛更稳。

数据利用效率

  • SFT 等价于“先喂答案教基础功”;RL 更像“在掌握基础后练举一反三”。
  • 如果一开始就 RL,模型会在大量无意义探索上浪费步数。

人工标注成本

  • SFT 阶段可用少量高质量标注(或合成高质量标注)直接模仿;
  • RL 阶段只用奖励信号即可继续放大效果,二者配合能节省标注量。

直接 RL 的合理场景

  1. 几乎没有标注数据、但可以自动计算奖励,例如:解数独、玩 Atari 游戏,环境本身给出分数。
  2. 大模型已具备强基础能力 GPT-4、Claude 3-Sonnet 这一级别,格式和基本推理已比较稳,直接 RL(或 RLAIF)效果也可接受。
  3. 任务鼓励高多样性、无法提供单一“标准答案” 如创意写作、对话风格优化,仅用偏好打分即可训练。

实践经验速查表

极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_XML_04

  1. 我们的奖励函数是不是完全依赖“答案==标准答案”? 如果是,说明我们已经有明确标注;SFT 通常先做更划算。
  2. 我们有多大 GPU/TPU 预算? RL(尤其 GRPO/PPO)往往需要比 SFT 高 2-4 倍的算力。
  3. 任务对“推理链”可解释性要求高吗? 先 SFT(教会标签格式)再 RL(提升正确率)更容易满足可解释输出。

结论

“先 SFT 再 RL”并非硬性规定,但在绝大多数需要结构化输出、且有可用标注的场景下是最省心、最稳妥的路径。只有当标注极少或任务天然提供可计算奖励时,才会优先考虑“直接 RL”。

RL 常见问题

前文提到的 RL 常见的 KL 爆冲、梯度爆炸、模型崩盘问题,本小节详细介绍。

极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_概率分布_05

一般情况下,这三个问题会组成一条「连锁反应」:

奖励函数设计不佳或超参错误
      ↓↓导致↓↓
   KL爆冲 --> 梯度爆炸 --> 模型参数剧烈变化或NaN
      ↓↓进一步导致↓↓
   模型崩盘 (输出单一、低质)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

KL 爆冲

KL 散度(Kullback–Leibler Divergence)本质上衡量的确实是两个概率分布之间的差距。在 DPO(Direct Preference Optimization)方法中,参考模型(reference model)和 训练中模型(policy model)之间计算的就是 KL 散度

用简单例子解释一下:

假设默认模型只会讲三句话:“我们好”、“谢谢”、“再见”。

它现在的“说话概率”(也可以叫“原始概率分布”)是:

极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_概率分布_06

我们心目中理想的“模型应该说话的概率分布”(目标概率分布)是:

极客说|强化学习(RL)与有监督微调(SFT)的选择以及奖励函数的优化_概率分布_07

我们希望模型朝着目标概率(Q 分布)学习,但它原本的习惯是当前概率(P 分布)

这时候,为了知道我们的鹦鹉目前的概率分布 P 与目标概率分布 Q 差距有多远。

  • KL 散度越小 = 两个概率越接近
  • KL 散度越大 = 两个概率分布的差距越明显

在例子中,如果原来模型会说:“我们好(Hello)”,但我们想教它说:"谢谢(Thank you)",那么就有了:

  • 一个原始模型的分布(Original distribution):擅长说“我们好”;
  • 一个目标模型的分布(Target distribution):我们希望它能学会说“谢谢”。

假设我们给了模型过分高的奖励,比如只要提到“谢谢”,我们奖励20分。