3.2 REINFORCE:策略梯度的奠基性算法
在推导出策略梯度定理之后,我们得到了梯度的数学表达形式。然而,该期望值无法直接计算,原因在于轨迹空间具有高维甚至连续无限的特性,导致所有可能路径的枚举不可行。因此,策略优化的关键在于利用有限样本对期望进行近似。
具体做法是通过与环境交互采集若干条完整轨迹,并以这些轨迹的经验平均来估计梯度。这一思想构成了 REINFORCE 算法(Williams, 1992)的核心机制。其训练流程如下:
- 使用当前策略 π_θ 采样 N 条完整的轨迹
- 针对每条轨迹,计算从当前时刻 t 到终止状态的累积回报 G_t
- 可选地引入一个固定的 baseline(例如所有轨迹回报的均值)以减少方差
- 基于上述数据计算梯度并更新策略参数 θ
[此处为图片1]
采样带来的挑战:高方差问题
我们的目标是优化策略的长期平均性能,但由于只能依赖有限样本进行估计,必须满足两个基本要求:
- 无偏性(Unbiasedness):所采样的梯度期望应等于真实梯度
- 低方差(Low Variance):不同批次之间的梯度估计应保持稳定
REINFORCE 虽然具备无偏性,但其主要缺陷在于方差过高。以下示例可说明此问题:
示例:训练语言模型回答医疗咨询
输入提示:“如何缓解头痛?”
- 回复1(轨迹1):“多喝水,适当休息,必要时服用布洛芬。” → 奖励 +5
- 回复2(轨迹2):“头痛可能由多种原因引起……”(冗长但正确)→ 奖励 +3
- 回复3(轨迹3):“建议立即手术治疗。”(错误且危险)→ 奖励 -8
即使这三个响应来自同一策略,它们的奖励差异极大,导致基于这些样本计算出的梯度剧烈波动,进而引发以下问题:
- 需要大量轨迹(如数千条)才能获得稳定的梯度估计
- 训练过程缓慢且不稳定
- 对于长序列任务(如对话轮数超过10轮),方差呈指数级增长
关于更新频率的常见疑问
有人可能会问:每次参数更新后策略都会变化,是否意味着只能用一条轨迹就进行一次更新?
答案是否定的。标准的 REINFORCE 实现方式如下:
- 使用当前策略 π_θ 采集 N 条轨迹(例如 N=64)
- 利用这 N 条轨迹计算平均梯度,并执行一次参数更新
- 更新完成后,策略变为 π_θ',此前收集的所有轨迹失效
- 重新使用新策略 π_θ' 采集新的 N 条轨迹,重复上述过程
这种机制被称为 On-Policy 学习:训练数据必须来源于当前策略,旧策略生成的数据不能复用,从而造成样本效率低下。
3.3 Actor-Critic 框架:降低方差的结构化改进
REINFORCE 的高方差主要源于其依赖 Monte Carlo 方法估算回报——即必须等到整条轨迹结束才能获得累积奖励。若能引入一个可学习的价值函数来预测未来回报,则有望实现两个目标:
- 降低估计方差(函数逼近比单次采样更稳定)
- 支持单步更新(无需等待 episode 结束)
这正是 Actor-Critic 架构的设计初衷:通过引入一个 Critic 网络来估计状态价值,并构建优势函数以指导策略更新。
双网络协同机制
系统包含两个神经网络:
- Actor(策略网络):负责根据当前状态选择动作
- Critic(价值网络):评估当前状态的长期价值
两者的训练目标分别如下:
Critic 更新目标:拟合实际观察到的累积回报 G_t,作为监督信号,最小化预测值 V(s) 与真实回报之间的误差。
Actor 更新方向:利用优势函数 A(s,a) 来调整策略,其中优势函数衡量某动作相对于当前状态平均表现的优劣程度。
关键实现细节:在计算优势时需阻断反向传播路径,防止 Actor 的更新干扰 Critic 的学习过程。代码层面通常写作:
advantage = reward + gamma * next_value - value_current.detach()
或简化为:
advantage = td_error # 使用TD误差作为优势估计
迈向单步更新:引入 TD 误差
在 Actor-Critic 框架中,可以采用时间差分(Temporal Difference, TD)误差替代完整的 Monte Carlo 回报,从而实现在线、逐步的策略更新。
定义 TD 优势如下:
ATD(s_t, a_t) = r_t + γV(s_{t+1}) - V(s_t)
与传统方法对比:
| 方法 | 公式 | 特点 |
|---|---|---|
| Monte Carlo 优势 (AMC) | G_t - V(s_t) | 需完整轨迹;无偏估计;方差高 |
| TD 优势 (ATD) | r_t + γV(s_{t+1}) - V(s_t) | 仅需一步转移;方差低;有偏(依赖 V 函数精度) |
3.4 GAE(广义优势估计)的推导
1. 理想优势函数的定义
我们首先定义一个理论上的“真实”优势函数,它基于真实的未来回报:
A(s_t, a_t) = Q(s_t, a_t) - V(s_t) = [G_t | s_t, a_t] - V(s_t)
目标是利用一系列 TD 误差来构造对该真实优势的良好估计。
2. 基于 Bellman 方程的递归展开
根据 Bellman 关系,任意时刻的回报可展开为:
G_t = r_t + γr_{t+1} + γr_{t+2} + ... = r_t + γG_{t+1}
将其代入优势函数表达式:
A(s_t, a_t) = r_t + γV(s_{t+1}) - V(s_t) + γ[A(s_{t+1}, a_{t+1})]
进一步变形,在表达式中同时加减 γV(s_{t+1}):
A(s_t, a_t) = [r_t + γV(s_{t+1}) - V(s_t)] + γ[A(s_{t+1}, a_{t+1})]
注意到第一项正是 TD 误差 δ_t,第二项是下一时刻的优势。由此得到递归关系:
A(s_t, a_t) = δ_t + γA(s_{t+1}, a_{t+1})
3. 迭代展开与核心结论
将上述递归不断展开,最终可得:
A(s_t, a_t) = δ_t + γδ_{t+1} + γδ_{t+2} + γδ_{t+3} + ...
即:真实优势等于未来所有 TD 误差的折扣加权和。
这一结果具有直观意义:
- 每一项 δ 表示当前步骤的“预测偏差”或“意外程度”
- 越远的未来步骤对当前决策的影响越小,由折扣因子 γ 控制衰减速度
GAE 的设计动机:偏差与方差的平衡
尽管上述无限展开在理论上精确,但在实践中面临两个问题:
- 高方差:当使用完整的 Monte Carlo 回报时,估计虽无偏但波动大
- 高偏差:若仅使用单步 TD 误差,计算快但受价值函数近似误差影响严重
GAE 的核心思想正是在这两者之间引入一个平滑调节参数 λ ∈ [0,1],构造一种加权组合:
GAE(s_t) = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}
通过调节 λ:
- λ → 0:偏向单步 TD,低方差高偏差
- λ → 1:接近 MC,低偏差高方差
从而实现灵活的偏差-方差折中,提升策略梯度估计的稳定性与效率。
在强化学习中,优势函数的估计需要在“充分利用未来信息”与“抑制噪声、降低方差”之间取得平衡。直接依赖完整轨迹的方法存在明显缺陷:
依赖完整轨迹:这类方法必须等待整个回合(episode)结束后才能进行价值估计,属于Monte Carlo风格。虽然无偏,但估计的方差较大。
误差累积:若使用过长的序列进行估计,由于未来状态的不确定性较高,TD误差会逐级传递并不断累积,导致价值函数估计失真。
[此处为图片1]为解决这一矛盾,GAE(Generalized Advantage Estimation)引入了一个关键的调节参数——λ(通常取值在0.9至0.99之间),用于控制未来TD误差的衰减权重,实现偏差与方差之间的平滑权衡。
GAE 的数学定义
其中涉及两个重要参数:
- γ:环境中的奖励折扣因子,反映任务对远期回报的关注程度。
- λ:优势函数的折扣因子,是人为设定的超参数,用于调节偏差-方差的平衡。
每一步的TD误差定义为:
δ = r + γ·V(s) - V(s)
理解 λ 的作用机制
当λ = 0时:
此时仅利用当前步的TD误差,等价于传统的TD(0)方法。该方式方差最小,但偏差最大,因为它只看一步反馈。
当λ = 1时:
恢复为完整的多步展开形式,相当于Monte Carlo估计。此方法理论上无偏,但由于依赖整条轨迹,方差最大。
当0 < λ < 1时:
GAE在TD和Monte Carlo之间进行指数加权插值。未来的TD误差以γλ的速率衰减,从而实现了对“视野长度”与“噪声抑制”的灵活调控。
GAE 的高效计算:递推实现
原始的求和公式可通过反向递推方式高效实现,类似于RNN中的时间反向传播过程。从轨迹末尾开始向前计算,显著提升效率。
伪代码示例:
advantages = torch.zeros_like(rewards)
gae = 0
for t in reversed(range(T)):
delta = rewards[t] + gamma * values[t+1] - values[t]
gae = delta + gamma * lam * gae
advantages[t] = gae
注意事项:
- 必须逆序遍历时间步,因为当前优势值依赖后续信息。
- values[t+1] 来自Critic网络对下一状态的价值预测。
- 该递推结构已成为PPO、A2C、A3C等主流算法的标准组件。
GAE 与 n-step TD 的关系
GAE可被解释为所有n-step TD优势估计的指数加权平均:
其中,n-step优势定义为:
A(n) = Σi=0n-1 (γλ)iδt+i + (γλ)nV(st+n) - V(st)
总结如下:
- λ 决定了我们综合多少种不同长度(n-step)的TD估计。
- 较小的λ 更加关注短期、低方差但高偏差的估计。
- 较大的λ 则倾向于整合长期信息,带来更高方差但更低偏差的结果。
- 实践中,λ = 0.95 或 0.99 是常用的经验默认值。
On-Policy 方法的数据效率瓶颈
REINFORCE、Actor-Critic、A2C/A3C等算法均属于On-Policy范式,其核心限制在于:策略梯度更新所用的数据必须由当前策略生成。这带来了严重的样本效率问题:
- 每次策略更新后,旧数据即失效,无法复用。
- 对于大语言模型(LLM),生成一次响应可能耗时数秒,却只能使用一次。
- 训练百万步意味着需采集百万条新样本。
量化对比示例(以 Qwen-7B 为例):
| 方法 | 单次采样耗时 | 数据复用次数 | 训练1000步总耗时 |
|---|---|---|---|
| On-Policy | 3秒 | 1次 | 3000秒 |
| Off-Policy (PPO) | 3秒 | 4次 | 750秒 |
重要性采样:实现 Off-Policy 学习的关键工具
核心问题:能否利用旧策略 π_old 产生的数据来训练新策略 π_new?
数学基础:重要性采样定理
对于任意函数 f(x),有:
Exπ_new[f(x)] ≈ Exπ_old[ (π_new(x)/π_old(x)) · f(x) ]
将其应用于策略梯度目标:
原目标基于 π_new,但数据来自 π_old,因此引入概率比率进行修正:
J ≈ E[ r(θ) · logπ_θ(a|s) · A(s,a) ]
其中 r(θ) = π_θ(a|s) / π_θ_old(a|s) 为重要性权重。
医疗问答场景示例:
- 旧策略输出:“多喝水,休息”,对应动作概率为 0.6。
- 新策略评估同一回复时赋予更高概率 0.9。
- 若该行为带来的优势为正,则经比率修正后的梯度贡献将增强。
关键挑战:当重要性比率过大(如超过10),说明新旧策略差异剧烈,此时重要性采样会导致梯度估计方差急剧上升,影响训练稳定性。因此必须限制策略更新的幅度。
TRPO:信赖域约束下的策略优化
TRPO(Trust Region Policy Optimization, Schulman et al., 2015)提出了一种理论保障更强的优化框架:在确保策略变化不过大的前提下,最大化性能提升。
优化问题形式化表达:
maximizeθ E[ r(θ) · A(s,a) ]
s.t. D_KL( π_θ_old || π_θ ) ≤ δ
其中KL散度用于衡量新旧策略分布之间的差异。
直观理解:
- 目标函数:利用旧数据评估新策略的性能增益。
- 约束条件:KL散度不超过预设阈值(如0.01),防止策略突变。
医疗问答示例:
旧策略分布:P("多喝水")=0.3, P("休息")=0.4, P("吃药")=0.3
新策略分布:P("多喝水")=0.5, P("休息")=0.35, P("吃药")=0.15
计算得KL散度若超出阈值,则判定此次更新违反信赖域约束,需缩小步长或回退。
实现方式:TRPO采用共轭梯度法求解该带约束优化问题,需计算Hessian矩阵(二阶导数)。尽管具备单调改进的理论保证,但其计算复杂、实现难度高、对参数敏感,限制了广泛应用。
PPO:实用化的策略优化方案
作为TRPO的简化版本,PPO(Proximal Policy Optimization)通过设计更易优化的目标函数,在保持稳定更新的同时大幅降低实现复杂度。其核心思想是使用裁剪机制或惩罚项代替严格的KL约束,允许高效地多次复用同一批数据进行策略更新,成为当前主流的强化学习算法之一。
PPO(Proximal Policy Optimization)由Schulman等人于2017年提出,通过一阶优化方法结合精心设计的目标函数,实现了与TRPO相当的性能,现已成为深度强化学习(RL)及基于人类反馈的强化学习(RLHF)中的主流算法。
3.7.1 PPO-Clip:以裁剪机制取代KL约束
核心思想:不显式地对策略更新施加KL散度限制,而是直接控制新旧策略概率比值的变化范围,防止策略发生剧烈变动。
目标函数定义如下:
[此处为图片1]
其中关键操作是将概率比值 r 限制在区间 [1ε, 1+ε] 内,通常取 ε = 0.2。
分情况分析其作用机制:
- 情况一:优势 A > 0(对应“好动作”,期望提升其选择概率)
- 若比值 r ≤ 1+ε:采用原始梯度进行更新,继续增强该动作的概率。
- 若 r > 1+ε:比值被裁剪至 1+ε,梯度不再增长,避免过度优化。
- 情况二:优势 A < 0(对应“坏动作”,期望降低其发生概率)
- 若比值 r ≥ 1ε:正常计算梯度,持续削弱该动作的影响。
- 若 r < 1ε:比值被裁剪为 1ε,抑制进一步下降,防止惩罚过重。
医疗问答场景示例(含具体数值计算):
用户提问:“如何缓解头痛?”
模型回复:“多喝水,适当休息”
旧策略下该回答的对数概率为:log prob = -4.6
新策略下的对数概率为:log prob = -3.5
计算得优势值 A = 0.8(表明此为优质回应),概率比值为:
r = exp(-3.5 + 4.6) = exp(1.1) ≈ 3.0
设定裁剪阈值 ε = 0.2,则允许的比值范围为 [0.8, 1.2]。
代入PPO-Clip处理过程:
- 原始项:r × A = 3.0 × 0.8 = 2.4
- 裁剪项:clip(3.0, 0.8, 1.2) × A = 1.2 × 0.8 = 0.96
- 最终目标值:min(2.4, 0.96) = 0.96 ← 发生裁剪!
解读:尽管新策略使该回答的概率提升了约3倍,但PPO-Clip仅允许最多提升至1.2倍,有效遏制了策略的突变风险,保障训练稳定性。
3.7.2 PPO-KL:引入自适应KL惩罚项
另一种实现方式是在目标函数中直接加入KL散度作为惩罚项:
[此处为图片2]
其中系数 β 可根据实际KL散度表现动态调整:
- 若当前KL值超过目标阈值 → 增大 β,加强约束力度;
- 若KL值偏低 → 减小 β,放宽限制,鼓励更多探索。
尽管该方法理论上更精确,但在实践中PPO-Clip更为流行,主要原因在于其无需手动调节β参数,且训练过程更加稳定、易于实现。
3.7.3 PPO-Clip 完整训练流程
[此处为图片3]


雷达卡


京公网安备 11010802022788号







