大模型强化学习,相比PPO,DPO 还是个弟弟?

作者 | hzwer 黄哲威 编辑 | 自动驾驶之心

 原文链接:https://zhuanlan.zhihu.com/p/696732944

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心『LLM』技术交流群

本文只做学术分享,如有侵权,联系删文

论文地址:https://arxiv.org/pdf/2404.10719v2

这是一篇四月份的新论文,一作单位是清华

这篇主要有三个部分,1. 从理论和实验上看,DPO 可能有本质缺陷 2. 研究了 PPO 提升的几个重要因素 3. 实验证实 PPO 可以在硬核任务上(编程比赛)碾压 DPO 达到新的 SoTA

论文先指出了一个令业界困惑的现状,即大部分的开源的榜单上,DPO 占据了领先的位置,但是众所周知,最好的闭源模型 GPT4 和 Claude,用的都是 PPO 方案。所以这里就自然引出两个问题,即 1. DPO 相对 PPO 真的有优势吗?2. 如何让 PPO 也很能刷榜呢?

DPO 的缺陷

在调教 PPO 的时候,一种常见的现象是语言模型发现了奖励模型的缺陷,而构造出不符合人类偏好,但是却能拿到高奖励的解,即 reward hacking 现象。作者首先指出,虽然 DPO 没有显式的奖励模型,它也会遇到类似的问题。作者的理论指出,PPO 找到的解同样最小化 DPO 目标函数,因此这些 reward hacking 的解也存在于 DPO 的求解空间里。而且,DPO 可能会有过度偏离参考策略的风险。

理论 1:在给定真值奖励 r 和偏好数据集 D 时,PPO 导出的策略是 DPO 导出策略的真子集

直觉理解此时的策略完美的学会了 r,那么从 DPO 的角度看也是最优的

然后作者给了一个在 DPO 的解空间但不在 PPO 解空间的例子,是说 DPO 没有直接拉近当前策略和参考策略,产生了一个符合偏好但是偏离参考策略的解

作者做了一个验证性实验,发现在偏好数据集没有覆盖的数据点上,DPO 可能分配了比参考模型更高的概率,奖励模型也会在这些数据点赋予偏高的奖励,而 PPO 在 KL 约束下,却能优化出一个优秀的解

所以在真实场景下,DPO 会不断冒出在数据分布外的回复,导致无法预期的行为

PS:DPO 也可以做更显式的 KL 约束,效果会怎么样呢?

SafeRLHF 实验

在这个场景下,可以通过减轻分布漂移的方式来提高 DPO 的性能,做法是先通过 SafeSFT 来给 DPO 一个更贴近偏好数据的起点,也可以通过迭代 DPO,即训练 -> 生成新样本 -> 奖励模型标注 -> 训练的方式来提高性能;还可以通过降低偏好数据集中的噪声来提高 DPO 性能,但依然无法胜过 PPO

提高 PPO 效果的关键因素

作者使用的奖励方式是对每个回复奖励一次,而不是稠密奖励

这里涨点的三个技巧是优势函数规范化,大 Batch 训练,以及对参考模型做滑动更新;当 batchsize 太小的时候,PPO 的性能甚至差于 SFT

Benchmark 结果

这一部分大部分就是在说 PPO > Iter DPO > DPO

我最关心的实验结果是编程:

对于解编程题来说,不需要人工标注或者训练奖励模型,因为可以直接测试测例来得到结果,正确的回复给高奖励,错误的回复给低奖励,形成成对数据

而最终结果是 DPO 训炸了,产生的都是无意义的结果,Iter DPO 稍微好点,但都不如 SFT

而 PPO 刷新了 SoTA

自动驾驶之心

论文辅导来啦

知识星球交流社区

