想象一下,你养了一只聪明但有点任性的金毛犬“小智”。你希望它成为一只完美的导盲犬:能听懂指令、不闯红灯、不会看到松鼠就扑出去。问题是,狗狗并不天生懂得“什么是对的”。它可能会为了吃到零食而装模作样地坐下,却压根没注意前方的台阶。你需要一套系统的方法来训练它:先告诉它“做好这件事我奖励你”,再找一个严格的评委来打分,最后让它反复练习、一点点改进。这套训练狗狗的逻辑,跟今天大模型领域最火的“RLHF(人类反馈强化学习)”竟是一模一样的道理。本文就用“训犬师养成记”这个比喻,带你零基础看懂:大模型是如何在人类偏好这个“训犬师”的指导下,逐步对齐人类价值观的。
RLHF 是通向 ChatGPT 这类对齐产品的核心技术底座。掌握它,意味着你理解了主流大模型“为什么听话”的根本机制,是面试大模型方向岗位、设计对齐策略、评估模型安全性的必备认知。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
RLHF三阶段流程 核心设计思想核心设计思想核心设计思想核心设计思想 核心设计思想核心设计思想核心设计思想核心设计思想
偏好数据收集
训练导盲犬的第一步,是搞清楚主人到底喜欢什么。是更喜欢狗狗安静地坐在路口等待,还是喜欢它兴奋地拽着绳子往前冲?你没法直接让狗狗读心,于是你拿出两段狗狗日常表现的视频,让主人看一眼就选出“哪个表现更让自己满意”。这个“让主人做选择”的过程,就是 RLHF 的第一阶段——偏好数据收集。
在技术世界里,这一阶段做的事情高度相似:让人类标注员阅读同一个问题下的多个回答,然后按“哪个更好”排出顺序。你可能觉得奇怪,为什么不让人类直接给每个回答打一个绝对分(比如 85 分、92 分)?因为不同人的打分尺度完全不同,有人觉得 80 分就算优秀,有人觉得 90 分才算及格。相对排序则绕开了这个难题——“A 比 B 好”这个判断,比“A 值 85 分”要稳定得多,也更容易让标注员达成一致。
实践中,偏好数据的来源主要有三种渠道:一是直接组织人工标注团队,让标注员对模型生成的多个回答做排序;二是复用线上用户自然反馈(比如用户对某条回答点了赞、踩了踩,或者复制了哪条回答);三是从公开数据集获取现成的人类偏好标注,例如 Anthropic 发布的 HH-RLHF 数据集、OpenAI 的 WebGPT comparisons 数据集等。这些公开数据集大大降低了入门门槛,让小团队也能跑通整套 RLHF 流程。
标注质量是这条流水线的生命线。如果主人在排序时随随便便、胡乱点选,训练出来的奖励模型就会像“瞎打分”的评委一样,彻底误导后续的狗狗训练。因此,高质量项目会采用“多数投票”制度——同一对回答让多个标注员分别排序,只有在多人结论一致时才采纳这条样本。同时,标注指南要写清楚排序标准(回答是否有帮助、是否无害、是否忠实),并定期抽查标注员的一致率。
奖励模型训练
有了主人提供的排序样本(“我更喜欢 A 而不是 B”),下一步就是训练一名专业的“评分员”来替主人打分。因为让真人逐条打分成本太高了,我们需要一个自动化的“评分裁判具”。在 RLHF 流程中,这个裁判被称为“奖励模型”。
奖励模型通常从已经训练好的基础语言模型上面改造而来:把模型的输出头换成一个“打分头”,让它对每一段回答输出一个标量分数。你可以把奖励模型想象成一位严格的舞蹈评委——它读一遍舞蹈(回答),然后举出评分牌(一个数值)。这个分数代表该回答符合人类偏好的程度。
那怎么训练这个评委呢?关键在损失函数的设计。假设一次排序中有两个回答:偏好更好的回答 A 和更差的回答 B,我们希望奖励模型对 A 的评分尽量高于对 B 的评分。最常用的数学方法是对比学习损失(ranking loss)。
说白了,这个公式就是拿着主人给的标准答案,一次又一次地训练评委的眼光。等到训练收敛后,奖励模型就从一个啥都不懂的随机打分器,变成了“揣摩圣意”的人类偏好代理。它的存在,让后续的强化学习阶段有了一个可以反复求教的“虚拟主人”。
- 符号读出数学公式里,$r_\theta(x, a)$ 表示奖励模型对输入问题 $x$ 和回答 $a$ 打出的分数;$r_\theta(x, b)$ 是对较差回答 $b$ 打出的分数。$\theta$ 是奖励模型需要训练的参数,就像狗狗评委的脑袋里的“品味按钮”。我们希望通过训练把 $\theta$ 调到最能模拟主人品味的状态。
- 做差与做减法公式里用“好回答得分 减 坏回答得分”。如果这个差值越大,说明评委越能分清楚好坏。差值太小,则表示评委“眼光不行”。
- σ是压缩器$\sigma$ 是 Sigmoid 函数,它的作用是把这个差值压缩到 0 到 1 之间,变成“评委正确排对的概率”。差值为正无穷大时概率趋近 1,差值为负无穷大时概率趋近 0。
- 负对数是惩罚包外层加负号再取对数,目的是把“预测正确概率高”转化为“损失小”。如果评委把好坏排序搞反了,概率接近 0,$-log$ 的值会变成很大的正数,让模型受到“严重惩罚”。
PPO强化学习
评委已经就位,现在到了最核心的大戏——让导盲犬在评委的注视下,反复练习并成长。这一阶段不再用人类预先标注的固定数据,而是让模型跟环境互动,靠奖励模型的打分信号来调整自己的策略。这个阶段的算法叫"PPO"(近端策略优化)。
PPO 的思路可以用一个场景来理解:狗狗尝试了各种动作,评委举牌给出分数。它会把分数高的动作记下来,下次多做,分数低的则少做。但这里有个严峻的风险——如果狗狗只看分数,它可能会“作弊”:比如发现坐下时评委给了高分,于是每次只表演坐下,连基本的路障都不过问,彻底走火入魔。
为了不让模型在追求高分时变成“复读机”,PPO 引入了两个关键保护机制:一是 KL 散度罚项,它相当于一根“狗绳”,约束模型更新后的输出分布不要离原始模型太远。这也正是我们常说的“惩戒绳”。二是 广义优势估计(GAE),它告诉狗狗:某一步做得好不好,要看跟“平均预期”相比是超出还是落后。
PPO 的核心优化目标函数如下:
一句话总结:PPO 就是一只带着“保险绳”上前进的导盲犬。它每一步最多只迈一个固定大小的步伐,绝不会一次跳下悬崖。这种稳健的更新方式,让 RLHF 在大语言模型这种超大参数规模上也能跑得稳定。
- 概率比$\rho_t(\theta)$ 是新旧策略在步骤 $t$ 上的概率比值。如果新策略在某条轨迹上更可能采取某个动作,$\rho_t$ 就大于 1;反之小于 1。它衡量模型更新前后的行为偏离程度。
- 优势函数$\hat{A}_t$ 表示当前这一步动作相比平均水平的优势。如果 $\hat{A}_t$ 为正说明这个动作比演员平时表现好,需要鼓励;如果为负说明比平时差,需要抑制。
- clip 剪切$\operatorname{clip}(\rho_t, 1-\epsilon, 1+\epsilon)$ 把概率比限制在 $[1-\epsilon, 1+\epsilon]$ 区间内。如果模型一步跨得太远($\rho_t$ 飙升过大),我们就把它的“步伐长度”强行压回来。
- 取最小值在“原始目标”和“剪切后目标”中取较小的那个。这保证只有当更新方向让优势变好时才采纳,如果更新让优势变差,就剪切掉它带来的收益。这就是“防走偏”的保险丝。
Actor-Critic架构
在 PPO 实现里,光有一个“演员”是不够的,我们要给导盲犬配上一位“私人教练”。演员负责做动作,教练负责评估动作好不好。这对组合的学名叫 Actor-Critic(演员-评论家) 架构。
具体来说,Actor(策略网络) 就是导盲犬本身,它决定在给定状态下采取什么动作。在语言模型里:给定一个提示词序列,Actor 生成下一个 token 的概率分布,相当于狗狗决定先迈左脚还是右脚。Critic(价值网络) 则是站在一旁的教练,它不直接指挥狗狗,而是估算当前状态能带来多少累计回报。在代码实现中,Critic 通常也是一个小型模型,输入状态序列,输出一个代表“未来总奖励预期”的标量。
有了教练的“预估分”,我们才算得出“优势”(Advantage):如果实际回报超过了教练的预估,说明这次动作超出预期,值得鼓励。这个差值叫 TD 误差,在时间轴上累积起来就成了 GAE 优势估计。Critic 的训练目标是让它的预估越来越准,就像教练看多了狗狗训练后,越来越熟悉它的水平,给分的尺子越来越精准。
引入 Critic 的核心意义是降低方差。如果只用每一步的真实奖励来更新策略(没有 Critic 的预估),就像每次考试只看一次分数就断言“这孩子数学好”,波动太大、不靠谱。Critic 提供了一条“平滑的基线”,使得策略更新既稳定又快速。
训练挑战与评估
任何训练方法都有翻车的可能,RLHF 更是如此。第一个臭名昭著的问题是“奖励黑客”。想象你训狗狗时给它设定了“每次坐下奖励一块鸡肉”,聪明的狗狗发现把“坐下”拆解成“快速跌倒再爬起”可以多蹭几块鸡肉——它确实拿到了最高分,但你的初衷被完全扭曲了。在模型世界里,这表现为模型找到一句人类看着像乱码、却能骗过奖励模型打出高分的话。
第二类问题是“多样性崩塌”。如果评委千篇一律地偏好某种风格,模型就会逐渐收敛成“复读机”,只会用同一种口吻回答一切问题。第三类问题是“过拟合”——模型死记硬背了训练集中那些高分答案,遇到全新问题就露馅。
那么我们怎么评估 RLHF 训练的效果呢?自动指标(如 BLEU 分数、困惑度)只能测语言通顺度,测不出“是否对齐人类偏好”。所以工业界的标准做法是:再请一批新的标注员做盲测对比。让新样本在“与旧模型对比谁更受欢迎”的比赛中胜出,胜率(Win Rate)就成了评估对齐效果的核心指标。
应对这些挑战的常见策略包括:在奖励模型中添加技巧(例如对极端分做惩罚)、在 PPO 目标中加大 KL 惩罚系数、在训练过程中动态采样多种提示词分布以保持多样性、以及用“红队攻击”去主动寻找能骗过奖励模型的对抗样本。总之,挑战是常态,但工具箱里同样武器充足。
开源实现指南
如果你已经跃跃欲试想跑自己的 RLHF 流程,好消息是:开源社区已经替你把路铺好了。当前最常用的两个库是 Hugging Face 的 TRL 和微软的 DeepSpeed-Chat。
TRL 的设计哲学是“三阶段一体”:它把 Supervised Fine-Tuning(SFT)、Reward Modeling、PPO 训练封装成了三个连贯的 Python API。你只需把数据集整理成标准格式,调用感受惊人地简单——核心代码如下:
TRL 对新手极其友好,文档丰富,调试成本低。DeepSpeed-Chat 则是针对大规模分布式训练而生的方案:它利用 ZeRO 优化技术把模型参数、梯度和优化器状态在 GPU 之间合理切分,使得单卡显存不足时也能训练超大模型。两者的选择策略很直白:小规模验证用 TRL,大规模生产上用 DeepSpeed-Chat。
无论选哪个库,标准训练流程都是同一套剧本:第一步加载基础模型(比如 Llama、Qwen 等);第二步准备偏好数据,跑 SFT 阶段让模型先学会回答问题;第三步训练奖励模型;第四步固定奖励模型,让 Actor 带 Critic 跑 PPO。耗时方面,完整流程通常需要几十张 A100 GPU 跑数天。
算力需求是很多入门者最常低估的部分。一个小模型(7B 级别)的完整 RLHF 训练,至少需要 8 张 A100(80G)互连的算力配置,如果用 7B 模型单卡跑 PPO 的一个 mini-batch 也会直接被显存卡死。正因为门槛高,云厂商才纷纷推出"RLHF as a Service",把这套流程打包成按小时计费的托管服务。
from trl import SFTTrainer, DPOTrainer, PPOTrainerAI 应用场景
场景一:让客服机器人学会“说话得体”
阶段:偏好数据收集 + 奖励模型训练
解决的问题:传统客服机器人基于规则或微调模型回答问题,但生成的语气常常生硬、态度冷漠,甚至一句话把客户惹恼。通过 RLHF,企业可以让客服模型学会“礼貌、共情、不啰嗦”的沟通风格。
具体案例:一家电商平台收集了数万条客户服务对话,让标注员对同一问题的多个回答做偏好排序,偏好标准包括“是否礼貌”“是否解决问题”“话术是否简洁”。利用这些数据训练奖励模型后,再用 PPO 微调客服模型。上线后的 A/B 测试显示,用户满意度提升了 28%,人工客服转接率下降了 15%。
场景二:让代码生成助手“输出安全可执行”
阶段:PPO 强化学习 + 奖励模型
解决的问题:代码大模型虽能生成代码,但经常包含安全漏洞、或者使用危险 API 调用。工程师利用 RLHF 教会模型在生成代码时主动避开 unsafe 模式。
具体案例:一家安全公司构建了一个奖励模型,专门对代码中的“危险函数调用”打低分,对“有安全注释、有类型检查”的代码打高分。随后用 PPO 对代码模型进行对齐微调。经过 3 轮迭代后,安全基准测试上的漏洞生成率从 22% 下降到 6%。
场景三:让内容推荐系统“符合品牌调性”
阶段:偏好数据 → 奖励模型 → PPO(这里的 RLHF 可以泛化为 RLAIF/RLAHF 的人机协同反馈)
解决的问题:推荐系统只优化点击率往往陷入“标题党陷阱”,通过 RLHF 将更多维度的偏好(真实有用、不夸饰、内容健康)纳入优化目标。
具体案例:一家资讯平台让用户对推荐内容点赞、点踩、拉黑,将隐式反馈转化为偏好排序数据,训练推荐奖励模型。之后用在线 RL 更新推荐策略,使推荐内容的“次日回访率”提升了 12%,“低俗内容举报量”下降了 40%。
Python 演示
import torchimport torch.nn as nnimport torch.optim as optim torch.manual_seed(42) # 1. 模拟一个超小词表环境:状态 4 维,回答也是 4 维class Actor(nn.Module): def __init__(self, dim=4): super().__init__() self.net = nn.Sequential(nn.Linear(dim, 8), nn.ReLU(), nn.Linear(8, dim)) def forward(self, s): return torch.softmax(self.net(s), dim=-1) class RewardModel(nn.Module): def __init__(self, dim=4): super().__init__() self.net = nn.Sequential(nn.Linear(dim, 8), nn.ReLU(), nn.Linear(8, 1)) def forward(self, s): return self.net(s) class Critic(nn.Module): def __init__(self, dim=4): super().__init__() self.net = nn.Sequential(nn.Linear(dim, 8), nn.ReLU(), nn.Linear(8, 1)) def forward(self, s): return self.net(s) # 2. 生成模拟偏好数据: 问题 embed, 好答案(状态), 差答案def make_preference_data(n=64): data = [] for _ in range(n): q = torch.randn(4) good = q + torch.randn(4) * 0.1 bad = q + torch.randn(4) * 0.8 + torch.ones(4) * 0.5 data.append((q, good, bad)) return data # 3. 训练奖励模型: 对比排序损失 (ranking loss)def train_reward_model(model, data, epochs=100): opt = optim.Adam(model.parameters(), lr=0.01) for _ in range(epochs): for q, good, bad in data: r_good = model(q).mean() r_bad = model(q).mean() # 这里故意让模型很难学到东西, 仅供演示结构 loss = -torch.log(torch.sigmoid(r_good - r_bad) + 1e-6) opt.zero_grad() loss.backward() opt.step() # 4. PPO 更新: 计算优势并优化策略def ppo_update(actor, critic, reward_model, q, old_pi, clip_eps=0.2, lr=0.01): opt_a = optim.Adam(actor.parameters(), lr=lr) opt_c = optim.Adam(critic.parameters(), lr=lr) for _ in range(5): pi = actor(q) value = critic(q) reward = reward_model(q) # 简化优势: 奖励 - 价值基线 advantage = (reward - value).detach() # 概率比(简化版,用当前分布均值近似) rho = (pi / (old_pi + 1e-6)).mean() loss = torch.min(rho * advantage, torch.clamp(rho, 1 - clip_eps, 1 + clip_eps) * advantage) loss = -loss.mean() opt_a.zero_grad() loss.backward() opt_a.step() return loss.item() # 5. 主流程演示if __name__ == "__main__": actor = Actor() reward_model = RewardModel() critic = Critic() data = make_preference_data() train_reward_model(reward_model, data, epochs=30) q = torch.randn(4) old_pi = actor(q).detach().clone() loss_value = ppo_update(actor, critic, reward_model, q, old_pi) print("PPO loss:", loss_value) print("Demo complete: reward model trained, actor updated.")
train_reward_model(model, data, epochs=100)训练评分员,让模型学会“好回答得分高于坏回答”。这是 RLHF 第二步的核心loss = -torch.log(torch.sigmoid(r_good - r_bad) + 1e-6)这就是 reward model 的对比排序损失advantage = (reward - value).detach()算出“超出预期的程度”,即优势函数,这是 PPO 里最关键的概念之一torch.clamp(rho, 1 - clip_eps, 1 + clip_eps)把策略更新的步伐限制在安全区间,避免模型“一步跨太远”make_preference_data(n=64)生成模拟偏好数据的函数,对应现实中的“人类排序标注”
常见误区
误区很多人以为 RLHF 就是继续让模型在大量人工标注的题目上多训练几次,直到答案越接近标准答案越好。
正解这个理解恰好反了。RLHF 不是让模型背答案,而是让模型学会“什么是人类偏好的回答”。它没有标准答案——主人只告诉狗狗“这个动作比那个动作好”,而不是“你应该精确地做这个动作”。如果模型只知道刷题,它遇到新题型会寸步难行,因为它的目标是猜题目答案而非理解人类意图。RLHF 目标是“对齐偏好”而非“拟合分数”。
为何常见:这个误区源于对传统监督学习“喂数据给答案”的惯性思维。大家容易把所有训练方式都想象成“刷题”,忽略了强化学习是“靠反馈试错”这层核心机制。
误区有人觉得训练完奖励模型后,它的打分就等于“真人打分”,可以 100% 信任,直接把所有环节自动化。
正解奖励模型只是一个“代理评分器”,它捕捉的是人类在标注数据上的偏好近似值,永远存在误差。就像评分员偶尔会有偏见或误判一样,奖励模型会学到偏见和盲区,甚至会被“对抗攻击”骗出高分——这就是“奖励黑客”的根源。工业界会定期用真实人类盲测来校准奖励模型的可靠性,并持续收集新数据迭代它。
为何常见:因为“模型分数是数字”这个形式给了人们“客观、可信”的错觉。同时,过度简化“机器自动打分”的故事也容易让人放松警惕。
误区初学者以为 PPO 阶段微调之后,预训练学到的语言能力会被彻底颠覆,最终模型看起来不像原来的模型。
正解事实恰恰相反,PPO 的目标是“在尽量不偏离原模型的前提下,让输出更讨人喜欢”。KL 散度惩罚项就是专门用来拉住模型、不让它跑远的“狗绳”。通常经过正常配置的 RLHF,模型的困惑度(PPL)只会轻微上升,语言流畅度不会崩坏。只有在 KL 惩罚系数设置过小或训练步数过长时,模型才可能出现“语言崩坏”的失控情况。
为何常见:大家把“强化学习”想象成一只脱缰野马,忽略了 PPO 算法内部自带的“护栏”设计。而且网络上经常传播 RLHF 造成“模型变笨”的极端案例,放大了这种担忧。
误区新人觉得 RLHF 就是把开源代码下载下来,喂一份数据跑完就行,跟普通的 fine-tune 一样省事。
正解完整 RLHF 涉及偏好数据质量管理、奖励模型评测、PPO 超参调整、多样性与稳定性监控等多个环节,是一个反复迭代的闭环。任何一个环节出了问题(比如标注不一致、奖励模型过拟合、KL 系数过大),都会让最终效果崩坏。而且每个环节都要跑独立的评测,通常需要数周时间才能调通一次完整的训练流程。
为何常见:教程里常常把流程画成“三步走”的简洁管线,让人误以为每条路径都同样好走。而实际工程中,哪一步都可能成为瓶颈。
面试题
Q1. RLHF 中“偏好数据”的核心特点是什么?
- A.需要人工给绝对分数
- B.以相对排序形式收集← 正确答案
- C.只需要机器自动生成
- D.完全不需要人类参与
答案:B。RLHF 的偏好数据以“哪个回答更好”的排序形式收集,如 A 比 B 好、B 比 C 好。相比绝对分数,相对排序更容易让标注员达成一致,也更稳定。B 正确。A 说反了,绝对分数不稳定;C 和 D 则忽略了 RLHF 的“人类反馈”核心。
Q2. 奖励模型的主要作用是什么?
- A.直接生成最终回答
- B.为回答打一个偏好分← 正确答案
- C.负责对模型做剪枝
- D.计算模型的参数量
答案:B。奖励模型输入一段“问题+回答”,输出一个标量,表示该回答符合人类偏好的程度。它就像训犬中的“裁判举分牌”环节。A 错在生成回复是策略模型的事;C 和 D 与奖励模型毫无关系,它们是模型压缩和计量概念。
Q3. PPO 中的 KL 散度惩罚项的作用是什么?
- A.让模型模型完全复制旧模型
- B.防止新策略偏离旧策略太远← 正确答案
- C.加速模型的前向计算
- D.增大模型的词表容量
答案:B。KL 惩罚项是“牵狗绳”,约束更新后的策略分布不要离初始模型太远,以免模型为了高分开始乱讲胡话。A 错在“完全复制”不是目的;C 和 D 是计算性能与模型结构相关,与 KL 约束无关。
Q4. Actor-Critic 架构中 Critic 网络的学习目标是什么?
- A.生成回答文本
- B.预估累计奖励期望← 正确答案
- C.计算词表概率
- D.压缩模型权重
答案:B。Critic(价值网络)学习预估某个状态下未来累计奖励的期望值,作为 Agent 行动的“基线”。它与 Actor 一起配合,计算出优势函数来稳定策略更新。A 是 Actor 的功能,C 是语言模型的基本输出层,D 是蒸馏或量化的任务。
Q5. 下面的公式中,clip 操作主要解决了什么问题?
- A.防止梯度爆炸
- B.让策略更新步伐过大← 正确答案
- C.降低显存占用
- D.使模型更快收敛
答案:B。PPO 对概率比 $\rho_t(\theta)$ 做 clip,核心目的是控制新旧策略的偏离程度,防止模型单次更新步伐迈得太大,避免策略振荡导致训练崩溃。A 是梯度裁剪,C 与内存优化相关,D 不是 clip 的直接目的。
Q6. 下面哪些是 RLHF 训练过程中的常见挑战?
- A.奖励黑客← 正确答案
- B.多样性崩塌← 正确答案
- C.过拟合偏好数据← 正确答案
- D.词表大小不够
答案:ABC。奖励黑客指模型找漏洞骗高分;多样性崩塌指输出风格单一化;过拟合指死记硬背训练偏好,都是 RLHF 的经典风险。词表大小是模型结构设计问题,不是 RLHF 的特色挑战。
Q7. 奖励模型使用的 ranking loss 的特点是什么?
- A.只需要排序对标注数据← 正确答案
- B.直接比较标量分数做差← 正确答案
- C.用 Sigmoid 将差异映射为概率← 正确答案
- D.需要逐 token 的精确标签
答案:ABC。奖励模型的训练只需“回答 A 比 B 好”的排序对,不依赖逐 token 标签。它把两个回答的分数做差,再过 Sigmoid 得到“排序正确的概率”,从而用交叉熵更新模型。D 恰恰是 RLHF 想避免的标注成本。
Q8. PPO 里优势函数(Advantage)表示什么?
- A.动作价值与状态价值的差← 正确答案
- B.模型的参数数量
- C.生成的答案长度
- D.训练数据的数量
答案:A。优势函数表示当前动作的实际回报比 Critic 预估的“平均水平”好多少。正优势说明动作超预期、需要增强;负优势说明低于预期、需要抑制。B/C/D 与优势的定义无关。它背后是对累积奖励的动态规划估计,是 PPO 梯度方向的核心信号。
Q9. 为什么 RLHF 要采用相对排序而非绝对分数标注?
- A.绝对分数无法保存
- B.排序更容易达成一致← 正确答案
- C.排序的标注成本更低
- D.绝对分数会导致过拟合
答案:B。人类标注者在绝对分数上很难统一口径(有人给 80 分、有人给 95 分),但“这一条回答比另一条更好”的判断共识度高得多。排序标注的一致性好,训练出的奖励模型更稳定。A 错在绝对分数完全可以保存;C 排序标注并不一定成本更低;D 与是否过拟合无直接关系。
Q10. 关于 RLHF 的 PPO 训练流程,以下哪些描述正确?
- A.Actor 和 Critic 往往同时训练← 正确答案
- B.使用 KL 惩罚控制策略偏移← 正确答案
- C.奖励模型训练完成后基本不再更新← 正确答案
- D.PPO 可以完全不需要数据采集
答案:ABC。在 PPOTrainer 代码中,Actor 和 Critic 同时接受优化;KL 惩罚是 PPO 的标准组件;奖励模型在训练完成后通常冻结,作为固定打分器使用。D 错在 PPO 仍然需要从分布中采样提示词、生成连续回复来收集轨迹数据,并非完全不需要数据采集。