Training Language Models to Follow Instructions with Human Feedback

用 SFT、奖励模型和 PPO 构建 RLHF 闭环,让语言模型从“会续写”走向“更会按人类意图回答”。

年份与会议

2022 · arXiv

作者

Long Ouyang、Jeffrey Wu、Xu Jiang、Diogo Almeida、et al.

主题

RLHF

阅读时长

约 3 分钟

收录时间

2022/03/04

标签

原文链接

https://arxiv.org/abs/2203.02155

为什么 InstructGPT 改变了“好模型”的定义

预训练大模型在 InstructGPT 之前已经很能写、很能续写,但“会写”不等于“会配合用户”。现实交互里,人们真正需要的是:

  • 能理解指令
  • 能按格式输出
  • 能在风险场景中更稳妥
  • 能在多个合理答案里偏向人更喜欢的那一种

InstructGPT 最重要的贡献,就是把这个问题系统化了。它告诉我们:模型能力不只来自预训练语料中的统计规律,还来自人类偏好的显式注入。

这篇论文之后,“alignment / 对齐”不再只是附属话题,而成为大模型产品化的中心议题。

背景:为什么预训练模型不等于好助手

自回归预训练模型的训练目标,是根据上下文预测下一个 token。这个目标非常强大,却并不直接等价于“按用户要求完成任务”。

因此会出现很多典型问题:

  • 用户让模型回答问题,它却写成一段风格飘忽的续写。
  • 用户要求结构化输出,模型给出自由散文。
  • 模型会说很多“语言上像样”的内容,但不一定最有帮助。
  • 面对高风险请求,模型缺乏稳定的拒答或降级策略。

InstructGPT 要解决的,正是“从语言建模目标到产品交互目标”的这段缺口。

整体方法:三段式 RLHF 流程

论文中的经典流程可以概括为三步:

  1. 监督微调(SFT)
  2. 奖励模型训练(Reward Model)
  3. 强化学习优化(PPO)

这套流程后来几乎成为 RLHF 的标准模版。

把这三步压缩到一张图里,会更容易看出 InstructGPT 到底把“对齐”插在了训练链路的什么位置:

InstructGPT 的 RLHF 三段式流程图 从预训练底座开始,先做 SFT 形成初版助手,再通过人类偏好比较训练奖励模型,最后使用 PPO 优化主模型,使其更偏向高奖励回答。 RLHF 把“人类偏好”正式接进训练闭环
  <g>
    <rect x="36" y="120" width="150" height="74" rx="18" fill="#e8f1ff" stroke="#98b7e1" />
    <text x="111" y="150" text-anchor="middle" font-size="19" font-weight="700">预训练模型</text>
    <text x="111" y="173" text-anchor="middle" font-size="13" fill="#4b5563">会续写,但未必会配合</text>
  </g>

  <g>
    <rect x="236" y="88" width="178" height="138" rx="22" fill="#eef6e8" stroke="#a8c48e" />
    <text x="325" y="122" text-anchor="middle" font-size="20" font-weight="700">阶段一:SFT</text>
    <text x="325" y="148" text-anchor="middle" font-size="13" fill="#4b5563">人类示范回答</text>
    <text x="325" y="171" text-anchor="middle" font-size="13" fill="#4b5563">学会指令跟随、格式和角色</text>
    <rect x="270" y="186" width="110" height="24" rx="10" fill="#ffffff" stroke="#a8c48e" />
    <text x="325" y="202" text-anchor="middle" font-size="12" fill="#4b5563">得到初版助手模型</text>
  </g>

  <g>
    <rect x="464" y="74" width="220" height="166" rx="22" fill="#fff4dc" stroke="#e2c36f" />
    <text x="574" y="108" text-anchor="middle" font-size="20" font-weight="700">阶段二:奖励模型</text>
    <text x="574" y="136" text-anchor="middle" font-size="13" fill="#4b5563">同一 prompt 生成多个候选回答</text>
    <text x="574" y="159" text-anchor="middle" font-size="13" fill="#4b5563">标注者做偏好比较 / 排序</text>
    <text x="574" y="182" text-anchor="middle" font-size="13" fill="#4b5563">训练“哪个回答更受偏好”的打分器</text>
    <rect x="522" y="200" width="104" height="24" rx="10" fill="#ffffff" stroke="#e2c36f" />
    <text x="574" y="216" text-anchor="middle" font-size="12" fill="#4b5563">Reward Model</text>
  </g>

  <g>
    <rect x="734" y="88" width="208" height="138" rx="22" fill="#fce7ef" stroke="#e2a8bd" />
    <text x="838" y="122" text-anchor="middle" font-size="20" font-weight="700">阶段三:PPO 优化</text>
    <text x="838" y="148" text-anchor="middle" font-size="13" fill="#4b5563">主模型生成回答</text>
    <text x="838" y="171" text-anchor="middle" font-size="13" fill="#4b5563">奖励模型打分 + 参考模型约束</text>
    <text x="838" y="194" text-anchor="middle" font-size="13" fill="#4b5563">让模型更偏向高偏好行为</text>
  </g>

  <g>
    <rect x="748" y="268" width="178" height="56" rx="18" fill="#dff4f0" stroke="#8dc7bd" />
    <text x="837" y="299" text-anchor="middle" font-size="18" font-weight="700">对齐后的助手模型</text>
  </g>

  <line x1="186" y1="157" x2="236" y2="157" stroke="#5b6b7f" stroke-width="3" marker-end="url(#rlhf-arrow)" />
  <line x1="414" y1="157" x2="464" y2="157" stroke="#5b6b7f" stroke-width="3" marker-end="url(#rlhf-arrow)" />
  <line x1="684" y1="157" x2="734" y2="157" stroke="#5b6b7f" stroke-width="3" marker-end="url(#rlhf-arrow)" />
  <line x1="838" y1="226" x2="838" y2="268" stroke="#5b6b7f" stroke-width="3" marker-end="url(#rlhf-arrow)" />
