30u30 中文导读 / 30 天目录 / 第 30 天

第 30 天 · 不写奖励函数,让人挑哪段录像更好

第 6 单元Deep Reinforcement Learning from Human PreferencesPaul Christiano, Jan Leike, Tom B. Brown et al.NeurIPS 2017 · 2017
这是导读,不是翻译。先用 10 分钟拿到这篇论文的思想地图,再去读 原论文 →,去原仓库的 30_RLHF/ 目录 → 动手写代码。
给孩子讲:这一天有 10 岁孩子能听懂的讲义,带猜字游戏和动手活动,可打印。打开儿童讲义 → · PDF 简体 · PDF 繁體

一句话

Christiano 等人让人类只比较两段 1–2 秒的智能体录像,用这些偏好训练奖励模型,再用强化学习优化这个奖励。人类反馈不到交互量的 1%,就能解决 Atari 和 MuJoCo 任务,还教会了机器人后空翻。

论文讲了什么

强化学习需要奖励函数,但很多目标写不出奖励。“做一个漂亮的后空翻”该怎么打分?手写的奖励容易被智能体钻空子,让人给每一步打分又太贵。这篇论文提出第三条路:人只做比较,奖励函数由模型学出来。

系统由 3 个异步运行的过程组成:

  1. 策略在环境中行动,并用当前奖励模型给出的奖励做强化学习。Atari 任务用 A2C,MuJoCo 任务用 TRPO。
  2. 标注者观看两段 1–2 秒的轨迹片段,选出更好的一段。标注者也可以选“一样好”或“无法比较”,后者不进入训练数据。
  3. 奖励模型用这些比较结果做监督学习。

奖励模型用 Bradley-Terry 模型把奖励和偏好连起来。片段 σ1 胜过 σ2 的概率是:

P(σ1 ≻ σ2) = exp(Σ r̂(σ1)) / (exp(Σ r̂(σ1)) + exp(Σ r̂(σ2)))

训练时对人的选择最小化交叉熵。论文还加了 3 个工程设计:

关键结果有 5 条:

关键概念

奖励模型(Reward model)
输入观测和动作(后来是文本),输出一个标量奖励的网络。它从人类比较中学出来,代替手写奖励函数,供强化学习优化。
Bradley-Terry 模型(Bradley–Terry model)
把两项比较的胜率写成 <code>P(A 胜) = e^a / (e^a + e^b)</code>,a 和 b 是两项的得分。它把“哪个更好”的数据变成可微的交叉熵损失。
成对偏好(Pairwise preference)
标注者只判断两段片段哪段更好,不给绝对分数。人做比较判断比打分更一致,也不需要事先统一评分尺度。
主动查询(Active query selection)
优先把奖励模型最不确定的片段对交给人标注。论文用集成成员预测结果的方差近似不确定性,并承认这只是粗略近似。
奖励钻空子(Reward hacking)
策略找到让学到的奖励很高、真实目标却没达成的行为。奖励模型只在见过的状态上可靠,策略一旦进入新区域,奖励就可能失真。
非平稳奖励(Non-stationary reward)
奖励模型在训练中持续更新,同一个行为的奖励会变化。论文因此选用对奖励变化较稳健的策略梯度方法,并在训练全程持续收集标注。

历史位置:为什么值得读

这篇论文是 OpenAI 与 DeepMind 的合作。第一作者 Paul Christiano 和末位作者 Dario Amodei 当时在 OpenAI,Jan Leike 和 Shane Legg(第 27 天的作者)在 DeepMind。作者关心的不是 Atari 分数,而是 AI 安全:目标复杂到写不成公式时,怎样让系统做人真正想要的事。

从偏好中学习并不是新想法。此前已有基于偏好的强化学习研究,但大多用于低维任务和简单的奖励形式。本文的贡献是把它扩展到深度强化学习,并把人类时间压到 1 小时左右。

此后的路线很清晰:

在清单里,本篇是终点站。第 25 天解释了怎样把预训练模型做大,第 29 天的 PPO 提供优化器,本篇提供把模型对齐到人类意图的方法。

学前准备

在原仓库怎么学

仓库用模拟标注者代替真人,对应论文里的合成标注实验。

  1. README.md:看本日的内容安排和文件清单。
  2. setup.py:运行它,检查依赖和实现是否可用。
  3. implementation.py:按顺序读 5 个部分。RewardModel 输出标量奖励。compute_preference_loss 实现 Bradley-Terry 交叉熵。SyntheticOracle 用真实奖励模拟标注者。PPOAgent 是策略。RLHF_Trainer 把整个循环串起来。
  4. data/README.md:了解偏好数据怎样在 CartPole-v1 上在线生成,本日不需要下载数据集。
  5. train_minimal.py:运行完整循环:采集片段、模拟标注、训练奖励模型、更新策略。可以用 --pairs、--segment_len、--rm_epochs、--ppo_epochs 参数调节规模。
  6. visualization.py:对比真实奖励与学到的奖励随训练的变化,并画奖励模型与模拟标注者的一致率。
  7. notebook.ipynb:在笔记本里逐步运行上面的流程。
  8. exercises/:做 5 个练习,依次是 Bradley-Terry 模型、偏好损失、奖励归一化、模拟标注者、完整 RLHF 循环。答案在 exercises/solutions/。

今天再看

这篇论文的框架几乎原样进入了每一个聊天模型。2026 年回看,有 3 个变化:

论文担心的核心问题仍未解决。Gao 等人 2022 年发现,策略对奖励模型优化得越狠,真实质量先升后降,这叫奖励模型过度优化。论文里 Pong 智能体“只防守、不进攻”的现象,就是这个问题的早期版本。

容易卡住的地方

延伸阅读