|
GRPO中rollout_engine,rollout_engine如何保证生成组内答案的多样性以及不会重复的呢? 代码中dropout 和MOE的expert选择才会有随机性 |
Replies: 1 comment 3 replies
|
这里的多样性主要不是靠 dropout 或 MoE,而是靠 token sampling。 在 Torch rollout 中,同一个 prompt 先通过 不过当前实现不保证组内答案不重复。代码里没有 dedup 或重复后重新生成的逻辑; GRPO 本身也允许重复样本。这里会直接把组内 reward 算均值和标准差,再归一化 advantage(train_grpo.py#L121-L124)。如果一组生成结果和 reward 都相同,组内标准差就是 0,最后 advantage 基本为 0,这组对策略更新几乎没有有效信号。 如果只是希望多样性更高,可以调高 temperature,或给两个 rollout engine 补上 top-p/top-k 等采样参数。如果业务上要求严格不重复,就需要按 prompt 做去重并对重复项重采样;但这会改变原始策略的采样分布,训练时不建议默认强制这么做。 |
这里的多样性主要不是靠 dropout 或 MoE,而是靠 token sampling。
在 Torch rollout 中,同一个 prompt 先通过
repeat_interleave(num_generations)复制成多行,然后调用generate(do_sample=True, temperature=0.8)。每一行都会从 token 概率分布中独立采样,所以即使输入和 logits 一样,随机采样也可能走出不同序列。对应代码在 rollout_engine.py#L71-L84。SGLang 路径也是复制输入,再把temperature放进sampling_params(L107-L123)。不过当前实现不保证组内答案不重复。代码里没有 dedup 或重复后重新生成的逻辑;
num_generations只是规定每个 prompt 采多少条。模型分布很尖、temperature 较低,或者答案空间本来就小时,重复完全可能发生。GRPO 本身也允许重复样本。这里会直接把组内 reward 算均值和标准差,再归一化 advantage(train_grpo.py#L121-L124)。如果一组生成结果和 reward 都相同,组内标准差就是 0,最后 advantage 基本为 0,这组对策略更新几乎没有有效信号。
如果只是希望多样性更高,可以调高 temperature,或给两个 rollout engine 补上 top-p/top-k 等采样参数。如果业务上要求严格不重复,就需要按 prompt 做去重并对重复项重采样;但这会改变原始策…