1. 强化学习微调大语言模型中的损失聚合问题
在大语言模型(LLM)的强化学习(RL)微调过程中,损失聚合是一个关键但常被忽视的技术细节。想象一下这样的场景:你让模型生成了100个回答,每个回答都由几十到几百个token组成。现在你需要评估这些回答的质量,但问题来了——如何把成千上万个token级别的评估结果,合理地汇总成一个可以用来更新模型的单一数值?
这就是损失聚合(loss aggregation)要解决的问题。就像老师批改作文时,需要决定是计算"全班的平均错字数"(每个字同等重要),还是"每篇作文的得分再平均"(每篇文章同等重要),不同的聚合方式会导致模型学习到不同的行为模式。
在VeRL框架中,这个问题被抽象为一个名为agg_loss的函数,它支持四种不同的聚合策略:
token-mean:所有有效token的平均损失seq-mean-token-sum:先对每个序列内token损失求和,再对所有序列求平均seq-mean-token-mean:先对每个序列内token损失求平均,再对所有序列求平均seq-mean-token-sum-norm:所有序列的总损失之和除以一个固定常数
提示:选择哪种聚合方式不是随意的,它直接影响模型对长短文本的偏好和训练稳定性。比如在生成长篇技术文档的场景,你可能不希望模型因为短回复的"平均错误率低"就偏向生成短文本。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 四种聚合模式的实现原理与适用场景
2.1 token-mean模式:字级别的公平竞技场
python复制if loss_agg_mode == "token-mean":
if batch_num_tokens is None:
batch_num_tokens = loss_mask.sum()
loss = verl_F.masked_sum(loss_mat, loss_mask) / batch_num_tokens * dp_size
这种模式的计算逻辑非常直观:
- 首先用
masked_sum计算所有有效token的损失总和(相当于(loss_mat * loss_mask).sum()) - 然后除以全局有效token数`batch_num_t
