5964 words
30 minutes
强化学习 Chapter 6 - 策略梯度方法
首次发布: 2025-04-20
... 次访问

6.1 策略方法#

策略方法是强化学习中的一类重要方法。其核心思想是,直接优化参数化策略函数 πθ(as)\pi_\theta(a|s),以最大化期望的累计折扣奖励

J(θ)=Eτπθ[t=0Tγtrt]J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\left[\sum_{t=0}^{T} \gamma^t r_t\right]

与值函数方法不同,策略方法无需显式地估计动作价值函数 Q(s,a)Q(s, a) 或状态价值函数 V(s)V(s),而是基于采样得到的轨迹 τ=(s0,a0,s1,a1,,sT)\tau = (s_0, a_0, s_1, a_1, \dots, s_T),利用策略梯度定理 (Policy Gradient Theorem) 计算梯度,并通过梯度上升法更新策略参数 θ\theta。该方法适用于连续动作空间,且能够自然地处理随机策略。

经典的策略方法包括:

  • REINFORCE (Monte Carlo Policy Gradient):基于完整轨迹的蒙特卡洛梯度估计;
  • Actor-Critic:结合策略网络 (Actor) 与值函数网络 (Critic),以降低梯度估计方差;
  • Trust Region Policy Optimization (TRPO):引入信任区域约束,确保策略更新步长可控,保证训练稳定性;
  • Proximal Policy Optimization (PPO):通过近似 TRPO 的裁剪机制,在保持性能的同时实现更高的训练效率与鲁棒性。

6.2 策略梯度方法#

6.2.1 直接求策略梯度面临的困难#

在策略方法中,我们的目标是找到最优的策略参数 θ\theta^*,使得期望回报能够最大化

maxθJ(θ)=Eτπθ[t=0Tγtrt]\max_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\left[\sum_{t=0}^{T} \gamma^t r_t\right]

直接计算 J(θ)J(\theta) 的梯度

θJ(θ)=θτR(τ)pθ(τ)dτ=τR(τ)θpθ(τ)dτ\nabla_\theta J(\theta) = \frac{\partial}{\partial \theta} \int_\tau R(\tau) p_\theta(\tau) d\tau = \int_\tau R(\tau) \frac{\partial}{\partial \theta} p_\theta(\tau) d\tau

其中:

  • pθ(τ)=p0(s0)t=0T1πθ(atst)p(st+1st,at)p_\theta(\tau) = p_0(s_0) \prod_{t=0}^{T-1} \pi_\theta(a_t|s_t) p(s_{t+1}|s_t, a_t) 是在策略 πθ\pi_\theta 下生成轨迹 τ\tau 的概率分布
  • R(τ)=t=0TγtrtR(\tau) = \sum_{t=0}^{T} \gamma^{t} r_t 是轨迹 τ\tau 的累计回报,它是与参数 θ\theta 无关,但与轨迹 τ\tau 相关的量。

这里出现了两个难以计算的困难:

  1. 环境动态未知 (Model-free):轨迹 τ\tau 的生成主要由环境动态变化 p(st+1st,at)p(s_{t+1}|s_t, a_t) 和策略 πθ(atst)\pi_\theta(a_t|s_t) 决定。环境动态通常是未知的,这意味着我们无法直接计算 pθ(τ)p_\theta(\tau) 的解析形式,也即无法计算出上式的解析解。即使能通过采样的方式估计出 pθ(τ)p_\theta(\tau) 的数值,求解它的梯度 θpθ(τ)\frac{\partial}{\partial \theta} p_\theta(\tau) 也是非常困难的,因为它涉及到整个轨迹的概率分布,而不是单个状态或动作的概率分布。
  2. 轨迹空间巨大:若状态空间或动作空间是连续空间,想要遍历全部可能的轨迹 τ\tau 是无法实现的。若状态空间和动作空间是离散空间,随着时间步数 TT 的增加,轨迹的数量也会呈指数级增长,这使得直接计算积分是不可行的。

因此,无论是解析求解还是数值积分,都是不可行的。

6.2.2 分解轨迹分布的梯度 θpθ(τ)\frac{\partial}{\partial \theta} p_\theta(\tau)#

既然环境动态与策略参数 θ\theta 无关,那么 θp(st+1st,at)=0\frac{\partial}{\partial \theta} p(s_{t+1} | s_t, a_t) = 0。考虑到轨迹分布 pθ(τ)p_\theta(\tau) 是链式乘法形式的分布函数,做一个对数变换,得到

logpθ(τ)=logp0(s0)+t=0T1logπθ(atst)+t=0T1logp(st+1st,at)\log p_\theta(\tau) = \log p_0(s_0) + \sum_{t=0}^{T-1} \log \pi_\theta(a_t|s_t) + \sum_{t=0}^{T-1} \log p(s_{t+1}|s_t, a_t)

θ\theta 求导,得到

θlogpθ(τ)=t=0T1θlogπθ(atst)\frac{\partial}{\partial \theta} \log p_\theta(\tau) = \sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta(a_t|s_t)

利用 Log-Derivative Trick,

θpθ(τ)=pθ(τ)θlogpθ(τ)=pθ(τ)t=0T1θlogπθ(atst)\frac{\partial}{\partial \theta} p_\theta(\tau) = p_\theta(\tau) \frac{\partial}{\partial \theta} \log p_\theta(\tau) = p_\theta(\tau) \sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta(a_t|s_t)

这下就很简单了,我们把上式代入到 θJ(θ)\nabla_\theta J(\theta) 的表达式中,得到

θJ(θ)=τR(τ)pθ(τ)t=0T1θlogπθ(atst)dτ=Eτπθ[R(τ)t=0T1θlogπθ(atst)]\nabla_\theta J(\theta) = \int_\tau R(\tau) p_\theta(\tau) \sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta(a_t|s_t) d\tau = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta(a_t|s_t) \right]

