RLHF 三阶段:把策略梯度接进 LLM
第 4 课推出了 $\nabla_\theta J=\mathbb{E}[\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)\,A]$,但没说 $A$ 里的奖励 $r$ 从哪来。这课回答它:RLHF 的三阶段流水线,把人类的“这个回答更好”变成一个可求导的标量 $r$,再喂给第 4 课的公式。本课不重新推导——你将看到第 4 课的公式几乎原样复用,只是奖励换了来源、多了一个 KL 锚。
一、为什么需要 RLHF:对齐问题
预训练模型会预测下一个 token,但它不知道人类想要什么样的回答——可能啰嗦、有害、答非所问。监督微调(SFT)能用示范数据缓解,但:
- “好回答”没有唯一标准答案,难标注;
- 同一问题多种好答案,监督学习无法表达“都行”;
- 要的是偏好(A 比 B 好),不是模仿某一条。
RLHF 的思路:让人比较回答好坏 → 学一个奖励函数 → 用第 4 课的公式把策略往高奖励方向调。三阶段如下。
二、三阶段总览(点任一阶段看产物)
三、阶段 3 的目标函数:相对第 4 课只多一项
第 4 课目标是 $\max_\theta \mathbb{E}_{\tau\sim\pi_\theta}[G]$。RLHF 把奖励换成 RM 的输出,并加一个 KL 锚(不让 $\pi_\theta$ 跑离 SFT 模型 $\pi_{\text{ref}}$):
$$ J_{\text{RLHF}}(\theta) \;=\; \mathbb{E}_{x\sim\mathcal{D},\, y\sim\pi_\theta(\cdot|x)}\!\Big[\, r_\phi(x,y) \;\Big] \;-\; \beta\,\mathbb{KL}\!\big(\pi_\theta(\cdot|x)\,\big\|\,\pi_{\text{ref}}(\cdot|x)\big) $$
其中 $r_\phi$ 是阶段 2 学出的奖励模型(参数 $\phi$),$\beta$ 控制“追奖励 vs 别跑偏”的权衡。$x$ 是 prompt,$y$ 是生成的回答。
“魔法恒等式” $\mathbb{E}[\nabla\log\pi]=0$ 在这里仍保证基线 $V$ 可加可减、不偏梯度——这就是为什么阶段 3 能直接套第 4 课结论。(细节见 速查卡。)
四、代码演示:KL 锚把 π 往回拉
复用第 4 课的 3-臂老虎机,奖励 $r=[0.9,0.4,0.1]$ 现在当作奖励模型输出,$\pi_{\text{ref}}=$ 均匀分布(SFT 基线)。拖 $\beta$ 滑块:$\beta=0$ 退化为第 4 课(π(动作1)→0.95);$\beta$ 越大,KL 越把 π 拉回均匀。
| 第 4 课 | 第 5 课(RLHF)新增 |
|---|---|
| $\theta\!+\!=\!\alpha\nabla\log\pi\,A$ | 奖励来源 $r\to r_\phi$(RM);加 $-\beta\log\frac{\pi}{\pi_{\text{ref}}}$(KL 罚) |
本地运行:python lessons/code/0005_rlhf_stage3_skeleton.py(零依赖,已验证)。
五、自测
问题 1:RLHF 阶段 3 相对第 4 课的策略梯度,改了什么?
问题 2:KL 罚项 $\beta\,\text{KL}(\pi_\theta\|\pi_{\text{ref}})$ 的作用是?
六、推荐资源
读 InstructGPT 论文第 3 节(Method)。它就是 RLHF 三阶段的标准出处,本课结构与之完全对应。也可看 Spinning Up · Part 3 收尾,确认你已能读懂它。
(1) $\nabla p=p\,\nabla\log p$;(2)$\mathbb{E}[\nabla\log\pi]=0$ 为何能加基线/丢过去奖励;(3)为什么 RLHF 的更新式和第 4 课“一字不差”。若仍“一般”,第 6 课前我会插一次专项补强。
这是第 5 课。下一课预告:第 6 课 · 奖励建模——拆开阶段 2:用 Bradley-Terry 模型从人类偏好 A≻B 学出 $r_\phi(x,y)$,配可运行代码。
任何不懂的,直接问老师。