🎯 REINFORCE 策略梯度算法推导(完整)

1. 目标函数定义

我们希望最大化策略的期望回报:

J(θ)=Eτ∼πθ[R(τ)] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)=Eτ∼πθ​​[R(τ)]

其中:

  • τ=(s0,a0,s1,a1,...,sT,aT)\tau = (s_0, a_0, s_1, a_1, ..., s_T, a_T)τ=(s0​,a0​,s1​,a1​,...,sT​,aT​):轨迹
  • R(τ)=∑t=0TrtR(\tau) = \sum_{t=0}^T r_tR(τ)=∑t=0T​rt​:轨迹总回报
  • πθ(at∣st)\pi_\theta(a_t | s_t)πθ​(at​∣st​):策略函数,如果是连续动作空间则是(概率密度函数值),离散动作空间则是是一个概率值(如 softmax 输出)。

2. 轨迹的概率

轨迹的概率分布为:

P(τ)=ρ(s0)⋅∏t=0Tπθ(at∣st)⋅P(st+1∣st,at) P(\tau) = \rho(s_0) \cdot \prod_{t=0}^T \pi_\theta(a_t | s_t) \cdot P(s_{t+1} | s_t, a_t) P(τ)=ρ(s0​)⋅t=0∏T​πθ​(at​∣st​)⋅P(st+1​∣st​,at​)

其中:

  • ρ(s0)\rho(s_0)ρ(s0​):初始状态分布
  • P(st+1∣st,at)P(s_{t+1} | s_t, a_t)P(st+1​∣st​,at​):状态转移概率(与 θ\thetaθ 无关), 就是选什么动作需要概率来描述,选了这个动作跳到什么状态,也是不确定的,也需要概率来描述。

3. 对目标函数求导

我们希望通过梯度上升更新策略参数 θ\thetaθ:

∇θJ(θ)=∇θEτ∼πθ[R(τ)] \nabla_\theta J(\theta) = \nabla_\theta \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] ∇θ​J(θ)=∇θ​Eτ∼πθ​​[R(τ)]

问题:如何求这个梯度?由于 πθ\pi_\thetaπθ​ 依赖于 θ\thetaθ,期望不能直接求导。

似然比技巧(likelihood ratio trick),推导如下:

∇θEx∼pθ(x)[f(x)]=∇θ∫f(x)pθ(x)dx=∫f(x)∇θpθ(x)dx \nabla_\theta \mathbb{E}_{x \sim p_\theta(x)}[f(x)] = \nabla_\theta \int f(x) p_\theta(x) dx = \int f(x) \nabla_\theta p_\theta(x) dx ∇θ​Ex∼pθ​(x)​[f(x)]=∇θ​∫f(x)pθ​(x)dx=∫f(x)∇θ​pθ​(x)dx
这里之所以不对f(x)f(x)f(x)求导,是因为在强化学习中这里的f(x)f(x)f(x)是reward,是一个标量,与环境交互得到的。

利用链式法则:

∇θpθ(x)=pθ(x)∇θlog⁡pθ(x) \nabla_\theta p_\theta(x) = p_\theta(x) \nabla_\theta \log p_\theta(x) ∇θ​pθ​(x)=pθ​(x)∇θ​logpθ​(x)

代入得:

=∫f(x)pθ(x)∇θlog⁡pθ(x)dx=Ex∼pθ(x)[f(x)∇θlog⁡pθ(x)] = \int f(x) p_\theta(x) \nabla_\theta \log p_\theta(x) dx = \mathbb{E}_{x \sim p_\theta(x)}[f(x) \nabla_\theta \log p_\theta(x)] =∫f(x)pθ​(x)∇θ​logpθ​(x)dx=Ex∼pθ​(x)​[f(x)∇θ​logpθ​(x)]


4. 推导 log 概率项

注意:

log⁡P(τ)=log⁡ρ(s0)+∑t=0T[log⁡πθ(at∣st)+log⁡P(st+1∣st,at)] \log P(\tau) = \log \rho(s_0) + \sum_{t=0}^{T} \left[ \log \pi_\theta(a_t | s_t) + \log P(s_{t+1} | s_t, a_t) \right] logP(τ)=logρ(s0​)+t=0∑T​[logπθ​(at​∣st​)+logP(st+1​∣st​,at​)]