这里虽然 pθ(τ)p_\theta(\tau) 解析形式得不到,积分也是无法计算的,但是我们可以转化为采样的方式来估计 θJ(θ)\nabla_\theta J(\theta),这就是策略梯度方法的核心思想。

6.2.3 策略梯度定理#

需要指出

θJ(θ)=Eτπθ[R(τ)t=0T1θlogπθ(atst)]\boxed{ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \right] }

并非策略梯度的最简化形式,这里面仍然有很多可以消除的项。展开轨迹 τ\tau 的回报 R(τ)R(\tau),得到

θJ(θ)=Eτπθ[(k=0Tγkrk)(t=0T1θlogπθ(atst))]=Eτπθ[t=0T1k=0Tθlogπθ(atst)γkrk]=Eτπθ[t=0T1θlogπθ(atst)(k=0t1γkrk+k=tTγkrk)]=Eτπθ[t=0T1θlogπθ(atst)k=0t1γkrk]+Eτπθ[t=0T1θlogπθ(atst)k=tTγkrk]\begin{aligned} \nabla_\theta J(\theta) &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \left(\sum_{k=0}^{T} \gamma^{k}r_k \right) \left(\sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \right) \right] \\ &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \sum_{k=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t) \gamma^{k}r_k \right] \\ &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \left(\sum_{k=0}^{t-1} \gamma^{k}r_k + \sum_{k=t}^{T} \gamma^{k}r_k \right) \right] \\ &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \sum_{k=0}^{t-1} \gamma^{k}r_k \right] + \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \sum_{k=t}^{T} \gamma^{k}r_k \right] \\ \end{aligned}

展开第一个期望项,得到

Eτπθ[t=0T1θlogπθ(atst)k=0t1γkrk]=t=0T1k=0t1γkEτπθ[rkθlogπθ(atst)]\mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \sum_{k=0}^{t-1} \gamma^{k}r_k \right] = \sum_{t=0}^{T-1} \sum_{k=0}^{t-1} \gamma^{k} \mathbb{E}_{\tau \sim \pi_\theta} \left[ r_k \nabla_\theta \log \pi_\theta(a_t|s_t) \right]

而双求和里面的那个期望实际上可以进一步简化,这里要考虑到轨迹 τ=(s0,a0,,sT)\tau = (s_0, a_0, \ldots, s_T) 看起来是一个多维随机向量,实际上,内部变量之间存在依赖关系—— rkr_k 的产生仅依赖于历史状态和动作 {(si,ai)}i=0k\{(s_i, a_i)\}_{i=0}^k,与未来的状态和动作是相互条件独立的:

Eτπθ[rkθlogπθ(atst)](k<t)=Eτπθ[rk]Eτπθ[logπθ(atst)]=Es0p0(s0),a0πθ(a0s0),s1p(s1s0,a0),,sTp(sTsT1,aT1),rkp(rksk,ak)[rk]Es0p0(s0),a0πθ(a0s0),s1p(s1s0,a0),,sTp(sTsT1,aT1)[θlogπθ(atst)]=Es0p0(s0),a0πθ(a0s0),s1p(s1s0,a0),,skp(sksk1,ak1),akπθ(aksk),rkp(rksk,ak)[rk]Es0p0(s0),a0πθ(a0s0),s1p(s1s0,a0),,stp(stst1,at1),atπθ(atst)[θlogπθ(atst)]=R(sk,ak)E(s0,a0,,st1,at1)πθ,stp(stst1,at1),atπθ(atst)[θlogπθ(atst)]\begin{aligned} &\mathbb{E}_{\tau \sim \pi_\theta} \left[ r_k \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \quad (k < t)\\ =& \mathbb{E}_{\tau \sim \pi_\theta} \left[ r_k \right] \mathbb{E}_{\tau \sim \pi_\theta} \left[ \log \pi_\theta(a_t|s_t) \right]\\ =& \mathbb{E}_{s_0 \sim p_0(s_0), a_0 \sim \pi_\theta(a_0 | s_0), s_1 \sim p(s_1 | s_0, a_0), \ldots, s_T \sim p(s_T | s_{T-1}, a_{T-1}), r_k \sim p(r_k | s_k, a_k)} \left[ r_k \right] \cdot \mathbb{E}_{s_0 \sim p_0(s_0), a_0 \sim \pi_\theta(a_0 | s_0), s_1 \sim p(s_1 | s_0, a_0), \ldots, s_T \sim p(s_T | s_{T-1}, a_{T-1})} \left[\nabla_\theta \log \pi_\theta(a_t|s_t) \right]\\ =& \mathbb{E}_{s_0 \sim p_0(s_0), a_0 \sim \pi_\theta(a_0 | s_0), s_1 \sim p(s_1 | s_0, a_0), \ldots, s_k \sim p(s_k | s_{k-1}, a_{k-1}), a_k \sim \pi_\theta(a_k | s_k), r_k \sim p(r_k | s_k, a_k)} \left[ r_k \right] \cdot \mathbb{E}_{s_0 \sim p_0(s_0), a_0 \sim \pi_\theta(a_0 | s_0), s_1 \sim p(s_1 | s_0, a_0), \ldots, s_t \sim p(s_t | s_{t-1}, a_{t-1}), a_t \sim \pi_\theta(a_t | s_t)} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\ =& \mathcal{R}(s_k, a_k) \cdot \mathbb{E}_{(s_0, a_0, \ldots, s_{t-1}, a_{t-1}) \sim \pi_\theta, s_t \sim p(s_t | s_{t-1}, a_{t-1}), a_t \sim \pi_\theta(a_t | s_t)} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \end{aligned}

注意这里我们省略了 rkr_k 的生成过程,rkr_k 可以是由确定性的奖励函数 r(sk,ak)r(s_k, a_k) 给出,也可以是由随机的奖励分布 p(rksk,ak)p(r_k | s_k, a_k) 给出,这里为了公式简化表达,将期望奖励 rkr_k 直接表达成了一个随机的奖励函数值

R(sk,ak)=Es0p0(s0),a0πθ(a0s0),s1p(s1s0,a0),,skp(sksk1,ak1),akπθ(aksk),rkp(rksk,ak)[rk]\mathcal{R}(s_k, a_k) = \mathbb{E}_{s_0 \sim p_0(s_0), a_0 \sim \pi_\theta(a_0 | s_0), s_1 \sim p(s_1 | s_0, a_0), \ldots, s_k \sim p(s_k | s_{k-1}, a_{k-1}), a_k \sim \pi_\theta(a_k | s_k), r_k \sim p(r_k | s_k, a_k)} \left[ r_k \right]

好,继续关注新出现的后一项期望,它是一个条件期望

E(s0,a0,,st1,at1)πθ,stp(stst1,at1),atπθ(atst)[θlogπθ(atst)]=E(s0,a0,,st1,at1)πθ[Estp(stst1,at1),atπθ(atst)[θlogπθ(atst)]]\begin{aligned} &\mathbb{E}_{(s_0, a_0, \ldots, s_{t-1}, a_{t-1}) \sim \pi_\theta, s_t \sim p(s_t | s_{t-1}, a_{t-1}), a_t \sim \pi_\theta(a_t | s_t)} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\ =& \mathbb{E}_{(s_0, a_0, \ldots, s_{t-1}, a_{t-1}) \sim \pi_\theta} \left[ \mathbb{E}_{s_t \sim p(s_t | s_{t-1}, a_{t-1}), a_t \sim \pi_\theta(a_t | s_t)} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \right] \\ \end{aligned}

由于

Estp(stst1,at1),atπθ(atst)[θlogπθ(atst)]=st,atp(stst1,at1)πθ(atst)θlogπθ(atst)dstdat=st,atp(stst1,at1)θπθ(atst)dstdat=θst,atp(stst1,at1)πθ(atst)dstdat=θ1=0\begin{aligned} &\mathbb{E}_{s_t \sim p(s_t | s_{t-1}, a_{t-1}), a_t \sim \pi_\theta(a_t | s_t)} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\ =& \iint_{s_t, a_t} p(s_t | s_{t-1}, a_{t-1}) \pi_\theta(a_t | s_t) \nabla_\theta \log \pi_\theta (a_t | s_t) ds_t da_t \\ =& \iint_{s_t, a_t} p(s_t | s_{t-1}, a_{t-1}) \nabla_\theta \pi_\theta (a_t | s_t) ds_t da_t \\ =& \nabla_\theta \iint_{s_t, a_t} p(s_t | s_{t-1}, a_{t-1}) \pi_\theta (a_t | s_t) ds_t da_t \\ =& \nabla_\theta 1 \\ =& 0 \end{aligned}

逐级回代,可以得到最开始的第一个期望项结果实际上也就是 00,因此

θJ(θ)=Eτπθ[t=0T1θlogπθ(atst)k=tTγkrk]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \sum_{k=t}^{T} \gamma^{k}r_k \right]

