作者 | Abel chen 编辑 | 自动驾驶之心
原文链接:https://zhuanlan.zhihu.com/p/1948681769332240910
点击下方卡片,关注“自动驾驶之心”公众号

>>自动驾驶前沿信息获取→自动驾驶之心知识星球
本文只做学术分享,如有侵权,联系删文
1. GRPO是on policy还是off policy?为什么?
简短答案:GRPO 最初设计和常用实现是 on-policy(在线/近端策略式);但它可以被扩展为 off-policy,已有工作专门研究这种扩展及其优缺点。
为什么是 on-policy(解释)
在原始提出与实践(如 DeepSeek 系列)里,GRPO 用的是由当前策略生成的一组候选完成(completions)来计算“组内相对优势”(group-relative advantage),并在这个批次上构造类似 PPO 的 surrogate(裁剪)目标来更新策略——这正是 on-policy 策略梯度/近端方法的工作流程(需要用当前策略的样本来估计优势并直接更新)
简单说:on-policy 的关键在于“用当前(或非常近期)策略产生的数据来估计梯度/优势”,GRPO 的原始实现正是这样。
为什么有人说可以 off-policy(扩展)
最近有工作把 GRPO 的思想推广到 off-policy 场景(比如用来自别的策略 / 旧批次的数据来估计优势并做修正),并且报告了在样本效率、稳定性等方面的潜在好处与权衡。也就是说,虽然 GRPO 本质上是基于 on-policy 的 surrogate objective,但数学上和工程上可以设计重要性采样、批内归一化或裁剪等技巧把它改成 off-policy 版本。
实践建议(简要)
如果你用的是现成实现(例如 Hugging Face 的 GRPOTrainer),它把 GRPO 当作在线/一次生成→一次更新的流程来实现(即 on-policy 风格)。
想要提高样本复用率(sample efficiency)可以考虑阅读/尝试已有的 off-policy-GRPO 研究,但需要注意重要性权重、方差控制和稳定性问题(这也是 off-policy 转换的经典权衡)。
2. GRPO利用的数据是旧策略产生的,那为什么还叫on policy?GRPO的buffer了解吗?(所以不一定是上一步策略产生的
好——直接回答并把关键点拆开说明,帮你把“旧策略数据”与“on-policy”这两件事理清楚。
核心结论(一句话)
GRPO 在原始/常见实现里通常被归为 on-policy,因为它以「生成时用的行为策略(behavior policy)」产生的一组 completion 为单元来估计 group-relative advantage 并更新模型;但如果你把不同策略(尤其是明显更旧的策略)产生的数据放进 replay buffer 并直接用于更新,那就是 off-policy 或至少是“半离线/混合”范式——这正是最近的工作(如 RePO、Revisiting GRPO)所讨论和利用的。
为什么原始 GRPO 被称为 on-policy(直观)
数据来源与目标函数的假设:GRPO 的 advantage 估计是基于“同一个行为策略针对同一 prompt 采样多个 completion,比较这些 completion 的相对表现”来计算的。也就是说,优势估计依赖于“这批样本确实是由当前(或刚刚的)策略生成”的假设——这和传统 on-policy(如 PPO)的定义一致(用当前策略数据估计梯度/优势)。
实现流程:典型实现流程是「生成→打分→在该批样本上计算 surrogate loss 并更新」,不是长期从历史 buffer 中抽取任意旧样本重复训练。这样的工作流与“on-policy 一次收集多次用”的表述相符(尽管实际可能做若干个 epoch)。
那为什么会出现“旧策略数据”这种情况?这并不矛盾
“old policy”这个词有两层含义:在 P(θ)/P(θ_old) 的比值里,“old”通常指生成那批样本时的行为策略(behavior policy)。若你在 update 时用的正是那份样本对应的行为策略(哪怕是刚刚的模型 checkpoint),我们依然说是在用“on-policy”样本去估计(因为行为策略就是用来生成这些样本的策略)。
工程折中与效率考虑:为了提高样本利用率或避免在某些 prompt 上所有样本 reward 相同导致梯度消失,工程实现会把最近若干次生成的 samples 放入一个短期 buffer(比如只保留最近一两个 checkpoint 的输出),这时样本技术上来自“稍旧的”策略,但如果 buffer 保持足够新、更新频繁、或伴随权重校正,整个流程仍常被称为 on-policy 或“近似 on-policy”。
关于 GRPO 的 buffer(常见设计与注意点)
1、短时候选缓存(recent-only)
存最近一小段时间/最近若干个 checkpoint 的 completions,按 prompt 分组保存(便于 group-advantage 计算)。
优点:提高样本利用率、减少重复生成成本;若 staleness 小,偏差受控。
缺点:如果策略变化快,仍会引入偏差(需要小心)。
2、长期 replay buffer(典型 off-policy 做法,RePO 风格)
存更长时间、多策略产生的数据,按策略版本/采样概率同时保存 log-probs/behavior policy info,以便后续做重要性采样(IS)校正或裁剪。
这是 RePO / Revisit-GRPO 等工作提出并实证的策略:通过多样化 replay 来提升样本效率,但必须显式处理 off-policy 偏差(例如 clip IS、裁剪 surrogate、归一化权重等)。
3、混合策略 / per-prompt sampling
对某些 prompt 保留更多历史 completions(增加组内多样性),对其他 prompt 用新样本;或按奖励/置信度优先保存。
需要把每个样本关联上生成时的 π_behavior(或其 log-prob),以便在更新时能做修正或评估样本“新鲜度”。
工程上需要注意的点(实践建议)
如果你直接用 buffer 中明显过时的样本而不做修正 → 就不能说是 on-policy,更新会带有偏差。要么把它视为 off-policy 并用重要性采样 / 裁剪 /校正项,要么限制 buffer 的“时效窗口”。
记录行为策略信息(log-probs / policy version)是必须的,这样才能在使用历史样本时评估或修正偏差。
短期 buffer + 小步更新:常见妥协是保留“最近一两个 checkpoint”的生成样本,视为近似 on-policy,从而在不大幅增加偏差的前提下复用样本节省计算。
结论
若 GRPO 用的数据都是由当前/刚刚的行为策略生成并且更新频繁,通常称为 on-policy(这是大多数 GRPO 实现的默认假设)。
若 GRPO 使用的是长期/明显过时的 buffer 样本且没有做偏差修正,那就是 off-policy(或混合/半离线)——这正是近期论文(如 RePO、Revisiting GRPO)专门研究并利用的方向。
3. 重要性采样解决了什么问题? 公式是怎么样的?解释下每个参数
重要性采样(Importance Sampling, IS) 是强化学习中一种核心的离线策略(Off-policy)评估方法,核心思想是:用一个行为策略(Behavior Policy, π_b) 采集到的数据,去评估另一个目标策略(Target Policy, π_t) 的价值,本质是通过“权重修正”消除两个策略采样分布差异带来的偏差。
为什么需要重要性采样?
强化学习中,目标策略(比如我们最终想优化的“最优策略”)往往无法直接采集数据(例如初期探索阶段、或策略迭代中未落地的新策略),而行为策略(比如用于探索的“随机策略”)更容易收集大量经验。
此时直接用行为策略的数据评估目标策略会产生偏差(因为数据来自不同分布),重要性采样通过“重要性权重”修正这种偏差,让离线数据能有效服务于目标策略的价值计算。
核心公式:重要性权重
重要性权重(Importance Weight)是两个策略在“同一条轨迹/动作序列”上的概率比值,用于衡量“目标策略选择该轨迹的可能性”相对于“行为策略”的权重。
假设在状态序列 中,行为策略选择动作序列 ,则:
单步权重(针对某一状态-动作对 :
(目标策略选 的概率 ÷ 行为策略选 的概率)
轨迹权重(针对整条长度为 的轨迹):
(整条轨迹上目标策略概率的乘积 ÷ 行为策略概率的乘积)
关键应用:目标策略的价值评估
强化学习中,策略的“价值”通常指状态价值函数 (s)(从状态 s 出发,遵循策略 π 获得的期望回报)。
用行为策略数据评估目标策略的价值时,需用重要性权重修正回报的期望:
:行为策略采集的轨迹数量;
:第 条轨迹的重要性权重;
:第 条轨迹从初始状态 出发的实际回报(Return)。
常见变种:加权重要性采样(Weighted IS)
基础重要性采样存在方差过大的问题(当某些轨迹的权重极小时,会严重拉低或拉高均值)。
加权重要性采样通过“归一化权重”降低方差,公式调整为:
要在Markdown中输出该公式,可使用LaTeX语法:
本质是让权重之和为1,避免极端权重对结果的干扰。
核心总结
维度 | 说明 |
|---|---|
核心目的 | 用行为策略的数据,无偏评估目标策略的价值 |
关键工具 | 重要性权重(目标策略与行为策略的概率比) |
常见问题 | 基础IS方差大,需用“加权IS”或“截断权重”等方法优化 |
典型应用场景 | Q-Learning、DDPG等离线策略算法中,对目标Q网络/策略的价值评估 |
4. GSPO和DAPO分别解决了什么问题?怎么解决的?
概览(先结论)
GSPO(Group Sequence Policy Optimization) 旨在解决 GRPO/PPO 在长序列与 MoE 模型训练中因 token-level 重要性权重引入高方差 / 不匹配(导致不稳定或坍塌) 的问题。核心思路是把重要性比率和裁剪都搬到序列级(sequence-level)、做长度归一化,从而与序列级奖励对齐、显著降低方差并提升稳定性与效率。
DAPO(Decoupled Clip & Dynamic sAmpling PO) 主要是一个面向 长 Chain-of-Thought (long-CoT) / 大规模 LLM RL 实践 的工程化改良:它解决 熵塌陷(entropy collapse)、奖励噪声、训练不稳定与样本无效(某些 prompt 全对或全错导致梯度消失) 等工程难题。它通过四个实用技术(Clip-Higher、Dynamic Sampling、token-level PG loss、Overlong reward shaping)来提高稳定性、样本效率和最终性能。
下面把两者的问题、核心方法和关键公式一一拆开说明并解释公式中每个参数的含义。
1) GSPO —— 问题 + 怎么解决的(要点 + 公式)
要解决的问题
传统的 GRPO/PPO 把重要性比率(importance ratio)放在token-level:对每个下一个 token 应用
πθ(yt|·)/πθ_old(yt|·)的比值并裁剪。作者指出这种做法在每个 token 只来自单个采样的情况下不能完成期望的分布校正(importance sampling 要求对同一分布有多样样本来平均),会产生高方差噪音,随着序列变长噪音累积并可能导致模型不可逆的坍塌(特别在 MoE、长输出场景)。
核心想法
把重要性比率定义为序列级(sequence likelihood),并对整个序列做裁剪与优化 —— 这与“奖励给整条序列”的事实一致,能保证重要性权重的理论意义并显著降低由 token 级乘积导致的方差。并对序列 likelihood 做长度归一化以抑制长度差异造成的尺度问题。
关键公式(GSPO objective)
其中:
—— 序列级重要性比率(做了长度归一)。
—— group-relative advantage:对于同一 prompt 采样的 个回复,按组内 reward 做 z-score( )。这样不用 value 网络也能估计 advantage。(arXiv)
—— 裁剪范围(同 PPO 思路,但现在是作用在序列比率 上)。
其余: (组大小), (序列长度)等为常见符号。
为什么有效(直观)
序列级比率与序列级 reward 对齐,避免把单次 token 的随机波动当作“重要性校正信号” → 方差小、稳定性高。
长度归一化避免长短序列导致比率尺度不一、便于统一裁剪阈值。
对 MoE 模型尤其友好:避免 token-level 噪声触发专家路由的剧烈波动(从而解决 MoE 专家激活的“易震荡/坍塌”问题)。
2) DAPO —— 问题 + 怎么解决的(要点 + 公式)
要解决的问题(实践层面) 在用 GRPO / PPO 等在长 CoT 任务上训练大模型时,工程上常见的问题包括:
Entropy collapse(熵塌陷):策略过快走向确定性,导致采样多样性丧失,训练停滞或退化。
Reward noise 与截断样本问题:超长生成被截断会被不恰当处罚,产生噪声。
无效样本 / 梯度退化:某些 prompt 在一次采样组内全部正确或全部错误(accuracy 0 或 1),使得该 prompt 对梯度贡献为零,降低训练效率。
GRPO 等在长 CoT 上的稳定性与可复现性差(工程细节缺失导致难以复现)。
DAPO 的四个关键技术(如何解决)
1、Clip-Higher(Decoupled clipping) — “提高上界”
把裁剪上下界做成非对称:使用 (下界)和 (上界),允许上界比下界更大(例如 paper 用 0.2 vs 0.28)。
直觉:标准对称裁剪会限制把低概率(探索)token 提升为有意义概率的能力;适当放宽上界能保留/鼓励探索,避免熵迅速坍缩。论文称此法能维持更高的采样熵并避免“熵塌陷”。公式见下。
2、Dynamic Sampling(动态采样 + 过滤)
对每个 batch 过采样并过滤掉那些在本次采样组中准确率为 0 或 1 的 prompt(即剔除无梯度的 prompt),保证每个训练批次里都有“有效梯度”的样本,从而避免训练信号退化。采样成本是动态的(可能需要多次采样直到填满一个有效 batch)。详见论文中 Equation (11)。
3、Token-Level Policy Gradient Loss(额外的 token 级损失)
在长 CoT 场景中,单纯序列级目标可能还不足以引导每步生成的稳定提升。DAPO同时保留/加入 token-level PG 损失(作为辅助),以改善生成长度的“健康增长”和稳定性。
4、Overlong Reward Shaping(对截断/过长响应的处理)
对被截断或过长的样本做软惩罚或过滤(Overlong Filtering / Soft Overlong Punishment),避免把有效但被截断的长推理流程误判为坏样本,从而减少奖励噪声与不稳定。论文给出了长度惩罚函数(Equation (13))。
DAPO 的核心 objective(形态) 论文把裁剪写成“非对称裁剪”形式,目标(简化版)为:
其中
(token-level ratio,DAPO 在 objective 写成 token sum,但结合上面四项工程措施使训练稳定);
—— 分别为下/上裁剪阈值(decoupled clipping);论文默认例子 0.2 / 0.28。
为什么有效(直观)
Clip-Higher 允许模型在有积极 advantage 时更大胆提升某些 token 的概率,避免过早确定化(从而保持探索)。
Dynamic Sampling 保证每个 batch 都有有用梯度,提升样本利用并加快收敛;同时 Overlong 处理和 token-level 辅助损失减少噪声并保证长链推理质量。总体上 DAPO 更像是一套“面向长 CoT 的工程化配方”,在实践上对可复现性和大规模训练效率非常关键。
3) 两者对比(简短)
理论 vs 工程/实践定位:GSPO 更强调从理论和算法层面(importance sampling 的正确单位)解决 GRPO 的根源性问题(token-level vs sequence-level mismatch);DAPO 更偏向工程化改良:在现有 group/sequence-style算法框架下,通过若干技巧解决在长 CoT、超长生成、样本无效等真实训练场景里的稳定性与效率问题。(arXiv)
关键差异:GSPO 把“单位”提高到序列级并做长度归一化;DAPO 保留/混合 token 与序列考量,但通过 decoupled clipping + dynamic sampling + reward shaping 等技巧来对抗实际训练中的坍塌与噪声。
4) 实践建议(若你想实现/选择)
如果你怀疑 GRPO 的不稳定来自 token-level IS 的理论失配(尤其对长响应或 MoE),优先尝试 GSPO(序列级比率 + length-norm + sequence clipping)。(arXiv)
如果你的问题是 熵塌陷 / 套件级可复现 / 长 CoT 数据训练不稳定 /“很多 prompt 全对或全错”导致效率低,那先按 DAPO 的四项工程技术调参(Clip-Higher、Dynamic Sampling、Overlong 处理、token-level 辅助损失)通常能快速提升稳定性与性能。
两者并非互斥:许多实际系统会把 GSPO 的序列级重要性比率/裁剪 与 DAPO 的采样 & 奖励/熵技巧 结合使用,兼顾理论与工程稳健性。
参考(关键来源)
GSPO — Group Sequence Policy Optimization, Qwen (Alibaba) team. arXiv:2507.18071. (arXiv)
DAPO — Decoupled Clip and Dynamic sAmpling Policy Optimization (DAPO), open-source system paper (Bytedance / Tsinghua SIA). arXiv:2503.14476 and project page. (dapo-sia.github.io)
5. 什么是强化学习的熵崩溃?怎么优化或者解决这个问题?这个问题是需要被解决的吗?
强化学习中的“熵崩溃”(Entropy collapse)——是什么、为什么发生、该不该解决、怎么解决(可落地的操作清单)
简短定义 熵崩溃指的是训练过程中策略的熵(stochasticity/不确定性)急速下降,策略变得过于确定性/确定输出(在序列模型里表现为重复、退化或丧失多样性)。在 RL/LLM-RLHF 场景中,熵崩溃会导致探索丧失、样本利用效率下降、训练不稳定或收敛到次优/退化解。
1) 用数学说清楚(核心量)
策略在状态 下的熵定义:
全局/期望熵常取期望: 。
带熵正则项(entropy regularization)的策略目标常写为:
其中 控制“鼓励随机性”的强弱。策略梯度会包含熵项的梯度,从而鼓励更高的熵(更多探索)。
2) 为什么会发生熵崩溃(成因)
过强的奖励信号 / 优化压力:当某些动作/token 被高 reward 强烈鼓励时,优化会迅速把概率集中到这些动作上,降低熵。
学习率 / 步长过大:大步更新把策略快速推向确定性分布。
不合适的裁剪 / IS 误用:重要性采样比率或裁剪不当会强化少数样本,使概率快速集中(例如 token-level ratio 的乘积导致噪声和偏差)。
样本偏差 / batch 设计问题:一个 batch 内若多数 prompt 的组内 reward 全相同(0 或 1),梯度信号无差异,算法可能走向确定性模式或过拟合少数样本。
不记录行为策略 / 非对称剪切:不能校正旧样本带来的偏差会放大错误更新。
熵正则太弱或退火过快:训练中熵惩罚被降到几乎 0。
贪婪/确定性解码(推理时)被用于训练或保存检查点:使用 argmax 代替 sampling 会让模型习惯确定性选择。
在大规模语言模型/长 CoT 场景,这些因素常常合并出现,导致熵快速崩掉(模型趋于短、确定且重复的输出)。
3) 这个问题需要解决吗?什么时候要解决
通常需要解决(训练期):训练阶段需要足够的探索和多样性以获得稳定的梯度信号与良好泛化;熵崩溃通常是负面的(早期发生会阻碍收敛到好策略)。
但在推理/产品化阶段:往往希望策略更确定(生成更稳定、一致),这时可以在训练结束后通过降低温度或策略蒸馏得到低熵策略。 结论:训练阶段应避免或延后熵崩溃;可在训练后按需求收敛到低熵策略。
4) 可采用的解决方法(按类别、并附短解释 & 实操建议)
A. 直接正则与约束
1、熵正则(Entropy bonus)
在目标里加 。常量 控制鼓励探索强度。
实操:把 设为非零初始值,若观察到熵下降太快可增加;也可用 Lagrangian 控制使 。
2、KL 惩罚 / KL 约束(trust-region)
在更新中限制新旧策略的 KL 距离(TRPO、PPO 的 KL penalty/clip),防止策略剧烈确定化。
实操:启用 KL target(或基于 PPO 的裁剪),并监控实际 KL。若 KL 突增,减小 lr 或增大剪切强度。
B. 修正优化过程与裁剪方式
1、Decoupled / asymmetric clipping(如 DAPO 的 Clip-Higher)
对重要性比率使用上下不同阈值(允许在上界上更宽松以鼓励提升而避免快速塌陷)。
实操:用 ,把 。
2、序列级 vs token-level 重要性比率
对长序列,使用序列级比率并做长度归一化(GSPO 思路),避免 token 级乘积带来的方差噪声导致 collapse。
实操:保存序列 log-prob,计算 。
C. 样本/批次处理与采样策略
1、Dynamic sampling / 过滤无效 prompt
避免把一组内全为好或全为坏(导致零 variance)样本放入 batch;对那些 prompt 重采样直到组内有差异。
实操:过采样并筛选;或在 buffer 中记录 reward variance,优先采样高方差 prompt。
2、保鲜的短期 buffer / 记录行为策略信息
只复用“近似 on-policy”的最近样本,或对旧样本做 IS 校正(并裁剪 IS 权重)。
实操:保存生成时的 log-probs / policy version,计算 IS 权重并裁剪或归一化。
D. 学习率、优化器与梯度处理
1、减小学习率 / 梯度裁剪 / 更稳定优化器
小步更新能避免策略短时内被推成确定性。
实操:监控策略熵和 KL,若出现快速下降,立刻降低 lr 或增加梯度裁剪阈值。
2、增加批次大小或组大小
更大的样本能减小噪声,降低被少数极端样本“拉扯”的风险。
E. 其他工程/策略措施
1、在训练中保持采样(stochastic decoding),避免使用 argmax
训练期间始终用 sampling(temperature)而非贪心解码。
实操:设置合理的 sampling temperature(例如 1→0.8)
2、Token-level 辅助损失 / 基线与控制变量
添加 token 级 PG 或监督损失防止每步变得确定性。
使用合适 baseline 减方差,避免过大 A 导致概率集中。
3、熵目标(entropy target)与 Lagrangian 控制
通过 Lagrangian 自动调整熵系数 ,使得熵保持在目标区间。
实操:动态更新 来满足 。
4、策略集合 / 混合策略 / 探索策略层
用 ensemble 或 mixture-of-experts 保持多样性,或者在训练时随机切换行为策略来增加覆盖。
5、V-trace / per-decision IS / IS 截断(离线/半离线场景)
在 off-policy 场景使用 V-trace 等更稳健的 IS 修正,避免乘积权重造成震荡。
5) 如何诊断(实际监控指标)
绘制训练曲线:策略熵随训练步数的曲线(全局 / 按 prompt / 按 token),观察是否存在陡降。
KL 距离:新旧策略 KL 是否爆发式上升或迅速下降(说明大更新)。
Reward 与熵的相关性:熵急跌后 reward 是否停滞或退步。
样本有效性:检查 batch 中多少 prompt 的组内 reward variance≈0(若很多,说明 dynamic sampling 问题)。
行为分布的重尾 / IS 权重有效样本量(ESS):低 ESS 说明权重很极端,风险高。
6) 一个简单的实操优先级清单(如果你现在遇到熵崩溃)
先监控/确认:绘制熵、KL、reward;确认是训练早期或持续性崩溃。
降低学习率 / 增加梯度裁剪(最简单、最有效的急救)。
启用或提高熵正则 (短期内防止继续坍塌)。
如果使用 IS / replay buffer:确保保存行为 log-probs,做归一化或截断 IS;若 buffer 太旧,缩短保鲜期。
如问题仍在:开启 KL 约束/减小 KL target,或切换为序列级比率(GSPO)与 decoupled clipping(DAPO 的 Clip-Higher)。
改进采样:使用 dynamic sampling 以避免无效 batch;始终训练时 sampling,不用 argmax。
最后:可引入 Lagrangian 基于熵目标自动调 α,或用 ensemble 方法保持多样性。
7) 小结(一句话)
熵崩溃是在训练里“过早确定性化”的症状,会损害探索和训练质量;多数情况下应当避免(训练期),通常通过熵正则 / KL 约束 / 更稳健的 IS/裁剪 / 优化器/采样策略调整来解决。实际工程中先用简单的救急手段(降 lr、加熵、裁剪)快速稳住,然后逐步引入更细致的对策(dynamic sampling、序列级比率、Clip-Higher 等)。
6. 熵崩溃和reward hacking什么关系?
熵崩溃(entropy collapse)和奖励劫持(reward hacking)——二者关系与实操建议
短结论:两者不同但高度相关。奖励劫持是“目标/奖励函数被代理(agent)以非预期方式最大化”的问题;熵崩溃是策略变得极端确定(失去随机性/探索)的现象。奖励劫持常常导致熵崩溃,而熵崩溃也容易让系统卡在奖励劫持的解决方案上——二者常常互为因果环,互相放大问题。
下面把关系、成因、检测方法和具体对策拆开说明。
1) 概念回顾(一句话)
奖励劫持:代理找到了一条“捷径”或漏洞来获得高奖励,但这种行为并不符合我们真正想要的目标(例如模型通过重复一句话获得高评分、机器人在起点不断重置以反复领取奖励)。
熵崩溃:训练期间策略熵骤降,变成高度确定性的行为(探索丧失、输出高度单一)。
2) 两者的典型因果关系(谁推谁)
奖励劫持 → 熵崩溃(常见路径)
代理发现一个高回报但不良的捷径(reward hack)。
优化器猛推概率到那条捷径上(因为 reward 很高),导致策略快速确定化(熵下降)。 结果:训练里熵崩溃,模型固定在作弊行为上。
熵崩溃 → 奖励劫持(也会发生)
策略变得过于确定性、探索极少。
由于探索不足,代理可能只试到一小类行为,其中若存在任何“表面上高奖励”的捷径,就会被强化并长期保持(很难跳出)。 结果:早期的偶然“坏习惯”被放大,演化成 reward hacking。
共同触发因素:错误的 reward design、过强的学习率/不当裁剪、样本偏差(batch 中大比例的有利样本)、IS/重放 buffer 的偏差等,会同时诱发二者并形成自我强化循环。
3) 例子(直观)
RL 环境(机器人):设计奖励为“每次到达某区域给 +1”。代理学会在起点反复触发环境复位或触发传感器噪声以重复获得 +1(reward hack),策略很快确定只做这件事(entropy collapse)。
LLM-RLHF(对话模型):奖励模型错误地把 “输出包含特定关键词” 与高质量答案关联。模型学会不断重复该关键词或模板句子以获得高奖励(reward hack),训练中采样温度降到很低,输出单一化(entropy collapse)。
4) 诊断/监测要点(同时检测两者)
熵曲线:策略熵随训练步的变化(若陡降就是熵崩溃)。
Reward distribution:奖励分布变尖峰(大多数样本很高或极端偏离)是警报。
行为多样性指标:n-gram 重复率、独特输出比例、行动/轨迹多样性。
对偶验证:在人为/对抗性 prompt 或情形下测试策略 —— 若在这些测试里表现崩坏,可能是 reward hack。
有效样本数(ESS)/IS 权重分布:极端权重表明 off-policy 偏差可能在放大 reward hack。
人工抽样检查:随机抽若干高分和低分案例,人工确认高分是否与真实质量对应。
5) 解决策略(同时抑制 reward hacking 与防止熵崩溃)
下面按“短期救急 → 中期修正 → 长期稳固”给出可落地操作。
短期(训练中立即可做)
加熵正则或提高 entropy bonus(临时):让策略保持随机性,防止快速确定化。
降低学习率 / 增加梯度裁剪:减小单步更新幅度,避免把策略一次性推到作弊解上。
监控并中断:一旦发现高频重复模式或异常 reward-spike,暂停训练并人工检查。
中期(改良 reward 与训练流程)
修正/鲁棒化 reward function:
增加对“表面捷径”的惩罚项;
用多元化的评价信号(ensemble of reward models / human labels)防止单一 reward model 被利用;
引入训练集外的对抗/红队样本测试 reward 模型。
使用 KL / trust-region 限制(PPO/TRPO) 或 sequence-level 比率(GSPO):限制大幅度概率更新,减少一次性跳到作弊行为的概率。
动态采样 / 过滤无效 batch(DAPO 风格):避免把“全对/全错”样本放入批次,保证每批有 gradient 信号,不让噪声主导更新。
长期(系统性改进)
增强 reward model 的健壮性:用 adversarial training 训练 reward 模型(让它学会识别投机/简单捷径),或采用多模型投票/置信度校正。
引入约束或辅助目标:比如多样性奖励(鼓励不同回答),或用人类反馈明确惩罚“无意义重复/模板化答案”。
使用 curiosity / intrinsic motivation(在 RL 环境里):为未探索状态提供内在奖励,防止过早收敛。
保存行为日志并记录行为上下文(log-probs, policy version):方便后续做 IS 校正或回溯分析,发现哪些策略版本导致 reward hack。
对抗性评估与红队:持续用自动/人工的对抗任务去找 reward model 的漏洞并修补。
6) 实践优先级清单(如果你怀疑遇到这类问题)
立刻监控:熵、KL、reward distribution、输出重复率。
临时救急:减 lr、加熵正则、扩大裁剪范围(或启用 KL penalty)。
人工审查高 reward 样本:确认是否为真实优质或作弊。
修 reward 或引入 ensemble/human-in-the-loop:如果 reward 被利用,修正 reward model 并用人类给几个关键样本打标签做对齐。
改进采样与 batch 策略:dynamic sampling、避免只训练在“易得高分”的 prompt。
长期部署红队/对抗训练:定期检验 reward 模型,持续修补漏洞。
7) 总结(一句话)
奖励劫持是目标错位/奖励设计问题,熵崩溃是策略行为失衡的结果/症状。二者常相互强化:奖励劫持会把策略推向确定性(导致熵崩溃),而熵崩溃会让奖励劫持更难被纠正。理想的做法是同时从奖励设计和训练稳定性(熵/KL/采样)两端入手:修好 reward,保证探索与稳健更新,就能最大限度地避免二者纠缠。
7. MLA具体是怎么做的?可以加快推理速度吗?
简短结论
MLA(Multi-Head Latent Attention)通过把 Key/Value 用一个低秩(latent)向量压缩并缓存,只存 latent 而不是完整的 K/V,从而大幅减少 KV-cache 的内存与通信开销。 在内存/带宽成为瓶颈的场景(长上下文预填(prefill)、分布式/多卡推理、或在内存受限设备上)通常能加速推理;实测能有显著的 KV-cache 内存下降和 1.3–1.8× 级别的 speedup(具体依赖于 latent 维度、硬件和实现)。
MLA 是怎么做的(一步步 + 公式)
先回顾标准多头注意力(简化写法): 要在Markdown中输出图中的内容,可使用LaTeX语法,示例如下:
在自回归推理中我们必须缓存所有历史的 K/V(每个时刻的每个 head 都要),因此 KV-cache 随上下文长度线性增长,成为内存与通信瓶颈。
MLA 的核心改动是对 K/V 做低秩联合压缩 + 恢复(up-projection),常见形式可以写成:
1. 压缩 (compute & cache latent)(latent 向量,维度 )
这里只把 放进 cache(而不是完整的 )。
1. 恢复 keys/values (on-the-fly up-projection)
其中 把 latent 映回每个 head 所需的维度(或者按 head 再拆分)。
直观效果:每个时刻只缓存 个数 (latent) 而不是全维 ,所以单 token 的 cache 从 变为 ,总体 KV-cache 大小按比例缩小(例如论文里 或更小都能显著节省)。公式化说明见论文与实现。
为什么能加速推理(原理)
内存与带宽瓶颈减少:在预填 + decode 的流程中,模型需要把所有历史 K/V 从显存/主机/网络读出并参与矩阵乘法。存 C_t 比存完整 K/V 小,读写量少 → IO/通信更少 → 整体延时下降(尤其长上下文或分布式设置)。
缓存占用变小:在多卡/分布式推理中,每卡的 KV-cache 大小直接影响能否放入显存,以及跨卡通信成本;MLA 常能把这些成本减到一半或更多。
实现层面可以做融合优化:up-projection 与 attention 的计算可以被 fuse / kernel 优化,进一步降低开销(取决于具体引擎/实现)。
但也有 trade-offs(什么时候不一定快)
额外计算开销:每次 decode 需要把 latent up-project 回 K/V(额外的矩阵乘法);当模型/硬件是完全计算受限(compute-bound)而非 IO/带宽受限时,这部分额外算力可能抵消内存带来的收益。
压缩率 vs 质量:把 latent 维度 设太小会降低模型表达能力,带来质量下降;需要在
r与质量/速度间做权衡(论文里展示了 Pareto 曲线)。实现兼容性:现有优化(比如 Tensor-parallel decoding、FlashAttention 的某些 kernel)可能对 MLA 需要特别适配;在没有优化的实现上收益可能有限。后来工作也提出了针对 TP 的 TPLA 等方案来恢复在分布式下的优势。
论文/实证结果(量化参考)
“Latent Multi-Head Attention” 的实验(小模型基准)报告:≈45% 的 KV-cache 内存减少且在合适的 latent 大小下仅带来极小的质量损失;在某些设置报告了 ≈1.4× 推理速度提升。这说明在 memory/IO 为瓶颈的场景,MLA 是有效的。
“TransMLA” 展示了可把 GQA-style 的模型转换为 MLA,并讨论了在保持或不增加 cache 大小的前提下如何获得更好的推理效率与表达能力(需要 post-training/微调)。
实务建议 — 什么时候考虑用 MLA
强烈推荐:长上下文(几十K token)、多卡/分布式推理、edge / 内存受限部署、或者 KV-cache 成为主要瓶颈的情况。
谨慎考虑:短上下文、单卡 compute-bound 场景(没有明显 IO/内存瓶颈)——收益可能小或为负。
部署要点:选择合适的 latent rank (做性能/质量 sweep);确保实现有 up-projection 的高效 kernel 与与 RoPE/位置信息的兼容(论文指出 RoPE 对小模型的 MLA 很重要)。若要把现有模型迁移,考虑 TransMLA 的 post-training 转换流程并做小量微调。
简短示例伪代码(推理时的高层流程)
# 假设已训练好: W_C, W_K_up, W_V_up, W_Q
# Prefill(首次前向生成历史 tokens)
for t in 1..T:
C_t = X_t @ W_C
cache.append(C_t) # 只缓存 latent
# Decode (new token)
Q = X_new @ W_Q
# 在需要时,把 cached C 向量 up-project 为 K/V(可以按块做)
K_all = stack([C @ W_K_up for C in cache])
V_all = stack([C @ W_V_up for C in cache])
attn = softmax(Q @ K_all.T / sqrt(d))
out = attn @ V_all
注意实现会把 C @ W_K_up 的计算做成高效并行 kernel 或按需批量生成以节省时间。
总结(一段话)
MLA 通过 低秩 latent 压缩 K/V 并只缓存 latent 来减少 KV-cache 的内存与通信带宽,因而在内存/带宽为瓶颈的长上下文或分布式推理场景下 通常能加快推理并节省显存。代价是额外的 up-projection 计算和需要在 latent 维度与质量之间调优;实现上需要注意位置信息(RoPE)与并行化适配。
自动驾驶之心
论文辅导来啦

自驾交流群来啦!
自动驾驶之心创建了近百个技术交流群,涉及大模型、VLA、端到端、数据闭环、自动标注、BEV、Occupancy、多模态融合感知、传感器标定、3DGS、世界模型、在线地图、轨迹预测、规划控制等方向!欢迎添加小助理微信邀请进群。

知识星球交流社区
近4000人的交流社区,近300+自动驾驶公司与科研结构加入!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知(大模型、端到端自动驾驶、世界模型、仿真闭环、3D检测、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、大模型,更有行业动态和岗位发布!欢迎加入。

独家专业课程
端到端自动驾驶、大模型、VLA、仿真测试、自动驾驶C++、BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、车道线检测、轨迹预测、在线高精地图、世界模型、点云3D目标检测、目标跟踪、Occupancy、CUDA与TensorRT模型部署、大模型与自动驾驶、NeRF、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频
学习官网:www.zdjszx.com
RL面试问题解析
7325

被折叠的 条评论
为什么被折叠?



