Background
2022年底,OpenAI关于InstructGPT的论文b[1]引发了人们对人类反馈强化学习(RLHF)的广泛兴趣,现在通常被称为后训练。核心概念包括使用配对偏好数据集结合rank损失来训练奖励模型(RM)。然后将此RM与近端策略优化(PPO)算法一起用于微调GPT模型。目标是调整模型以增强安全性、数学推理和其他功能。虽然RM使用标记数据作为代理进行训练,并结合KL惩罚来约束策略距离,但整个过程并没有明显偏离传统的PPO方法。
The objective function of RLHF
Infrastructure challange of RLHF
一个主要问题是PPO需要同时加载四个大型模型,使系统架构复杂化 。这种对模型推理加速(PPO样本生成)和模型训练加速的双重需求对人工智能基础设施优化构成了重大障碍,特别是对于像llama3.1这样的庞大模型(4050亿个参数)。
从2023年到2024年,出现了许多类似RLHF的新算法,包括直接偏好优化(DPO)[2]及其变体,如REINFORCE Leave One-Out(RLOO)[4]、群体相对策略优化(GRPO)[5]和REINFORCE。这些算法的主要目标是简化RLHF过程,同时降低训练成本和提高效率。
Non-RL methods
DPO
在这些算法中,DPO作为一项关键的创新而脱颖而出。它的基本前提是,由于RLHF中的RM是在标记数据上进行训练的,因此不需要将RM训练与RLHF训练分离为两个阶段。相反,它提出将两个训练步骤的损失合并到一个损失函数中。这导致的损失类似于在正样本上执行监督微调(SFT),而在负样本上应用反向SFT(假设没有KL惩罚约束)。
DPO Loss Function
DPO的损失显而易见;它只需要SFT和Reference模型,而不需要实现PPO的复杂性。如果我们通过传统的强化学习来解释DPO,它类似于 offline REINFORCE算法,其中正样本获得+1奖励,负样本获得-1奖励。KL罚款也可以纳入该奖励或作为额外的KL差异损失处理。
The objective function of DPO
然而,DPO继承了传统 offline RL算法的一些缺点,例如缺乏用于梯度校正的重要采样, 以及与训练数据和模型之间的 out-of-distribution (OOD)样本相关的问题。这些因素会扭曲训练轨迹。此外,在训练期间,DPO可能会遇到选择逻辑和拒绝逻辑同时下降的情况;Llama3.1通过对所选样本应用负对数似然(NLL)损失来减轻这种情况。
Iterative DPO [3]
一个直接的改进包括训练一个类似于RLHF的RM——这个RM可以是一对RM,也可以是一个原始的行为迁移模型。语言模型为每个提示抽取N个回答,根据RM提供的分数对它们进行排序,以确定最佳选择和最差拒绝的样本。简单来说,这意味着将DPO训练中得分最高和最低的样本配对 。由于这些样本是由语言模型本身生成的,因此它缓解了 offline RL中普遍存在的一些OOD问题。
在这里插入图片描述
通常,这种迭代的样本生成和训练过程发生在3到10个迭代中,每个迭代生成10K到20K个样本——明显少于PPO所需的50到100个策略迭代。因此,迭代DPO占据了online和offlineRL算法之间的中间地带。
迭代DPO的主要优点在于工程上的便捷性和收敛效果之间的平衡。由于它的训练发生在不同的阶段——样本推理和模型训练——通常不需要同时将所有模型加载到gpu上,从而避免了与RLHF相关的许多基础设施挑战。推理加速可以通过vLLM或TensorRT-LLM等框架轻松实现,用于离线部署。
有些人可能会想,RLHF是否也可以分阶段加载进行推理和训练,以避免这些问题;然而,由于耗时的模型重新加载和优化器状态管理,RLHF中所需的大量迭代使问题变得非常复杂。
例如,开发Llama3.1的工程师可能会在两周内完成405B迭代DPO的基础架构;相反,实施PPO可能需要三个月或更长时间。此外,在基本推理和训练加速策略下,迭代DPO的训练速度是PPO的3倍以上。
RL methods
RLOO
如前所述,DPO可以通过REINFORCE透镜来理解;接下来,我们基于这个概念分析了RLOO、GRPO和Off-policy REINFORCE。以RLOO为例,其核心思想是消除RLHF中的critic模型以节省GPU内存。没有ciritc模型,我们如何评估强化学习的advantages ?我们为每个提示抽取
个回答,并应用留一方法:**计算当前样本的奖励减去剩余
个样本的平均奖励** 。
RLOO Loss Function
The objective function of RLOO
GRPO
GRPO采用了类似的方法,但用直接减去给定提示的所有样本的平均奖励,然后除以标准差,取代了“留一” 。
How GRPO works.
Analysis of GRPO and RLOO
乍一看,RLOO和GRPO都不错;然而,那些熟悉RLHF基础设施的人会认识到一个重要的问题:如果所有模型(Actor, Critic, Reward and Reference models)共享相似的尺度(例如,都是70B),使用vLLM或TensorRT-LLM进行PPO样本生成,使用Megatron-core进行训练加速,结果在推理和训练之间几乎相等的计算资源消耗-大约为1:1的比例。因此,由于增加了推理成本,消除critic模型可能会无意中降低训练效率 。
此外,由于多个模型必须与推理和训练模块一起在一个人工智能系统中运行,因此整个系统的复杂性在很大程度上保持不变。这些方法适用于critic和reward模型明显大于actor的场景(“10倍”的数字被夸大了),但即使这样,PPO也可以使用actor权重来初始化critics。
理论上,GRPO和RLOO对PPO性能没有显著提高 ;有些人可能会争辩说,sampling-based baselines 产生的估计比critic学到的更准确。我们可以通过冻结actor在PPO训练中的权重更新来预训练critic模型 。RLOO和GRPO的目标是通过每个提示的多个响应来提高批量大小的稳定性,同时加强探索 ,这也是PPO中可以实现的策略。
此外,GRPO可能会出现某些极端情况 ;例如,如果两个抽样rewards略有不同 (例如,1.001 vs. 1.00),它们可能会在规范化 过程中放大为显著偏差 。
>>> a = torch.tensor([1, 1.001])
>>> (a - a.mean()) / a.std()
tensor([-0.7070, 0.7072])
用户提出的另一种观点认为,GRPO可能有利于模型在数学问题上收敛良好;如果对于一个提示的响应,所有的抽样奖励都是相等的,那么GRPO将不会产生有利于模型主动学习的advantage 。然而,在类似的ppo条件下——actor已经有效地收敛——由于通常更高的学习率和critic预训练,critic通常收敛得更快。
此外,在基于原始论文描述的数学RLHF过程中通常使用的过程奖励模型(PRM)设置下,GRPO 与 REINFORCE plus 平均基线密切相关,因为它直接利用全局样本统计量进行归一化。
GRPO with PRM
Experiments for GRPO, RLOO, and REINFORCE
最后,我们比较了GRPO、RLOO和REINFORCE++ (REINFORCE++: A Simple and Efficient Approach for alignment Large Language Models )基于OpenRLHF的实验结果。
实验设置:
KL coef = 0.01 (For BT reward model) or 0.001 (For Math Test)
max\_samples = 25000
n\_samples\_per\_prompt = 4
rollout\_batch\_size = 256
train\_batch\_size = 128
actor\_learning\_rate = 5e-7
critic\_learning\_rate = 9e-6
datasets: OpenRLHF default datasets / MetaMathQA with rule-based reward (for Math Test)
我们发现GRPO、RLOO和REINFORCE++在数学场景中的表现大致相当。然而,在Bradley-Terry Reward Model下,GRPO更容易奖励黑客行为。LLM开发人员的一些实际结果表明,带有critic预训练的PPO优于GRPO和REINFORCE。
Experimental 1 for Bradley-Terry Reward Models and general scenarios (PPO / REINFORCE++ > GRPO)
Experimental 2 for rule-based reward and mathmatical scenarios 1 (REINFORCE++ == GRPO)
Experimental 3 for mathmatical scenarios 2 ( REINFORCE++ / RLOO > GRPO)
RLHF是否有尺度?从数据、模型和…中探索影响也验证了我们的结果。
Off-policy REINFORCE [6]
最后,我们讨论了来自INF技术报告的一种相对“未知的方法”。先前建立的DPO与offline REINFORCE之间的联系表明,INF直接使用REINFORCE实现了一个算法:
Off-policy REINFORCE Loss Function
在这里插入图片描述
它的训练机制与迭代DPO的训练机制相似,但用REINFORCE损失代替了DPO的损失。这种损失函数相对于迭代DPO的优点包括:
-
- Introduction of importance sampling for gradient correction.
-
- Utilization of all sampled data points for increased batch size during training—DPO only considers best and worst signals.
然而,对于与KL约束相关的调优参数是否会导致与PPO类似的不稳定问题,存在一些担忧。最终,这种迭代训练方法还有助于规避RLHF系统面临的基础设施实施挑战。
参考文献
点个「赞」+「在看」❤️
让我们知道这份文字有温暖到你,也是 我们持续 创作的最大动力!
推荐
CosyVoice 2:基于大型语言模型的可扩展流式语音合成技术
Mini-Omni2: with Vision, Speech and Duplex Capabilities
亲测有效!如何用 Address Sanitizer 精准定位内存漏洞?附保姆级操作指南
要用 AI 裁员 50% 的千亿独角兽,公开认错,重启招聘!
single codebook和dual codebook在LLM中向量量化上有什么区别?
亲测有效!如何用 Address Sanitizer 精准定位内存漏洞?附保姆级操作指南
Telling gcc directly to link a library statically
Telling gcc directly to link a library statically