简介:本教程面向大模型算法与后训练工程师,系统讲解推理模型强化学习后训练的完整路径:从格式奖励与正确性奖励设计,到GRPO组内相对优势估计的实现细节;重点剖析多奖励求和引发的奖励坍缩与策略熵坍缩两大结构性问题,并给出监控指标、缓解配置、结果验证与排查方案,帮助读者稳定提升模型在数学、代码与科学问答等任务上的推理能力。
让推理模型在数学、代码、科学问答等任务上变强,当前主流的后训练手段大致有两条路线:基于可验证奖励的强化学习,以及基于高质量推理样本的蒸馏监督。两条路线都很有效,但前者存在一些结构性缺陷,若不加处理,训练很容易在中途失去学习信号。本教程将带你完整走一遍强化学习后训练的落地流程,完成后你将能够:
适合读者:大模型算法与后训练工程师、RLHF方向的研究与开发人员、需要评估推理模型训练质量的团队技术负责人。阅读前建议具备基础的深度学习与强化学习概念(策略、奖励、优势函数),以及一定的分布式训练经验。
后训练并不改变模型结构,底座的表达能力决定了强化学习探索的上限,因此先快速回顾两个核心组件。
(1)标准注意力层的四个阶段。输入为序列矩阵(形状为“序列长度×隐藏维度”):
部分新式架构还会在注意力上引入门控机制来缓解“注意力沉降”(前几个token权重异常集中的现象),但这属于结构选型问题,不影响本教程的后训练流程。
(2)旋转位置编码。RoPE将位置信息以“旋转操作”注入查询与键:把每个注意力头的维度两两分组,按token位置旋转相应角度,内积结果自然携带相对位置信息。二维变体(2D-RoPE)将维度拆分为横、纵两组分别旋转以匹配平面坐标;多模态变体(M-RoPE)将文本、图像等不同模态的位置分配到不同维度组,用统一方式表达混合模态的相对位置。把这三类编码统一理解为“旋转+维度拆分”,概念上就会非常直观。
做什么:把任务拆解为“可被机器判定的信号”。数学题用最终答案比对;代码题用预置测试用例执行;科学问答用结构化答案抽取比对;翻译任务则需额外考虑译文质量与输出格式。
为什么:可验证奖励是当前推理后训练主流路线的基石,奖励的可靠性直接决定训练上限,不可靠的奖励会诱发“钻空子”行为。
注意:先用单奖励跑通全流程,再引入多奖励。GRPO这类方法最初是为单奖励优化设计的,直接迁移到多奖励场景时合理性并未被充分验证,需要额外处理(见步骤4)。
以翻译任务为例,要求模型按如下格式输出:以两个特殊token界定思考内容的边界,先输出“思考段”,再输出“译文段”。奖励由两部分组成:
通用伪代码:
def compute_reward(response, sample):r_format = 1.0 if has_valid_think_tags(response) else 0.0r_quality = score_translation(extract_answer(response), sample.reference)return w_format * r_format + w_quality * r_quality
注意:格式奖励本质是“入门门槛”信号,权重不宜过高。若格式权重过大,模型会优先学会“永远输出合法格式”而牺牲译文质量,这本身就是一种轻度的奖励坍缩。
机制核心:对每个问题采样一组(G个)回答,用组内相对表现替代价值网络来估计优势,从而省去critic,显著降低显存占用与训练复杂度。
for batch in loader:group = [sample(policy, prompt, temperature) for _ in range(G)]rewards = [compute_reward(r, gt) for r in group]mean, std = avg(rewards), std(rewards)adv_i = (r_i - mean) / (std + eps) # 组内相对优势loss = -avg(adv_i * logprob(policy, r_i)) + beta * KL(policy, ref)update(loss)
为什么用相对优势:同题组内比较天然消除了题目难度带来的基线差异,同时避免了维护一个难以训练好的价值网络。
注意:当组内奖励全部相同(全对或全错)时,优势为零,该组不产生梯度。这说明训练数据难度应贴近模型当前能力的“边界区域”,过难或过易的样本都是无效开销。
问题本质:GRPO把多个奖励先加权求和成一个标量,再做组内相对估计。求和是不可逆的信息压缩:不同的奖励组合会映射为相同的总分,进而映射为相同的优势值。后果包括:
排查方法:分维度统计组内均值与方差,计算每个维度与最终优势值的相关性。若某个维度与优势几乎不相关,说明它已被其他维度淹没。
通用改进思路:
策略熵衡量模型生成token时的不确定性:高熵意味着采样多样、探索性强,可能发现更优的推理路径;低熵意味着输出趋于确定、过度依赖已有策略、缺乏创新探索。
熵坍缩的典型形态:在没有任何熵干预的训练初期,策略熵快速单调下降,模型过早锁定单一解题模板,此后准确率增长停滞,甚至因重复生成而退化。
必须在训练中持续记录以下指标:
训练是否成功,从四个维度判断:
问题1:训练几十步后熵迅速归零。原因:0/1式奖励信号过密导致全组得分趋同、学习率过大、采样温度过低。处理:加入熵正则并逐项检查上述配置,必要时回滚到较早检查点重新起训。
问题2:格式合规率很高但准确率停滞。原因:典型的奖励坍缩,格式维度淹没了正确性维度。处理:降低格式权重、启用分维度归一化、按维度检查与优势的相关性。
问题3:大量组内奖励完全一致、梯度为零。原因:数据难度与模型当前能力错配。处理:按通过率过滤数据,保留通过率处于中间区间的“边界样本”。
问题4:后期响应越来越长且出现重复循环。原因:熵坍缩叠加缺乏重复惩罚。处理:加入重复惩罚或长度惩罚项,配合熵干预,必要时早停。
问题5:输出“看起来正确”但校验失败。原因:奖励函数存在可利用漏洞。处理:加固校验逻辑(例如严格抽取最终答案后再比对),并对奖励函数做对抗性自查。
本教程从奖励函数设计出发,走通了GRPO组内相对优势估计的完整训练循环,并重点处理了两个结构性问题:多奖励求和导致的奖励坍缩(分维度归一化、分组分别估计优势)与训练过程中的策略熵坍缩(熵监控与正则干预)。后续值得继续深入的方向包括:对推理步骤而非仅最终答案打分的过程奖励、更精细的多奖励分解与融合策略、面向探索的采样算法设计,以及训练数据难度的动态课程编排。