跳转到内容

08 RLHF 与 DPO:让模型更符合偏好

  • 理解 RLHF 为什么需要偏好数据。
  • 知道 PPO、DPO 的差异。
  • 用 JS 计算一次 DPO loss。

SFT 让模型学会回答格式,但“哪个回答更好”很难只靠标准答案定义。RLHF/DPO 使用人类偏好:给同一个问题两个回答,标出更好的那个。

RLHF 常见流程:

SFT 模型
收集偏好数据
训练 Reward Model
用 PPO 优化策略模型

DPO 把偏好优化写成更直接的损失函数,避免显式训练 reward model 和复杂 RL 循环。

HuggingFace TRL 支持 PPO、DPO、ORPO、GRPO。OpenRLHF 更偏工业级训练流程。

源码:labs/08-rlhf-dpo/index.mjs

这个实验用 chosen/rejected 两个回答的 logprob 计算 toy DPO loss。

运行:

Terminal window
npm run lab:08

预期你会看到偏好样本、参考模型与当前模型的 logprob 差异,以及一个正的 DPO loss。

  • RLHF 不等于让模型变“绝对正确”,它只是对齐偏好分布。
  • 偏好数据有价值观和标注偏差。
  • DPO 简化了流程,但仍依赖高质量偏好样本。