08 RLHF 与 DPO:让模型更符合偏好
- 理解 RLHF 为什么需要偏好数据。
- 知道 PPO、DPO 的差异。
- 用 JS 计算一次 DPO loss。
SFT 让模型学会回答格式,但“哪个回答更好”很难只靠标准答案定义。RLHF/DPO 使用人类偏好:给同一个问题两个回答,标出更好的那个。
RLHF 常见流程:
SFT 模型↓收集偏好数据↓训练 Reward Model↓用 PPO 优化策略模型DPO 把偏好优化写成更直接的损失函数,避免显式训练 reward model 和复杂 RL 循环。
参考项目里的对应实现思路
Section titled “参考项目里的对应实现思路”HuggingFace TRL 支持 PPO、DPO、ORPO、GRPO。OpenRLHF 更偏工业级训练流程。
最小代码实验
Section titled “最小代码实验”这个实验用 chosen/rejected 两个回答的 logprob 计算 toy DPO loss。
运行命令与预期输出
Section titled “运行命令与预期输出”运行:
npm run lab:08预期你会看到偏好样本、参考模型与当前模型的 logprob 差异,以及一个正的 DPO loss。
- RLHF 不等于让模型变“绝对正确”,它只是对齐偏好分布。
- 偏好数据有价值观和标注偏差。
- DPO 简化了流程,但仍依赖高质量偏好样本。