tt 时刻的的回报记作 GtG_t:

Gt=k=0Tγkrk+tG_t = \sum_{k=0}^{T} \gamma^{k}r_{k+t}

从而得到简化的策略梯度形式,也即下面的策略梯度定理:

Theorem (策略梯度定理)

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

6.2.4 策略梯度上升#

拿到策略梯度后,我们就可以使用梯度上升法来更新策略参数 θ\theta,以最大化 J(θ)J(\theta)。梯度上升的更新规则为

θt+1=θt+αθJ(θt)\theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta_t)

其中α\alpha是学习率,J(θ)J(\theta)是目标函数。

6.2.5 两种策略梯度公式的比较#

前面我们分析得到了两种策略梯度的公式

θJ(θ)=Eτπθ[R(τ)t=0T1θlogπθ(atst)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \right]

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

两个公式是等价的,且第二个公式是第一个的简化。但是在实际使用上,第二个公式使用范围更加广泛:

  • 学习模式对比
    • 第一个公式只适用于轨迹 τ\tau 已经完全确定的情况,也即 R(τ)R(\tau) 已经计算出的情况。换言之,第一个公式不能在每个时间步 tt 都更新参数。
    • 第二个公式能在每个时间步 tt 都更新参数,因为本身梯度可以看作是在每个时间步都做一次 θθ+αγtGtlogπθ(atst)\theta \leftarrow \theta + \alpha \gamma^t G_t \nabla\log \pi_\theta(a_t\vert s_t),累计后完成整个梯度上升。这里期望下标虽是 τ\tau,但这只是简化的写法,实际上每个时间步 tt 用到的随机变量并没有完全覆盖 τ\tau 中的所有变量。
  • 采样方差对比
    • 第一个公式中所有时间步共享同一个整条轨迹的回报 R(τ)R(\tau),引入了大量与当前梯度无关的历史噪声和未来噪声,导致不同时间步梯度项之间强相关,方差较大。
    • 第二个公式中每个时间步使用从该步开始的累积回报 GtG_t,减少了无关变量的影响,且便于引入基线进一步降低方差,因此方差更小、估计更稳定。

6.2.6 含有基线的策略梯度#

策略梯度公式中可以引入基线,在保持梯度无偏估计的同时,通过减去一个只依赖于状态的基线,降低回报 GtG_t 的波动性,从而减小梯度估计的方差,使学习更加稳定高效。

θJ(θ)=Eτπθ[t=0T1θlogπθ(atst)(γtGtb(st))]\boxed{ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \left(\gamma^t G_t - b(s_t)\right) \right] }

其中 b(st)b(s_t) 是基线函数,基线函数只需要满足其值与动作无关的条件。通常选用状态价值函数 V(st)V(s_t) 作为基线函数。

下面验证含基线的策略梯度的无偏性。为了验证这一性质,我们只需要证明

