GRPO PPO
介绍GRPO
GRPO的核心思想是通过组内相对奖励来优化策略模型,而不是依赖传统的批评模型(critic model)。具体来说,GRPO会在每个状态下采样一组动作,然后根据这些动作的相对表现来调整策略,而不是依赖一个单独的价值网络来估计每个动作的价值。
这种方法的优势在于:
减少计算负担:通过避免维护一个与策略模型大小相当的价值网络,GRPO显著降低了训练过程中的内存占用和计算代价。
提高训练稳定性:GRPO通过组内比较来估计优势函数,减少了策略更新的方差,从而确保了更稳定的学习过程。
去掉评估模型,GRPO可能面临的问题
奖励估计不准确:Critic Model的核心作用是评估状态或动作的长期价值。在某些任务中,奖励可能只有在完成特定的长期目标后才能获得,这种场景中失去Critic Model会导致奖励估计不准确,从而导致训练不稳定。
以下是DAPO论文中总结的GRPO面临的问题:
熵崩溃:策略的熵(不确定性)逐渐趋近于零,导致智能体行为过于确定化,失去探索能力。
奖励噪音:奖励信号存在随机波动或误差,导致模型接收到的奖励信息不准确、不稳定,从而影响策略学习的效果。
训练不稳定:在强化学习模型的训练过程中,性能指标(如奖励、损失等)出现大幅波动、震荡或不收敛的现象,导致模型无法稳定地学习到有效的策略。
奖励劫持
奖励劫持(Reward Hacking)是指在强化学习中,智能体利用奖励函数中的缺陷或模糊性来获取高奖励,而没有真正学习或完成预期的任务。奖励劫持的存在是因为强化学习环境通常是不完善的,并且准确地指定奖励函数从根本上具有挑战性。比如你想让机器人打扫房间,你得奖励设置为地面上垃圾越少,奖励越高,但是机器人发现,把所有垃圾都扫到地毯底下,或者用个大东西把垃圾盖住,传感器就检测不到垃圾了,于是能拿到超高分!但房间实际上还是脏的。
奖励劫持的产生主要有以下原因:
奖励函数设计缺陷:奖励函数可能没有准确地反映设计者的意图,或者没有考虑到所有可能的情况,导致智能体可以找到捷径来获取高奖励。
环境复杂性:强化学习环境可能非常复杂,智能体可能会发现一些设计者未预料到的行为来最大化奖励。
部分可观察状态:智能体可能无法完全观察到环境的状态,从而导致其行为与设计者的预期不一致。
追问:怎么缓解奖励劫持
1. 设计更智能、全面的奖励函数
多维度考量:不要只盯着单一指标。例如,在打扫机器人场景下,除了统计“垃圾清理量”,还应对“将垃圾准确投掷进垃圾桶”这一关键动作进行奖励;
目标对齐:奖励函数要尽量反映最终业务或任务目标,而非表面现象。这个过程需要不断试验与打磨;
引入惩罚项:对一些明显偏离目标的行为(如机器人将垃圾藏匿)设置扣分或负奖励,增加防范强度。
2. 强化人工监督与定期审查
超越分数盲信:奖励分数高并不意味着策略无懈可击,要定期检查 AI 实际执行的行为;
及时干预:一旦发现模型开始钻空子,应迅速调整奖励函数,或通过人类反馈明确告知“不允许这样做”,类似 RLHF 中的人工反馈环节。
3. 多目标奖励与硬性约束
多信号协同:在复杂任务中,单一奖励往往不够,可并行设置若干子目标,让模型在各个维度上都达到预期;
硬性规则:对一些绝对不容违背的原则(如“禁止将垃圾扫入地毯下”)直接设为不可逾越的约束,而非靠奖励惩罚试图引导。
4. 正则化与行为规范性惩罚
KL 散度惩罚:在 PPO 或其他策略优化中,常添加与原始“良好行为”模型(如 SFT 模型)之间的 KL 散度惩罚,以防新策略过度偏离、产生怪异行为;
限制偏移:这样既能追求更高回报,又能控制模型行动风格,避免“剑走偏锋”。
5. 对抗性测试
模拟攻击者思维:主动思考 AI 可能的取巧路径,设计专门的测试场景进行“红队”式攻击;
持续迭代:针对发现的漏洞不断修补奖励函数或约束机制,提高系统鲁棒性。
6. 基于人类偏好的学习(RLHF)
学习偏好胜过完美奖励:RLHF 不要求你精确定义所有奖励规则,而是通过人类偏好示例来训练奖励模型;
更接近直觉:人类可以一眼分辨真正有价值的结果与“耍小聪明”的结果,这使得训练出的奖励信号更加健壮、贴近业务目标。
7. 简化原则(KISS)
保持精简:过于复杂的奖励机制更容易被模型钻漏洞;
直接明了:在条件允许的情况下,尽量将目标与奖励设计得简洁、易于理解和验证。
RLHF的标准三阶段对齐程序
收集人类反馈:通过人类的示范和反馈来构建奖励模型。
强化学习:利用奖励模型在强化学习框架下优化模型的policy。
增强对齐:通过进一步的优化和迭代,使得模型更好地对齐人类的目标和价值观。
追问:如何区分on-policy和off-policy?
on-policy是实时调整的,而off-policy是预先设定好的。on-policy 使用当前策略产生的数据来更新策略,off-policy 则使用历史数据或不同策略的数据来更新。通过在训练过程中用当前策略收集数据并更新奖励函数,可以让奖励函数更有效地指导模型在高奖励区域的表现,从而提升模型效果。
追问:怎么区分On-line和 Off-line?
On-line
定义: 算法在训练过程中持续地与环境进行交互,实时或在短时间内使用新收集的数据进行学习更新。
特点:
数据收集和模型训练是交织进行的。
需要一个实时的环境模拟器或真实的物理环境。
模型(策略或价值函数)会随着训练的进行而改变,并且数据是基于当前模型与环境的交互。
典型场景: 机器人学习行走、玩游戏(游戏模拟器)、自动驾驶(在模拟或真实环境中)。
Off-line
定义: 算法仅使用一个预先收集好的、固定的数据集进行训练,在训练过程中不与环境进行任何新的交互。
特点:
数据收集阶段与模型训练阶段是完全分离的。
不需要实时环境,只需要一个数据集。
面临数据分布偏移 (Distribution Shift) 的挑战:训练数据分布可能与目标策略在环境中实际产生的数据分布不同,可能导致学习到的策略在实际环境中表现不佳。
典型场景: 从历史用户交互日志、机器人操作记录、医疗数据等中学习策略,这些数据量通常很大且收集成本高,难以进行额外的在线探索。这是一个新兴且活跃的研究领域(常被称为 Batch RL 或 Offline RL)。
有哪些评估DPO训练的指标
文本质量相关:
困惑度:衡量模型对测试文本的预测能力
多样性:利用n-gram、词汇多样性等指标
人类偏好对齐相关:
偏好数据集测试:在测试偏好数据集上的准确率,模型选择chosen数据的概率是否显著高于reject数据。
胜率:与未训练模型进行对比,让人类或者相关的奖励模型进行打分,验证DPO模型是否输出更高奖励值的回答。
安全性与可靠性相关:
有害内容检测:使用Perspective API、RealToxicityPrompts等方法检测有害内容。
可靠性检测:验证模型是否过度自信(如通过Expected Calibration Error, ECE),以及检验模型输出中的数据、观点、计算结果等是否正确。
具体任务相关:
比如翻译任务的BLEU,摘要生成任务的ROUGE,语音识别任务的WER,代码生成任务的代码执行成功率,分类任务的准确率、F1 score
工业界做评估的流程
明确评估目标:确定主要优化方向(如安全性、偏好对齐、生成质量)或者领域中明确的接受/拒绝偏好(如必须满足xx格式,不能出现xx违禁词)
构建测试集:包含多样化的输入样本,包含难负样本(如诱导性提问)和常规用例(高频用户需求)。严格隔离训练集与评估集,避免信息泄露风险
自动评估:通过并行化推理获取输出结果,通过计算自动指标进行训练效果分析(如奖励模型打分、BLEU等)。
人工评估:对代表性样本、 难负样本、高价值样本进行专家评审,设计标准化评分表以减少主观偏差。
分析结果:对比优化后的模型与基线模型的差异,统计显著性检验(如t-test)。
迭代优化:基于评估反馈校准偏好数据分布(如调整正负样本比例)、调整模型参数和优化标注策略(如细化分类标签体系)等。
如何构建DPO训练数据集
数据格式:{ "prompt": "你好,请介绍一下transformers库?", "chosen": "Transformers是一个强大的自然语言处理库,支持…", "rejected": "不清楚" }
采用开源的偏好数据集,从huggingface或modelscope中搜索。
拒绝采样:提出一个问题,让模型提出N个候选回复,用奖励模型或者人工对回复进行排序。
多模型对比采样:引入不同的模型分别生成回复,再利用其他大模型或者奖励模型进行排序。
人工构造:首先构建领域(数学、代码)、任务类型(C++、python)、难度等级(easy、medium、hard)三层体系,为每个分类构建20条以上高质量样本。然后根据prompt生成模板(例如:"请用{语言}实现{功能},要求{约束条件}")生成大量的用户问题,然后让模型生成回复,最后再对模型回复进行排序。
实践中怎么选取DPO和PPO
任务类型与目标
DPO:奖励信号难以定义,但能获取大量偏好排序数据(如人工标注的“好/坏”回答对)
PPO:有明确的奖励信号,且需动态探索环境(如自动驾驶中的避障决策)。
数据类型:
DPO:DPO 依赖离线偏好数据,需要数据覆盖场景全面且标注准确,效果显著(如利用用户评分优化推荐模型)。
PPO:PPO 通过在线交互生成数据,适合动态环境(如机器人实时调整抓取策略)。
资源与效率要求
DPO:DPO 无需训练奖励模型,计算成本低,适合 GPU 资源有限或需快速迭代的场景。
PPO:PPO 通过在线探索和奖励模型优化,理论上能达到更高的性能上限,但需更多计算资源。
为什么DPO会出现正样本的奖励也降低的现象
优化目标的性质:DPO的目标是最大化正样本和负样本之间的奖励差距,而不是单纯地增加正样本的奖励。因此,在优化过程中,正样本的奖励和负样本的奖励可能会同时下降,只要它们之间的差距在扩大。
损失函数的设计:DPO的损失函数没有足够的激励来保持正样本的高概率。对应改进:DPOP方法
模型优化的不确定性:DPO优化过程中,对于正样本优化的方向存在不确定性。DPO实际上优化的是整体奖励差距,而不是单一地让正样本的奖励增大。
模型容量的限制:如果模型的容量有限,可能无法同时优化正样本和负样本的奖励,导致正样本的奖励降低。
正样本的奖励也降低的现象导致的影响
模型生成符合人类偏好的句子的概率是在下降的。当其低于某个阈值时,意味着模型几乎不会生成符合人类偏好的句子,甚至会出现胡言乱语。
怎么解决正样本的奖励也降低的现象
数据工程:对训练数据进行清洗和优化,确保正负样本之间的语义差异明显,减少标注错误。
正则化项:在DPO的损失函数中添加正则化项,以鼓励正样本奖励的上升。
梯度:减去模型更新梯度向量在给定正例对应的梯度向量上的投影)来避免模型在给定正例上的概率的下降
调整超参数:降低学习率、减少batch size来减小不稳定波动,设置early stop避免模型向不正确方向优化
基于log概率进行排序来构造偏好对会导致的问题
偏好标准单一,未必符合人意:以模型自身的对数概率作为优劣判断依据,实际衡量的是“输出在原始模型分布中的典型性”,而非回答质量。模型倾向于给予更常见或更安全的回答更高log概率,这些回答被规则认为“优选”,但它们不一定真的是人类偏好的最佳答案。这样构造的偏好对偏离了人类实际期望,存在体系化偏差。
自我强化与回音室效应:偏好对是由同一模型生成并评判的输出得到的,这会导致一种“自我强化”。模型最初认为概率大的答案被标记为优选,在DPO微调中模型将进一步强化对此类回答的偏好,同时更加压制它原本认为不太可能的回答。如此一来,模型原有的分布倾向被放大,多样性降低,输出可能趋向于模型原本的高频模式,形成训练上的“回音室”效应。
缺乏独立监督信号:没有显式训练一个独立的奖励模型,相当于缺少对模型偏好的校准。人类偏好往往需要通过人工标注或训练一个专门的奖励模型来捕获,如果直接用模型的内在评分代替,训练信号可能并不可靠。这种情况下,模型优化的目标变成了提升自身打分,而不是真正提高回答质量,出现所谓“代理目标偏差”。
介绍DPO改进算法
Iterative-DPO
Iterative-DPO 是一种迭代优化方法,通过分阶段训练来逐步改进模型:
训练奖励模型:首先训练一个奖励模型(Reward Model)。
分阶段训练:将训练数据分成多个部分(如3等份),每次使用一部分数据进行训练。
采样和更新:在每轮训练中,使用当前模型对每个prompt采样多个答案,使用奖励模型对答案进行打分,选择得分最高和最低的答案构建成pair对,用于训练DPO并更新模型。
重复训练:依次使用每部分数据进行训练,直到所有数据都训练完成。
这种方法结合了在线和离线策略的优点,能够在训练过程中不断更新模型,提高对齐效果。
KTO
DPO要求高质量的成对正负偏好数据用于训练,但这一点往往在现实世界中不可得。KTO对齐策略的训练数据是(x,y,if_can_accept)三元组形式,其中x为输入,y为输出,if_can_accept为y是否可以被接受作为输入x的输出。这样做的好处有:
简化的反馈需求:KTO方法利用简单的二进制反馈(即输出是否理想)而不是复杂的偏好等级或概率评分,这可能简化了反馈数据的收集,更适用于数据较少或者获取成本较高的场景。
最大化效用:与传统方法侧重于最大化对数似然的人类偏好不同,KTO直接最大化模型输出的效用,这可能提供了对真实世界效用的更好逼近。
鲁棒性:该方法在数据极端不平衡的情况下保持良好表现,即使优质数据很少,也能有效地调整和优化大型语言模型。
DPO的奖励是token-level还是sentence-level的
奖励信号是sentence-level的,因为DPO的目标是优化整个句子的偏好,而不是每个token的偏好。