近4000人的交流社区,近300+自动驾驶公司与科研结构加入!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知(大模型、端到端自动驾驶、世界模型、仿真闭环、3D检测、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、大模型,更有行业动态和岗位发布!欢迎加入。

独家专业课程

端到端自动驾驶大模型、VLA、仿真测试、自动驾驶C++、BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、车道线检测、轨迹预测、在线高精地图、世界模型、点云3D目标检测、目标跟踪、Occupancy、CUDA与TensorRT模型部署、大模型与自动驾驶、NeRF、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频

学习官网:www.zdjszx.com

### 原理 - **PPO(Proximal Policy Optimization)**:PPO是一种无模型的策略梯度算法,它通过优化策略网络来最大化累积奖励。为了避免策略更新时步长过大导致性能下降,PPO引入了近端策略优化的思想,通过裁剪目标函数来限制策略更新的幅度,保证新策略与旧策略的差异在一定范围内。 - **DPO(Direct Preference Optimization)**:DPO直接优化模型输出与人类偏好之间的匹配度。它通过最小化模型输出分布与人类偏好分布之间的差异来进行训练,避免了像PPO那样需要复杂的价值网络和优势函数估计。 - **GRPO(Grouped Proximal Policy Optimization)**:GRPO移除了价值网络(Critic),不再单独训练价值函数模型,而是通过组内样本的相对比较来计算优势值。通过组内相对奖励机制,避免了PPO中复杂的优势函数估计过程。此外,GRPO通过组内比较取代独立评估器,结合剪枝和KL正则化,保证模型在更新过程中不会出现剧烈波动 [^1][^2]。 ### 应用 - **PPO**:PPO在许多领域都有广泛应用,如机器人控制、自动驾驶、游戏等。在机器人控制中,PPO可以用于训练机器人完成各种任务,如行走、抓取等;在游戏领域,可用于训练智能体玩各种游戏,如Atari游戏、围棋等。 - **DPO**:DPO主要应用于需要考虑人类偏好的场景,例如在大模型的训练中,通过引入人类的偏好信息,使模型生成的结果更符合人类的期望,如文本生成、图像生成等领域。 - **GRPO**:GRPO在大模型强化学习中有应用,例如DeepSeek - R1的强化学习方案中,通过GRPO算法取代RLHF常用的PPO,尽可能减少人类标注数据,设计纯RL的环境,用精心设计的奖励机制来训练模型学会推理 [^3]。 ### 对比 - **显存占用**:相比PPO需要同时维护Actor和Critic两个大模型,GRPO仅需策略模型,显存需求降低约40% [^1]。 - **计算效率**:PPO需要进行复杂的优势函数估计过程;而GRPO通过组内相对奖励机制,避免了这一复杂过程,且通过组内比较取代独立评估器,大幅降低了计算成本 [^1][^2]。 - **学习稳定性**:GRPO结合剪枝和KL正则化,保证了模型在更新过程中不会出现剧烈波动,使得学习过程更加稳健和高效 [^2]。 ```python # 这里简单示意一个PPO训练的伪代码框架 import torch import torch.nn as nn import torch.optim as optim # 定义策略网络 class PolicyNetwork(nn.Module): def __init__(self, input_dim, output_dim): super(PolicyNetwork, self).__init__() self.fc1 = nn.Linear(input_dim, 128) self.fc2 = nn.Linear(128, output_dim) def forward(self, x): x = torch.relu(self.fc1(x)) x = torch.softmax(self.fc2(x), dim=-1) return x # 初始化策略网络和优化器 input_dim = 10 output_dim = 5 policy = PolicyNetwork(input_dim, output_dim) optimizer = optim.Adam(policy.parameters(), lr=0.001) # 模拟训练过程 for epoch in range(100): # 这里省略了与环境交互收集数据的过程 # 假设已经有了状态、动作、优势值等数据 states = torch.randn(32, input_dim) actions = torch.randint(0, output_dim, (32,)) advantages = torch.randn(32) # 计算旧策略的动作概率 old_probs = policy(states).gather(1, actions.unsqueeze(1)).squeeze(1) # 计算新策略的动作概率 new_probs = policy(states).gather(1, actions.unsqueeze(1)).squeeze(1) # 计算比率 ratio = new_probs / old_probs # 计算裁剪目标 clipped_ratio = torch.clamp(ratio, 0.8, 1.2) surr1 = ratio * advantages surr2 = clipped_ratio * advantages loss = -torch.min(surr1, surr2).mean() # 更新策略网络 optimizer.zero_grad() loss.backward() optimizer.step() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值