</g>
InstructGPT 的方法核心不是单个 PPO 公式,而是先用示范数据把模型拉进任务空间,再用偏好比较持续塑形。

第一步:SFT 先把模型拉进任务空间

在 SFT 阶段,标注者会根据一批提示词给出高质量示范回答。模型先学习这些“理想回答”的基本风格,例如:

  • 回答更贴近任务
  • 语言更清晰
  • 格式更稳定
  • 更像一个愿意合作的助手

这一步的作用不是彻底解决对齐,而是先给模型一个合理起点。没有 SFT,后面的奖励建模和强化学习往往会更不稳定。

第二步:奖励模型把“人类偏好”变成可优化信号

有了初版 SFT 模型后,可以针对同一个提示生成多个候选回答,再请标注者对这些回答排序或比较,判断哪个更好。

这些偏好数据会被用来训练奖励模型。奖励模型学的不是“正确答案是什么”,而是“人类更偏好哪种回答”。这非常关键,因为很多真实任务里并不存在唯一标准答案,但存在明显更优的表达方式。

例如人类偏好通常会综合考虑:

  • 是否有帮助
  • 是否更准确
  • 是否更安全
  • 是否更简洁清晰

奖励模型的出现,本质上是把模糊的人类偏好转成一个模型可优化的打分函数。

第三步:用 PPO 让主模型偏向高奖励回答

最后,论文使用 PPO 这类强化学习方法来更新语言模型,让它在保持原有语言能力的同时,更倾向于输出奖励模型认为更优的回答。

这里有两个重点:

  1. 不是重新从零训练,而是在已有语言模型基础上做行为塑形。
  2. 需要加入约束,避免模型为了拿高分而偏离原模型太远。

从直觉上说,PPO 这一步像是在调模型的“行为偏好”,而不是重学全部世界知识。

论文最震撼的结果是什么

InstructGPT 最有名的结论之一是:一个参数量远小于 GPT-3 的对齐后模型,也可能在人类偏好评估中胜过更大的原始预训练模型。

这个结果的意义非常大,因为它说明:

  • 规模不是唯一决定因素。
  • “更符合人类期望”本身就是一种重要能力。
  • 在产品场景里,行为质量的提升有时比纯参数扩张更值钱。

这其实从根本上改变了人们评价模型的方式。过去问的是“模型会不会做”;从这篇论文开始,更多人开始问“模型做出来的方式是不是人想要的”。

为什么这篇论文会直接通向 ChatGPT

如果把 ChatGPT 看成一个产品拐点,那么 InstructGPT 就是它的方法论前身。两者之间最清晰的继承关系包括:

  • 使用指令示范数据训练基础对话能力
  • 使用人类偏好比较数据塑造回答风格
  • 不再只追求语言流畅度,而是追求帮助性、诚实性和安全性

因此,InstructGPT 的影响不只在学术上,而是在整个行业产品设计上。今天几乎所有做大模型应用的团队,都会在某种程度上复用这条思路。

它解决了什么,也引入了什么问题

RLHF 非常有效,但也带来了新的挑战:

1. 标注成本高

高质量偏好数据需要大量人工参与,而且还要保证标注一致性与质量控制。

2. 奖励模型会继承偏见

如果标注者偏好有局限,奖励模型也会把这些局限学进去。模型会更“讨喜”,但不一定更客观。

3. 可能出现奖励黑客

主模型学会迎合奖励模型,并不总是等于真正更好。有时它只是更会“拿高分”。

4. 训练链路复杂

SFT、奖励模型、PPO 每一步都有数据和工程成本,调试门槛高,不适合所有团队。

这些问题后来都推动了 DPO、RLAIF、Constitutional AI 等替代路线的发展。

为什么 InstructGPT 之后“对齐”变成主舞台

InstructGPT 之前,很多团队的默认想法是:先把模型做得尽可能强,再考虑安全和交互。它之后,更多人开始接受一个现实:

对用户来说,一个更可控、更稳定、更懂指令的模型,往往比一个只在离线基准上更高分的模型更有价值。

这也是为什么后续几年里,偏好学习、拒答策略、红队测试、安全评测和系统提示设计都迅速成为核心工作。

读这篇论文时最值得抓住什么

你最应该抓住的不是 PPO 的公式细节,而是下面这条主线:

  1. 预训练解决“会说”。
  2. SFT 解决“会按要求说”。
  3. RLHF 解决“说得更像人想要的样子”。

只要把这条链路看清楚,后续去读 DPO、Constitutional AI 或各种偏好优化工作时,就不会迷失在术语里。

延伸阅读

  • 想先把整条训练与对齐链路建立起来,可以继续看 大模型训练流水线总览
  • 想看更轻量的偏好优化替代方案,可以继续读 Direct Preference Optimization
  • 如果你关注开源底座与对齐结合,LLaMA 路线和 LoRA 路线会是很自然的下一步。

相关内容

沿着相近主题继续阅读,加深对方法边界与实践场景的理解。