LLM:Pretrain,SFT,RLHF,GRPO
本文系统介绍了大语言模型微调技术及其训练方式。主要内容包括:1. 微调技术对比:从Full-tuning(全参数微调)、Freeze-tuning(冻结微调)到LoRA(低秩适配)和QLoRA(量化低秩适配),分析了各类方法的参数规模、显存需求、性能表现及适用场景。2. 训练方式详解:涵盖预训练、监督微调、奖励建模以及PPO、DPO等强化学习优化方法,比较了不同训练阶段的标签需求、人类偏好使用和算
1,预训练&后训练
1.1,预训练
Pre-Training(预训练):即预训练,是训练 LLM 最核心也是工程量最大的第一步。LLM 的预训练和传统预训练模型非常类似,同样是使用海量无监督文本对随机初始化的模型参数进行训练。
- 【算力瓶颈】百亿级 LLM 需要 1024张 A100 训练一个多月,而十亿级 LLM 一般也需要 256张 A100 训练两、三天,计算资源消耗非常高。
- 【数据瓶颈】数据是预训练 LLM 的核心挑战,至少需要数百 GB 甚至上 T 的预训练语料。且知识主要来自预训练阶段,因此数据必须规模大、来源广,并按精确比例混合。
【预训练的局限性】
- 预训练是LLM强大能力的根本来源:LLM所覆盖的海量知识基本都源于预训练语料
- 预训练赋予能力但需要激发:经过预训练的LLM像一个"博览群书但又不求甚解的书生"
- 对各种偏怪问题都可以流畅地接出下文
- 但不知道问题本身的含义,只会"死板背书"
- 本质原因:预训练只是让模型学会预测下一个token,而非理解和回复指令
【问题】LLM 训练的时候为什么要 warmup?
- 训练开始时,模型参数是随机初始化的,梯度可能非常大且不稳定。如果直接使用较大的学习率,可能导致梯度爆炸或参数更新过大,Warmup 可以逐步增加学习率。
- Adam 对每个参数单独调节学习率,同时利用动量加速收敛。Adam 为每个参数维护两组统计量:梯度的一阶矩(均值)和二阶矩(未中心化方差)。一阶矩让更新方向更稳定,二阶矩让更新步长自动缩放。参数更新时,用“均值 / 方差开根号”的形式,相当于对大梯度自动降速、对小梯度自动提速。训练初期这些统计量不准确(缺乏历史信息)。
1.2,SFT(后训练)
Supervised Fine-Tuning(有监督微调):在预训练模型基础上,使用有标签的数据集对模型进行指令微调,使其适配特定任务,如问答、摘要、分类等。所谓指令微调,即我们训练的输入是各种类型的用户指令,而需要模型拟合的输出则是我们希望模型在收到该指令后做出的回复。
【目标】让预训练模型快速具备基础对话能力和指令遵循能力,是模型从"无脑接龙"到"能聊天"的必经阶段。
【优点】
训练快速高效,成本低;
直接教会模型指令理解和任务执行能力;
只需高质量的指令-回复对数据,数据需求相对简单;
【缺点】
- 只是"模式拟合",让模型学会对话格式和接龙规律。
- 缺少正反样例激励,不知道什么回答好什么回答差。
- 【数据质量】极度依赖数据质量,微调数据质量越高,模型行为越稳定;低质量数据会引入噪声甚至导致灾难性遗忘。数据准确性,多样性,数据格式格式。
- 由于预训练模型与微调数据之间的差异,学习率过大等原因,训练过程中容易出现 loss 震荡。
【问题】SFT 阶段如何避免对 padding token 计算 loss?
- 使用 CrossEntropyLoss 的 ignore_index 参数:将 padding 位置的标签设为 -100 或 ignore_index。
- attention_mask:将对应 padding token 的位置在损失计算中屏蔽掉。
- loss 计算:去除 padding token,确保只有有效的 token 参与损失的计算。
【问题】为什么有了 SFT 之后还需要 RLHF?SFT 解决“能不能答”,RLHF 解决“答得好不好、安不安全、符不符合人类期望”。SFT适合有标准答案或专家示范的场景,RL适合在多种可行解中优化偏好与策略。
- 对齐“真实使用分布”:SFT 数据多来自离线构造,和真实用户请求存在差距,模型相对不稳定。RLHF 直接在模型生成分布上优化,能更好适配上线后的真实交互场景。
- SFT是通过监督学习的方式,适合高质量标注数据的任务。通过使用标注好的数据,模型学习到从输入到输出的直接映射关系。适应性较差,尤其是在面对未知任务或动态环境时,模型往往缺乏探索的能力。
- RL通过与环境互动来获得奖励信号,然后根据这些信号调整策略。RL能够通过奖励机制,引导模型进一步优化策略,特别是那些需要探索和长期规划的决策。
- SFT和RL交替使用能够更好地平衡“利用已有知识”和“探索新策略”之间的关系。初期通过SFT快速提供基础技能,后期通过RL进一步优化任务处理策略。
1.3,RLHF(后训练)
人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF):在前面的训练步骤中,模型已经具备了基本的对话能力,但是这样的能力完全基于单词接龙,缺少正反样例的激励。模型此时尚未知什么回答是好的,什么是差的。我们希望它能够更符合人的偏好,降低让人类不满意答案的产生概率。这个过程就像是让模型参加新的培训,从优秀员工的作为例子,消极员工作为反例,学习如何更好地回复。RLHF 分为两个步骤:训练 RM 和 PPO 训练。
【目标】SFT 之后的进阶优化阶段,用于对齐人类偏好、提升回复质量,尤其适合需要符合主观评价标准的任务。
【优点】
- 基于人类偏好进行优化,让模型真正理解"好坏"
- 通过正负样例激励,降低不符合人类期望的回复概率
- 能持续优化模型行为,使其更加符合实际应用需求
【缺点】
- 训练成本高,周期长,PPO 需要四个模型协同(替代方案 DPO)
- 依赖采样轨迹,每次采样的回报波动大,容易陷入局部最优,训练不稳定。
- 依赖高质量的人类反馈数据
Reward Modeling(奖励建模):RM 是用于拟合人类偏好,来给 LLM 做出反馈的。在强化学习的训练中,对于 LLM 的每一个回复,RM 会进行打分,这个打分反映了生成回复符合人类偏好的程度。然后 LLM 会根据强化学习的原理,基于 RM 的打分来进行优化训练。所以,RM 本质上是一个文本分类模型,对于一个文本输出一个标量奖励,和文本分类任务中的隐藏层输出非常类似。在具体实现上,RM 也往往就是传统的 LLM 架构(或 BERT 架构)加上一层分类层,和用于文本分类的 LLM 架构完全一致,只不过使用隐藏层输出而不是最后的分类输出而已。
1.4,奖励函数
【问题】什么是 reward hacking?如何处理?GRPO 是否存在reward hacking?
【答案】智能体通过“作弊”或者找到了没有被设计者考虑到的方式来获取奖励(奖励函数不完善、目标模糊不清、缺乏约束),而这些方式并非系统设计者希望智能体采取的路径。智能体通常会利用奖励函数中的缺陷或模糊之处,采用不合适的行为来获得奖励。在赛车游戏中,AI发现可以通过原地转圈不断获得"转弯"奖励分数,而不是完成比赛。
- 设计更合理、更全面的奖励函数
- 引入过程监督与中间目标
- 使用模仿学习或人类反馈强化学习
- 辅助目标和好奇心驱动
GRPO 存在 reward hacking 的风险,但相比传统 PPO 有所缓解:
- 消除了绝对分数的意义,只关注相对好坏,不强依赖 reward 的标定精度。
- 只用 ranking,不用绝对分数。同一道题,GRPO是你必须比你自己生成的其他答案更好;而PPO是我给你一个分,你尽量把这个分刷高。
【问题】熵崩溃和 reward hacking 什么关系?如果策略先熵崩溃,过度集中到少数几条能刷高奖励的策略上,就非常容易演化成 reward hacking;反过来,为了防 reward hacking 而施加的 KL/熵约束,也是在间接对抗熵崩溃。
【问题】GRPO 的奖励函数一般怎么设?为什么一开始 Reward 会出现大幅度震荡?
【答案】GRPO使用 group-based advantage estimation,即从同一 prompt 采样多个response,获得每个回复的原始 reward,然后排名化
。归一化优势值:
- 当 group 内所有样本质量都很差或都很好时,分母 std 接近 0,导致数值爆炸。
- 当 group 内所有样本质量分布均匀时,分母 std 很大,导致数值极小。
2,SFT
2.1,Fine-tuning & PEFT
Full Fine-Tuning(全量微调)对模型全部参数进行反向传播更新,优点是表达能力最强、可完全适配新任务;缺点是显存占用大、训练成本高、容易过拟合且不易多任务切换。
PEFT(高效微调)冻结大模型主体参数,只引入少量可训练参数完成任务适配,以降低显存、算力和过拟合风险。从结构角度看,PEFT 本质是在不改动主干 Transformer 的前提下,引入“旁路参数”或“输入侧自由度”。
- 输入级别:优点是实现极其简单、参数量最少、对模型结构零侵入;缺点是表达能力受限,prompt 长度一旦不够,很难驱动复杂行为,对推理位置较敏感。模型可用序列长度减少,因此越高的微调质量,模型可用序列长度就越低。
- 层内结构级别:LoRA 更像“对模型能力做局部改写”,适合需要内部表征迁移的任务,如指令跟随、推理风格、领域知识注入。
【输入级别】固定预训练 LM,为 LM 添加可训练,任务特定的前缀,可以为不同任务保存不同的前缀。
- Prompt Tuning:在模型输入中添加特定的 prompt 来适配下游任务,而不需要对预训练模型的参数进行全面的更新。
- Prefix Tuning:模型的输入不仅包括原始的任务输入,还包括这些前缀向量。Prefix-Tuning 的前缀参数被插入到模型的所有层中,而 Prompt Tuning 只将提示参数添加到模型的 embedding 层。
- P-tuning v1:通过使用一个 prompt encoder(例如 BiLSTM+MLP)来优化 prompt 参数,但这种方法在一些复杂的自然语言理解任务上效果不佳,且只在较大的模型规模上表现良好。
- P-tuning v2:不仅在输入层,而且在模型的每一层都加入了可训练的连续提示,可以更好地适应各种任务,包括复杂的NLU任务。通过多任务学习策略和深度提示编码器来优化提示参数,使得它在不同规模的模型上都能取得与全参数微调相媲美的性能。
【层内结构级别】
- LoRA 原理是冻结全部预训练模型的权重,在每个 Transformer 层的注意力线性映射层(
)旁边添加低秩分解矩阵( A 和 B 两个小矩阵),只训练这些小矩阵。推理时将 LoRA 参数与原始权重相加即可。这样只需要训练很少的参数(通常小于 1%),大幅降低了显存需求。
2.2,LoRA
如果一个大模型是将数据映射到高维空间进行处理,这里假定在处理一个细分的小任务时,是不需要那么复杂的大模型的,可能只需要在某个子空间范围内就可以解决,那么也就不需要对全量参数进行优化了,当对某个子空间参数进行优化时,能够达到全量参数优化的性能的一定水平(如90%精度)时,那么这个子空间参数矩阵的秩就可以称为对应当前待解决问题的本征秩(intrinsic rank)。
预训练模型本身就隐式地降低了本征秩,当针对特定任务进行微调后,模型中权重矩阵其实具有更低的本征秩(intrinsic rank)。同时,越简单的下游任务,对应的本征秩越低。因此,权重更新的那部分参数矩阵尽管随机投影到较小的子空间,仍然可以有效的学习,可以理解为针对特定的下游任务这些权重矩阵就不要求满秩。
【低秩参数化更新矩阵】在 Transformer 模型中,每层的权重矩阵
通常很大,比如维度是
,参数量
。传统微调需要更新整个权重矩阵,即学习一个同样大小的增量矩阵
。LoRA的关键是:全量微调过程中权重的更新实际上是低秩的,也就是说
可以用两个更小的矩阵相乘来近似。将权重矩阵分解为两个较小的矩阵的乘积(即低秩分解),来近似表示原始的权重矩阵。仅对低秩部分进行更新,而保持原始预训练权重不变。
对于预训练的权重参数矩阵
(
为上一层输出维度,
为下一层输入维度),使用低秩分解来表示其更新:
- 不修改原始权重矩阵
,而在其前后插入两个较小的可训练矩阵
- 训练
,保持原始的权重不变。
【问题】合并adapter权重的时候有没有遇到梯度爆炸?正常合并 LoRA adapter阶段不会出现梯度爆炸,因为合并本质是一次线性代数运算,不参与反向传播。
因此,LoRA 的前向传递函数为:
在开始训练时,对
使用随机高斯初始化
,对
使用零初始化,然后使用 Adam 进行优化。
【问题】为啥这么初始化?
【原因】若
,无论
如何初始化,都有(
),模型初始输出与原模型完全一致。
【问题】为啥不采用
?
【原因】根据损失函数求偏导:
- 若
,
,
可以立即学习;
,
暂时不动,不影响训练。
- 若
,
,
完全学习不动;
,只能
学习,训练初期效率很差。
【问题】其他初始化方法?
- Kaiming/He 初始化:考虑了层的输入维度,更适合深层网络
- 可逆初始化:都用较小的正态分布初始化
- 缩放高斯初始化:根据秩的大小调整初始化范围,避免秩较大时初始值过大
【微调层】在 Transformer 结构中,LoRA 主要应用在注意力模块的四个权重矩阵:
,而冻结全部预训练模型的权重矩阵。通过消融实验发现同时调整
和
会产生最佳结果。
- Attention 层负责建模输入元素间的交互关系(如长距离依赖、语义关联),直接决定了模型如何“理解”上下文。FFN/MLP 进行非线性变换和特征提取,作用是增大模型的非线性表达能力,更偏通用知识表征,微调效果不明显。
- FFN层参数量通常更大,而 Attention 层的 Q/K/V/O 矩阵参数量相对较小。若隐藏维度为
,Attention 头数为
,则 Q/K/V/O 总参数量约为
(假设头维度
)。FFN层参数量约为
(扩展维度为
)。
【问题】为什么 LoRA 微调偏向于 Q 和 V 层而不是 K 层呢?Q 层和 V 层直接影响到注意力权重的计算和最终的输出表示。通过调整 Q 层,可以影响模型选择关注的信息;而调整 V 层可以影响模型如何利用这些信息;K 层主要影响信息的匹配方式,而在许多情况下,调整 Q 和 V 层已足够引导模型关注到更有用的信息上;在所有层上应用这种更新仍会增加额外的计算负担。
【问题】LoRA 是不是只能在 Linear 层插?为什么不能插在 LayerNorm 之后?
- LoRA 并不是“只能”插在 Linear 层,但它天然适配 Linear 层。LoRA 的核心是把原始权重矩阵分解为低秩增量,然后与原权重叠加。这个操作直接作用于矩阵乘法,非常适合 Linear 层。
- Linear 层输出是连续的且没有归一化或非线性限制,添加低秩扰动不会破坏模型的数值稳定性。相反,如果在 LayerNorm 或激活层之后插入,会直接修改标准化后的分布或非线性输出,容易导致梯度不稳定或训练发散。
- LayerNorm 层参数很少,对模型最终输出的影响也不大;LayerNorm 本身是非线性的、强约束的,插入 LoRA 不仅无效,还可能引起梯度不稳定、性能下降。
【参数量】LoRA 可训练参数个数为:
其中,
为应用 LoRA 的权重矩阵的个数,
为 Transformer 的输入输出维度,
为设定的 LoRA 秩。
过小:低秩矩阵的表达能力不足,无法充分捕获任务特定的信息,对复杂文本特征无法精准分类。微调效果不佳,模型性能下。
- 一般情况下,
取到 4、8、16。能够在保持模型性能的同时,显著减少参数数量。
过大:越接近“全参数微调”的自由度,增加可训练参数的数量,出现收益递减现象,性能提升有限,甚至可能出现过拟合。
如果
有 100 行和 200 列,它将存储 20000 个参数。如果我们选择 r=8 的 A 和 B,那么 A 有 100 行和 8 列,B 有 8 行和 200 列,这样总共就有 100*8+200*8=2400 个参数。
- scaling ≈ 1:最稳,适合绝大多数任务
- scaling ≈ 2:表达更强,略增不稳定风险
- scaling > 4:BA权重过高,把 adapter 合并进 base 权重,模型推理输出变成乱码、重复 token、无限循环。
dropout:防止过拟合的正则化参数,设置为 0.1 表示有 10% 的概率随机丢弃节点。
2.3,QLoRA
QLoRA 进一步优化,可以在不降低任何性能的情况下微调量化为 4 bit 模型,结合 LoRA 训练,使得在消费级GPU上微调大模型成为可能。
- 量化:在QLoRA中,首先对模型的权重进行 4 位量化,这意味着模型的每个权重被表示为 4 位的数值,显著减少了模型的显存占用。量化后的模型参数以一种称为 NF4 的数据类型存储,特别适合表示正态分布的数据,并且可以比传统的4位整数或浮点数有更好的量化效果。
- LoRA:QLoRA利用LoRA技术,通过在模型中引入可训练的低秩矩阵来进一步微调模型。这些低秩矩阵作为适配器,被添加到模型的特定层中,并且只有这些适配器的参数在微调过程中被更新,而模型的原始参数保持不变。可以针对特定任务微调模型的行为,而不需要对整个模型进行昂贵的更新。
- 双重量化:对量化过程中使用的缩放因子(scale factor)和偏移量(offset)进行再次量化,从而进一步减少内存占用。
- NVIDIA分页优化:使用NVIDIA统一内存特性,该特性可以在在 GPU 偶尔 OOM 的情况下,进行CPU和GPU之间自动分页到分页的传输,以实现无错误的 GPU 处理。该功能的工作方式类似于 CPU 内存和磁盘之间的常规内存分页。使用此功能为优化器状态(Optimizer)分配分页内存,然后在 GPU 内存不足时将其自动卸载到 CPU 内存,并在优化器更新步骤需要时将其加载回 GPU 内存。
INT8量化:将FP32/FP16降为8位整数 INT4量化:将权重量化为4位整数 FP8量化:8位浮点数量化 FP4量化:4位浮点数量化 NF4量化:4位正态分布浮点(QLoRA专用)【量化】QLoRA为什么选的是 NF4 和 FP16 这组组合,而不是别的组合?
- NF4用于存储:预训练模型权重以4bit NF4格式存储,使得 65B 模型从 780GB 降到约33GB(65B × 0.5字节)。相比 INT4 或传统的 8-bit 量化,NF4 对分布拟合更精准。
- FP16:用于保存原始模型权重或激活,保证推理/微调时不会因为精度损失导致梯度爆炸或训练不稳定。FP16的精度足够支撑微调,而显存消耗比FP32小一半。
【NF4】NF4 的核心思想是 非线性映射(INT4 是线性)
- 假设权重近似正态分布:神经网络权重通常近似服从零中心化的对称分布,类似高斯分布,大部分值集中在零附近。
- 分桶映射:NF4 将 16 个可能的 4-bit 值映射到正态分布的不同区间(与线性量化不同,不是均匀分桶)。区间宽度根据 正态分布概率密度函数(PDF) 自适应分配:权重密度高的区间更细,以降低量化误差。
2.4,量化 & 精度
量化通过降低模型参数的精度,将浮点数转换为整数或定点数,减少模型的存储需求、加快推理速度,并降低模型的计算复杂度。
【精度】
bit 位是计算机中最小的数据单位,只能存储 0 或 1 两种状态。一个 bit 可以表示两种状态,即 0 或 1;
byte 字节是计算机中常用的数据单位,由 8 个 bit 组成;
float 浮点数是一种用于表示实数的数据类型,通常由 32 位或 64 位的二进制数表示,其中 32 位的浮点数称为单精度浮点数,64 位的浮点数称为双精度浮点数;
integer 整数是一种用于表示整数的数据类型,通常由 8 位、16 位、32 位或 64 位的二进制数表示,其中 8 位的整数称为字节,16 位的整数称为短整数,32 位的整数称为整数,64 位的整数称为长整数;
精度 位数 符号位 指数位 尾数位 精度(有效数字) 场景 【FP32】 32位浮点数 1 8 23 7 【FP16】 16位浮点数 1 5 10 3 容易发生溢出,显卡兼容好 【BF16】 16位浮点数 1 8 7 2 训练稳定,V100以上;精确小数时误差大 【INT8】 8位整数 -128 到 127 混合精度训练:即用 FP16 做前向和反向传播以加速和节省内存,但同时保留一个 FP32 的“主副本”权重用于更新。必须配合 Loss Scaling 来防止梯度下溢。
【量化类型】
- 对称线性量化:量化后的值中零点必须对应于原始值中的零,即量化操作的零点固定不变。这种方式通常使用两个参数(量化的最小值和最大值)来定义量化的范围,而这个范围是以零为中心对称的。
- 非对称量化:不强制要求量化后的零点对应于原始数据中的零点。使用三个参数来定义从原始数值到量化数值的映射关系:量化最小值、量化最大值和零点。可以有一个任意的零点。非对称量化特别适合于原始数据分布不关于零对称的情况,例如当数据集中包含大量正值或负值时。
【量化粒度】
- Per-tensor:整个张量或整个层级共享相同的量化参数(scale和zero-point)。这种方式的优点是存储和计算效率较高,但可能会导致精度损失,因为一个固定的量化参数难以覆盖所有数据的动态范围;
- Per-channel:每个通道或每个轴都有自己的量化参数。这种方式可以更准确地量化数据,因为每个通道可以有自己的动态范围,但会增加存储需求和计算复杂度;
- Per-group:在量化过程中,将数据分成块或组,每块或每组有自己的量化参数。
3,RLHF
【问题】强化学习算法辨析:DPO、PPO、GROP、GSPO、DAPO 之间的区别是什么?
- PPO 是经典的 Actor-Critic 方法,同时训练策略网络和价值网络。它通过裁剪目标函数约束策略更新幅度,保证训练稳定性。优势是成熟稳定,适合游戏等长序列任务,但需要额外训练价值函数,显存开销大。
- GRPO 的核心是去掉价值网络,采用 Self-Critic 机制,节约一半显存;对同一 prompt 生成多个输出,用这批样本的平均奖励作为 baseline 来估计优势。但它是 On-Policy 的,每次策略更新后旧数据就废弃了。
- DPO 不属于RL,属于对比学习,它是 Off-Policy 方法,直接从离线的人类偏好数据中学习,不需要奖励模型和价值函数。通过最大化"好回答"与"差回答"的概率比来优化策略。优势是训练简单、只需两个 LLM,但依赖高质量偏好数据。
- GSPO 解决的是 GRPO 等方法在大模型(尤其是 MoE)上“训练容易崩、不稳定”的问题,通过把重要性采样从 token 级升到序列级来稳定梯度。
- DAPO 解决的是 GRPO 在长序列推理任务里“探索能力弱、有效梯度少、长度奖励噪声大”的问题,通过不对称裁剪 + 动态采样 + token‑级 loss + 长度惩罚组合提升效率和稳定性。
3.1,GRPO
【GRPO】PPO 就属于 Actor-Critic,所以它带着 Value-Base model,GRPO 的动机就是干掉了这个 Value-Base 的 model,节省了显存。
- 不训练单独的价值函数,而是通过对比多个策略输出来优化决策,降低显存。
- 在训练过程中,每次对同一输入生成多个输出,计算它们的相对优势。
- 通过群体平均奖励来指导策略优化,依赖策略输出的多样性,可能影响收敛效果。
【缺点】
样本效率低:需要大量轨迹采样才能获得有效的梯度,计算需求较高。
高方差:采样的高方差导致训练不稳定,难以准确估计策略更新。GAE
准确的价值评估困难:缺少明确的价值函数,难以有效评估动作的价值。
通过群体平均奖励来指导策略优化,依赖策略输出的多样性,可能影响收敛效果。
如果不用一个 model 来估计状态的价值,还有什么好办法?那你就基于每一条原始样本生成一组序列,用它们的 reward 均值作为 baseline,这种方法呢,就叫 self-critic。利用了蒙特卡洛方法代替了 TD error。GROP 的精髓呢,就是 Self-Critic,某个状态开始生成多个结果,用这个结果 reward 的均值作为 baseline。
【问题】为什么 GRPO 在训练 MOE 时会出问题?
【答案】GRPO 的优势估计来自同一 prompt 下多条采样轨迹的相对排序,本质假设是:这些轨迹来自“同一策略分布”,只是在随机性下产生差异。但在 MOE 中,不同采样轨迹往往会激活不同专家组合,等价于来自“不同子策略”。此时用 group 内相对奖励做对比,会把路由差异误当成策略优劣,优势信号被系统性污染。
RL 阶段 冻结门控网络,只训练专家与共享骨干
或对 门控网络 使用极小 learning rate,仅通过 SFT / auxiliary loss 训练
GSPO
【问题】 为什么在游戏领域,更多的使用 PPO,而在序列生成上使用GRPO 。相比游戏里的轨迹,序列生成要短的多,它有明确的终止条件,而游戏未必有,因而容易通过蒙特卡洛模拟获得 baseline。
【问题】为什么 GRPO 是 On-Policy?
- 数据由当前策略生成:在每个训练步骤中,使用当前正在优化的策略
来生成一组候选回答。
- 即时更新与抛弃:基于这组新生成的数据计算出的梯度来更新策略。更新完成后,这组数据就会被丢弃,下一个步骤会由新的策略
重新生成数据。
3.2,DRPO
DRPO 的核心思想是:用同一 prompt 下多个 response 的“相对 reward”直接构造 advantage,不做时序价值估计,也不拟合状态价值函数。对一个 prompt
,从当前策略
采样
个候选回答
,通过 reward model 得到对应的标量奖励
。
【GRPO】组内标准化(rank / normalized)
【DRPO】只关心“比同组其他样本好多少”
- DRPO 的 advantage 是强信号、弱约束。reward 的真实差距会直接反映到梯度上,学习更“激进”,也更依赖 reward model 的数值质量。“我比平均好多少?”
- GRPO 的 advantage 是弱信号、强约束。不允许任何一个样本产生过大的梯度贡献,稳定性极强,但会牺牲一部分 reward 强度信息。“我在这一组里好到什么程度(相对位置)?”
【问题】DRPO 为什么可以把散度去掉?DRPO 不是不需要散度,是把散度的作用内化掉。
- DRPO 的 advantage 来自同一 prompt 内的相对差分。
- DRPO 不试图让
直接逼近一个外部最优分布,而只是在问:“在当前策略生成的候选集合中,哪些应该更可能?”。
- 本身采用的 clip 已经给策略函数定义了隐式上下界。信任域仍然存在,对“新旧策略差距”的约束,从“在目标函数里扣分”变成了“在可更新范围上直接设上限”。
3.3,DPO
DPO 的出发点不是强化学习,而是把 RLHF 的目标等价改写成一个纯监督的对比学习问题。对同一个 prompt
,已经有一个人类或 RM 给出的偏好对
,并且存在一个 reference policy
(通常是 SFT 模型)。
【优点】
- 通过人类反馈收集用户偏好数据,在相同 prompt 条件下,给模型一个「更优答案 vs 次优答案」的成对偏好信号,且偏好来源稳定、一致、可解释。
- 采用二元比较来训练策略,适合对话、写作、风格、安全等。
- 直接使用偏好数据优化策略,无需构造显式奖励函数。
【缺点】
- 需要大量高质量用户偏好数据进行训练,数据采集成本较高。
- 主要适用于需要用户偏好驱动的任务,不适用于数学、代码、事实问答。
【问题】如果 dpo 训练过程中,accept 回答和 reject 回答的 loss 都在升高,怎么办?
如果增大,
降低,正常情况。
如果降低,
增大:
- 参考模型(ref)过强 / 偏移过大:DPO 在强行对齐噪声偏好,导致整体困惑度上升。
- 偏好数据质量问题:chosen / rejected 区分不清,chosen 本身语言质量差或不符合 SFT 分布。
- temperature
设置不合理:
太大更新过激,拉高整体 loss;
太小梯度噪声大,训练不稳定。
【问题】如果说 dpo 效果不好,怎么解决?DPO 前增加一轮高质量 SFT,用 PPO 或 GRPO 对照验证。
- 数据层:偏好不明显、偏好噪声大、分布不匹配。
- 参考模型:reference 太强:KL 约束过硬,更新受限;reference 太弱:相对概率无意义。
(温度)不合适
【DPO:一种典型的 Off-Policy 思路】利用一个固定的、离线的人类偏好数据集,直接优化语言模型。这个数据集通常包含一系列的提示(Prompt),以及对模型生成的两个回答的偏好标签(哪个更好
,哪个更差
)。DPO 损失函数直接将策略与人类偏好挂钩,其目标是最大化模型生成“更优”回答的概率,同时最小化生成“更差”回答的概率,并且与一个固定的参考模型(Reference Model)保持一定的距离,防止模型在优化过程中“忘掉”其预训练时学到的知识。
- 数据来源的非交互性:DPO 所用的偏好数据
,
,
是一次性收集并固定的。在整个 DPO 的训练过程中,模型不会用其正在更新的策略去与环境(或人类)交互产生新的偏好数据。
- 行为策略与目标策略的分离:将生成这个偏好数据集的策略(可能是早期的某个模型版本,甚至是多个不同模型的混合)看作是行为策略(Behavior Policy)。而正在优化的当前模型,则是目标策略(Target Policy)。DPO 的目标是利用行为策略产生的数据,来优化目标策略,使其更符合人类偏好。
更多推荐



所有评论(0)