7. InstructGPT 核心
7.1 InstructGPT 核心
1. 问题与动机
- 问题 :语言模型(如GPT-3)规模扩大后仍存在幻觉、偏见、有害内容等问题,未对齐人类意图。
- 目标 :通过人类反馈强化学习 (RLHF),使模型具备有用性、诚实性、无害性 。
2. 核心方法:RLHF 三阶段流程
Step 1:监督微调(SFT)
- 输入:随机抽取的指令(如“解释登月”)+ 人工标注的理想回答。
- 过程:用高质量问答对对GPT-3进行监督训练。
- 目标:使模型初步模仿人类回答模式(“照猫画虎”)。
Step 2:奖励模型训练(RM)
- 输入:同一指令下多个模型生成的答案(如A/B/C/D)。
- 过程:人工标注员对答案排序(如
),训练RM预测偏好分数。 - 目标:构建“人类偏好裁判”,为后续强化学习提供评分依据。
Step 3:强化学习微调(PPO)
- 输入:新指令(如“写青蛙故事”)+ RM的奖励值
。 - 过程:模型生成回答 → RM评分 → 通过PPO算法更新策略,最大化奖励并加入KL散度惩罚(防止偏离原始分布)。
- 目标:通过“试错-反馈”机制,使模型输出更贴合人类偏好。
核心逻辑:模仿人类(SFT)→ 学习偏好(RM)→ 动态优化(PPO),最终实现模型行为与人类意图的对齐。
先让模型学会人类怎么做(监督微调),
再让它知道什么样的答案更受欢迎(奖励模型),
最后用强化学习,不断调整自己,让输出越来越“人味儿”(PPO模型)。
3. Models
1. 监督微调(SFT)
- 在人工标注的“理想回答”数据上对 GPT-3 进行监督微调。
- 训练设置:16 个 epoch,余弦学习率衰减,0.2 残差 dropout。
- SFT 模型选择依据:验证集上的奖励模型(RM)评分。
- 发现:在第 1 个 epoch 后验证损失即开始过拟合,但增加 epoch 数仍能提升 RM 分数和人工偏好得分。
2. 奖励建模(RM)
- 基于 SFT 模型构建奖励模型,去掉最后一层 embedding,输出 prompt + response 的标量分数。
- 使用 6B 参数规模的 RM(计算效率高),发现 175B RM 不稳定,不适合作为价值函数。
- RM 训练基于对比数据集,每个 prompt 对应两个模型输出,由人工标注偏好。
对比数据构建方式
- 标注员对 K 个(K=4~9)模型输出排序,生成
组对比样本。 - 每个 prompt 的所有对比视为一个 batch 元素,避免过拟合并提高训练效率。
RM 损失函数
:奖励模型对 prompt 和回答 的打分。 :同一 prompt 下被标注员认为更好/更差的回答。 :sigmoid 函数,使输出落在 区间。 - 损失目标是最大化偏好差异,本质是一个二分类逻辑回归问题。
奖励模型
是在监督微调(SFT)之后单独训练的,其目标是模拟人类对模型输出的偏好(通过标注的排序数据)。 对于prompt
,取出一对 ,假设 比 排序高。首先把 (问题 和回答 )输入到奖励模型 中计算出分数,然后减去关于 的奖励分数。我们希望这个差值越大越好,最后通过sigmoid函数、log加负号的方式构成损失函数。具体而言,这是一个Logistic Regression 的二分类问题 ,目标是让 的分数尽可能大, 的分数尽可能小。当 时,理想情况下,我们能从1次排序中生成36对样本( )。 排序4个答案可能要30s,排序9个答案大概只要40s,加上读题时间,时间其实只多了30% ~ 40%,并没有成倍增长。但由于9个答案能产生36个排序对,而4个答案只能产生6个,所以用差不多的人工时间,标注信息却多了6倍。极大提升数据效率,这是很赚的地方。
最贵的部分是
的计算。对于6B的GPT-3模型,虽然每次计算涉及到36个对比样本,但实际只需要做9次前向传播。如果某个输出的分数已经计算出来,可以在后续对比中复用这个结果。这样,我们通过复用前向计算结果,将36次计算减少到9次,节省了大约4倍的时间。如果 ,每次只选出最优答案(一个对比对),模型容易过拟合,因为样本数量太少。
3. 强化学习(RL)
- 因 RM 输出无绝对尺度,需归一化处理(标注员演示数据均值为 0)。
- 使用 PPO 算法,以 SFT 模型为起点,针对每个 prompt 进行强化学习。
- 环境为 bandit 类型:输入 prompt → 输出 response → RM 打分 → 结束。
- 加入 KL 散度惩罚项,防止策略偏离 SFT 分布。
- 奖励模型初始化 value function,得到的模型称为“PPO”。
进一步优化:PPO-ptx
- 在 PPO 更新中引入预训练梯度,缓解“对齐成本”(alignment tax)。
- 新的目标函数:
:当前 RL 策略。 :初始 SFT 策略。 :原始预训练分布。 :KL 惩罚系数; :预训练梯度权重。 - “PPO”:
;“PPO-ptx”: - 默认模型 InstructGPT 即为 PPO-ptx(结合 RL 与预训练梯度)。
强化学习的PPO也是OpenAI之前的工作,核心是通过在目标函数
上做随机梯度下降 来更新 policy。在RL中,策略(policy)由模型参数化,即我们要学习的模型 ,它通过生成动作(action)输出结果 。一旦生成 ,环境会通过奖励模型 给这个回答打分,但模型本身不会改变环境(因为任务只有一轮交互)。 初始化为监督微调后的模型 ,通过不断更新参数 让目标函数 的值最大化。 三个数据集之一在线强化学习数据集
(约31,000个固定prompt)。每次取一个prompt ,输入当前 模型生成回答 ,再用训练好的奖励模型 计算reward。每次迭代 是固定的, 随着policy更新会变化,reward也会变化。 为何需要奖励模型
?因为人类标注的数据是排序(如 ),而不是具体分数或正确答案。如果每次生成 后都让人重新标注排序(在线学习Online Learning),成本太高了,所以我们需要训练一个 来模拟人类打分。 随着
的不断更新,模型生成的新 可能和奖励模型训练时用的 逐渐偏离,导致reward变得不准,为了防止这个问题,我们在目标函数里加了一个KL散度惩罚项 ,KL散度其实就是用来衡量两个模型输出概率分布的差异,具体来说,就是比较现在的策略( )和最初SFT模型( )生成答案的概率差别。我们希望KL越小越好,最好为0,说明两个分布几乎一样,加个负号就是鼓励模型尽量别跑偏,输出保持稳定。 如果直接用前面两项,可能模型只对当前任务的输出产生很好的性能,但对其他任务的性能下降(用于缓解alignment tax:模型在追求人类偏好的过程中可能损失通用任务性能 ,泛化能力)。所以
它复用了原来 GPT-3 的预训练目标(损失函数)又拿了回来了。超参数 控制它偏向原始数据的强度: 时仅优化RM的目标(PPO 模型); 时引入预训练梯度(PPO-ptx 模型)。 PPO目标函数的三项:
:模型生成答案后,奖励模型给分,分越高越好。 - KL惩罚项:限制策略别偏离原本SFT模型太远,防止输出越来越离谱。
- 预训练损失(可选):让模型还能保持原来GPT的泛化能力,不只会讨好人类。
单纯提升GPT-3参数规模(1.3B到175B),效果提升有限;
加入人类反馈微调(SFT)后,模型表现大幅跃升,远超同规模纯GPT-3;
进一步用RL(PPO和PPO-ptx)训练,效果比SFT显著更好;
这说明,光堆算力和数据不如用人类反馈好,方法比规模更重要。
参考资料
- InstructGPT: Training language models to follow instructions with human feedback
- InstructGPT 论文精读【论文精读·48】
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付