跳到主要内容

策略梯度算法

算法原理

策略梯度方法直接优化策略函数,而不是价值函数。通过梯度上升来最大化期望回报。

基本思想

  • 直接参数化策略 π(a|s;θ)
  • 通过梯度上升优化策略参数 θ
  • 目标:最大化期望累积奖励 J(θ)

核心公式

策略梯度定理

J(θ)=Eτp(τθ)[t=0T1logπθ(atst)Qπθ(st,at)]\nabla J(\theta) = E_{\tau \sim p(\tau|\theta)}\left[\sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot Q^{\pi_\theta}(s_t,a_t)\right]

这个式子从何而来呢?

更新公式

本质是梯度更新,希望参数能够做到: argmaxθEτp(τθ)[R(τ)]\arg\max_\theta E_{\tau \sim p(\tau|\theta)}[R(\tau)]

那下面这个式子就不难理解了,直接类比梯度上升: θθ+αlogπθ(atst)Gt\theta \leftarrow \theta + \alpha \cdot \nabla \log \pi_\theta(a_t|s_t) \cdot G_t

其中:

  • θ\theta: 策略参数
  • α\alpha: 学习率
  • GtG_t: 从时刻tt开始的累积回报,Gt=k=0Tt1γkrt+k+1G_t = \sum_{k=0}^{T-t-1} \gamma^k r_{t+k+1}
  • πθ(atst)\pi_\theta(a_t|s_t): 参数化策略

轨迹概率分解

轨迹τ=(s0,a0,r0,s1,a1,r1,,sT)\tau = (s_0, a_0, r_0, s_1, a_1, r_1, \ldots, s_T)的概率为: p(τθ)=ρ0(s0)t=0T1πθ(atst)P(st+1st,at)p(\tau|\theta) = \rho_0(s_0) \prod_{t=0}^{T-1} \pi_\theta(a_t|s_t) P(s_{t+1}|s_t, a_t)

其中:

  • ρ0(s0)\rho_0(s_0): 初始状态分布
  • P(st+1st,at)P(s_{t+1}|s_t, a_t): 环境转移概率(与θ\theta无关)

REINFORCE算法

算法特点

  • 蒙特卡洛方法: 使用完整episode计算回报
  • 无偏估计: 使用真实回报GtG_t
  • 高方差: 需要方差减少技术

核心更新公式

θθ+αt=0T1logπθ(atst)Gt\theta \leftarrow \theta + \alpha \sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot G_t

算法流程

  1. 初始化策略参数θ\theta
  2. 对于每个episode:
    • 使用当前策略πθ\pi_\theta生成轨迹τ\tau
    • 计算每步的累积回报Gt=k=tT1γktrk+1G_t = \sum_{k=t}^{T-1} \gamma^{k-t} r_{k+1}
    • 更新策略参数:θθ+αt=0T1logπθ(atst)Gt\theta \leftarrow \theta + \alpha \sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot G_t
  3. 重复直到收敛

方差减少技术实现(编程作业)

基线 (Baseline) 模型

1. 无基线REINFORCE

J(θ)=E[t=0T1logπθ(atst)Gt]\nabla J(\theta) = E\left[\sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot G_t\right]

2. 带基线的REINFORCE

J(θ)=E[t=0T1logπθ(atst)(Gtb(st))]\nabla J(\theta) = E\left[\sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot (G_t - b(s_t))\right]

其中b(st)b(s_t)是基线函数,常用选择:

  • 状态价值基线: b(st)=Vπθ(st)b(s_t) = V^{\pi_\theta}(s_t)
  • 平均回报基线: b(st)=1Ni=1NGt(i)b(s_t) = \frac{1}{N}\sum_{i=1}^{N} G_t^{(i)}

3. Actor-Critic方法

使用优势函数Aπθ(st,at)=Qπθ(st,at)Vπθ(st)A^{\pi_\theta}(s_t, a_t) = Q^{\pi_\theta}(s_t, a_t) - V^{\pi_\theta}(s_t)J(θ)=E[t=0T1logπθ(atst)Aπθ(st,at)]\nabla J(\theta) = E\left[\sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot A^{\pi_\theta}(s_t, a_t)\right]

技术公式优点缺点
无基线GtG_t简单直接,无偏估计方差大,收敛慢
状态价值基线GtV(st)G_t - V(s_t)显著减少方差需要额外估计V(s)V(s)
平均回报基线GtGˉG_t - \bar{G}实现简单效果有限
Actor-Criticr+γV(s)V(s)r + \gamma V(s') - V(s)方差小,样本效率高有偏估计

或者你能想到的其他技术方案

4. 回报标准化

Gtnormalized=GtμGσG+ϵG_t^{normalized} = \frac{G_t - \mu_G}{\sigma_G + \epsilon} 其中μG\mu_GσG\sigma_G分别是当前batch回报的均值和标准差。

5. 重要性采样 (Importance Sampling)

用于off-policy学习: J(θ)=Eτπold[πθ(τ)πold(τ)t=0T1logπθ(atst)Gt]\nabla J(\theta) = E_{\tau \sim \pi_{old}}\left[\frac{\pi_\theta(\tau)}{\pi_{old}(\tau)} \sum_{t=0}^{T-1} \nabla \log \pi_\theta(a_t|s_t) \cdot G_t\right]

参数调优

关键超参数

参数符号推荐范围影响
学习率α\alpha10410210^{-4} \sim 10^{-2}收敛速度与稳定性
折扣因子γ\gamma0.90.9990.9 \sim 0.999长期vs短期奖励权衡
批大小NN3251232 \sim 512梯度估计质量
网络结构-6451264 \sim 512 hidden表达能力vs过拟合

调优策略

  1. 学习率: 从大到小逐步调整,观察损失曲线
  2. 网络结构: 简单任务用小网络,复杂任务适当增大
  3. 正则化: 适当使用Dropout和权重衰减
  4. 梯度裁剪: 防止梯度爆炸,通常设为0.52.00.5 \sim 2.0

与价值方法的比较

特性策略梯度价值方法
学习目标直接优化策略学习价值函数
连续动作天然支持需要特殊处理
收敛保证局部最优可能发散
样本效率较低较高
随机策略支持需要额外技巧