4. 策略梯度与Actor-Critic

在PPO与RLHF的大模型对齐训练中,策略优化算法是驱动模型行为对齐的核心引擎。从基础的策略梯度(Policy Gradient)到高效的Actor-Critic框架,再到GAE(广义优势估计)的引入,构成了从“试错学习”到“稳定可控对齐”的完整技术脉络。本章将深入拆解REINFORCE、A2C/A3C与GAE的数学原理、工程实现及在RLHF场景下的应用要点,帮助学习者建立从理论到落地的系统认知。

策略梯度与Actor-Critic算法演进关系图 REINFORCE (MC策略梯度) 使用完整轨迹回报 高方差,无偏估计 Actor-Critic (A2C/A3C) 引入Critic价值网络 降低方差,引入偏差 GAE (广义优势估计) λ参数平衡偏差与方差 PPO/RLHF核心组件 核心公式对比 REINFORCE: ∇J(θ) = E[∇log π(a|s) · G_t] A2C: ∇J(θ) = E[∇log π(a|s) · A(s,a)],其中 A = r + γV(s') - V(s) GAE: A_t = Σ(γλ)^l · δ_{t+l},其中 δ_t = r_t + γV(s_{t+1}) - V(s_t) 在RLHF中的工程映射 策略模型 (Actor) 生成回答的LLM 奖励模型 (Reward) 替代人类反馈的打分器 Critic (价值网络) 估计状态价值V(s)

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网络后,模型能够逐步学习到“什么样的生成质量更好”的价值判断,从而稳定地优化策略。

关键理解:REINFORCE是“用结果说话”,Actor-Critic是“用预期说话”。前者真实但嘈杂,后者平滑但有偏。GAE则通过λ参数在两者之间找到最佳平衡点。

4.2 判断方法与操作流程:如何选择与实现

在实际工程中,选择哪种算法取决于任务特性和资源约束。以下是判断路径和实现要点:

维度 REINFORCE A2C/A3C GAE + Actor-Critic
方差水平 极高 中等 低(可通过λ调节)
偏差水平 无偏 有偏(依赖Critic精度) 可控(λ=0时高偏差,λ=1时低偏差)
样本效率 低 中 高
训练稳定性 差 中 好
适用场景 短轨迹、简单任务 中等长度轨迹 长轨迹、大模型RLHF

实现A2C的关键步骤包括:

  1. 构建双网络:Actor网络输出动作概率分布,Critic网络输出状态价值V(s)。在LLM场景中,Actor通常是策略模型(如7B/13B参数),Critic可以是较小的价值头网络。
  2. 计算优势:使用TD误差δ = r + γV(s') - V(s)作为优势的近似。对于多步回报,可以使用n-step回报或GAE。
  3. 联合更新:Actor的损失为 -log π(a|s) · A(s,a),Critic的损失为MSE(V(s), G_t)或MSE(V(s), TD目标)。
  4. 熵正则化:在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 常见误区与总结复盘

误区一:认为A3C一定优于A2C。实际上,A3C的异步更新会引入梯度陈旧性问题,在分布式训练中需要额外的通信和同步机制。现代框架(如Ray、Horovod)更倾向于使用同步的A2C配合大规模并行环境。
误区二:忽略Critic网络的收敛性。Critic的价值估计如果偏差过大,优势函数A = r + γV(s') - V(s)会失真,导致Actor被误导。建议使用目标网络(Target Network)或梯度裁剪来稳定Critic训练。
误区三:在RLHF中直接使用REINFORCE。大模型生成的轨迹长度长、回报稀疏,REINFORCE的方差会大到无法收敛。必须使用GAE或至少n-step回报来降低方差。

总结复盘:策略梯度家族的核心矛盾始终是偏差与方差的权衡。REINFORCE提供了无偏但高方差的基线,Actor-Critic通过价值网络引入偏差来换取方差降低,而GAE则通过λ参数实现了两者的连续调节。在PPO和RLHF的实际工程中,GAE已成为标准配置,因为它能够稳定地处理长序列生成任务,同时为策略更新提供平滑的优势信号。理解这一演进逻辑,是掌握大模型对齐训练的关键一步。

实践建议:在实现GAE时,务必注意dones标志的处理。对于对话任务,每个回合的结束(EOS )应视为done=True,否则价值估计会错误地跨回合传播,导致优势计算混乱。