Policy Gradient

Policy Gradient

​ 策略梯度算法也算是参数化模型的一种方法,在前面一章中,我们对参数化值函数估计而非对策略本身参数化,实际上我们也可以直接对策略进行参数化估计,这一章我们默认策略为随机性策略

​ 对于随机策略 πθ(as)=P(as;θ)\pi_\theta(a|s)=P(a|s; \theta),直觉上我们应该

  1. 降低带来较低价值/奖励的动作出现的概率
  2. 提高带来较高价值/奖励的动作出现的概率

Policy Gradient 算法推导

​ 目标函数 J(θ)J(\theta) 定义为从状态分布 sd(s)s \sim d(s)(初始状态的分布)出发,遵循策略 πθ\pi_\theta 的期望累积奖励:

J(θ)=Eτπθ[t=0γtr(st,at)]J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right]

其中 τ=(s0,a0,s1,a1,)\tau = (s_0, a_0, s_1, a_1, \dots) 表示轨迹,γ[0,1)\gamma \in [0, 1) 是折扣因子。和以前不同的是,现在对 J(θ)J(\theta) 求导的过程中参数 θ\theta 不仅出现在期望中,还出现在下标中,因此需要注意一下


2. 策略梯度定理

根据策略梯度定理,目标函数的梯度可表示为:

\begin{aligned} J(\theta) &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right] \\ &= \sum_{s \in \mathcal{S}}d(s)\su\mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right] \end{aligned}

J(θ)=Eτπθ[t=0logπθ(atst)Qπθ(st,at)]=\begin{aligned} \nabla J(\theta) =& \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \nabla \log \pi_\theta(a_t|s_t) \cdot Q^{\pi_\theta}(s_t, a_t) \right] \\ =& \end{aligned}

其中 Qπθ(s,a)Q^{\pi_\theta}(s, a) 是动作值函数,定义为:

Qπθ(s,a)=Eτπθ[k=0γkrt+kst=s,at=a]Q^{\pi_\theta}(s, a) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{k=0}^\infty \gamma^k r_{t+k} \mid s_t = s, a_t = a \right]


3. 期望形式的简化

由于状态分布 sd(s)s \sim d(s) 和动作分布 aπθ(as)a \sim \pi_\theta(a|s),梯度可简化为:

J(θ)=Esd(s),aπθ[logπθ(as)Qπθ(s,a)]\nabla J(\theta) = \mathbb{E}_{s \sim d(s), a \sim \pi_\theta} \left[ \nabla \log \pi_\theta(a|s) \cdot Q^{\pi_\theta}(s, a) \right]

这里 d(s)d(s) 是状态的平稳分布,由策略 πθ\pi_\theta 和环境动态决定


4. 蒙特卡洛估计

实际计算中,通过采样轨迹 τ\tau 近似期望值:

  1. 采样动作:aπθ(as)a \sim \pi_\theta(a|s)
  2. 计算累积奖励:Gt=k=0γkrt+kG_t = \sum_{k=0}^\infty \gamma^k r_{t+k}
  3. 梯度更新:

J(θ)1Ni=1Nlogπθ(a(i)s(i))Gt(i)\nabla J(\theta) \approx \frac{1}{N} \sum_{i=1}^N \nabla \log \pi_\theta(a^{(i)}|s^{(i)}) \cdot G_t^{(i)}

其中 NN 是采样次数,Gt(i)G_t^{(i)} 是第 ii 条轨迹的累积奖励。


5. 算法步骤

  1. 初始化:参数 θ\theta,学习率 α\alpha
  2. 循环
    a. 采样轨迹 τ\tau:根据当前策略 πθ\pi_\theta 与环境交互。
    b. 计算累积奖励 GtG_t
    c. 更新参数:

    θθ+αlogπθ(atst)Gt\theta \leftarrow \theta + \alpha \cdot \nabla \log \pi_\theta(a_t|s_t) \cdot G_t

    (使用梯度上升法最大化 J(θ)J(\theta)

关键引用

  • 策略梯度定理的期望形式参考了。
  • 状态分布与动作值函数的定义参考了。
  • 蒙特卡洛估计方法参考了。

Policy Gradient 算法推导

1. 目标函数定义

目标函数 J(θ)J(\theta) 是策略 πθ\pi_\theta 的期望累积折扣奖励:

J(θ)=Eτπθ[t=0γtr(st,at)]J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right]

