强化学习与人类对齐
1. 介绍一下 PPO、DPO、GRPO 的定义、结构区别、优缺点及适用场景。
1. PPO
- $r_t$ 是新旧策略的概率比:$r>1$ 表示新策略更倾向这个动作,$r<1$ 表示更不倾向。
- $A_t$ 是优势:$A>0$ 表示这个动作比平均好,$A<0$ 表示比平均差。
- clip 把 $r$ 限制在 $[1-\epsilon,1+\epsilon]$,$\epsilon$ 一般取 0.2。作用是一次更新不要偏离旧策略太远,防止某一批数据把策略改崩。
2. PPO 的 Clip 机制是什么?为什么公式里面 Clip 了外面还要计算一次 min?
先给公式
- $r_t$ 是新旧策略的概率比:$r>1$ 表示新策略更倾向这个动作,$r<1$ 表示更不倾向。
- $A_t$ 是优势:$A>0$ 表示这个动作比平均好,$A<0$ 表示比平均差。
- clip 把 $r$ 限制在 $[1-\epsilon,1+\epsilon]$,$\epsilon$ 一般取 0.2。作用是一次更新不要偏离旧策略太远,防止某一批数据把策略改崩。
只用 clip 的话,它是双向截断:好的方向不让走太远(这是我们想要的),但坏的方向也不让纠正太多(这不是我们想要的)。加上 min 之后,取的是两者中更小、更悲观的那个,效果变成:只限制”继续往好处走”,不限制”把错误纠正回来”。
| 情况 | 含义 | min 选中 | 梯度 |
|---|---|---|---|
| $A>0,\ r>1.2$ | 好动作,概率已经涨够了 | clip 项 $1.2A$ | 0,不再继续涨 ✅ |
| $A>0,\ r<0.8$ | 好动作,概率反而被压低了 | 原项 $rA$ | 有梯度,把它拉回来 ✅ |
| $A<0,\ r<0.8$ | 坏动作,概率已经降够了 | clip 项 $0.8A$ | 0,不再继续降 ✅ |
| $A<0,\ r>1.2$ | 坏动作,概率反而涨了 | 原项 $rA$ | 有梯度,把它压下去 ✅ |
3. Clip 可以限制分布差异,还有哪些方法可以做到?
- KL散度(PPO-Penalty)
不做硬性截断,偏离越多扣分越多。自适应 KL 会动态调整 $\beta$:KL 太大就把 $\beta$ 调大,KL 太小就把 $\beta$ 调小。
- 早停
每个 epoch 都监控新旧策略的 KL,一旦超过阈值,这一轮就停止更新。实现简单,经常和 clip 一起用。
- 把 KL 加进奖励(RLHF 的标准做法)
前两种约束的是”新策略 vs 上一轮的旧策略“,管的是每一步更新的步长.这一种约束的是”当前策略 vs 参考模型“,也就是 SFT 之后的 Gemma,管的是整个训练过程中总共漂移了多远,防止 reward hacking 和遗忘
- TRPO(信赖域):把 KL 写成硬约束
4. PPO 和 GRPO 的结构区别,各自适用场景
| 对比维度 | PPO | GRPO |
|---|---|---|
| 核心模型 | 四个模型:策略模型、参考模型(ref policy)、奖励模型(reward model)、评论家模型(critic) | 三个模型:策略模型、参考模型、奖励模型(无 critic) |
| 优势计算 | 依赖评论家模型估计状态价值 | 对组内多个答案的奖励做归一化,得到相对优势 |
| 计算开销 | 高,四个大模型同时运行,显存占用极大 | 较低,省去了 critic 的训练,但一次要生成多个答案,推理成本增加 |
| 适用场景 | 通用 RLHF,需要逐 token 的细粒度反馈,计算资源充足 | 数学、代码等有客观评判标准的任务,资源有限但能接受较高的推理成本 |
5. DAPO、GSPO 具体做了什么改进?
看项目有没有,暂时忽略
6. 介绍一下奖励函数的坍缩现象和问题
reward hacking现象:
- 奖励分布趋同:到训练后期,不管 prompt 是什么,奖励分布都变成同一种形状,和 prompt 本身无关了。本来”写一个故事”这种开放问题,好回答应该很多,分布比较分散;”1+1=?”这种确定问题,只有一个好答案,分布应该很集中。坍缩之后两者变得一样。
- 模式崩溃(mode collapse):输出集中到一种高频套路上,比如过度礼貌。
- 奖励饱和:分数逼近上限,但实际质量不再提升。
- 多样性丧失:生成内容千篇一律,缺少创造性。
- Reward Hacking:生成”看起来像高分回答”的内容,实际上是编造的,甚至有害,用来骗过奖励模型。
缓解方法:
- 多个奖励模型集成:取多个 RM 的平均分或最低分,单个 RM 的漏洞更难被钻。
- 多样性奖励:额外奖励和其他回答不同的输出。
- 熵约束:在 loss 里加熵正则,防止输出分布塌缩到少数几个 token 上。
- 定期刷新 RM:用当前策略生成的新回答重新标注、重新训练 RM,补上被钻的漏洞。
7. 多目标优化奖励函数冲突怎么处理
1. 加权求和
- 优点:最直接,合成一个奖励后按单目标训练就行。
- 缺点:权重 $\lambda_i$ 很难定;各个奖励的量纲不同,直接相加会让数值大的那项占主导。比如”正确性”是 0 或 1,”长度分”是 0 到 10,加起来以后,模型基本只在乎长度。
2. GDPO(多目标版的 GRPO)
专门解决上面”量纲不同”的问题。做法分三步:
- 对每个奖励分量分别在组内做归一化;
- 把归一化后的各个分量加起来;
- 最后再做一次 batch 级归一化,让数值范围稳定。
和 GRPO 的区别:GRPO 是先加总、再归一化,数值大的分量会盖过其他分量;GDPO 是先拆开、各自归一化、再加总,每个目标对优势的影响是对等的。
3. 分层 / 条件优化
先排优先级,满足重要目标之后,再优化次要目标。原文的例子:先要求安全分高于阈值(无害),满足之后再最大化有帮助分。对 Gemma 来说就是:开锁这类请求,只要安全分不达标,再有帮助也不给分。
4. 帕累托优化
不追求单一的最优解,而是寻找一组非支配解(帕累托前沿):这些解在某个目标上更好,就必然在另一个目标上更差,互相之间没法比出绝对的高低。最后再按需要从前沿上挑一个。
8. 离线强化学习和在线强化学习有什么区别?RLHF 属于哪一种?
- 在线 RL:模型一边和环境交互一边学。数据由当前策略实时生成,生成后马上用来更新,属于 on-policy。
- 离线 RL:只从一个事先收集好的固定数据集里学,训练过程中不再和环境交互,属于 off-policy。
| 对比维度 | 在线 RL | 离线 RL |
|---|---|---|
| 和环境的关系 | 实时交互 | 不交互,只读固定数据集 |
| 数据来源 | on-policy,由当前策略产生 | off-policy,由别的策略或人产生 |
| 优点 | 数据新鲜,和当前策略的分布一致 | 数据可以反复用,训练安全、便宜 |
| 缺点 | 采样成本高,训练慢 | 对数据集外的动作估值不准(OOD 问题) |
RLHF 属于哪种?原文的答案是:混合型
- 训练奖励模型:用固定的人类偏好数据集训练,属于离线。
- PPO 微调:Gemma 不断针对 prompt 生成新回答,冻结的奖励模型实时打分,再马上用这些新数据更新 Gemma,属于在线。
9. 为什么要用 Reference Model?为了解决什么问题?
Reference Model 是 RL 起点模型的冻结副本,通过 KL 约束策略不要偏离太远,
一是防止灾难性遗忘、保持语言流畅和多样,二是防止 reward hacking,避免模型钻奖励模型的漏洞生成无意义的高分内容。
10. KL 散度公式是什么?有几种估计方法?
两个性质:非负(两个分布完全相同时才等于 0),不对称($\mathrm{KL}(P|Q)\neq\mathrm{KL}(Q|P)$)。
LLM 用的是反向 KL
| 正向 KL $\mathrm{KL}(\pi_{\text{ref}}|\pi_\theta)$ | 反向 KL $\mathrm{KL}(\pi_\theta|\pi_{\text{ref}})$ | |
|---|---|---|
| 从谁那里采样 | 参考模型 | 当前策略 |
| 行为 | mass-covering:要覆盖参考模型所有高概率的区域 | mode-seeking:集中在参考模型的某个高概率峰上 |
| 用在 LLM 上 | 要从冻结模型额外采样,贵,而且分布会漂移 | 直接用 PPO/GRPO 已经采到的样本,还能防 reward hacking(不去参考模型概率很低的区域) |
三、三种估计方法(k1 / k2 / k3)
整句的 KL 没法枚举所有序列来算,所以对每个采样出来的 token 做蒙特卡洛估计。记 $r=\frac{\pi_{\text{ref}}}{\pi_\theta}$,样本从 $\pi_\theta$ 采:
| 估计器 | 公式 | 无偏? | 方差 | 非负? |
|---|---|---|---|---|
| k1 | $-\log r=\log\frac{\pi_\theta}{\pi_{\text{ref}}}$ | ✅ | 高 | ❌ 单个样本可能是负的 |
| k2 | $\frac12(\log r)^2$ | ❌ | 低 | ✅ |
| k3 | $r-1-\log r$ | ✅ | 低 | ✅ |
11. on-policy distillation(OPD)的 loss function 是什么?如果不考虑全词表计算 KL 散度,可否将其写为 ratio × advantage 的形式?
看项目有没有,暂时忽略