Eτπθ[t=0T1θlogπθ(atst)b(st)]=0\mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) b(s_t) \right] = 0

拆开条件期望

t=0T1E(s0,a0,,st1,at1)πθ,stp(stst1,at1),atπθ(atst)[θlogπθ(atst)b(st)]=t=0T1E(s0,a0,,st1,at1)πθ[Estp(stst1,at1)[b(st)atπθ(atst)θlogπθ(atst)dat0]]=0\begin{aligned} &\sum_{t=0}^{T-1} \mathbb{E}_{(s_0, a_0, \dots, s_{t-1}, a_{t-1}) \sim \pi_\theta, s_t \sim p(s_t | s_{t-1}, a_{t-1}), a_t \sim \pi_\theta(a_t | s_t)} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) b(s_t) \right] \\ =& \sum_{t=0}^{T-1} \mathbb{E}_{(s_0, a_0, \dots, s_{t-1}, a_{t-1}) \sim \pi_\theta}\left[\mathbb{E}_{s_t \sim p(s_t | s_{t-1}, a_{t-1})} \left[ b(s_t) \underbrace{\int_{a_t} \pi_\theta(a_t | s_t) \nabla_\theta \log \pi_\theta(a_t|s_t) da_t}_{0} \right] \right] \\ =& 0 \end{aligned}

证毕。

6.2.7 REINFORCE 算法#

REINFORCE 算法的本质是通过 Monte Carlo 方法来估计策略的梯度。它的基本思想是通过采样来计算每个时间步的回报,然后使用这些回报来更新策略参数,是一种分幕式的强化学习算法。

REINFORCE 算法用到了将策略梯度按时间步 tt 分解的思路进行更新

θθ+αγtGtlogπθ(atst)\theta \leftarrow \theta + \alpha \gamma^t G_t \nabla\log \pi_\theta(a_t\vert s_t)

它的好处有:

  • 在线更新:不需要等到所有轨迹数据收集完毕再统一更新,可以在每个时间步立即更新参数,提高数据效率
  • 方差降低:每个时间步只使用从该步开始的回报GtG_t,而不是整条轨迹的总回报R(τ)R(\tau),减少了与当前动作无关的历史奖励带来的噪声
  • 便于引入基线:这种分解形式更容易引入状态值函数作为基线,进一步降低方差

REINFORCE 算法

Input:可微分参数化策略 πθ(as)\pi_\theta(a \vert s),学习率 α>0\alpha > 0
1:初始化策略参数 θRd\theta \in \mathbb{R}^d
2:repeat
3:  基于 πθ()\pi_\theta(\cdot \vert \cdot) 生成一个序列 s0,a0,r0,...,sT,aT,rTs_0, a_0, r_0, ..., s_T, a_T, r_T
4:  for t=0,1,...,Tt = 0, 1, ..., T do
5:    Gk=tTγktrkG \leftarrow \sum_{k=t}^{T} \gamma^{k-t}r_k
6:    θθ+αγtGlogπθ(atst)\theta \leftarrow \theta + \alpha \gamma^t G \nabla\log \pi_\theta(a_t\vert s_t)
7:  end for
8:until 收敛

python 伪代码如下:

def REINFORCE(env, policy, alpha, gamma, num_episodes):
    for episode in range(num_episodes):
        # 生成一个完整的轨迹
        states, actions, rewards = generate_episode(env, policy)
            
        # 计算每个时间步的回报
        G = 0
        for t in reversed(range(len(states))):
            G = rewards[t] + gamma * G
                
            # 更新策略参数
            policy.update(states[t], actions[t], alpha * G, gamma)
    
    return policy

6.2.8 Actor-Critic#

Actor-Critic (演员-评论家,AC 方法) 方法结合了策略梯度 (Actor) 和值函数近似 (Critic) 的优势,通过引入值函数作为基准 (baseline) 来降低策略梯度的方差,从而提升学习效率。其核心思想是:

  • Actor:负责根据当前策略 πθ(as)\pi_\theta(a|s) 选择动作,并通过策略梯度更新策略参数 θ\theta
  • Critic:负责估计状态值函数 Vw(s)V_w(s) 或动作值函数 Qw(s,a)Q_w(s,a),并通过TD误差等目标优化值函数参数 ww

AC 方法使用了含基线的策略梯度定理。其策略梯度可表示为:

θJ(θ)=Eτπθ[t=0T1θlogπθ(atst)A(st,at)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) A(s_t, a_t) \right]

其中 优势函数 A(st,at)=Q(st,at)V(st)A(s_t, a_t) = Q(s_t, a_t) - V(s_t) 表示在状态 sts_t 下选择动作 ata_t 的相对优势。Critic 的任务即为估计 A(st,at)A(s_t, a_t),常见实现方式包括:

  1. TD误差法:用 δt=rt+1+γVw(st+1)Vw(st)\delta_t = r_{t+1} + \gamma V_w(s_{t+1}) - V_w(s_t) 作为优势函数的无偏估计;
  2. 广义优势估计(GAE):结合多步TD误差的加权平均,平衡偏差与方差。

Actor-Critic 算法

Input:可微分策略 πθ(as)\pi_\theta(a\vert s),值函数 Vw(s)V_w(s)
Input:策略学习率 αθ\alpha_\theta,值函数学习率 αw\alpha_w
1:初始化参数 θ\thetaww
2:repeat
3:  从环境中采样轨迹 τ=(s0,a0,r1,s1,...,sT1,aT1,rT)\tau = (s_0, a_0, r_1, s_1, ..., s_{T-1}, a_{T-1}, r_T)
4:  for t=0,1,...,T1t = 0, 1, ..., T-1 do
5:    计算TD误差:δt=rt+1+γVw(st+1)Vw(st)\delta_t = r_{t+1} + \gamma V_w(s_{t+1}) - V_w(s_t)
6:    更新Actor参数:θθ+αθθlogπθ(atst)δt\theta \leftarrow \theta + \alpha_\theta \nabla_\theta \log \pi_\theta(a_t \vert s_t) \cdot \delta_t
7:    更新Critic参数:ww+αwδtwVw(st)w \leftarrow w + \alpha_w \delta_t \nabla_w V_w(s_t)
8:  end for
9:until 策略收敛

