返回学习地图
llmPhase B · 第 15

2.8 指令微调与RLHF

SFT/RLHF/PPO/DPO:让LLM从“会说话”到“说好话”

5 个章节·按类别展开/折叠
知识

指令微调(SFT):让模型学会听话

预训练后的模型只会“续写”,不会“听话”。如果你问预训练模型“什么是量子力学?”,它可能会继续写“什么是量子力学?这是一个有趣的问题。在20世纪初,物理学家们发现...”。它没有理解你是在问问题,需要回答。

SFT(Supervised Fine-Tuning)就是解决这个问题。它用人工标注的“指令-回答”数据对模型进行微调。例如:

输入:请解释量子力学
输出:量子力学是研究微观粒子行为的物理学分支...
输入:把这句话翻译成英文
输出:Translation of this sentence...
输入:写一首关于秋天的诗
输出:秋风起,落叶黄...

SFT数据量:通常10万~100万条高质量指令对。数据质量比数量更重要。一条好的指令数据 = 清晰的指令 + 准确的回答 + 适当的格式。

SFT参数:

参数含义典型值太大/太小
学习率微调步长1e-5 ~ 5e-5太大→破坏预训练知识;太小→微调无效
数据量指令对数量10K~100K太少→过拟合;太多→训练成本增加
epoch数完整遍历数据次数1~3太多→过拟合;太少→学习不充分
知识

RLHF:用人类反馈让模型“说人话”

SFT之后,模型能回答问题,但回答质量参差不齐。有些回答太长、有些太短、有些语气不友好、有些甚至有偏见。RLHF(Reinforcement Learning from Human Feedback)用人类反馈来进一步调优模型。

RLHF三步流程:

Step 1: 训练奖励模型(Reward Model)。让人类标注员对同一个问题的多个回答打分(1-5分)。例如:“请解释黑洞”的三个回答:回答A(5分,清晰准确)、回答B(3分,有部分错误)、回答C(1分,胡说八道)。用这些数据训练一个奖励模型,它能自动给回答打分。

Step 2: 用PPO强化学习训练策略模型。策略模型生成回答,奖励模型打分,用PPO算法优化策略模型,让它生成高分回答。

Step 3: 迭代优化。重复Step 2,每次用新的策略模型生成新回答,再用奖励模型打分,继续优化。

RLHF效果:ChatGPT相比GPT-3,主要提升来自RLHF。RLHF让模型学会:回答要有帮助、不能有害、要诚实、语气要友好。

公式

PPO vs DPO:两种RLHF算法

<p><b>PPO(Proximal Policy Optimization)</b>:OpenAI使用的RLHF算法。核心思想:限制每次更新的幅度,防止模型变化太大。</p><p><b>PPO目标函数:</b></p><pre>L^{PPO} = E[ min(r_t * A_t, clip(r_t, 1-ε, 1+ε) * A_t) ]
其中:r_t = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)(新策略 vs 旧策略的概率比)
A_t = 优势函数(这个动作比平均水平好多少)
ε = 0.1~0.2(裁剪范围)</pre><p><b>PPO参数:</b></p><table border="1"><tr><th>参数</th><th>含义</th><th>典型值</th><th>太大/太小</th></tr><tr><td>ε (epsilon)</td><td>裁剪范围</td><td>0.1~0.2</td><td>太大→无约束;太小→更新太慢</td></tr><tr><td>KL散度系数</td><td>惩罚偏离SFT模型</td><td>0.01~0.1</td><td>太大→模型太保守;太小→偏离太多</td></tr><tr><td>学习率</td><td>策略模型学习率</td><td>1e-6~1e-5</td><td>太大→不稳定;太小→收敛慢</td></tr></table><p><b>DPO(Direct Preference Optimization)</b>:2023年提出的新算法,直接优化偏好,不需要奖励模型和PPO!</p><p><b>DPO优势:</b>更简单、更稳定、训练更快。DPO直接比较两个回答的偏好,让好的回答概率更高,差的回答概率更低。不需要训练奖励模型,也不需要复杂的PPO。</p><p><b>DPO vs PPO:</b></p><table border="1"><tr><th>特性</th><th>PPO</th><th>DPO</th></tr><tr><td>需要奖励模型</td><td>是</td><td>否(直接优化偏好)</td></tr><tr><td>训练复杂度</td><td>高(需要Actor+Critic+Reward)</td><td>低(只需要策略模型)</td></tr><tr><td>稳定性</td><td>一般(超参数敏感)</td><td>好(更鲁棒)</td></tr><tr><td>效果</td><td>好(经过充分验证)</td><td>相当甚至更好</td></tr></table>
实例

例子:RLHF数据标注流程

实例

场景:标注员收到问题“请解释机器学习”,以及3个模型的回答。

回答A(5分):机器学习是人工智能的一个分支,它让计算机从数据中学习规律,而无需显式编程。例如:给计算机看1万张猫和狗的图片,它就能学会区分猫和狗。

回答B(3分):机器学习是一种技术。它使用算法来处理数据。有很多种算法。监督学习、无监督学习、强化学习。神经网络是其中一种。

回答C(1分):机器学习就是机器在学习。机器是人造的。学习很重要。我们要好好学习天天向上。

标注过程:

1. 清晰性:A(5) > B(3) > C(1)
2. 准确性:A(5) > B(3) > C(1)
3. 有用性:A(5) > B(3) > C(1)
总分:A(15) > B(9) > C(3)
标注结果:A > B > C

训练奖励模型:用成千上万这样的标注对训练奖励模型。奖励模型学会预测:给定问题和回答,人类会打多少分。

PPO训练:策略模型生成回答 → 奖励模型打分 → 如果分高,鼓励这个方向;如果分低,抑制这个方向。同时KL散度约束防止模型偏离SFT太远。

练习

练习:SFT与RLHF

练习

Q1:SFT和预训练有什么区别?为什么SFT的学习率比预训练小10倍?

Q2:RLHF的奖励模型训练目标是什么?它如何给回答打分?

Q3:PPO的裁剪参数ε=0.2是什么意思?如果ε=0.5会怎样?

Q4:DPO相比PPO的优势是什么?为什么DPO不需要奖励模型?

Q5:SFT数据量10K和100K,哪个更好?如果10K是高质量人工标注,100K是低质量自动生成?

查看答案

A1:预训练让模型学会语言规律(预测下一个词),SFT让模型学会遵循指令(根据指令生成回答)。SFT学习率小是因为预训练后的模型已经很好,微调时只需要小幅度调整,避免破坏已学到的知识。

A2:奖励模型的训练目标是预测人类对回答的评分。输入=问题+回答,输出=分数(1-5)。训练数据来自人工标注的“偏好对”(同一个问题的多个回答,标注员排序)。

A3:ε=0.2表示新策略和旧策略的概率比被限制在[0.8, 1.2]范围内。如果ε=0.5,范围变成[0.5, 1.5],约束太弱,策略可能剧烈变化,导致训练不稳定。

A4:DPO直接优化策略模型,让它对偏好的回答输出更高概率,对不喜欢的回答输出更低概率。不需要单独的奖励模型,因为DPO的优化目标本身就包含了偏好信息。更简单、更稳定、训练更快。

A5:10K高质量人工标注更好。SFT数据质量比数量重要。10K高质量数据能让模型学会正确的回答格式、语气、内容。100K低质量数据可能引入错误和偏见,甚至导致模型性能下降。数据质量 > 数据数量。