其中 τ=(s0,a0,s1,a1,)\tau = (s_0, a_0, s_1, a_1, \dots) 表示轨迹,γ\gamma 是折扣因子。


2. 梯度表达式推导

J(θ)J(\theta) 求梯度:

θJ(θ)=θEτπθ[t=0γtr(st,at)]\nabla_\theta J(\theta) = \nabla_\theta \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right]

将期望展开为轨迹概率的积分:

θJ(θ)=τP(τθ)(t=0γtr(st,at))θlogP(τθ)dτ\nabla_\theta J(\theta) = \int_\tau P(\tau|\theta) \cdot \left( \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right) \cdot \nabla_\theta \log P(\tau|\theta) \, d\tau

其中 θlogP(τθ)\nabla_\theta \log P(\tau|\theta) 是关键项。


3. 轨迹概率的分解

轨迹 τ\tau 的概率可分解为:

P(τθ)=d(s0)t=0πθ(atst)P(st+1st,at)P(\tau|\theta) = d(s_0) \prod_{t=0}^\infty \pi_\theta(a_t|s_t) P(s_{t+1}|s_t, a_t)

取对数后:

logP(τθ)=logd(s0)+t=0logπθ(atst)+t=0logP(st+1st,at)\log P(\tau|\theta) = \log d(s_0) + \sum_{t=0}^\infty \log \pi_\theta(a_t|s_t) + \sum_{t=0}^\infty \log P(s_{t+1}|s_t, a_t)

θ\theta 求梯度时,与 θ\theta 无关的项(如 d(s0)d(s_0)P(st+1st,at)P(s_{t+1}|s_t, a_t))消失:

θlogP(τθ)=t=0θlogπθ(atst)\nabla_\theta \log P(\tau|\theta) = \sum_{t=0}^\infty \nabla_\theta \log \pi_\theta(a_t|s_t)


4. 代入梯度表达式

将梯度表达式代入:

θJ(θ)=Eτπθ[(t=0γtr(st,at))(t=0θlogπθ(atst))]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \left( \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right) \cdot \left( \sum_{t=0}^\infty \nabla_\theta \log \pi_\theta(a_t|s_t) \right) \right]

交换求和顺序,利用因果性(当前动作不影响过去奖励):

θJ(θ)=Eτπθ[t=0θlogπθ(atst)(k=tγkr(sk,ak))]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot \left( \sum_{k=t}^\infty \gamma^k r(s_k, a_k) \right) \right]


5. 引入折扣因子调整

k=tγkr(sk,ak)\sum_{k=t}^\infty \gamma^k r(s_k, a_k) 重写为 γtk=0γkr(st+k,at+k)\gamma^t \sum_{k=0}^\infty \gamma^k r(s_{t+k}, a_{t+k}),即:

θJ(θ)=Eτπθ[t=0γtθlogπθ(atst)(k=0γkr(st+k,at+k))]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot \left( \sum_{k=0}^\infty \gamma^k r(s_{t+k}, a_{t+k}) \right) \right]

定义从时刻 tt 开始的折扣累积奖励

Gt=k=0γkr(st+k,at+k)G_t = \sum_{k=0}^\infty \gamma^k r(s_{t+k}, a_{t+k})

最终梯度表达式为:

θJ(θ)=Eτπθ[t=0γtGtθlogπθ(atst)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t G_t \nabla_\theta \log \pi_\theta(a_t|s_t) \right]


6. 策略梯度定理

进一步引入状态-动作值函数 Qπ(st,at)=E[Gtst,at]Q^\pi(s_t, a_t) = \mathbb{E}[G_t | s_t, a_t],得到:

θJ(θ)=Esdπ,aπθ[Qπ(s,a)θlogπθ(as)]\nabla_\theta J(\theta) = \mathbb{E}_{s \sim d^\pi, a \sim \pi_\theta} \left[ Q^\pi(s, a) \nabla_\theta \log \pi_\theta(a|s) \right]

其中 dπ(s)d^\pi(s) 是策略 πθ\pi_\theta 下的状态分布。


7. 算法形式

通过采样近似期望,得到梯度更新公式:

θθ+αt=0γtGtθlogπθ(atst)\theta \leftarrow \theta + \alpha \sum_{t=0}^\infty \gamma^t G_t \nabla_\theta \log \pi_\theta(a_t|s_t)

其中 α\alpha 是学习率。此为经典的 REINFORCE 算法