策略梯度方法:策略梯度定理、REINFORCE算法、基线减方差、Actor-Critic架构基础
在机器人技能训练中,无论是PPO还是SAC,其理论根基都源于策略梯度方法。与基于值函数(如Q-Learning)的方法不同,策略梯度方法直接对策略参数进行优化,通过梯度上升最大化期望累积回报。这种方法天然适合处理连续动作空间和高维状态空间,而这正是机器人控制的核心挑战。本章将系统拆解策略梯度定理的数学原理、REINFORCE算法的实现细节、基线减方差的必要性,以及Actor-Critic架构的演进逻辑,为后续深入PPO与SAC打下坚实基础。
3.1 策略梯度定理:从参数空间到期望回报的桥梁
核心原理:策略梯度定理解决了一个根本性问题——如何在不依赖值函数的情况下,直接对策略参数 θ 求梯度。设策略 π_θ(a|s) 为参数化分布,目标函数 J(θ) = E_τ[Σγ^t r_t] 表示期望累积折扣回报。策略梯度定理的核心结论是:
∇J(θ) = E_τ[ Σ_t ∇log π_θ(a_t|s_t) · Q^π(s_t, a_t) ]
这个公式的巧妙之处在于,它将对回报的梯度转化为对策略对数概率的梯度乘以动作价值。直观理解:如果某个动作带来了高于平均的回报 Q,就增加该动作的选择概率;反之则降低。对于机器人技能训练,这意味着我们可以直接优化关节力矩输出分布(如高斯分布的均值 μ 和标准差 σ),而不需要先精确估计每个状态-动作对的Q值。
3.2 REINFORCE算法:蒙特卡洛策略梯度
操作流程:REINFORCE是最基础的策略梯度实现,其核心思想是用完整轨迹的累积回报 G_t 作为 Q^π(s_t, a_t) 的蒙特卡洛估计。具体步骤为:
- 使用当前策略 π_θ 采样一条完整轨迹 τ = (s_0, a_0, r_0, s_1, ..., s_T)
- 计算每个时间步的折扣回报 G_t = Σ_{k=0}^{T-t} γ^k r_{t+k}
- 计算梯度估计:∇J(θ) ≈ Σ_t ∇log π_θ(a_t|s_t) · G_t
- 更新参数:θ ← θ + α · ∇J(θ)
在机器人仿真环境中,REINFORCE的实现通常涉及以下关键代码逻辑:
# 伪代码示例:REINFORCE核心更新
for episode in range(num_episodes):
trajectory = collect_episode(env, policy_net)
for t in range(len(trajectory)):
G = sum([gamma**k * trajectory.rewards[t+k]
for k in range(len(trajectory)-t)])
log_prob = policy_net.log_prob(trajectory.states[t],
trajectory.actions[t])
loss = -log_prob * G
optimizer.zero_grad()
loss.backward()
optimizer.step()
案例拆解:仿真机械臂到达任务。假设我们使用MuJoCo仿真环境,控制一个7自由度机械臂到达目标点。初始策略为随机初始化高斯分布,动作维度为7(各关节力矩)。训练初期,REINFORCE的方差极大——同一策略在不同episode中,G_t 可能从 -50 到 +200 剧烈波动。经过500个episode后,策略开始收敛,但学习曲线震荡明显。关键观察:当某次轨迹恰好成功到达目标时,G_t 会异常大,导致策略参数被大幅推向该轨迹方向,即使该轨迹只是偶然成功。
3.3 基线减方差:不改变期望的方差抑制器
核心原理:基线减方差的核心数学性质是:对于任意只依赖于状态 s_t 的函数 b(s_t),有 E[∇log π_θ(a|s) · b(s)] = 0。因此,从梯度估计中减去基线不会改变期望值,但能显著降低方差。最优基线是状态价值函数 V^π(s),此时梯度变为:
∇J(θ) = E[ Σ_t ∇log π_θ(a_t|s_t) · (G_t - V^π(s_t)) ]
其中 (G_t - V(s_t)) 被称为优势函数 A_t 的蒙特卡洛估计。它衡量的是"这个动作比平均水平好多少",而非回报。在机器人任务中,这相当于问:"在当前关节状态下,执行这个力矩序列比通常策略好多少?"
| 方法 | 方差水平 | 偏差 | 适用场景 |
|---|---|---|---|
| REINFORCE(无基线) | 极高(可达10^4量级) | 无偏 | 简单任务、短轨迹 |
| REINFORCE + 常数基线 | 中等(降低约50%) | 无偏 | 回报均值稳定的任务 |
| REINFORCE + V(s)基线 | 较低(降低约80-90%) | 无偏(若V估计准确) | 大多数机器人控制任务 |
| Actor-Critic(TD误差) | 低 | 有偏(由V估计误差引入) | 复杂连续控制、长时域任务 |
实战场景:四足机器人行走。在训练四足机器人步态时,若使用无基线REINFORCE,策略更新会被极端回报主导——例如某次摔倒但恰好获得较高奖励(因为前进距离远),导致策略错误地增加摔倒动作的概率。引入V(s)基线后,优势函数 A_t = G_t - V(s_t) 能正确识别"虽然回报高,但比预期低"的情况,从而抑制该动作。实际训练中,基线网络V(s)与策略网络共享底层特征提取层,但输出维度不同(策略输出动作分布参数,价值输出标量)。
3.4 Actor-Critic架构:从蒙特卡洛到时序差分的跨越
架构基础:Actor-Critic将策略网络(Actor)与价值网络(Critic)结合,用Critic的时序差分(TD)误差替代蒙特卡洛回报作为优势估计。核心公式为:
δ_t = r_t + γV(s_{t+1}) - V(s_t) # TD误差
∇J(θ) = E[ ∇log π_θ(a_t|s_t) · δ_t ]
这种设计的优势在于:单步更新,无需等待完整轨迹结束,大幅提升样本效率。Critic网络通过最小化 TD 误差的平方来学习价值函数:L(w) = E[(r + γV(s';w) - V(s;w))²]。
案例拆解:机器人臂力控制。假设任务要求机械臂以特定力度抓取易碎物体。使用Actor-Critic架构时,Actor输出每个关节的力矩均值与标准差,Critic评估当前状态的价值。训练初期,Critic的估计误差较大,导致TD误差噪声高,策略更新方向不稳定。但随着Critic逐渐准确,TD误差趋于稳定,策略更新质量显著提升。关键调优参数包括:
- Critic学习率:通常设为Actor学习率的2-3倍,确保价值估计快速收敛
- 折扣因子γ:机器人任务通常设为0.95-0.99,平衡短期与长期回报
- 网络结构:共享底层(如3层MLP,128-256单元),顶层分离输出
3.5 常见误区与总结复盘
误区一:忽略基线的重要性。许多初学者在实现REINFORCE时跳过基线,导致训练发散。经验法则:任何策略梯度算法都应至少使用一个简单的状态无关基线(如回报均值),除非任务轨迹极短且回报范围有限。
误区二:Critic网络过拟合。在Actor-Critic中,Critic如果过于复杂或训练过度,会记住特定轨迹的噪声,导致TD误差失真。建议使用早停或降低Critic网络容量。
误区三:混淆策略梯度与Q-learning。策略梯度是on-policy方法,要求采样数据来自当前策略。在机器人仿真中,如果使用经验回放池(如DQN那样),会破坏策略梯度的理论保证。PPO通过重要性采样缓解了这个问题,但REINFORCE和基础Actor-Critic必须使用on-policy数据。
总结复盘:策略梯度方法为机器人技能训练提供了直接优化策略的数学框架。从REINFORCE到Actor-Critic的演进,本质上是方差控制技术的升级。理解这一脉络后,PPO的裁剪目标(限制策略更新幅度)和SAC的熵正则化(鼓励探索)都是在此基础上针对稳定性和探索性的进一步改进。在后续章节中,我们将看到这些基础组件如何被组合成现代深度强化学习算法。