由于 ρ(s0)\rho(s_0)ρ(s0​)和 P(st+1∣st,at)P(s_{t+1} | s_t, a_t)P(st+1​∣st​,at​)与 θ\thetaθ 无关:

∇θlog⁡P(τ)=∑t=0T∇θlog⁡πθ(at∣st) \nabla_\theta \log P(\tau) = \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t | s_t) ∇θ​logP(τ)=t=0∑T​∇θ​logπθ​(at​∣st​)


5. 得到策略梯度表达式

代入得到最终梯度表达式:

∇θJ(θ)=Eτ∼πθ[∑t=0T∇θlog⁡πθ(at∣st)⋅R(τ)] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot R(\tau) \right] ∇θ​J(θ)=Eτ∼πθ​​[t=0∑T​∇θ​logπθ​(at​∣st​)⋅R(τ)]


6. 替换为每步折扣回报 ( G_t )

为了更准确地归因每步动作的影响,引入:

Gt=∑k=tTγk−trk G_t = \sum_{k=t}^{T} \gamma^{k-t} r_k Gt​=k=t∑T​γk−trk​

改写为:

∇θJ(θ)=Eτ[∑t=0T∇θlog⁡πθ(at∣st)⋅Gt] \nabla_\theta J(\theta) = \mathbb{E}_{\tau} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot G_t \right] ∇θ​J(θ)=Eτ​[t=0∑T​∇θ​logπθ​(at​∣st​)⋅Gt​]


7. 引入 baseline 减少方差

减去一个与动作无关的 baseline b(st)b(s_t)b(st​):

∇θJ(θ)=Eτ[∑t=0T∇θlog⁡πθ(at∣st)⋅(Gt−b(st))] \nabla_\theta J(\theta) = \mathbb{E}_{\tau} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot (G_t - b(s_t)) \right] ∇θ​J(θ)=Eτ​[t=0∑T​∇θ​logπθ​(at​∣st​)⋅(Gt​−b(st​))]

常用 baseline:

b(st)=Vπ(st)⇒At=Gt−V(st) b(s_t) = V^\pi(s_t) \quad \Rightarrow \quad A_t = G_t - V(s_t) b(st​)=Vπ(st​)⇒At​=Gt​−V(st​)

最终得到优势形式:

∇θJ(θ)=E[∑t=0T∇θlog⁡πθ(at∣st)⋅At] \nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot A_t \right] ∇θ​J(θ)=E[t=0∑T​∇θ​logπθ​(at​∣st​)⋅At​]


✅ 常见策略梯度形式总结

名称表达式
REINFORCE∇θJ(θ)=E[∑t∇θlog⁡πθ(at∣st)⋅Gt]\nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot G_t \right]∇θ​J(θ)=E[∑t​∇θ​logπθ​(at​∣st​)⋅Gt​]
baseline形式∇θJ(θ)=E[∑t∇θlog⁡πθ(at∣st)⋅(Gt−b(st))]\nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot (G_t - b(s_t)) \right]∇θ​J(θ)=E[∑t​∇θ​logπθ​(at​∣st​)⋅(Gt​−b(st​))]
Advantage形式∇θJ(θ)=E[∑t∇θlog⁡πθ(at∣st)⋅At]\nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot A_t \right]∇θ​J(θ)=E[∑t​∇θ​logπθ​(at​∣st​)⋅At​]

📌 附:连续动作高斯策略的梯度

假设策略为:

πθ(a∣s)=N(μθ(s),σ2) \pi_\theta(a|s) = \mathcal{N}(\mu_\theta(s), \sigma^2) πθ​(a∣s)=N(μθ​(s),σ2)
则:
log⁡πθ(a∣s)=−(a−μθ(s))22σ2+const \log \pi_\theta(a|s) = -\frac{(a - \mu_\theta(s))^2}{2\sigma^2} + \text{const} logπθ​(a∣s)=−2σ2(a−μθ​(s))2​+const
对策略参数的梯度为:
∇θlog⁡πθ(a∣s)=(a−μθ(s))σ2⋅∇θμθ(s) \nabla_\theta \log \pi_\theta(a|s) = \frac{(a - \mu_\theta(s))}{\sigma^2} \cdot \nabla_\theta \mu_\theta(s) ∇θ​logπθ​(a∣s)=σ2(a−μθ​(s))​⋅∇θ​μθ​(s)


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