对比背景
在大语言模型(LLM)的训练流程中,强化学习对齐阶段(如RLHF)是提升模型指令遵循能力与人类偏好的关键环节。传统方案多采用近端策略优化算法,但在处理超长上下文与庞大参数规模的模型时,其高昂的计算与显存成本成为显著瓶颈。为此,业界提出了一种去除价值网络的简化方案(即本文所指的GRPO类算法)。本文将围绕传统经典算法与该新型简化算法展开对比,帮助技术团队在架构设计时做出合理决策。
对象定义
为了统一表述,本文将两种对比对象分别设定为“方案A(传统带价值网络算法,如PPO)”与“方案B(简化无价值网络算法,如GRPO)”。
- 方案A(传统PPO类算法):基于Actor-Critic架构,在策略网络之外额外维护一个价值网络来估计状态价值,通过优势函数计算策略梯度。
- 方案B(GRPO类算法):摒弃了价值网络,通过对同一状态采样多个不同动作,利用组内平均奖励作为基线直接计算相对优势,从而更新策略网络。
理论基础与核心概念解析
无论是方案A还是方案B,其核心目标都是优化策略函数 $\pi(a|s,\theta)$。在此过程中,以下几个数学符号与概念构成了两者的共同理论基础:
- 状态 $s$ 与 动作 $a$:$s$ 表示当前环境状态(如提示词上下文),$a$ 表示模型采取的动作(如生成的Token)。
- 奖励 $r$ 与 回报 $u$:奖励 $rt = R_t(s_t, a_t, s{t+1})$ 依赖当前状态与动作;回报 $ut = \sum{i=t}^{n} \gamma^{i-t} r_i$ 是奖励的折现累积。
- 动作价值函数 $Q_\pi$:表示在状态 $st$ 采取动作 $a_t$ 后,遵循策略 $\pi$ 能获得的期望回报:$Q\pi(s_t, a_t) = \mathbb{E}[U_t | S_t=s_t, A_t=a_t]$。
- 状态价值函数 $V_\pi$:$V\pi(s_t) = \mathbb{E}{At \sim \pi}[Q\pi(s_t, A_t)]$,反映当前状态的整体好坏。
- 优势函数 $A_\pi$:$A\pi(s_t, a_t) = Q\pi(st, a_t) - V\pi(st)$。该函数是强化学习更新的核心,反映了动作 $a_t$ 相对于平均水平 $V\pi$ 的相对优势。
相同点分析
- 优化目标一致:两者均旨在通过最大化期望奖励来优化策略网络参数 $\theta$,解决大模型对齐问题。
- 基础数学依赖同源:两者都依赖状态、动作、奖励、回报等基本符号定义,且最终都通过计算“优势函数”来指导策略梯度的上升方向。
- 防止策略崩溃机制:无论是方案A还是方案B,在实际工程实现中通常都会引入裁剪机制或KL散度惩罚,以限制策略更新的步长,防止模型在训练早期崩溃。
核心差异分析
两种方案的根本分歧在于如何估计优势函数 $A\pi(s_t, a_t)$ 中的基线 $V\pi(s_t)$。
架构与基线计算方式
- 方案A:引入独立的Critic网络(参数为 $\phi$),通过最小化时序差分误差来拟合 $V_\pi(s_t)$。优势函数计算依赖Critic网络的预测输出。
- 方案B:取消Critic网络。对于给定的状态 $s_t$,策略网络采样 $G$ 个不同的动作 ${a_1, a_2, …, a_G}$,计算每个动作的奖励 $r_1, …, r_G$。基线取组内奖励均值 $\bar{r} = \frac{1}{G}\sum r_i$。优势直接计算为 $A_i = r_i - \bar{r}$。
内存与计算开销
- 方案A:需要同时在显存中保存Actor和Critic两个庞大网络的参数、优化器状态及梯度,显存压力极大,对通信带宽要求极高。
- 方案B:仅保留Actor网络,显存占用近乎减半,去除了Critic的同步更新开销,单步训练速度显著提升。
训练稳定性
- 方案A:Critic网络在训练初期往往欠拟合,导致 $V_\pi$ 估计不准,优势函数方差大,容易引发Actor网络的不稳定。
- 方案B:直接利用同组采样的真实奖励均值作为基线,避免了Critic未收敛带来的偏差,训练初期更为稳定。
关键差异对比表格
| 对比维度 |
方案A(传统PPO类) |
方案B(GRPO类) |
| 网络架构 |
Actor-Critic 双网络架构 |
单 Actor 网络架构 |
| 基线计算 |
依赖价值网络 $V_\pi(s)$ 预测 |
依赖同状态多次采样的组内均值 $\bar{r}$ |
| 显存占用 |
极高(需存储双网络及优化器状态) |
较低(仅需存储单网络及优化器状态) |
| 计算瓶颈 |
Critic网络的前向反向传播及梯度同步 |
同状态批量采样带来的推理计算开销 |
| 训练稳定性 |
依赖Critic收敛程度,初期易震荡 |
基于真实奖励统计,初期稳定性较好 |
| 时间效率 |
单步更新慢,但所需响应次数少 |
单步更新快,但需对同一提示词多次推理 |
典型场景选择
- 方案A的适用场景:
适用于状态空间复杂、单次动作采样成本极高且奖励极度稀疏的场景。在此类场景下,如果每次只能获取极少的样本,方案B的组内均值将失去统计意义,此时依赖已收敛的方案A的价值网络能提供更平滑的估值。 - 方案B的适用场景:
极度适用于大语言模型对齐场景。大模型推理成本虽高,但在相同上下文下批量生成多条回复(如G=4或8)的并行效率较高。且由于LLM参数量巨大,显存是核心瓶颈,方案B通过省去Critic网络,大幅降低了集群规模要求。
选型建议
- 在算力资源受限、且团队对大模型分布式训练显存优化经验有限时,优先考虑方案B(GRPO类算法),以降低硬件门槛并加快迭代周期。
- 在任务奖励极度稀疏、无法对同一状态进行多次采样时,可考虑方案A(PPO类算法),通过Critic网络在多步之间的信用分配来提供有效梯度。
- 对于通用云上AI开发平台(如百度智能云提供的各类AI计算与大模型开发平台),其托管的强化学习框架通常需要兼顾效率与通用性,往往支持多种算法配置。开发者可根据显存配额与任务类型灵活选择,在资源充足时可采用方案A,在追求吞吐量时切换至方案B。
迁移与使用注意事项
- 采样策略适配:从方案A迁移至方案B时,数据加载逻辑需从“单条轨迹”改为“同上下文多轨迹组”。需确保推理引擎支持高效的批量解码。
- 奖励模型调用频次:方案B需要对组内所有生成的动作序列计算奖励,奖励模型的调用频次成倍增加,需对奖励模型进行量化或分布式部署以避免成为瓶颈。
- 显存峰值控制:虽然方案B省去了Critic网络,但在同状态多次采样时,若采用Prefix Caching共享可以降低推理显存;若处理不当,批量生成的长序列可能导致激活值显存溢出。
- KL散度约束:由于方案B直接基于组内奖励差,缺乏长期信用分配机制,容易在短时间内偏移参考策略过大。务必在损失函数中加入显式的KL惩罚项。
示意性代码(方案B优势计算伪代码)
# 伪代码:展示方案B(GRPO类)的优势计算逻辑def compute_advantage_group_based(states, policy_model, reward_model, group_size=4): # 1. 同状态批量采样 actions = [policy_model.generate(s, num_return_sequences=group_size) for s in states] # 2. 计算组内奖励 rewards = reward_model(states, actions) # shape: [batch, group_size] # 3. 计算组内均值作为基线 V_pi baseline = rewards.mean(dim=1, keepdim=True) # shape: [batch, 1] # 4. 计算相对优势 A = r - baseline advantages = rewards - baseline # shape: [batch, group_size] # 5. 将优势展平并送入策略梯度更新 return advantages.view(-1)
总结
传统带价值网络方案(PPO)与简化无价值网络方案(GRPO)的核心区别在于“状态价值的估计方式”。方案A用参数化网络预测价值,代价是高昂的显存与算力消耗;方案B用同组采样均值代替价值,换取了极简的架构与更低的资源门槛。在实际AI应用与大模型训练选型中,开发者应基于自身算力规模、任务奖励密度及工程实现复杂度,在两者之间做出理性的权衡与选择。