简介:本文面向算法工程师与大模型训练开发者,系统讲解 CISPO(Clipped Importance Sampling Policy Optimization)的核心原理,剖析其与传统截断式策略更新的本质差异,并给出一套可落地的实践路径:从环境与数据准备、组采样与优势计算、损失函数实现,到超参数配置、结果验证与常见问题排查,帮助读者正确理解并应用这一面向长链路推理任务的强化学习优化方法。
本教程要帮助你完成三件事:
适合读者:从事大模型强化学习后训练的算法工程师、负责训练链路搭建的机器学习工程师、需要对训练方案做技术选型的技术负责人,以及希望深入理解策略优化算法演进的研究型开发者。
阅读前置要求:理解策略梯度与对数似然的基本概念,了解主流策略优化算法的大致流程,具备使用深度学习框架编写自定义损失函数的经验。
PPO/GRPO 一类算法依赖重要性采样,把旧策略上采集的数据复用到新策略的更新中。token 级重要性权重定义为:
rt = πθ(yt|·) / πθ_old(y_t|·)
为了控制单步更新幅度、保证训练稳定,这类方法普遍采用截断机制:将 r_t 限制在 [1−ε, 1+ε] 的信任域内。关键细节在于:一旦 r_t 超出边界,对应 token 的梯度会被直接置零,可以概括为“截断即丢弃”。
在数学、代码等需要长推理链的任务中,一条几百 token 的响应里,真正决定推理走向的往往是少数关键 token,例如出现转折、回溯、给出结论的位置。这些关键 token 在更新前后概率比的变化通常最大,恰恰是最容易超出信任域、最容易被“截断即丢弃”的部分。丢弃它们,等于把最稀缺、最有价值的学习信号扔掉了。当模型采用混合专家等高方差结构,或序列长度显著增加时,该问题会进一步放大。
CISPO(Clipped Importance Sampling Policy Optimization)的做法可以概括为一句话:不再把超出边界的 token 丢弃,而是把截断后的权重当作常量系数,让梯度改道经由对数概率项继续回传。形式化地:
这样,每一个 token 都保有梯度,只是其贡献被截断后的权重“限幅”。概率比变化剧烈的关键 token 不会从更新中消失,而是以受控的幅度继续参与学习。这就是 CISPO 与传统方法最本质的差异。
用一张对比表归纳:
| 维度 | 传统截断式更新 | CISPO |
|---|---|---|
| 边界外 token 的梯度 | 置零 | 保留,经由 log π 回传 |
| 幅度控制手段 | 硬截断并丢弃 | 权重限幅(重加权) |
| 关键低频 token 的信号 | 易被丢弃 | 受控保留 |
| 适用倾向 | 策略偏移较小的稳定阶段 | 长链路、关键信号稀缺的场景 |
准备一个与训练集分布隔离的验证集,以及固定解码参数的评测脚本,供结果验证环节使用。
做什么:明确“让模型在验证集任务得分提升”这一目标,并实现奖励函数。
为什么:强化学习只会优化你定义的奖励,奖励的漏洞会被模型以超出预期的方式利用。
注意:奖励函数上线前先离线抽检,确认正确行为得高分、投机行为得低分。
每个提示词采样 G 条响应(G 即组大小),对组内奖励做标准化得到优势。伪代码:
for prompt in batch:responses = policy.sample(prompt, num=G) # 组采样rewards = reward_fn(prompt, responses) # 标量奖励adv = (rewards - mean(rewards)) / (std(rewards) + eps)# 将序列级优势广播到该序列的每个有效 token
为什么:组内相对优势避免了引入独立的价值网络,降低显存占用与工程复杂度。
注意:G 过小会导致优势估计噪声大,G 过大则生成成本线性上升,需在小规模实验中权衡。
本步依赖步骤二输出的优势项。伪代码:
logp_new = log_prob(policy, prompt, response) # 需要梯度的当前策略对数概率logp_old = stop_grad(log_prob(snapshot, prompt, response)) # 采样时策略的对数概率,必须切断梯度r = exp(logp_new - logp_old) # token 级重要性权重w = stop_grad(clip(r, 1 - eps_low, 1 + eps_high)) # 截断权重并停止梯度:CISPO 的关键一行loss = -(w * adv * logp_new * token_mask).sum() / token_mask.sum()
三个易错点:
补充说明:上例采用对称截断;实践中也常见仅收紧上界的非对称实现(即只限制 w ≤ 1+ε_high),以进一步保护概率比急剧上升的关键 token 的正向信号。两种形式都属于该算法家族的常见实现,建议通过对照实验选择。
推荐“采样一批 → 记录采样时的 logp_old → 单轮或极少轮次更新 → 丢弃数据”的近似在线策略循环。若为节省生成成本而进行多轮 minibatch 更新,需相应缩小学习率并提高监控频率。此步依赖步骤三完成的损失函数。
至少记录:奖励均值与分布、优势统计量、r 的直方图与“被截断 token 的比例”、策略熵、响应长度分布、验证集得分。其中“被截断 token 比例”是最有诊断价值的指标:它直接反映新旧策略的偏离程度,也是判断 CISPO 是否在正常发挥限幅作用的核心依据。
判断训练是否成功,建议同时满足以下条件:
本教程围绕 CISPO 展开了从原理到落地的完整路径。它的本质创新只有一句话:把传统“截断即丢梯度”的策略更新方式,改为“截断权重、保留梯度”,通过施加停止梯度的截断权重作为系数,让包括关键 token 在内的所有样本都以受控幅度参与更新。实践中最关键的三个抓手是:损失函数中停止梯度与截断的正确实现、以“被截断 token 比例”为核心的训练监控、以及从奖励设计到验证评测的闭环对照。掌握这些之后,你可以进一步探索非对称截断、token 级优势估计,以及该方法与其他稳定化技巧的组合,在长链路推理等任务上构建更稳健的大模型强化学习训练流程。