关键改进与变体

1. 异步优势Actor-Critic(A3C) 多个并行的Actor线程同时与环境交互,异步计算梯度并更新全局参数,打破了样本相关性,提升训练效率和稳定性。

2. 优势Actor-Critic(A2C) A3C的同步版本,等待所有并行Actor完成采样后统一计算平均梯度再更新,实现更简单,训练更稳定。

3. 确定性策略梯度(DPG) 适用于连续动作空间,Actor输出确定性动作而非动作概率分布,通过链式法则计算梯度,常结合经验回放和目标网络形成 DDPG 算法。

6.3 策略改进方法#

6.3.1 步长选择的难题#

前述的经典策略梯度算法 (如 REINFORCE,Actor-Critic) 的缺点是难以确定合适的步长。

  • 如果步长过大,策略的更新可能会导致直接跨越过最优点,产生较大的策略变动。而这种巨大的策略变动则有可能导致策略本身性能的退化;
  • 如果步长过小,更新会非常缓慢。

因此,我们需要找到能够合适的步长来更新策略参数。假设我们已经有了一个还不错的旧策略 πθ0\pi_{\theta_0},我们希望利用策略梯度方法得到一个更好的新策略 πθ\pi_\theta,即

J(θ)J(θ0)J(\theta) \ge J(\theta_0)

现在的目标就是该如何基于旧策略 πθ0\pi_{\theta_0} 改进得到新策略 πθ\pi_\theta

6.3.2 策略差异恒等式#

下面推导量化两个策略的目标函数差异的两个恒等式。

恒等式一

对于给定的两个策略 πθ0\pi_{\theta_0}πθ\pi_\theta, 存在如下恒等式

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

其中,τ=(s0,a0,s1,a1,)\tau = (s_0, a_0, s_1, a_1, \dots) 是采样自策略 πθ\pi_\theta 轨迹,Aπθ0(st,at)A_{\pi_{\theta_0}}(s_t, a_t) 是策略 πθ0\pi_{\theta_0} 对应的优势函数。

下面给出这个恒等式的证明,注意这里的证明利用到了初始状态 s0s_0 的概率分布与策略本身无关,是两个策略目标函数所共有的概率分布:

展开

Aπθ0(s,a)=Qπθ0(s,a)Vπθ0(s)=EsP(ss,a)[r(s,a)+γVπθ0(s)Vπθ0(s)]A_{\pi_{\theta_0}}(s, a) = Q_{\pi_{\theta_0}}(s, a) - V_{\pi_{\theta_0}}(s) = \mathbb{E}_{s' \sim P(s' |s, a)}\left[r(s, a) + \gamma V_{\pi_{\theta_0}}(s') - V_{\pi_{\theta_0}}(s) \right]

Eτπθ[t=0γtAπθ0(st,at)]=Eτπθ[t=0γt[r(st,at)+γVπθ0(st+1)Vπθ0(st)]]=Eτπθ[t=0γtr(st,at)Vπθ0(s0)]=Eτπθ[t=0γtr(st,at)]Es0[Vπθ0(s0)]=J(θ)J(θ0)\begin{aligned} \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{\infty} \gamma^t A_{\pi_{\theta_0}}(s_t, a_t) \right] &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t [r(s_t, a_t) + \gamma V_{\pi_{\theta_0}}(s_{t+1}) - V_{\pi_{\theta_0}}(s_t)] \right] \\ &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) - V_{\pi_{\theta_0}}(s_0) \right] \\ &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t)\right] - \mathbb{E}_{s_0} \left[ V_{\pi_{\theta_0}}(s_0) \right] \\ &= J(\theta) - J(\theta_0) \end{aligned}

恒等式证毕。

恒等式二

对于给定的两个策略 πθ0\pi_{\theta_0}πθ\pi_\theta, 存在如下恒等式

J(θ)=J(θ0)+sρπθ(s)aπθ(as)Aπθ0(s,a)\boxed{ J(\theta) = J(\theta_0) + \sum_s \rho_{\pi_\theta}(s) \sum_a \pi_\theta(a|s) A_{\pi_{\theta_0}}(s, a) }

其中:

  • ρπθ(s)=p(s0=s)+γp(s1=sπθ)+γ2p(s2=sπθ)+\rho_{\pi_\theta}(s) = p(s_0 = s) + \gamma p(s_1 = s | \pi_\theta) + \gamma^2 p(s_2 = s | \pi_\theta) + \cdots 是状态 ss 在策略 πθ\pi_\theta 下的折扣状态访问分布,反映了从初始状态分布出发,按照策略 πθ\pi_\theta 与环境交互,在整个无限长轨迹中,状态 ss 出现的”折扣期望次数”;
  • Aπθ0(st,at)A_{\pi_{\theta_0}}(s_t, a_t) 是策略 πθ0\pi_{\theta_0} 对应的优势函数。

下面基于恒等式一来证明恒等式二:

