4. 策略梯度与Actor-Critic
在PPO与RLHF的大模型对齐训练中,策略优化算法是驱动模型行为对齐的核心引擎。从基础的策略梯度(Policy Gradient)到高效的Actor-Critic框架,再到GAE(广义优势估计)的引入,构成了从“试错学习”到“稳定可控对齐”的完整技术脉络。本章将深入拆解REINFORCE、A2C/A3C与GAE的数学原理、工程实现及在RLHF场景下的应用要点,帮助学习者建立从理论到落地的系统认知。
4.1 核心原理:从REINFORCE到Actor-Critic的演进逻辑
策略梯度方法的核心思想是直接对策略参数θ求梯度,通过最大化期望累积回报来优化策略。REINFORCE算法作为最基础的蒙特卡洛策略梯度方法,其更新公式为:∇J(θ) = E[∇log π(a|s) · G_t],其中G_t是从时刻t到回合结束的累积折扣回报。这种方法的优点是无偏性——它使用真实回报进行估计,不引入任何近似;但缺点是方差极高,因为单次轨迹的回报波动很大,导致训练不稳定。
为了降低方差,Actor-Critic框架应运而生。它引入一个Critic网络(价值网络)来估计状态价值V(s)或动作价值Q(s,a),用优势函数A(s,a) = Q(s,a) - V(s)替代原始回报G_t。这样做的数学意义在于:优势函数衡量的是“当前动作相对于平均水平的优劣”,而不是回报,从而在保持策略梯度方向正确的前提下,显著减少了梯度估计的方差。A2C(Advantage Actor-Critic)使用同步多环境并行训练,而A3C(Asynchronous Advantage Actor-Critic)则采用异步多线程,两者在数学本质上是相同的,只是工程实现不同。
在RLHF场景中,这种演进尤为重要。大模型生成的文本轨迹长度可达数百甚至上千,如果使用REINFORCE,单条轨迹的回报方差会大到完全淹没学习信号;而引入Critic网络后,模型能够逐步学习到“什么样的生成质量更好”的价值判断,从而稳定地优化策略。
4.2 判断方法与操作流程:如何选择与实现
在实际工程中,选择哪种算法取决于任务特性和资源约束。以下是判断路径和实现要点:
| 维度 | REINFORCE | A2C/A3C | GAE + Actor-Critic |
|---|---|---|---|
| 方差水平 | 极高 | 中等 | 低(可通过λ调节) |
| 偏差水平 | 无偏 | 有偏(依赖Critic精度) | 可控(λ=0时高偏差,λ=1时低偏差) |
| 样本效率 | 低 | 中 | 高 |
| 训练稳定性 | 差 | 中 | 好 |
| 适用场景 | 短轨迹、简单任务 | 中等长度轨迹 | 长轨迹、大模型RLHF |
实现A2C的关键步骤包括:
- 构建双网络:Actor网络输出动作概率分布,Critic网络输出状态价值V(s)。在LLM场景中,Actor通常是策略模型(如7B/13B参数),Critic可以是较小的价值头网络。
- 计算优势:使用TD误差δ = r + γV(s') - V(s)作为优势的近似。对于多步回报,可以使用n-step回报或GAE。
- 联合更新:Actor的损失为 -log π(a|s) · A(s,a),Critic的损失为MSE(V(s), G_t)或MSE(V(s), TD目标)。
- 熵正则化:在Actor损失中加入熵项β·H(π),防止策略过早收敛到局部最优。
4.3 案例拆解:GAE在RLHF中的实战应用
假设我们正在训练一个对话模型的RLHF对齐流程,使用7B参数的LLM作为Actor,1.3B参数的奖励模型提供标量奖励,Critic网络与Actor共享主干但带有独立的回归头。训练批次包含64条提示,每条提示生成256个的响应。
初始现象:使用A2C(λ=0,即单步TD)训练时,模型在500步后出现奖励震荡,生成质量时好时坏,且KL散度(与SFT模型的差异)迅速增大,说明策略偏离了初始分布。
分析判断:单步TD误差δ只考虑当前的即时奖励和下一状态的价值,忽略了未来的贡献。对于对话生成这种长程依赖任务,单步优势估计过于短视,导致策略更新方向不稳定。
关键参数调整:引入GAE,设置λ=0.95,γ=0.99。GAE的计算公式为:A_t = Σ_{l=0}^{∞} (γλ)^l · δ_{t+l}。这意味着优势估计会综合未来约20个的TD误差,既保留了长期信息,又通过λ衰减控制了方差。
实际操作步骤:
# 伪代码:GAE优势计算
def compute_gae(rewards, values, dones, gamma=0.99, lam=0.95):
advantages = []
gae = 0
for t in reversed(range(len(rewards))):
if dones[t]:
delta = rewards[t] - values[t]
gae = delta
else:
next_value = values[t+1]
delta = rewards[t] + gamma * next_value - values[t]
gae = delta + gamma * lam * gae
advantages.insert(0, gae)
returns = [adv + val for adv, val in zip(advantages, values)]
return advantages, returns
结果对比:调整后,训练损失曲线在300步内趋于平滑,奖励均值从0.32提升至0.58,KL散度控制在预设阈值内。生成样本的人工评估通过率从41%提升至67%。
风险与代价:GAE引入了额外的超参数λ,需要调参;同时Critic网络的精度直接影响优势估计质量,若Critic欠拟合,GAE的优势估计会失真。为此,我们增加了Critic的学习率预热阶段,并在前100步冻结Actor,仅训练Critic。
复盘经验:在RLHF中,GAE的λ值不宜过大(>0.99),否则会引入过多噪声;也不宜过小(<0.9),否则会丢失长程依赖信息。0.95是经过多组实验验证的稳健选择。
4.4 常见误区与总结复盘
总结复盘:策略梯度家族的核心矛盾始终是偏差与方差的权衡。REINFORCE提供了无偏但高方差的基线,Actor-Critic通过价值网络引入偏差来换取方差降低,而GAE则通过λ参数实现了两者的连续调节。在PPO和RLHF的实际工程中,GAE已成为标准配置,因为它能够稳定地处理长序列生成任务,同时为策略更新提供平滑的优势信号。理解这一演进逻辑,是掌握大模型对齐训练的关键一步。