Lecture 3: Policy Gradients
课程链接↗
0. 从模仿学习到强化学习:为什么需要在线学习?
在上一讲中,我们看到模仿学习(Imitation Learning)能够利用专家示范数据快速获得一个不错的策略。但它有两个根本限制:第一,它无法超越专家的表现;第二,它不能通过与环境的交互进行自我改进。
如果我们没有专家数据,或者希望策略比专家更强,就必须回到强化学习的核心范式:让智能体通过试错,直接优化累计奖励。这就引出了本讲的主题——策略梯度(Policy Gradient)方法。
策略梯度是第一类真正意义上的在线强化学习算法:它不需要专家示范,而是通过不断与环境交互、收集自己的经验,并据此更新策略,以最大化期望总回报。
1. 问题设定与目标函数
我们考虑一个马尔可夫决策过程(MDP),其轨迹(trajectory)定义为状态和动作的交替序列:
τ=(s1,a1,s2,a2,…,sT,aT)策略 πθ(a∣s) 是一个由参数 θ 决定的概率分布。轨迹 τ 在策略 πθ 下出现的概率为:
pθ(τ)=p(s1)t=1∏Tπθ(at∣st)p(st+1∣st,at)我们的目标是找到一组参数 θ,使得期望总回报最大:
J(θ)=Eτ∼pθ(τ)[t=1∑Tr(st,at)]这是一个关于 θ 的函数,我们需要计算它的梯度 ∇θJ(θ),并用梯度上升法更新 θ。
2. 策略梯度的推导:对数导数技巧
直接对 J(θ) 求导很困难,因为期望的分布 pθ(τ) 本身依赖于 θ。这里的关键技巧是“对数导数恒等式”(log-derivative trick):
对于任意概率密度函数 pθ(x),有:
∇θpθ(x)=pθ(x)∇θlogpθ(x)利用这个恒等式,我们可以将梯度改写为:
∇θJ(θ)=∇θ∫pθ(τ)R(τ)dτ=∫∇θpθ(τ)R(τ)dτ=∫pθ(τ)∇θlogpθ(τ)R(τ)dτ=Eτ∼pθ(τ)[∇θlogpθ(τ)R(τ)]其中 R(τ)=∑t=1Tr(st,at) 是整条轨迹的总回报。
接下来,我们将 logpθ(τ) 展开:
logpθ(τ)=logp(s1)+t=1∑T(logπθ(at∣st)+logp(st+1∣st,at))注意到 logp(s1) 和 logp(st+1∣st,at) 都与 θ 无关,因此它们的梯度为零。于是:
∇θlogpθ(τ)=t=1∑T∇θlogπθ(at∣st)将其代回梯度表达式,得到最终的策略梯度公式:
∇θJ(θ)=Eτ∼pθ(τ)[(t=1∑T∇θlogπθ(at∣st))(t′=1∑Tr(st′,at′))]3. 直观理解:加权的监督学习
这个公式可以这样理解:策略梯度是在做一种加权的监督学习。
回忆行为克隆的目标是 minθE[−logπθ(a∣s)],其梯度为 −∇θlogπθ(a∣s),目的是增加专家动作的似然。
而策略梯度的梯度项是 ∇θlogπθ(at∣st)×R(τ)。这意味着:
- 如果一条轨迹的总回报 R(τ) 很高,我们就增加这条轨迹上所有 (st,at) 对的似然。
- 如果 R(τ) 很低(甚至是负的),我们就减少这些 (st,at) 对的似然。
这就是“试错学习”的数学形式化:多做带来好结果的事,少做带来坏结果的事。
4. 算法实现:REINFORCE
基于上述梯度,我们可以写出最简单的策略梯度算法——REINFORCE:
- 初始化策略参数 θ。
- 收集数据:运行策略 πθ,得到 N 条完整轨迹 {τi}i=1N。
- 估计梯度:用蒙特卡洛采样近似期望: ∇θJ(θ)≈N1i=1∑N(t=1∑T∇θlogπθ(ai,t∣si,t))R(τi)
- 更新策略:θ←θ+α∇θJ(θ)。
- 重复步骤 2-4。
这个算法完全在线,只需要智能体与环境交互产生的数据。
5. 问题一:高方差
策略梯度的一个致命弱点是方差极高。原因在于,整条轨迹的回报 R(τ) 被用来更新轨迹上的每一个时间步。即使某个早期动作与最终的高回报毫无关系,它也会被错误地加强。
更糟的是,如果回报的绝对值很大,梯度的尺度会变得极不稳定。
6. 改进一:因果性(Causality)
一个基本的物理事实是:当前的动作不能影响过去已经发生的奖励。因此,在计算时间步 t 的贡献时,我们只应考虑从 t 开始的未来回报,即回报到-go(return-to-go):
R^t=t′=t∑Tr(st′,at′)于是梯度更新变为:
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)R^i,t这显著降低了方差,因为我们剔除了与当前决策无关的历史噪声。
7. 改进二:引入基线(Baseline)
即使使用了回报到-go,梯度仍然可能因回报的绝对值过大而波动。我们可以减去一个与动作无关的基线 b,来进一步降低方差。
关键性质是:对于任意与动作 at 无关的基线 b(st),以下等式成立:
Eat∼πθ[∇θlogπθ(at∣st)b(st)]=b(st)∇θEat[1]=0因此,减去基线不会改变梯度的期望(无偏),但能有效降低方差。
一个常用且有效的选择是状态价值函数 Vπ(st),即在状态 st 下遵循当前策略的期望未来回报。实践中,常使用一个简单的启发式:整个批次的平均回报作为全局基线。
8. 从 on-policy 到 off-policy
REINFORCE 是一个 on-policy 算法:每次更新后,策略 πθ 发生了变化,旧的数据就不再反映新策略的行为,必须重新收集数据。这导致样本效率极低。
为了提高效率,我们希望实现 off-policy 学习:用旧策略 πθold 采集的数据,来更新新策略 πθnew。
这可以通过重要性采样(Importance Sampling)实现。轨迹层面的重要性权重为:
pθold(τ)pθnew(τ)=t=1∏Tπθold(at∣st)πθnew(at∣st)然而,这个乘积会随着轨迹长度 T 指数级地爆炸或消失,导致估计极不稳定。
一个更实用的做法是在单个时间步层面进行重要性采样,得到 off-policy 策略梯度:
∇θJ(θ)≈N1i=1∑Nt=1∑Tπθold(ai,t∣si,t)πθ(ai,t∣si,t)∇θlogπθ(ai,t∣si,t)R^i,t这允许我们在同一批数据上进行多次梯度更新,大大提高了样本效率。
9. 约束策略更新幅度
然而,off-policy 更新有一个风险:如果新旧策略相差太远,重要性权重会失真,导致梯度估计完全错误。
因此,我们需要约束策略在一次更新中不能偏离太远。一种常见的方法是加入一个KL散度约束:
Es∼πθold[DKL(πθnew(⋅∣s)∥πθold(⋅∣s))]≤δ这个约束保证了新策略的行为分布不会与旧策略相差太远,从而维持了 off-policy 估计的有效性。这也是后续 PPO 等算法的核心思想之一。
10. 总结
策略梯度为我们提供了一个优雅而通用的框架,将强化学习问题转化为一个可微的优化问题。尽管其原始形式(REINFORCE)存在高方差和低样本效率的问题,但通过引入因果性、基线、重要性采样和KL约束等一系列技巧,我们可以逐步构建出强大而实用的在线强化学习算法。这些思想构成了现代深度强化学习,如 PPO、TRPO 等算法的基石。
cs224R-Lecture 3 Policy Gradients
Sat Feb 07 2026 1860 words · 7 minutes