J(θ)=J(θ0)+Eτπθ[t=0γtAπθ0(st,at)]=J(θ0)+Es0p0(s0),a0πθ(a0s0),s1p(s1s0,a0),a1πθ(a1s1),[t=0γtAπθ0(st,at)]=J(θ0)+t=0s0,s1,s2,,sta0,a1,,atγtAπθ0(st,at)p(st,at,st1,at1,st2,at2,,s0,a0)=J(θ0)+t=0s0,s1,s2,,sta0,a1,,atγtAπθ0(st,at)[p(s0)k=0t1πθ(aksk)P(sk+1sk,ak)πθ(atst)]=J(θ0)+t=0γts0p(s0)a0πθ(a0s0)s1p(s1s0,a0)stp(stst1,at1)atπθ(atst)Aπθ0(st,at)=J(θ0)+t=0γtst[s0,,st1p(s0)k=0t1πθ(aksk)p(sk+1sk,ak)]p(st=sπθ)atπθ(atst)Aπθ0(st,at)=J(θ0)+t=0γtsp(st=sπθ)aπθ(as)Aπθ0(s,a)=J(θ0)+sρπθ(s)aπθ(as)Aπθ0(s,a)\begin{align*} J(\theta) &= J(\theta_0) + \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{\infty} \gamma^t A_{\pi_{\theta_0}}(s_t, a_t) \right] \\ &= J(\theta_0) + \mathbb{E}_{s_0 \sim p_0(s_0), a_0 \sim \pi_\theta(a_0| s_0), s_1 \sim p(s_1|s_0, a_0), a_1 \sim \pi_\theta(a_1 | s_1), \dots} \left[ \sum_{t=0}^{\infty} \gamma^t A_{\pi_{\theta_0}}(s_t, a_t)\right] \\ &= J(\theta_0) + \sum_{t=0}^{\infty} \sum_{s_0, s_1, s_2, \dots, s_t} \sum_{a_0, a_1, \dots, a_t}\gamma^t A_{\pi_{\theta_0}}(s_t, a_t) p(s_t, a_t, s_{t-1}, a_{t-1}, s_{t-2}, a_{t-2}, \dots, s_0, a_0) \\ &= J(\theta_0) + \sum_{t=0}^{\infty} \sum_{s_0, s_1, s_2, \dots, s_t} \sum_{a_0, a_1, \dots, a_t}\gamma^t A_{\pi_{\theta_0}}(s_t, a_t) \left[p(s_0) \prod_{k=0}^{t-1}\pi_\theta(a_k|s_k) P(s_{k+1} | s_k, a_k) \pi_\theta(a_t | s_t)\right]\\ &= J(\theta_0) + \sum_{t=0}^\infty \gamma^t \sum_{s_0} p(s_0) \sum_{a_0} \pi_\theta(a_0 | s_0)\sum_{s_1}p(s_1|s_0, a_0) \dots \sum_{s_t}p(s_t|s_{t-1}, a_{t-1})\sum_{a_t} \pi_\theta(a_t|s_t) A_{\pi_{\theta_0}}(s_t, a_t)\\ &= J(\theta_0) + \sum_{t=0}^\infty \gamma^t \sum_{s_t} \underbrace{\left[ \sum_{s_0, \dots, s_{t-1}} p(s_0) \prod_{k=0}^{t-1} \pi_\theta(a_k |s_k) p(s_{k+1} | s_k, a_k)\right]}_{p(s_t = s | \pi_\theta)} \sum_{a_t} \pi_\theta(a_t | s_t) A_{\pi_{\theta_0}}(s_t, a_t)\\ &= J(\theta_0) + \sum_{t=0}^{\infty}\gamma^t \sum_{s} p(s_t = s | \pi_\theta) \sum_{a} \pi_\theta(a|s) A_{\pi_{\theta_0}}(s, a) \\ &= J(\theta_0) + \sum_s \rho_{\pi_\theta}(s) \sum_a \pi_\theta(a|s) A_{\pi_{\theta_0}}(s, a) \end{align*}

其中,p(st=sπθ)p(s_t = s | \pi_\theta) 是在策略 πθ\pi_\theta 下,在第 tt 时刻状态 {st=s}\{s_t = s\} 的概率。证毕。

6.3.3 TRPO 方法#

  • TRPO 方法的原始论文可以点此访问: TRPO

利用前面恒等式二的结果,只要满足

sρπθ(s)aπθ(as)Aπθ0(s,a)>0, s\sum_s \rho_{\pi_\theta}(s) \sum_a \pi_\theta(a|s) A_{\pi_{\theta_0}}(s,a) > 0, \ \forall s

就可以保证策略 πθ\pi_\theta 比策略 πθ0\pi_{\theta_0} 更好。

6.3.3.1 重要性采样#

事实上,这个期望并不好计算

Esρπθ,aπθ(as)[Aπθ0(s,a)]=sρπθ(s)aπθ(as)Aπθ0(s,a)\mathbb{E}_{s \sim \rho_{\pi_\theta}, a \sim \pi_\theta(a|s)} \left[ A_{\pi_{\theta_0}}(s, a)\right] = \sum_s \rho_{\pi_\theta}(s) \sum_a \pi_\theta(a|s) A_{\pi_{\theta_0}}(s, a)

这是因为我们只有策略 πθ0\pi_{\theta_0} ,而没有策略 πθ\pi_\theta,所以我们不可能直接得到 ρπθ(s)\rho_{\pi_\theta}(s)。为了转换问题,我们先推导一个重要性采样定理。

Theorem 重要性采样定理

给定一个难以采样的概率分布 p(x)p(x), 可以通过利用一个容易采样的分布 q(x)q(x) 来近似 p(x)p(x) 的采样,利用

Exp(x)[f(x)]=Exq(x)[p(x)q(x)f(x)]\mathbb{E}_{x \sim p(x)}[f(x)] = \mathbb{E}_{x \sim q(x)}\left[\frac{p(x)}{q(x)} f(x)\right]

证明:

Exp(x)[f(x)]=f(x)p(x)dx=f(x)p(x)q(x)q(x)dx=f(x)q(x)dxp(x)q(x)=Exq(x)[p(x)q(x)f(x)]\begin{aligned} \mathbb{E}_{x \sim p(x)}[f(x)] &= \int f(x) p(x) dx \\ &= \int f(x) \frac{p(x)}{q(x)} q(x) dx \\ &= \int f(x) q(x) dx \cdot \frac{p(x)}{q(x)}\\ &= \mathbb{E}_{x \sim q(x)}\left[\frac{p(x)}{q(x)} f(x)\right] \end{aligned}

