帮你快速理解、总结文档立即下载

PPO(近端策略优化)

最近更新时间:2026-10-19 21:18:02
我的收藏
PPO(Proximal Policy Optimization,近端策略优化)是一种在强化学习(RL)中广泛应用的算法(由 Schulman 等人于 2017 年提出),也是大语言模型在
RL/Alignment(对齐)阶段最核心的 Loss Function 之一。是一种通过设置“剪裁区间(Clipping)”来限制新旧策略更新幅度的强化学习算法,确保模型在自我演进和探索过程中不会因单次调整过猛而“崩溃或吐乱码”。

PPO(Schulman 等,2017)引入了一种裁剪目标函数,将策略更新限制在采样分布的邻近范围内。这可以避免破坏性的过大更新,尤其是在同一批采样(rollout)分布上执行多个梯度步时。
裁剪目标函数为:

最终的 PPO 损失取裁剪后与未裁剪目标函数中的较小值:

其中 εlow 和 εhigh 为超参数(默认值:0.2)。请注意,裁剪与损失计算都是逐 token 应用的。

实现

# Compute probability ratio
prob_ratio = torch.exp(target_logprobs - sampling_logprobs)
# Apply clipping
clipped_ratio = torch.clamp(prob_ratio, clip_low_threshold, clip_high_threshold)
# Compute both objectives
unclipped_objective = prob_ratio * advantages
clipped_objective = clipped_ratio * advantages
# Take minimum (most conservative)
ppo_objective = torch.min(unclipped_objective, clipped_objective)
# PPO loss is negative of objective
loss = -ppo_objective.sum()

输入张量

Key
Shape
说明
target_tokens
(N,)
目标 token ID(来自采样器 q)
logprobs
(N,)
这些 token 的 sampling_logprobs
advantages
(N,)
RL 中的优势值

输出张量

Key
Shape
说明
logprobs
(N,)
这些 token 的 target_logprobs

诊断信息

loss:sum(标量)— PPO 裁剪损失之和

自定义裁剪阈值

fwd_bwd_future = await training_client.forward_backward_async(
data=data,
loss_fn="ppo",
loss_fn_config={"clip_low_threshold": 0.9, "clip_high_threshold": 1.1}
)
fwd_bwd_result = await fwd_bwd_future.result_async()