真实面经题目 · 原创解析

大模型后训练中,PPO 为什么通常被视为 on-policy,importance sampling 起什么作用?

PPO 通常被视为 on-policy,是因为它的训练样本来自当前或刚刚冻结的行为策略,更新只在这批新 rollout 附近做有限幅度的策略改进,而不是长期复用任意历史策略产生的数据。importance sampling 在 PPO 中主要通过新旧策略概率比修正采样策略和待优化策略之间的小偏差,使我们能用旧策略采到的样本估计新策略目标;但由于只修正动作概率、对状态分布偏移和大幅策略漂移无能为力,所以它不能把 PPO 变成真正意义上的通用 off-policy 算法。

出现于:百度 · 算法

60 秒回答模板

可以从三层回答:第一,on-policy 的核心是数据分布要贴近当前策略,PPO 每轮先用当前策略采样,保存生成 token 的 logprob、奖励和 advantage,再用这批数据做几轮小步更新后丢弃。第二,importance sampling 的作用是用 r_t(theta)=pi_theta(a_t|s_t)/pi_old(a_t|s_t) 把旧策略采样下的期望近似改写为新策略下的目标,让一个 batch 内的多轮 minibatch 更新有统计依据。第三,PPO 仍是 on-policy,因为这个比值只允许新旧策略很近;clip、KL penalty 或 early stop 都是在限制策略不要离采样分布太远,历史 replay 数据一旦策略差异大,方差和偏差都会失控。

考点 PPO 的样本来自近策略
难度 真实面经题
回答目标 让候选人说清楚 PPO 的 on-policy 本质、importance sampling 的局部修正作用、clip/KL 的稳定性意义,以及为什么这些机制不等于真正的 off-policy 学习。

深入解析

01

on-policy 的判定标准

on-policy 不是说每一个梯度步都必须重新采样,而是说用于估计策略梯度的数据必须来自当前策略或非常接近当前策略的行为策略。PPO 的典型流程是冻结一个 pi_old 采样 prompt 和 response,计算奖励、value、advantage,然后在这批 rollout 上更新 pi_theta 若干个 epoch。更新结束后,这批数据通常不再长期复用,而是重新用更新后的策略采样,因此训练分布始终围绕最新策略滚动前进。

02

PPO 中新旧策略的角色

采样时的策略 pi_old 是行为策略,优化时的 pi_theta 是当前待训练策略。因为同一批样本会被多个 minibatch epoch 反复使用,第二个 epoch 以后 pi_theta 已经不等于 pi_old,直接把旧策略样本当成新策略样本会有分布偏差。PPO 通过保存采样时每个 action 的 logprob,让训练时能计算新旧概率比,从而知道当前策略相对采样策略在这个动作上变大还是变小。

03

importance sampling 的数学作用

importance sampling 的核心是把在 pi_old 分布下采到的样本重新加权,用概率比 r_t(theta)=pi_theta(a_t|s_t)/pi_old(a_t|s_t) 近似估计 pi_theta 下的目标。放到策略梯度里,常见形式是 r_t(theta) 乘以 advantage:如果一个动作 advantage 为正,新策略提高它的概率会增加目标;如果 advantage 为负,新策略降低它的概率会增加目标。这个比值让同一批 rollout 在策略发生小幅变化后仍可用于优化。

04

clip 为什么关键

单纯 importance sampling 在高维动作空间里很容易方差爆炸,尤其是大语言模型按 token 生成,一个 response 的概率比可能因为多个 token 的变化而非常极端。PPO 的 clipped objective 会把 r_t 限制在 1-epsilon 到 1+epsilon 的邻域内,避免模型为了某些高 advantage 样本把概率一步推得过远。它本质上是在用保守更新换取稳定性,让 importance sampling 只服务于近邻策略更新。

05

为什么不是普通 off-policy

off-policy 算法通常可以从 replay buffer 中长期学习,数据可能来自很久以前的策略、人工策略甚至其他行为策略。PPO 虽然使用了 pi_old 采样、pi_theta 更新的比值修正,但它没有完整解决状态分布偏移;在语言模型中,状态是 prompt 加已生成前缀,新策略如果早期 token 分布变化很大,后续前缀状态也会变。importance sampling 主要修正已观察状态上的动作概率,不保证任意旧数据都可用。

06

RLHF 场景中的对应关系

在大模型后训练里,环境状态可以理解为 prompt 和当前生成前缀,动作是下一个 token,策略是语言模型。PPO 先让当前策略生成回答,再由奖励模型、人类偏好模型或规则奖励打分,并通常加入相对参考模型的 KL 约束。训练时计算每个 token 的 advantage 和新旧 logprob 比值,更新模型倾向于更高奖励的 token 序列,同时限制它不要偏离原模型过远。

07

面试中的边界表达

准确的说法是:PPO 是一种近似 on-policy、带有限 importance sampling 修正的策略优化方法。它允许在一批刚采样的数据上做多次更新,但前提是新旧策略差异受限;importance sampling 是为了修正这几个更新 epoch 内的轻微 mismatch,而不是为了支持无限 replay。把这个边界说清楚,比简单背 PPO 是 on-policy 更能体现理解。

易错点

  • 把 PPO 说成纯 off-policy,只因为它用了 pi_old 和 importance sampling。
  • 忽略 PPO 数据通常来自当前策略 rollout,并且每轮更新后会重新采样。
  • 只写 importance sampling 是修正偏差,却不说明修正的是新旧策略动作概率分布的偏差。
  • 认为 clipped objective 只是防止过拟合,而没有指出它控制策略更新幅度和方差。
  • 没有区分动作分布 mismatch 和状态分布 mismatch,导致高估 importance sampling 的能力。
  • 在 RLHF 场景中只谈强化学习公式,不解释 prompt、前缀、token、reward model 和 KL 的对应关系。
  • 把一个 batch 多轮训练等同于 replay buffer 长期训练,混淆局部样本复用和 off-policy 学习。

面试官追问

为什么 PPO 一个 batch 可以训练多轮,却还叫 on-policy?

因为这个 batch 是由刚冻结的行为策略采出来的,而且训练用 clipping 或 KL 限制当前策略不要离行为策略太远。多轮 epoch 只是对新鲜数据的局部重复利用,不代表可以长期复用很旧的 replay 数据。

importance sampling ratio 太大或太小意味着什么?

ratio 太大说明当前策略比采样策略更倾向于这个动作,ratio 太小说明当前策略更不倾向于这个动作。极端 ratio 会带来高方差和不稳定更新,所以 PPO 会裁剪 ratio 或用 KL early stop 控制策略漂移。

PPO 的 importance sampling 能完全消除偏差吗?

不能。它主要修正给定状态下动作概率的 mismatch,而状态分布本身也由策略决定。只要新旧策略差异大,模型会进入不同前缀状态,单靠动作概率比无法可靠修正全部偏差。

在语言模型 PPO 中,一个 action 是整个回答还是 token?

实现上常把每个 token 看成一步 action,状态是 prompt 加之前生成的 token。奖励可能是整段回答级别的,再通过 value 和 advantage 估计分配到 token 级更新;KL 也常按 token 计算。

PPO 和 TRPO 的关系是什么?

二者都想限制策略更新幅度。TRPO 用更明确的 trust region 约束,优化相对复杂;PPO 用 clipped objective 或 KL penalty 做近似,工程上更简单,因此在大模型后训练中更常见。