证毕。

利用重要性采样定理,可以用从分布 πθ0\pi_{\theta_0} 中采样的方式得到关于分布 πθ\pi_\theta 的期望值:

Esρπθ(s),aπθ(as)[Aπθ0(s,a)]=Esρπθ0(s),aπθ0(as)[πθ(as)πθ0(as)Aπθ0(s,a)]\mathbb{E}_{s \sim \rho_{\pi_\theta}(s), a \sim \pi_\theta(a|s)} \left[ A_{\pi_{\theta_0}}(s, a)\right] = \mathbb{E}_{s \sim \rho_{\pi_{\theta_0}}(s), a \sim \pi_{\theta_0}(a|s)}\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)} A_{\pi_{\theta_0}}(s, a)\right]

于是,利用重要性采样,且考虑到折扣状态访问分布变化不大,即 ρπθ(s)ρπθ0(s)\rho_{\pi_\theta}(s) \approx \rho_{\pi_{\theta_0}}(s), 有

Esρπθ0(s),aπθ0(as)[ρπθ(s)ρπθ0(s)πθ(as)πθ0(as)Aπθ0(s,a)]Esρπθ0(s),aπθ0(as)[πθ(as)πθ0(as)Aπθ0(s,a)]\mathbb{E}_{s \sim \rho_{\pi_{\theta_0}}(s), a \sim \pi_{\theta_0}(a|s)}\left[\frac{\rho_{\pi_\theta}(s)}{\rho_{\pi_{\theta_0}}(s)} \cdot \frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)} A_{\pi_{\theta_0}}(s, a)\right] \approx \mathbb{E}_{s \sim \rho_{\pi_{\theta_0}}(s), a \sim \pi_{\theta_0}(a|s)}\left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)} A_{\pi_{\theta_0}}(s, a)\right]

这个式子正是 TRPO 的核心公式,由此,

maxθJ(θ)=J(θ0)+maxθEsρπθ0(s),aπθ0(as)[πθ(as)πθ0(as)Aπθ0(s,a)]=J(θ0)+maxθsρπθ0(s)aπθ(as)Aπθ0(s,a)\begin{aligned} \max_{\theta} J(\theta) &= J(\theta_0) + \max_{\theta}\mathbb{E}_{s \sim \rho_{\pi_{\theta_0}}(s), a \sim \pi_{\theta_0}(a|s)}\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)} A_{\pi_{\theta_0}}(s, a)\right] \\ &= J(\theta_0) + \max_{\theta}\sum_s \rho_{\pi_{\theta_0}}(s) \sum_a \pi_\theta(a|s) A_{\pi_{\theta_0}}(s, a) \\ \end{aligned}

注意第二个式子中虽然看着很像没有重要性采样,但是注意下标,实际上是暗含了重要性采样的。

6.3.3.2 TRPO 方法的数学模型#

为了满足折扣状态访问分布变化不大的性质

ρπθ(s)ρπθ0(s)\rho_{\pi_\theta}(s) \approx \rho_{\pi_{\theta_0}}(s)

需要将更新范围限定在一个确定的邻域内。Trust Region Policy Optimization (TRPO) 的想法就在于此,通过约束策略更新的步长,确保新策略的性能单调提升。

N(θ0)={θθθ0Δ}\mathcal{N}(\theta_0) = \{\theta | \Vert \theta - \theta_0 \Vert \le \Delta\}θ0\theta_0 的一个邻域。若存在一个函数 L(θθ0)L(\theta | \theta_0) 可以在邻域 N(θ0)\mathcal{N}(\theta_0) 内近似目标函数 J(θ)J(\theta) ,则可以通过最大化 L(θθ0)L(\theta | \theta_0) 来更新策略参数,此时 L(θθ0)L(\theta | \theta_0) 被称作置信域

于是,优化目标为

maxθEsρθ0,aπθ0[πθ(as)πθ0(as)Aθ0(s,a)]s.t. Esρθ0[DKL(πθ0(s)πθ(s))]δ\boxed{ \begin{aligned} &\max_\theta \mathbb{E}_{s \sim \rho_{\theta_0}, a \sim \pi_{\theta_0}} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)} A_{\theta_0}(s,a) \right] \\ \text{s.t. } &\mathbb{E}_{s \sim \rho_{\theta_0}} \left[ D_{\text{KL}}(\pi_{\theta_0}(\cdot|s) \| \pi_\theta(\cdot|s)) \right] \leq \delta \end{aligned} }

这里采用了Kullback-Leibler散度 (KL散度) 来度量新旧策略之间的差异,实际上是从分布变化的角度来衡量参数的变化。TRPO通过限制KL散度来控制策略更新的幅度,从而避免过大的策略变动。 其中,目标函数为

J(θ)=Esρθ0,aπθ0[πθ(as)πθ0(as)Aθ0(s,a)]J(\theta) = \mathbb{E}_{s \sim \rho_{\theta_0}, a \sim \pi_{\theta_0}} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)} A_{\theta_0}(s,a) \right]

目标函数的近似函数则为:

L(θθ0)=1ni=1n[πθ(aisi)πθ0(aisi)Aθ0(si,ai)]L(\theta | \theta_0) = \frac{1}{n} \sum_{i=1}^{n}\left[ \frac{\pi_\theta(a_i|s_i)}{\pi_{\theta_0}(a_i|s_i)} A_{\theta_0}(s_i,a_i) \right]

6.2.4 PPO 方法#

  • PPO 方法的原始论文可以点此访问: PPO

TRPO 通过KL散度约束实现了策略更新的稳定性,但其具有如下几个局限性。

  • 计算复杂度高,因为需显式计算KL散度的二阶近似 (涉及 Fisher 矩阵),难以扩展到超大规模网络。
  • 实现复杂,毕竟共轭梯度法需要定制化实现,与自动微分框架兼容性差。
  • 超参数敏感,这是因为KL约束阈值 δ\delta 需精细调节,否则易导致更新过保守或不稳定。

