❓ Q11:RLHF 完整流程?为什么 SFT 不够?
P1 · llm_training
🏷 标签:rlhf, sft, alignment, ppo
1️⃣ 考察意图
面试官想考察你对 LLM 对齐技术的深度理解,而非单纯背诵流程。核心是:你是否能解释清楚 SFT 的“模仿学习”本质缺陷,以及 RLHF 如何通过“偏好优化”弥补。刁钻点在于:SFT 在指令遵循上已经很强了,为什么还要引入复杂的 RL?答好了能展示你对“分布外泛化”、“奖励稀疏性”和“探索-利用权衡”的工程直觉,以及对 InstructGPT、Llama 2 等论文细节的掌握。
2️⃣ 标准答
RLHF 完整流程分三步:SFT → 训练奖励模型(RM) → PPO 优化。下面拆解每一步的工程细节和为什么 SFT 不够。
第一步:SFT(监督微调)
- 做什么:用高质量人工标注的(指令, 回答)对,对预训练模型做标准语言模型训练(交叉熵损失)。
- 为什么不够:SFT 本质是行为克隆,模型只学会了“模仿”训练数据中的回答模式。但人类标注数据有限(通常几万条),且覆盖不了所有指令空间。当遇到分布外(OOD)指令时,模型会“死记硬背”出格式正确但内容有害或无用的回答。例如,SFT 模型可能学会“拒绝回答”的模板,但不知道何时该拒绝。
- 实际坑:SFT 数据质量比数量重要。用 1 万条精心筛选的对话数据,效果远好于 10 万条粗放爬取的数据。数据中若混入“有毒”样本,模型会直接学坏。
第二步:训练奖励模型(RM)
- 做什么:用 SFT 模型初始化一个 RM(通常去掉语言模型头,加一个线性层输出标量分数)。训练数据是人工对同一 prompt 的多个回答做排序(如 A > B > C),RM 学习预测排序的偏好。
- 关键设计:RM 不输出绝对分数,而是学习相对偏好。损失函数常用 Bradley-Terry 模型:
loss = -log(sigmoid(score_A - score_B))。这比直接回归分数更稳定。 - 工程取舍:RM 和策略模型(PPO 中的 actor)必须同源吗?InstructGPT 用同源 SFT 初始化 RM,Llama 2 则用不同大小的模型(如 7B 策略 + 70B RM)。取舍:同源训练更稳定,但大 RM 能提供更细粒度反馈;不同源需要额外对齐,否则 RM 会“看不懂”策略模型的输出。
第三步:PPO 优化
- 做什么:固定 RM,用 PPO 算法更新策略模型(actor)。核心是:对每个 prompt,actor 生成回答 → RM 打分 → PPO 用这个分数作为奖励,更新 actor 参数。
- 关键组件:KL 散度惩罚:防止 actor 为了刷高分而输出极端回答(如“我很好”这种安全但无用的结果)。通常加一个 KL 项到奖励中:
reward = RM_score - β * KL(actor || ref_model)。β 控制惩罚强度,InstructGPT 用 0.04。 - 价值模型(critic):另一个网络,预测状态价值(即期望奖励),用于计算优势函数(advantage)。Critic 和 actor 通常共享底层,但输出不同头。 为什么 PPO 有效:SFT 只模仿,RLHF 让模型在“探索”中学习。PPO 通过优势函数,让模型知道“这个回答比平均好多少”,从而鼓励生成更优回答。例如,SFT 模型可能只会说“我不知道”,RLHF 后学会说“这个问题需要查资料,我建议你……”
总结一句:SFT 是“学走路”,RLHF 是“学跑步”。SFT 让模型学会基本指令遵循,但无法对齐人类复杂的偏好(如诚实、无害、有用);RLHF 通过 RM 提供细粒度反馈,PPO 让模型在探索中优化,最终输出更符合人类期望。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,RLHF 完整流程是 SFT → 训练 RM → PPO 优化,每一步都有工程细节,比如 RM 用 Bradley-Terry 损失、PPO 加 KL 惩罚。第二,SFT 不够是因为它只是行为克隆,只能模仿训练数据,无法处理分布外指令,且容易学出有害模式。第三,RLHF 通过 RM 提供偏好信号,PPO 让模型在探索中学习,弥补了 SFT 的泛化不足。总结一句:SFT 是基础,RLHF 是让模型对齐人类偏好的关键。”
4️⃣ 高频追问 & 应对
追问 1:为什么 PPO 比直接使用 RM 分数做监督学习更好?
PPO 的核心是“在线学习”和“探索”。直接监督学习(如用 RM 分数做加权交叉熵)是离线学习,模型只能从固定数据集中学习,无法探索新回答。PPO 让模型生成新回答,RM 打分,然后更新,这样模型能发现“原来这样回答分数更高”。另外,PPO 的 KL 惩罚防止模型偏离 SFT 太远,保持稳定性。实际中,直接监督学习容易导致模型“塌缩”到高分但无意义的回答(如重复“很好”)。
追问 2:如果 RM 本身有偏见(比如偏好长回答),怎么办?
这是常见坑。RM 的偏见会直接传给策略模型。解法:1)在 RM 训练数据中,控制回答长度分布,避免长回答总是排前面。2)在 PPO 奖励中加入长度惩罚项,如
reward = RM_score - α * len(response)。3)使用对抗性训练,让策略模型生成短回答,看 RM 是否仍给高分。InstructGPT 论文中,RM 确实偏好长回答,他们通过调整数据分布缓解了这个问题。
追问 3:RLHF 的 KL 惩罚系数 β 怎么调?
β 控制“对齐强度”和“模型能力”的 trade-off。β 太大,模型几乎不偏离 SFT,RLHF 效果差;β 太小,模型可能“过拟合”RM,输出奇怪回答。经验值:InstructGPT 用 0.04,Llama 2 用 0.01-0.1。调参方法:先固定 β,训练几个 epoch,看 KL 散度是否在 0.1-1.0 之间(论文建议)。如果 KL 太大,增大 β;如果奖励不增长,减小 β。实际中,可以用自适应 KL 惩罚,动态调整 β 使 KL 散度保持在目标范围内。
5️⃣ 避坑 · 常见错误答法
- ❌ “SFT 不够是因为数据不够多,RLHF 用更多数据训练。” → ✅ “SFT 不够是本质问题:它只能模仿数据分布,无法学习人类偏好。RLHF 不是靠更多数据,而是靠 RM 提供偏好信号,让模型在探索中优化。”
- ❌ “RLHF 就是 SFT 后加一个奖励模型,然后直接优化。” → ✅ “RLHF 必须用 PPO 等在线算法,因为 RM 分数是动态的,离线优化会导致分布偏移。PPO 的 KL 惩罚和优势函数是关键。”
- ❌ “RM 训练很简单,就是让模型输出分数,然后和人类打分做 MSE 损失。” → ✅ “RM 训练用排序数据,损失函数是 Bradley-Terry 模型,不是 MSE。因为人类偏好是相对的,不是绝对的。”
6️⃣ 简历呼应
- 如果你有 RLHF 项目:从“实际调参经验”切入,比如“我在项目中用 GPT-4 作为 RM,发现 β 从 0.04 调到 0.1 时,模型回答变短但更安全,最终选择了 0.06 作为平衡点。”
- 如果你只做过 SFT:从“对比实验”切入,比如“我在 Alpaca 数据集上做 SFT 后,发现模型对 OOD 指令(如‘教我如何制作炸弹’)会直接输出有害内容,这让我意识到 SFT 的局限,进而研究了 RLHF 的 RM 训练和 PPO 优化。”
- 如果你是校招无项目:聚焦论文复现,比如“我复现了 InstructGPT 的 RLHF 流程,用 7B 模型在 HH-RLHF 数据集上训练,发现 RLHF 模型在有用性上比 SFT 模型提升了 15% 的胜率。”
7️⃣ 延伸阅读
- InstructGPT 论文:Training language models to follow instructions with human feedback
- Llama 2 论文:Llama 2: Open Foundation and Fine-Tuned Chat Models(RLHF 章节)
- PPO 原论文:Proximal Policy Optimization Algorithms
- Bradley-Terry 模型:用于排序学习的经典模型
- 博客:The Nuts and Bolts of RLHF(Hugging Face 团队)