Proximal Policy Optimization (PPO) 提出了一种更简洁的约束方式,通过裁剪目标函数 (Clipped Objective)自适应 KL 惩罚 (Adaptive KL Penalty),在保证性能的前提下显著降低实现难度。

PPO 针对以上 TRPO 的各个问题做了如下的改进。

  • 隐式约束上,通过目标函数的裁剪或自适应惩罚替代显式KL约束。
  • 兼容性上,直接使用一阶优化方法 (如 Adam),与深度学习框架无缝集成。
  • 高效性上,无需计算二阶矩阵,适合大规模分布式训练。

PPO 主要有两种形式,分别是 PPO-ClipPPO-KL。其区别在于对策略更新的约束方式。PPO-Clip 通过裁剪目标函数来限制策略更新幅度,而 PPO-KL 则通过自适应 KL 惩罚来实现类似效果。两者在性能上相近,但实现复杂度和超参数调节上有所不同。

形式一:PPO-Clip (裁剪目标函数)

目标函数为

LCLIP(θ)=Esρθ0,aπθ0[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)]L^{\text{CLIP}}(\theta) = \mathbb{E}_{s \sim \rho_{\theta_0}, a \sim \pi_{\theta_0}} \left[ \min\left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right]

其中,

  • 重要性采样比率rt(θ)=πθ(as)πθ0(as)r_t(\theta) = \frac{\pi_\theta(a|s)}{\pi_{\theta_0}(a|s)}
  • 优势函数At=Aπθ0(s,a)A_t = A_{\pi_{\theta_0}}(s,a) ,通常用GAE(Generalized Advantage Estimation)估计。
  • 裁剪阈值ϵ\epsilon (如0.1或0.2),限制 rt(θ)r_t(\theta) 的偏离幅度。

这里,裁剪机制的作用是限制策略更新幅度,避免过度优化。具体来说,当优势为正At>0A_t > 0时,鼓励动作概率提升,但限制 rt(θ)1+ϵr_t(\theta) \leq 1+\epsilon ,避免过度优化。而当优势为负At<0A_t < 0,抑制动作概率下降,但限制 rt(θ)1ϵr_t(\theta) \geq 1-\epsilon ,避免策略退化。

形式二:PPO-KL (自适应KL惩罚) 它的目标函数是

LKL(θ)=Esρθ0,aπθ0[rt(θ)AtβDKL(πθ0πθ)]L^{\text{KL}}(\theta) = \mathbb{E}_{s \sim \rho_{\theta_0}, a \sim \pi_{\theta_0}} \left[ r_t(\theta) A_t - \beta \cdot D_{\text{KL}}(\pi_{\theta_0} \| \pi_\theta) \right]

其中,

  • 自适应系数 β\beta
    1. 若当前平均KL散度 DˉKL>δtarget\bar{D}_{\text{KL}} > \delta_{\text{target}} ,增大 β\beta(如乘1.5)。
    2. DˉKL<δtarget\bar{D}_{\text{KL}} < \delta_{\text{target}} ,减小 β\beta(如乘0.5)。
  • 目标阈值δtarget\delta_{\text{target}} (如0.01)。

PPO的优化目标与实现,以PPO-Clip为例

1. 完整优化问题 PPO-Clip的优化目标可写为:

maxθEs,aπθ0[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)]\max_\theta \, \mathbb{E}_{s,a \sim \pi_{\theta_0}} \left[ \min\left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right]

无显式约束,通过目标函数设计隐式限制策略更新幅度。

2. 优势函数估计 使用 GAE (Generalized Advantage Estimation) 平衡偏差与方差:

AtGAE(γ,λ)=k=0Tt(γλ)kδt+kA_t^{\text{GAE}(\gamma,\lambda)} = \sum_{k=0}^{T-t} (\gamma \lambda)^k \delta_{t+k}

其中 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)λ[0,1]\lambda \in [0,1] 控制方差-偏差权衡。

3. 实现步骤

  1. 数据收集:用旧策略 πθ0\pi_{\theta_0} 与环境交互,收集轨迹数据。
  2. 优势计算:基于当前价值函数 VϕV_\phi 计算GAE优势 AtA_t
  3. 目标优化:对目标函数 LCLIPL^{\text{CLIP}}LKLL^{\text{KL}} 执行多轮小批量梯度上升。
  4. 策略同步:定期将当前策略参数 $theta复制给复制给\theta_0$。

PPO与TRPO的对比

特性TRPOPPO
约束方式显式KL散度约束裁剪目标函数或自适应KL惩罚
计算复杂度高(需二阶矩阵运算)低(仅一阶优化)
实现难度复杂(共轭梯度法)简单(兼容标准优化器)
超参数敏感性高(依赖 δ\delta 选择)低(ϵ\epsilonβ\beta 易调节)
适用场景理论验证或高精度控制大规模训练(如游戏、机器人)

两种形式的 PPO 对比

  1. 裁剪目标的启发式设计: PPO-Clip的裁剪机制虽缺乏严格理论保证,但实验表明其效果与TRPO相当。直观解释为:

    • 概率比偏离限制:强制策略更新在信任区域内( rt(θ)[1ϵ,1+ϵ]r_t(\theta) \in [1-\epsilon, 1+\epsilon] )。
    • 保守更新:对优势显著的动作进行“截断”,防止过拟合。
  2. 自适应KL惩罚的退化问题: PPO-KL虽更接近TRPO理论,但实际中易因KL散度振荡导致训练不稳定。因此,PPO-Clip成为主流实现。

强化学习 Chapter 6 - 策略梯度方法
https://adalovelemon.github.io/blog/en/posts/content/coursenotes/reinforcementlearning/basicrl/chapter6/
Author
Ada Lovelemon
Published at
2025-04-20

Comments Section