本文面向掌握了基础的强化学习原理,而又想进一步从直观理解和基本数学原理相结合的角度理解REINFORCE、REINFORCE with baseline、A2C、TRPO、PPO、GRPO等主流基于策略的强化学习算法的读者。
0. 引言
在强化学习中,智能体的目标是通过与环境交互来最大化累积奖励。为此,我们通常将问题建模为马尔科夫决策过程(Markov Decision Process, MDP),定义状态、动作、奖励、策略及折扣因子等基本元素。智能体根据策略选择动作,环境根据动作产生奖励并转移到下一个状态,这样的交互形成了一条条轨迹,而策略的优化目标就是让这些轨迹上的累积奖励尽可能高。
策略梯度方法(Policy Gradient, PG)是一类将策略参数化表示,并且直接对策略参数进行优化的强化学习算法。它不仅提供了直观的“沿着更好动作增加概率”的思路,也有严格的理论推导保证。本文将从最基础的 REINFORCE 方法出发,然后介绍REINFORCE with baseline、A2C等算法,这些算法都属于相对比较早一点的方法了,本文可能会将其都看成所谓的 Vanilla Policy Gradient(VPG)方法或其变种(注意只在本文内这样考虑),再介绍目前 TRPO、PPO、GRPO 等主流策略梯度优化算法,通过直观解释和数学原理结合的方式,让读者既理解算法核心思想,又掌握其基本理论依据。过于细节的数学推导和证明会以附录或者链接的形式展出,供有兴趣的读者参考。
1. 背景知识
在讨论策略梯度算法之前,我们先梳理一些核心符号和概念,以便后续推导和理解。这些符号是强化学习文献中的常见约定,同时做了适当简化,方便直观理解。
交互时间步 t t t :从 0 开始,直到终止步 T T T (可以是有限或无限)。智能体和环境在每一个时间步上进行一次交互。
状态空间 S \mathcal{S} S :智能体可能处于的所有状态的集合。
动作空间 A \mathcal{A} A :智能体可选择的动作集合。
状态 s t s_t s t :时间步 t t t 时智能体所处的状态。
动作 a t a_t a t :时间步 t t t 时智能体根据策略选择的动作。
状态转移分布 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p ( s t + 1 ∣ s t , a t ) :表示在状态 s t s_t s t 下采取动作 a t a_t a t 转移到下一状态 s t + 1 s_{t+1} s t + 1 的概率。
奖励分布 p ( r t ∣ s t , a t ) p(r_t|s_t,a_t) p ( r t ∣ s t , a t ) :表示在状态 s t s_t s t 下采取动作 a t a_t a t 获得奖励 r t r_t r t 的概率。
[!NOTE]
如上状态转移分布和奖励分布有时可以统一为环境分布 p ( ⋅ , ⋅ ∣ s , a ) p(\cdot,\cdot|s,a) p ( ⋅ , ⋅ ∣ s , a ) ,用符号 p p p 表示。
策略 π θ ( a ∣ s ) \pi_\theta(a|s) π θ ( a ∣ s ) :给定状态 s s s ,采取动作 a a a 的概率,由参数 θ \theta θ 决定。
折扣因子 γ \gamma γ :衡量未来奖励的重要性,取值在 [ 0 , 1 ] [0,1] [ 0 , 1 ] 之间。
回报 G t G_t G t :从时间步 t t t 开始累积的折扣奖励,定义为 G t = ∑ t ′ = t T − 1 γ t ′ − t r t ′ G_t = \sum_{t'=t}^{T-1} \gamma^{t'-t} r_{t'} G t = ∑ t ′ = t T − 1 γ t ′ − t r t ′ ;注意终止状态 s T s_T s T 后不再交互得到奖励 r T r_T r T ,所以只计算到 r T + 1 r_{T+1} r T + 1
状态值函数 V π ( s ) V^\pi(s) V π ( s ) :在策略 π \pi π 下,处于状态 s s s 的期望回报,表示为 V π ( s ) = E [ G 0 ∣ s 0 = s ] V^\pi(s) = \mathbb{E}[G_0 | s_0 = s] V π ( s ) = E [ G 0 ∣ s 0 = s ] 。
动作值函数 Q π ( s , a ) Q^\pi(s,a) Q π ( s , a ) :在策略 π \pi π 下,处于状态 s s s 并采取动作 a a a 的期望回报,表示为 Q π ( s , a ) = E [ G 0 ∣ s 0 = s , a 0 = a ] Q^\pi(s,a) = \mathbb{E}[G_0 | s_0 = s, a_0 = a] Q π ( s , a ) = E [ G 0 ∣ s 0 = s , a 0 = a ] 。
轨迹 τ \tau τ :一条完整的交互序列,例如 τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T ) \tau = (s_0, a_0, r_0, s_1, a_1, r_1, \dots, s_T) τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T ) ,其依赖于 ( ρ 0 , π , p ) (\rho_0, \pi, p) ( ρ 0 , π , p ) 生成,其中 ρ 0 ( s 0 ) \rho_0(s_0) ρ 0 ( s 0 ) 是初始状态分布,π \pi π 是策略分布,p p p 是环境分布。
轨迹分布 p θ ( τ ) p_\theta(\tau) p θ ( τ ) :由策略 π θ \pi_\theta π θ 和环境动态生成的轨迹概率,表示为 p θ ( τ ) = ρ 0 ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) p ( r t , s t + 1 ∣ s t , a t ) p_\theta(\tau) = \rho_0(s_0) \prod_{t=0}^{T-1} \pi_\theta(a_t|s_t)\, p(r_t, s_{t+1} | s_t, a_t) p θ ( τ ) = ρ 0 ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) p ( r t , s t + 1 ∣ s t , a t )
直观理解:智能体与环境的交互可以看作“状态 → 动作 → 奖励 + 下一状态”的循环,不断产生轨迹。策略梯度方法的目标,就是通过调整策略参数 θ \theta θ ,让轨迹上的累积回报 G 0 G_0 G 0 尽可能高。
此外,为了推导策略梯度,有时会使用 折扣状态访问分布 ρ π γ ( s ) \rho_\pi^\gamma(s) ρ π γ ( s ) ,表示智能体在不同时间步访问状态 s s s 的加权次数,这有助于将梯度定义在状态分布上,使更新公式更加直观。
强化学习中不同的场景通常会有不同的符号设定,但是核心就是交互过程中的“智能体在某一状态下根据策略采取动作,环境依据动作产生奖励并导致状态变化”,然后通常都会认为马尔科夫性质和不随时间变化的分布成立。可能会有不同的符号表示或者分布的假设,把握核心即可。
强化学习的目标,就是要最大化交互过程中累积的折扣奖励,一条轨迹对应的累积奖励为:R ( τ ) = ∑ t = 0 T − 1 γ t r t . R(\tau) = \sum_{t=0}^{T-1} \gamma^t r_t. R ( τ ) = ∑ t = 0 T − 1 γ t r t . 强化学习的目标函数就是最大化轨迹回报的期望:J ( θ ) = E τ ∼ p θ ( τ ) [ R ( τ ) ] . J(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)}[R(\tau)]. J ( θ ) = E τ ∼ p θ ( τ ) [ R ( τ )] . 而基于状态值的定义,我们还可以将目标函数可以写为初始状态的期望:J ( θ ) = E s 0 ∼ p 0 [ V π θ ( s 0 ) ] . J(\theta) = \mathbb{E}_{s_0 \sim p_0}[V^{\pi_\theta}(s_0)]. J ( θ ) = E s 0 ∼ p 0 [ V π θ ( s 0 )] .
而策略梯度算法,其核心想法是将策略参数化以后,引入梯度算法对策略进行更新 ;更新的核心效果是增大在当前环境中表现良好的动作的概率,同时减小表现不佳动作的概率,从而逐步提升智能体的累积奖励的期望。
在这一思想下,Vanilla Policy Gradient (VPG) 方法给出了最直接、也是最基础的实现方式。它首先将策略表示为带参数的概率分布 π θ ( a ∣ s ) \pi_\theta(a|s) π θ ( a ∣ s ) ,并将强化学习问题转化为一个优化问题:最大化策略在环境中产生的累积回报期望 J ( θ ) J(\theta) J ( θ ) 。随后,VPG 通过推导目标函数关于策略参数的梯度,将“增大好动作概率、减小坏动作概率”这一直观想法,严格地刻画为对数策略梯度与回报的加权期望。
而在实际算法中,VPG 通过采样若干条轨迹,用每一步动作对应的回报(或动作值函数)来衡量该动作的“好坏”,并沿着梯度方向对参数进行更新。这种方法形式简单、理论清晰,是后续策略梯度算法的出发点。然而,由于其梯度估计往往具有较高方差,直接使用 VPG 在复杂任务中可能收敛缓慢或不稳定。正是基于对这些问题的改进动机,后续方法如 TRPO、PPO 以及 GRPO 在保持策略梯度核心思想不变的前提下,引入了不同形式的约束、近似或归一化手段,以提高训练的稳定性和样本效率。
接下来我们会从最直接的 VPG 算法开始,介绍策略梯度算法的核心想法,然后通过识别其不足、改进不足的思路进一步介绍TRPO、PPO、GRPO的算法。
2. Vanilla Policy Gradient methods
则我们首先介绍Vanilla Policy Gradient methods (VPG),沿着之前的想法,我们需要从强化学习的目标出发,将策略表示为带参数的概率分布,并通过梯度上升的方法对策略参数进行更新,从而逐步提高智能体在环境中获得的累积奖励。为此,我们接下来首先基于目标函数推导策略梯度,然后分析我们得到的策略梯度。
2.1 策略梯度的推导与分析
前面提到,强化学习的目标函数就是最大化轨迹回报的期望:J ( θ ) = E τ ∼ p θ ( τ ) [ R ( τ ) ] . J(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)}[R(\tau)]. J ( θ ) = E τ ∼ p θ ( τ ) [ R ( τ )] . 这里记一条有限时域轨迹为
τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T − 1 , a T − 1 , r T − 1 , s T ) , \tau=(s_0,a_0,r_0,s_1,a_1,r_1,\dots,s_{T-1},a_{T-1},r_{T-1},s_T),
τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T − 1 , a T − 1 , r T − 1 , s T ) ,
其在策略 π θ \pi_\theta π θ 下的概率分布为
p θ ( τ ) = ρ 0 ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) P ( s t + 1 , r t ∣ s t , a t ) . p_\theta(\tau)=\rho_0(s_0)\prod_{t=0}^{T-1}\pi_\theta(a_t\mid s_t)\,P(s_{t+1},r_t\mid s_t,a_t).
p θ ( τ ) = ρ 0 ( s 0 ) t = 0 ∏ T − 1 π θ ( a t ∣ s t ) P ( s t + 1 , r t ∣ s t , a t ) .
这个目标函数对策略参数的依赖是隐式的,策略参数影响的是策略 π θ \pi_\theta π θ ,而策略再与环境的初始状态分布和转移动态共同决定轨迹分布,最终由轨迹上的奖励得到回报。因此,为了求解如上目标函数的梯度,我们先利用期望的定义,将其写成离散情形下的求和形式:
J ( θ ) = ∑ τ p θ ( τ ) R ( τ ) J(\theta) = \sum_{\tau} p_\theta(\tau)\, R(\tau)
J ( θ ) = τ ∑ p θ ( τ ) R ( τ )
对该式关于 θ \theta θ 求导,可以得到:
∇ θ J ( θ ) = ∑ τ ∇ θ p θ ( τ ) R ( τ ) \nabla_\theta J(\theta) = \sum_{\tau} \nabla_\theta p_\theta(\tau)\, R(\tau)
∇ θ J ( θ ) = τ ∑ ∇ θ p θ ( τ ) R ( τ )
然而,这种形式并不便于直接进行采样估计,因为梯度作用在概率分布本身上。为此,我们引入对数求导技巧,将梯度改写为:
∇ θ J ( θ ) = ∑ τ p θ ( τ ) ∇ θ p θ ( τ ) p θ ( τ ) R ( τ ) = E p θ ( τ ) [ ∇ θ ln p θ ( τ ) R ( τ ) ] . \nabla_\theta J(\theta) = \sum_{\tau} p_\theta(\tau)\, \frac{\nabla_\theta p_\theta(\tau)}{p_\theta(\tau)}\, R(\tau) = \mathbb{E}_{p_\theta(\tau)}\big[\nabla_\theta \ln p_\theta(\tau)\, R(\tau)\big].
∇ θ J ( θ ) = τ ∑ p θ ( τ ) p θ ( τ ) ∇ θ p θ ( τ ) R ( τ ) = E p θ ( τ ) [ ∇ θ ln p θ ( τ ) R ( τ ) ] .
这一步的关键意义在于:原本隐藏在期望分布中的策略参数,被转化为一个显式的对数梯度项,从而使梯度可以通过对轨迹进行采样来估计。
实际上基于如上式子,我们已经可以得到一个最为粗糙的算法实现。具体而言,在每一次迭代中,我们按照当前策略 π θ \pi_\theta π θ 与环境进行交互,采样若干条完整轨迹 τ \tau τ ,计算每条轨迹对应的累积回报 R ( τ ) R(\tau) R ( τ ) ,然后利用这些样本估计
E p θ ( τ ) [ ∇ θ ln p θ ( τ ) R ( τ ) ] , \mathbb{E}_{p_\theta(\tau)}\big[\nabla_\theta \ln p_\theta(\tau)\, R(\tau)\big],
E p θ ( τ ) [ ∇ θ ln p θ ( τ ) R ( τ ) ] ,
并沿梯度上升方向更新策略参数。
然而,如上更新方式存在一个显著问题,即梯度估计的方差非常大。一方面,轨迹回报 R ( τ ) R(\tau) R ( τ ) 往往是多个时间步奖励的累积,其数值会随着轨迹长度和随机性剧烈波动;另一方面,其对数概率 ln p θ ( τ ) \ln p_\theta(\tau) ln p θ ( τ ) 同时依赖于轨迹中所有状态和动作,使得单个样本对梯度的影响极不稳定。接下来我们的目标就是不断降低其对梯度的估计方差。
如上表达式中有 ∇ θ ln p θ ( τ ) , R ( τ ) \nabla_\theta \ln p_\theta(\tau), R(\tau) ∇ θ ln p θ ( τ ) , R ( τ ) 这两个关键项,我们从其下手改进其方差。
2.1.1 改进方差——改轨迹对数概率
则基于观察,注意到轨迹概率 p θ ( τ ) p_\theta(\tau) p θ ( τ ) 中,只有策略项 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) π θ ( a t ∣ s t ) 与参数 θ \theta θ 有关,而环境初始分布与状态转移、奖励分布均与 θ \theta θ 无关。
因此,利用对数的可加性,可以将对数轨迹概率写为
ln p θ ( τ ) = ln ρ 0 ( s 0 ) + ∑ t = 0 T − 1 ln π θ ( a t ∣ s t ) + ∑ t = 0 T − 1 ln P ( s t + 1 , r t ∣ s t , a t ) , \ln p_\theta(\tau)
=
\ln \rho_0(s_0)
+
\sum_{t=0}^{T-1}\ln \pi_\theta(a_t\mid s_t)
+
\sum_{t=0}^{T-1}\ln P(s_{t+1},r_t\mid s_t,a_t),
ln p θ ( τ ) = ln ρ 0 ( s 0 ) + t = 0 ∑ T − 1 ln π θ ( a t ∣ s t ) + t = 0 ∑ T − 1 ln P ( s t + 1 , r t ∣ s t , a t ) ,
从而其梯度可以拆解为时间步上的求和:
∇ θ ln p θ ( τ ) = ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) . \nabla_\theta \ln p_\theta(\tau) = \sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t|s_t).
∇ θ ln p θ ( τ ) = t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) .
这样就去除了环境转移与奖励分布对梯度估计的影响,表明在计算策略梯度时,我们只需要对策略本身求导,而不需要对环境动力学求导。
2.1.2 改进方差——改轨迹回报
另一方面,轨迹回报也可以展开为各时间步奖励的折扣和:R ( τ ) = ∑ t ′ = 0 T − 1 γ t ′ r t ′ . R(\tau) = \sum_{t'=0}^{T-1} \gamma^{t'} r_{t'}. R ( τ ) = ∑ t ′ = 0 T − 1 γ t ′ r t ′ .
将这两部分代入梯度表达式后,可以看到其本质上是两个时间求和项的乘积 ,将其展开以后每一项都形如 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t ′ r t ′ . \nabla_\theta \ln \pi_\theta(a_t|s_t)\cdot \gamma^{t'} r_{t'}. ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t ′ r t ′ . 在外层期望作用下,对应的期望项为 E p θ ( τ ) [ ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t ′ r t ′ ] . \mathbb{E}_{p_\theta(\tau)}\big[\nabla_\theta \ln \pi_\theta(a_t|s_t)\cdot \gamma^{t'} r_{t'}\big]. E p θ ( τ ) [ ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t ′ r t ′ ] . 此时,一个关键的直观观察是因果性(causality) :在时间步 t t t 选择的动作 a t a_t a t ,不可能影响发生在它之前的奖励 r t ′ r_{t'} r t ′ (即 t > t ′ t>t' t > t ′ 时, t t t 时刻的动作不能影响 t ′ t' t ′ 时刻的奖励)。因此,当 t > t ′ t>t' t > t ′ 时,奖励 r t ′ r_{t'} r t ′ 与当前动作 a t a_t a t 无关,在对策略梯度取期望后,这一类项的期望值为 0,可以被安全地消去。(严格证明参考附录证明一)
基于这一因果性,我们可以仅保留满足 t ′ ≥ t t' \ge t t ′ ≥ t 的项,从而将梯度重写为:
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ∑ t ′ = t T − 1 γ t ′ r t ′ ] = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) γ t ∑ t ′ = t T − 1 γ t ′ − t r t ′ ] . \begin{aligned} \nabla_\theta J(\theta) &= \mathbb{E}_{p_\theta(\tau)} \Big[\sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t|s_t) \sum_{t'=t}^{T-1} \gamma^{t'} r_{t'} \Big] \\ &= \mathbb{E}_{p_\theta(\tau)} \Big[\sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t|s_t) \gamma^t \sum_{t'=t}^{T-1} \gamma^{t'-t} r_{t'} \Big]. \end{aligned}
∇ θ J ( θ ) = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) t ′ = t ∑ T − 1 γ t ′ r t ′ ] = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) γ t t ′ = t ∑ T − 1 γ t ′ − t r t ′ ] .
为了简化记号并增强直观性,我们记从时间步 t t t 开始的折扣回报为
G t ≜ ∑ t ′ = t T − 1 γ t ′ − t r t ′ , G_t \triangleq \sum_{t'=t}^{T-1} \gamma^{t'-t} r_{t'},
G t ≜ t ′ = t ∑ T − 1 γ t ′ − t r t ′ ,
则策略梯度可以写成更加紧凑、也更具解释性的形式:
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t G t ] . \nabla_\theta J(\theta) = \mathbb{E}_{p_\theta(\tau)} \Big[\sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t|s_t)\cdot \gamma^t G_t \Big].
∇ θ J ( θ ) = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t G t ] .
这一结果的直观含义就是:在每一个时间步上,根据当前动作对未来回报的贡献大小,来调整该动作在当前状态下被选择的概率 。高回报对应的动作会被强化,低回报对应的动作影响则较弱。与此同时,通过只保留“当前动作对未来奖励”的影响 ,这一步通常能够显著降低梯度估计的方差。
这里还可以更进一步,这里的 G t G_t G t 虽然定义为后续所有步骤得到的累积折扣奖励,但是其实也是一个随机变量,并且其依赖于 ( s t , a t ) (s_t, a_t) ( s t , a t ) 之后环境的随机转移以及后续动作的随机采样,其依赖的分布就是外层期望对应的分布。在这一期望算子下,我们实际上是在做这样一件事:固定时间步 t t t 的状态–动作对 ( s t , a t ) (s_t,a_t) ( s t , a t ) ,对所有可能的未来轨迹进行平均。 更严格地,利用条件期望的塔式法则可得
E [ γ t ∇ θ ln π θ ( a t ∣ s t ) G t ] = E [ E [ γ t ∇ θ ln π θ ( a t ∣ s t ) G t ∣ s t , a t ] ] = E [ γ t ∇ θ ln π θ ( a t ∣ s t ) E [ G t ∣ s t , a t ] ] . \begin{aligned}
\mathbb{E}\!\left[\gamma^t \nabla_\theta \ln \pi_\theta(a_t\mid s_t)\, G_t\right]
&=\mathbb{E}\left[\mathbb{E}[\gamma^t \nabla_\theta \ln \pi_\theta(a_t\mid s_t)\, G_t\mid s_t,a_t]\right]\\
&=
\mathbb{E}\!\left[\gamma^t \nabla_\theta \ln \pi_\theta(a_t\mid s_t)\, \mathbb{E}[G_t\mid s_t,a_t]\right].
\end{aligned}
E [ γ t ∇ θ ln π θ ( a t ∣ s t ) G t ] = E [ E [ γ t ∇ θ ln π θ ( a t ∣ s t ) G t ∣ s t , a t ] ] = E [ γ t ∇ θ ln π θ ( a t ∣ s t ) E [ G t ∣ s t , a t ] ] .
由于 ∇ θ ln π θ ( a t ∣ s t ) \nabla_\theta \ln \pi_\theta(a_t\mid s_t) ∇ θ ln π θ ( a t ∣ s t ) 是 ( s t , a t ) (s_t,a_t) ( s t , a t ) 的函数,因此我们可以将
Q π θ ( s t , a t ) ≜ E [ G t ∣ s t , a t ] Q^{\pi_\theta}(s_t,a_t) \;\triangleq\; \mathbb{E}\!\left[G_t \mid s_t,a_t\right]
Q π θ ( s t , a t ) ≜ E [ G t ∣ s t , a t ]
识别为动作值函数。于是我们可以得到:
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t G t ] = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t Q π θ ( s t , a t ) ] . \begin{aligned} \nabla_\theta J(\theta)&=\mathbb{E}_{p_\theta(\tau)} \big[\sum _{t=0}^{T-1}\nabla_\theta\ln\pi_\theta(a_t|s_t)\cdot \gamma^t G_t\big]\\ &=\mathbb{E}_{p_\theta(\tau)} \big[\sum _{t=0}^{T-1}\nabla_\theta\ln\pi_\theta(a_t|s_t)\cdot \gamma^t Q^{\pi_\theta}(s_t,a_t)\big]. \end{aligned}
∇ θ J ( θ ) = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t G t ] = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) ⋅ γ t Q π θ ( s t , a t ) ] .
这样我们就得到了策略梯度的表达式。
虽然前面的推导是从有限时间步 T T T 的情形出发的,但当折扣因子 γ < 1 \gamma<1 γ < 1 时,上述结果可以自然推广到 无限时域(infinite horizon) 。直观上,折扣因子保证了远期奖励的贡献逐步衰减,使得无穷时间步下的累积回报与梯度期望依然是良定义且有限的,因此求和上限从 T − 1 T-1 T − 1 延拓为 ∞ \infty ∞ 并不会改变推导结构。
另一方面,上式中的策略梯度仍然是定义在轨迹分布 p θ ( τ ) p_\theta(\tau) p θ ( τ ) 上的,这在理解和实现上都略显笨重,毕竟右边的项直观看来只依赖于状态和动作的分布。为了得到一个更加直观、也更接近“逐状态更新”的形式,我们可以将对轨迹的期望,转写为对状态访问分布 与策略的联合期望。
为此,引入折扣状态访问度量(discounted state visitation measure) :
ρ π γ ( s ) ≜ ∑ t = 0 ∞ γ t P ( s t = s ∣ π ) = ∑ t = 0 ∞ γ t ∑ s 0 ρ 0 ( s 0 ) p π ( s 0 → s , t ) ⏟ p t π ( s ) . \begin{aligned}
\rho_\pi^\gamma(s)
&\triangleq \sum_{t=0}^{\infty} \gamma^t P(s_t = s\mid \pi) \\
&= \sum_{t=0}^{\infty} \gamma^t \underbrace{\sum_{s_0} \rho_0(s_0) p^\pi(s_0 \to s, t)}_{p_t^\pi(s)}.
\end{aligned}
ρ π γ ( s ) ≜ t = 0 ∑ ∞ γ t P ( s t = s ∣ π ) = t = 0 ∑ ∞ γ t p t π ( s ) s 0 ∑ ρ 0 ( s 0 ) p π ( s 0 → s , t ) .
这一量可以被理解为:在策略 π \pi π 下,状态 s s s 在不同时间步被访问的“折扣次数”之和 。与标准概率分布不同,ρ π γ ( s ) \rho_\pi^\gamma(s) ρ π γ ( s ) 并不要求对所有状态求和为 1,因此它并不是一个概率分布,而是一个加权访问频率。事实上,当 γ < 1 \gamma<1 γ < 1 时,
∑ s ρ π γ ( s ) = ∑ t = 0 ∞ γ t = 1 1 − γ . \sum_s \rho_\pi^\gamma(s)=\sum_{t=0}^{\infty}\gamma^t=\frac{1}{1-\gamma}.
s ∑ ρ π γ ( s ) = t = 0 ∑ ∞ γ t = 1 − γ 1 .
因此,我们可以通过归一化定义对应的概率分布
d π γ ( s ) ≜ ( 1 − γ ) ρ π γ ( s ) , d_\pi^\gamma(s) \;\triangleq\; (1-\gamma)\rho_\pi^\gamma(s),
d π γ ( s ) ≜ ( 1 − γ ) ρ π γ ( s ) ,
此时 ∑ s d π γ ( s ) = 1 \sum_s d_\pi^\gamma(s)=1 ∑ s d π γ ( s ) = 1 。这一步并不会改变梯度的方向,只是引入了一个与 θ \theta θ 无关的常数缩放因子。利用这一状态访问分布,可以将原本定义在轨迹上的策略梯度,重写为定义在状态–动作对 上的期望形式:
∇ θ J ( θ ) = E ρ π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] = 1 1 − γ E d π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] . \begin{aligned} \nabla_{\theta} J(\theta) &= \mathbb{E}_{\rho_\pi^\gamma(s) \pi_{\theta}(a|s)} \left[ Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \ln \pi_{\theta}(a|s) \right] \\ &= \frac{1}{1 - \gamma} \mathbb{E}_{d_\pi^\gamma(s) \pi_{\theta}(a|s)} \left[ Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \ln \pi_{\theta}(a|s) \right]. \end{aligned}
∇ θ J ( θ ) = E ρ π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] = 1 − γ 1 E d π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] .
2.1.3 策略梯度小结
小结一下,通过如上的推导,我们有如下几种策略梯度的形式。
时间步形式
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 γ t ∇ θ ln π θ ( a t ∣ s t ) G t ] \nabla_\theta J(\theta) = \mathbb{E}_{p_\theta(\tau)} \Big[ \sum_{t=0}^{T-1} \gamma^t \nabla_\theta \ln \pi_\theta(a_t|s_t) \, G_t \Big] ∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 γ t ∇ θ ln π θ ( a t ∣ s t ) G t ]
状态动作形式
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 γ t ∇ θ ln π θ ( a t ∣ s t ) Q π θ ( s t , a t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{p_\theta(\tau)} \Big[ \sum_{t=0}^{T-1} \gamma^t \nabla_\theta \ln \pi_\theta(a_t|s_t) \, Q^{\pi_\theta}(s_t, a_t) \Big] ∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 γ t ∇ θ ln π θ ( a t ∣ s t ) Q π θ ( s t , a t ) ]
折扣状态访问分布形式
∇ θ J ( θ ) = E ρ π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] = 1 1 − γ E d π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] \begin{aligned} \nabla_{\theta} J(\theta) &= \mathbb{E}_{\rho_\pi^\gamma(s) \pi_{\theta}(a|s)} \left[ Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \ln \pi_{\theta}(a|s) \right] \\ &= \frac{1}{1 - \gamma} \mathbb{E}_{d_\pi^\gamma(s) \pi_{\theta}(a|s)} \left[ Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \ln \pi_{\theta}(a|s) \right] \end{aligned} ∇ θ J ( θ ) = E ρ π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ] = 1 − γ 1 E d π γ ( s ) π θ ( a ∣ s ) [ Q π θ ( s , a ) ∇ θ ln π θ ( a ∣ s ) ]
2.1.4 策略梯度的直观理解
基于前面的推导可以看到,尽管策略梯度在数学形式上有多种等价表达,但它们背后遵循的是同一条核心逻辑 :
通过梯度更新,系统性地提高“带来更高长期回报”的动作被选中的概率,同时降低“长期回报较低”的动作被选中的概率。
为什么可以这样理解如上梯度呢?我们把它放在梯度上升算法的框架下去理解。
首先我们理解一下梯度的作用。在一般的连续优化问题中,我们希望最大化某个目标函数 J ( θ ) J(\theta) J ( θ ) 。梯度 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇ θ J ( θ ) 刻画的是:在当前参数 θ \theta θ 处,参数发生微小变化时,目标函数增长最快的方向 。
因此,基于梯度的更新 θ ← θ + α ∇ θ J ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) θ ← θ + α ∇ θ J ( θ ) 具有两个基本性质:
更新方向一定是局部最优的上升方向 ;
更新幅度由学习率 α \alpha α 控制,与梯度大小成正比。
从这个角度看,策略梯度方法并没有特殊之处,它本质上仍然是在做“标准的梯度上升”,只是目标函数和参数的含义发生了变化。所以我们要理解策略梯度方法,关键就是要理解策略梯度所指示的方向。
那这里策略梯度方法的梯度的含义是什么?在策略梯度方法中,我们更新的方向是 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇ θ J ( θ ) ,而在所有形式的策略梯度表达中,都反复出现了同一个核心结构:
∇ θ ln π θ ( a ∣ s ) × ( 某种回报信号 ) \nabla_\theta \ln \pi_\theta(a|s) \times (\text{某种回报信号})
∇ θ ln π θ ( a ∣ s ) × ( 某种回报信号 )
同样,遵循梯度的意义,这里的对数梯度 ∇ θ ln π θ ( a ∣ s ) \nabla_\theta \ln \pi_\theta(a \mid s) ∇ θ ln π θ ( a ∣ s ) 描述的就是如何通过调整参数,使动作 a a a 的概率增大的方向。而策略梯度表达式外层的期望算子意味着,我们可以把策略梯度看做把不同的动作概率增大的方向按照权重整合起来 得到的结果。这个权重,一方面由概率分布决定,另外一方面就由“(某种回报信号)”决定。所以通过理解这一点,我们就能够直观地解释如上梯度了。
∇ θ ln π θ ( a ∣ s ) \nabla_\theta \ln \pi_\theta(a|s) ∇ θ ln π θ ( a ∣ s ) :描述了在当前状态 s s s 下,如何调整参数 θ \theta θ 才能增加或减少动作 a a a 的概率 ;
回报信号( G t G_t G t 或 Q π ( s , a ) Q^\pi(s,a) Q π ( s , a ) 等):衡量“这个动作到底值不值得鼓励”。
二者相乘后,梯度更新自然形成如下效果:
若某个动作带来了高回报 (回报信号较大),梯度方向会推动参数更新,使该动作在类似状态下相对增大被选中的概率;
若某个动作带来了低回报 ,梯度方向则会相对压低其概率。
这正是我们之前提到的“增大好动作概率,减小差动作概率”的数学来源。
2.2 REINFORCE 算法
基于如上讨论,我们可以得到一个基础的策略梯度算法,称为REINFORCE算法。如下是REINFORCE的算法实现流程。
2.2.1 REINFORCE 算法实现
初始化策略参数 θ \theta θ 。
采样轨迹 :使用当前策略 π θ \pi_\theta π θ 与环境交互,生成完整轨迹 τ = ( s 0 , a 0 , r 0 , … , s T ) \tau = (s_0, a_0, r_0, \dots, s_T) τ = ( s 0 , a 0 , r 0 , … , s T ) 。
计算每个时间步的折扣回报 : G t = ∑ t ′ = t T − 1 γ t ′ − t r t ′ G_t = \sum_{t'=t}^{T-1} \gamma^{t'-t} r_{t'} G t = ∑ t ′ = t T − 1 γ t ′ − t r t ′
估计梯度 : ∇ ^ θ J ( θ ) = ∑ t = 0 T − 1 γ t ∇ θ ln π θ ( a t ∣ s t ) G t \hat{\nabla}_\theta J(\theta) = \sum_{t=0}^{T-1} \gamma^t \nabla_\theta \ln \pi_\theta(a_t | s_t) G_t ∇ ^ θ J ( θ ) = ∑ t = 0 T − 1 γ t ∇ θ ln π θ ( a t ∣ s t ) G t
更新策略参数 : θ ← θ + α ∇ ^ θ J ( θ ) \theta \leftarrow \theta + \alpha \hat{\nabla}_\theta J(\theta) θ ← θ + α ∇ ^ θ J ( θ ) ,其中 α \alpha α 为学习率。
重复步骤 2-5 直到策略收敛。
需要注意的是,如果使用自动微分的框架计算梯度,我们会需要构造一个不同于真实目标函数的伪目标函数J ( θ ) = ∑ t = 0 T − 1 ln π θ ( a t ∣ s t ) G t J(\theta) = \sum_{t=0}^{T-1} \ln \pi_\theta(a_t | s_t) G_t J ( θ ) = ∑ t = 0 T − 1 ln π θ ( a t ∣ s t ) G t 用来求导,这是因为我们原始的目标函数并不能直接微分,其对参数的依赖是隐式的,后续的 VPG 的算法实现上是类似的。
2.3 REINFORCE with baseline 算法
2.3.1 带baseline的策略梯度推导
虽然REINFORCE算法是一个可用的策略梯度算法了,但是其梯度估计的方差还是较大,还是会导致训练不稳定甚至难以收敛。为了解决这一问题,我们需要进一步降低梯度的方差。
我们看看状态动作形式的目标函数(后续有限时间步取 γ = 1 \gamma=1 γ = 1 ):
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) Q π ( s t , a t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{p_\theta(\tau)} \Big[ \sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t|s_t) \, Q^\pi(s_t, a_t) \Big]
∇ θ J ( θ ) = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) Q π ( s t , a t ) ]
前面提到,直觉上,策略梯度算法是增加好动作的概率,减少差动作的概率,好动作和坏动作评判的依据就是上面的动作值 Q π ( s t , a t ) Q^\pi(s_t, a_t) Q π ( s t , a t ) 。但是“好”和“坏”应该是相对而言的,也就是说真正起作用的是动作值的相对大小,而不是绝对大小。所以直觉上,我们可以对其做一种类似于“归一化”的操作,这样可以让梯度估计更加稳定 。
那么既然“好”和“坏”是相对而言的,我们并不需要直接使用动作值函数 Q π ( s t , a t ) Q^\pi(s_t, a_t) Q π ( s t , a t ) 的绝对数值 来作为梯度权重,而是只关心它相对于某个参考水平的高低。因此,一个自然的想法是:
在每一个状态 s t s_t s t 下,引入一个与动作无关的参考值 b ( s t ) b(s_t) b ( s t ) 作为基线(baseline),并用 Q π ( s t , a t ) − b ( s t ) Q^\pi(s_t, a_t) - b(s_t) Q π ( s t , a t ) − b ( s t ) 来替代原本的 Q π ( s t , a t ) Q^\pi(s_t, a_t) Q π ( s t , a t ) 。这样做的直觉含义是:
如果某个动作的回报 高于平均水平 (Q π ( s t , a t ) > b ( s t ) Q^\pi(s_t,a_t) > b(s_t) Q π ( s t , a t ) > b ( s t ) ),则该项为正,对应增加该动作的概率;
如果某个动作的回报 低于平均水平 (Q π ( s t , a t ) < b ( s t ) Q^\pi(s_t,a_t) < b(s_t) Q π ( s t , a t ) < b ( s t ) ),则该项为负,对应减少该动作的概率;
从而,“好动作”和“坏动作”的区分,不再依赖于绝对回报,而是依赖于相对优势 。我们就得到了如下策略梯度表达式:
E [ ∇ θ ln π θ ( a t ∣ s t ) Q π ( s t , a t ) ] = E [ ∇ θ ln π θ ( a t ∣ s t ) ( Q π ( s t , a t ) − b ( s t ) ) ] . \mathbb{E}\Big[ \nabla_\theta \ln \pi_\theta(a_t|s_t)\, Q^\pi(s_t,a_t) \Big] = \mathbb{E}\Big[ \nabla_\theta \ln \pi_\theta(a_t|s_t)\, (Q^\pi(s_t,a_t)-b(s_t)) \Big].
E [ ∇ θ ln π θ ( a t ∣ s t ) Q π ( s t , a t ) ] = E [ ∇ θ ln π θ ( a t ∣ s t ) ( Q π ( s t , a t ) − b ( s t )) ] .
当然,我们还需要证明如上表达式,我们只需要证明 E [ ∇ θ ln π θ ( a t ∣ s t ) b ( s t ) ] = 0 \mathbb{E}\Big[ \nabla_\theta \ln \pi_\theta(a_t|s_t)\, b(s_t) \Big]=0 E [ ∇ θ ln π θ ( a t ∣ s t ) b ( s t ) ] = 0 即可(参考附录证明二)。此外,不同的基线会有不同的方差,存在一个理论上最优的基线,但是其比较复杂不实用。通常一个特别自然、也是最常用的选择是 b ( s t ) = V π ( s t ) b(s_t) = V^\pi(s_t) b ( s t ) = V π ( s t ) ,即使用状态值函数 作为基线。但是状态值函数我们也是未知的,所以会引入另外一组参数 ϕ \phi ϕ 用来估计状态值函数 V ϕ ( s ) V^\phi(s) V ϕ ( s ) ,并且在采样中基于最小化均方误差更新此参数。
2.3.2 REINFORCE with baseline算法实现
则基于如上讨论,我们可以得到REINFORCE with baseline算法实现的实现。
初始化参数 :初始化策略参数 θ \theta θ ,baseline 参数(如价值函数)ϕ \phi ϕ ,用于近似 V π ( s ) V^\pi(s) V π ( s )
采样轨迹 :使用当前策略 π θ \pi_\theta π θ 与环境交互,采样完整轨迹 τ = ( s 0 , a 0 , r 0 , … , s T ) \tau = (s_0, a_0, r_0, \dots, s_T) τ = ( s 0 , a 0 , r 0 , … , s T )
计算折扣回报 :对每个时间步 t t t ,计算蒙特卡洛回报 G t = ∑ t ′ = t T γ t ′ − t r t ′ G_t = \sum_{t'=t}^T \gamma^{t'-t} r_{t'} G t = ∑ t ′ = t T γ t ′ − t r t ′
计算 baseline :使用当前的 baseline 估计 b ( s t ) = V ϕ ( s t ) b(s_t) = V_\phi(s_t) b ( s t ) = V ϕ ( s t )
估计策略梯度 :构造带 baseline 的无偏梯度估计 ∇ ^ θ J ( θ ) = ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ( G t − b ( s t ) ) \hat{\nabla}_\theta J(\theta) = \sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t | s_t) (G_t - b(s_t)) ∇ ^ θ J ( θ ) = ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ( G t − b ( s t ))
更新策略参数 :使用梯度上升更新策略 θ ← θ + α ∇ ^ θ J ( θ ) \theta \leftarrow \theta + \alpha \hat{\nabla}_\theta J(\theta) θ ← θ + α ∇ ^ θ J ( θ )
更新 baseline :通过最小化均方误差来更新价值函数参数 ϕ ← arg min ϕ ∑ t ( G t − V ϕ ( s t ) ) 2 \phi \leftarrow \arg \min_\phi \sum_t (G_t - V_\phi(s_t))^2 ϕ ← arg min ϕ ∑ t ( G t − V ϕ ( s t ) ) 2
重复步骤 2-7,直到策略收敛
2.4 Advantage actor-critic(A2C) 算法
在上一节中,我们通过为 REINFORCE 引入 baseline,显著降低了策略梯度估计的方差。然而,REINFORCE with baseline 仍然依赖完整轨迹的蒙特卡洛回报 来估计 G t G_t G t ,这意味着每一次更新都必须等待一条轨迹结束,样本效率较低(一条轨迹只更新一次),且在长时序任务中方差依然不可忽略。
一个自然的进一步问题是:能否在保持低方差优势的同时,引入更高效、更稳定的回报估计方式?
这正是 Actor–Critic 方法的出发点。其核心思想是将策略(Actor)与价值函数(Critic)显式分离:Actor 负责参数化并更新策略(也就是我们前面的策略梯度更新),Critic 通过函数逼近来估计价值函数(也就是对回报也进行类似的更新)。
在众多 Actor–Critic 变体中,A2C(Advantage Actor–Critic) 是最基础、也是最具有代表性的一类方法。它用 Critic 估计的优势函数替代蒙特卡洛回报中的 G t − V π ( s t ) G_t - V^\pi(s_t) G t − V π ( s t ) ,从而在方差、偏差和样本效率 之间取得更好的平衡,也为后续更复杂算法奠定了结构基础。接下来我们就介绍一下A2C算法的核心原理和算法实现。
2.4.1 A2C算法原理
接下来我们的目标放在了蒙特卡洛回报中的 G t − V π ( s t ) G_t - V^\pi(s_t) G t − V π ( s t ) 这一项中,我们希望用一个更加稳定、可在线估计的量来替代它。这里存在的问题是什么呢?就是这里的 G t G_t G t 值的估计会需要依赖于一条采样轨迹,一条采样完才能得到估计值并且进行一次更新,这导致效率比较低。我们有没有办法解决呢?有的,并且我们前面已经提到了,那就是用状态动作形式的策略梯度表达式:
∇ θ J ( θ ) = E p θ ( τ ) [ ∑ t = 0 T − 1 ∇ θ ln π θ ( a t ∣ s t ) ( Q π ( s t , a t ) − V π ( s t ) ) ] \nabla_\theta J(\theta) = \mathbb{E}_{p_\theta(\tau)} \Big[ \sum_{t=0}^{T-1} \nabla_\theta \ln \pi_\theta(a_t|s_t) \, \big(Q^\pi(s_t, a_t)-V^\pi(s_t)\big) \Big]
∇ θ J ( θ ) = E p θ ( τ ) [ t = 0 ∑ T − 1 ∇ θ ln π θ ( a t ∣ s t ) ( Q π ( s t , a t ) − V π ( s t ) ) ]
这一形式的本质变化在于:我们用 Q π ( s t , a t ) Q^\pi(s_t,a_t) Q π ( s t , a t ) 替代了轨迹级别的回报 G t G_t G t 。
直观来看, Q π ( s t , a t ) Q^\pi(s_t,a_t) Q π ( s t , a t ) 本身就定义为“在状态 s t s_t s t 采取动作 a t a_t a t 后的期望回报”,它只依赖于当前时间步的状态和动作,而不再显式依赖于整条具体采样轨迹。因此,在期望意义下,它承担了与 G t G_t G t 相同的角色,但作用范围从“整条轨迹”缩小到了“单个时间步” 。这带来的一个重要结果是:策略更新可以被改写为逐时间步的更新 。也就是说,只要我们在时间步 t t t 拿到了 ( s t , a t ) (s_t,a_t) ( s t , a t ) 以及对 Q π ( s t , a t ) Q^\pi(s_t,a_t) Q π ( s t , a t ) 和 V π ( s t ) V^\pi(s_t) V π ( s t ) 的估计,就可以立即构造出一个策略梯度更新方向,而不必等待后续奖励全部观测完成。这正是从“基于轨迹的更新”走向“基于时间步的更新”的关键一步。
这里得到的 Q π ( s t , a t ) − V π ( s t ) Q^\pi(s_t,a_t) - V^\pi(s_t) Q π ( s t , a t ) − V π ( s t ) 通常被定义为优势函数(Advantage Function) ,记作 A π ( s t , a t ) A^\pi(s_t, a_t) A π ( s t , a t ) ,之所以称其为“优势”,正是因为它刻画的并不是动作本身能获得多少回报,而是该动作在当前状态下,相对于该状态中“平均行为水平”的好坏程度 。从定义上看,状态值函数和动作值函数有如下关系 V π ( s t ) = E a ∼ π ( ⋅ ∣ s t ) [ Q π ( s t , a ) ] V^\pi(s_t) = \mathbb{E}_{a \sim \pi(\cdot \mid s_t)}\big[ Q^\pi(s_t, a) \big] V π ( s t ) = E a ∼ π ( ⋅ ∣ s t ) [ Q π ( s t , a ) ] ,也就是说状态值函数描述的是:在状态 s t s_t s t 下,按照当前策略 π \pi π 随机选择动作时,所能获得的期望回报。而动作值函数 Q π ( s t , a t ) Q^\pi(s_t,a_t) Q π ( s t , a t ) 则表示的是在状态 s t s_t s t 明确执行动作 a t a_t a t ,后续的期望回报是多少。因此,两者的差值,也就是优势函数 A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) A^\pi(s_t,a_t) = Q^\pi(s_t,a_t) - V^\pi(s_t) A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) ,自然具有非常清晰的含义:
当 A π ( s t , a t ) > 0 A^\pi(s_t,a_t) > 0 A π ( s t , a t ) > 0 时,说明在状态 s t s_t s t 下,动作 a t a_t a t 的表现优于当前策略下的平均动作 ,是一个“好动作”;
当 A π ( s t , a t ) < 0 A^\pi(s_t,a_t) < 0 A π ( s t , a t ) < 0 时,则说明该动作劣于平均水平 ,属于“坏动作”;
当 A π ( s t , a t ) = 0 A^\pi(s_t,a_t) = 0 A π ( s t , a t ) = 0 时,说明该动作的表现与平均行为一致,对策略改进并不起决定性作用。
然而,这种形式也引入了新的问题。为了计算优势项 A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) A^\pi(s_t,a_t) = Q^\pi(s_t,a_t) - V^\pi(s_t) A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) 我们现在同时需要估计两个价值函数 :动作值函数 Q π Q^\pi Q π 和状态值函数 V π V^\pi V π 。在连续状态空间和动作空间下,这通常意味着需要同时训练两个函数逼近器,不仅实现复杂,而且会带来额外的估计误差与不稳定性。
因此,下一步的关键问题变成了:能否在保留“基于时间步更新”这一优势的同时,避免同时显式估计动作值函数 Q π Q^\pi Q π 和状态值函数 V π V^\pi V π ? 这正是 A2C 算法接下来要解决的问题。
解决这一问题的关键在于:动作值函数并不是一个“独立”的对象 ,它可以通过状态值函数以及环境的即时奖励结构来表示。根据动作值函数的定义和 Bellman 期望方程,我们有:
Q π ( s t , a t ) = E [ r t + γ E a t + 1 ∼ π ( ⋅ ∣ s t + 1 ) [ Q π ( s t + 1 , a t + 1 ) ] ∣ s t , a t ] = E [ r t + γ V π ( s t + 1 ) ∣ s t , a t ] . \begin{aligned} Q^\pi(s_t, a_t) &= \mathbb{E}\Big[ r_t + \gamma \mathbb{E}_{a_{t+1}\sim \pi(\cdot\mid s_{t+1})} \big[ Q^\pi(s_{t+1}, a_{t+1}) \big] \Big|s_t, a_t \Big] \\ &= \mathbb{E}\Big[ r_t + \gamma V^\pi(s_{t+1}) \Big| s_t, a_t \Big]. \end{aligned}
Q π ( s t , a t ) = E [ r t + γ E a t + 1 ∼ π ( ⋅ ∣ s t + 1 ) [ Q π ( s t + 1 , a t + 1 ) ] s t , a t ] = E [ r t + γ V π ( s t + 1 ) s t , a t ] .
根据这一等式,我们可以用**“即时奖励 + 下一状态的状态值”来近似动作值函数**。也就是说,原本需要单独估计的 Q π ( s t , a t ) Q^\pi(s_t,a_t) Q π ( s t , a t ) ,现在可以通过对 V π V^\pi V π 的估计间接获得。
将这一关系代回优势函数的定义中,有:
A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) ≈ r t + γ V π ( s t + 1 ) − V π ( s t ) . \begin{aligned} A^\pi(s_t,a_t) &= Q^\pi(s_t,a_t) - V^\pi(s_t) \\ &\approx r_t + \gamma V^\pi(s_{t+1}) - V^\pi(s_t). \end{aligned}
A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) ≈ r t + γ V π ( s t + 1 ) − V π ( s t ) .
这个量正是经典的一步时序差分误差(TD error)。从结构上看,它只依赖于:
当前时间步的即时奖励 r t r_t r t ,
当前状态的价值估计 V π ( s t ) V^\pi(s_t) V π ( s t ) ,
以及下一状态的价值估计 V π ( s t + 1 ) V^\pi(s_{t+1}) V π ( s t + 1 ) 。
因此,通过这一重写,我们成功地将策略梯度中对 Q π Q^\pi Q π 的依赖,转化为了仅依赖状态值函数 V π V^\pi V π 。这意味着在 A2C 中,我们就只需要训练一个价值函数近似器(Critic),而无需再单独引入动作值函数,从而显著降低了算法的复杂度和不稳定性。也就是说在每一个时间步上,只要观测到 ( s t , a t , r t , s t + 1 ) (s_t, a_t, r_t, s_{t+1}) ( s t , a t , r t , s t + 1 ) ,就可以立即构造出优势估计并更新策略。
所以我们现在得到的策略梯度的表达式就是:
∇ θ J ( θ ) = E s t ∼ ρ π , a t ∼ π θ ( ⋅ ∣ s t ) [ A π ( s t , a t ) ∇ θ ln π θ ( a t ∣ s t ) ] , = E s t , a t [ ( r t + γ V π ( s t + 1 ) − V π ( s t ) ) ∇ θ ln π θ ( a t ∣ s t ) ] \begin{aligned} \nabla_\theta J(\theta) &= \mathbb{E}_{s_t \sim \rho_\pi, \, a_t \sim \pi_\theta(\cdot|s_t)} \Big[ A^\pi(s_t, a_t) \, \nabla_\theta \ln \pi_\theta(a_t|s_t) \Big],\\ &= \mathbb{E}_{s_t, a_t} \Big[ \big( r_t + \gamma V^\pi(s_{t+1}) - V^\pi(s_t) \big) \, \nabla_\theta \ln \pi_\theta(a_t|s_t) \Big] \end{aligned}
∇ θ J ( θ ) = E s t ∼ ρ π , a t ∼ π θ ( ⋅ ∣ s t ) [ A π ( s t , a t ) ∇ θ ln π θ ( a t ∣ s t ) ] , = E s t , a t [ ( r t + γ V π ( s t + 1 ) − V π ( s t ) ) ∇ θ ln π θ ( a t ∣ s t ) ]
当然我们也可以利用如上思想,将对于状态值函数的估计改为时序差分形式的估计,而不是我们前面使用的最小化均方误差的方法。基于时序差分(TD)思想,我们定义 TD 误差为:δ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) , \delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t), δ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) , 它表示当前状态 s t s_t s t 的实际回报(即时奖励加上折扣的下一状态值)与当前估计 V ϕ ( s t ) V_\phi(s_t) V ϕ ( s t ) 之间的差异。为了让 V ϕ ( s ) V_\phi(s) V ϕ ( s ) 更准确地逼近真实回报,我们将其参数 ϕ \phi ϕ 更新为最小化 TD 误差的平方:
L ( ϕ ) = 1 2 δ t 2 = 1 2 ( r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) ) 2 . \mathcal{L}(\phi) = \frac{1}{2} \delta_t^2 = \frac{1}{2} \big( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \big)^2.
L ( ϕ ) = 2 1 δ t 2 = 2 1 ( r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) ) 2 .
然后对 ϕ \phi ϕ 做梯度下降: ϕ ← ϕ − α v ∇ ϕ L ( ϕ ) = ϕ − α v δ t ∇ ϕ V ϕ ( s t ) , \phi \gets \phi - \alpha_v \, \nabla_\phi \mathcal{L}(\phi) = \phi - \alpha_v \, \delta_t \, \nabla_\phi V_\phi(s_t), ϕ ← ϕ − α v ∇ ϕ L ( ϕ ) = ϕ − α v δ t ∇ ϕ V ϕ ( s t ) , 其中 α v \alpha_v α v 是状态值函数的学习率。通过反复更新,状态值函数会逐步逼近每个状态的期望回报,从而为策略梯度中的优势函数提供稳定估计。
2.4.2 A2C算法实现
则基于如上讨论,我们可以得到A2C算法实现的实现。
初始化
策略网络参数:θ \theta θ
状态值网络参数:ϕ \phi ϕ
学习率:α π \alpha_\pi α π (策略),α v \alpha_v α v (值函数)
与环境交互采样
在当前策略 π θ \pi_\theta π θ 下,执行动作 a t ∼ π θ ( ⋅ ∣ s t ) a_t \sim \pi_\theta(\cdot | s_t) a t ∼ π θ ( ⋅ ∣ s t )
获得奖励 r t r_t r t 和下一状态 s t + 1 s_{t+1} s t + 1
收集一段长度为 T T T 的轨迹或采样一小批次数据
计算优势函数
利用时序差分(TD)形式近似动作值:A ^ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) \hat{A}_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) A ^ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t )
A ^ t \hat{A}_t A ^ t 即优势函数,衡量动作 a t a_t a t 相对于当前状态的好坏
更新策略参数(Actor)
策略梯度更新公式:θ ← θ + α π ∇ θ log π θ ( a t ∣ s t ) A ^ t \theta \leftarrow \theta + \alpha_\pi \nabla_\theta \log \pi_\theta(a_t | s_t) \hat{A}_t θ ← θ + α π ∇ θ log π θ ( a t ∣ s t ) A ^ t
更新状态值函数参数(Critic)
梯度下降更新状态值网络:ϕ ← ϕ − α v ( r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) ) ∇ ϕ V ϕ ( s t ) \phi \leftarrow \phi - \alpha_v \left( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \right) \nabla_\phi V_\phi(s_t) ϕ ← ϕ − α v ( r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) ) ∇ ϕ V ϕ ( s t )
重复步骤 2-5,直至策略收敛或达到训练轮数上限
2.5 小结
简单总结一下这一部分,策略梯度方法的最基础形式是 REINFORCE,它直接从强化学习目标出发,通过采样完整轨迹来估计梯度并更新策略,实现“高回报动作概率增大、低回报动作概率减小”。然而,REINFORCE 存在显著问题:梯度估计方差大 且每条轨迹只更新一次 ,导致训练不稳定、样本效率低。为了解决方差问题,引入了 baseline 的思想 ,即通过减去一个与动作无关的参考值(通常使用状态值函数),形成优势函数,从而得到 REINFORCE with baseline,这一改进显著降低了梯度方差,但仍依赖完整轨迹,更新效率受限。进一步的改进思路是将优势函数与状态值函数结合,通过时序差分(TD)估计来替代轨迹级回报,实现基于每个时间步的即时更新 ,这就是 A2C 方法的核心思想。它在保留低方差优势的同时,提高了样本利用效率,并为更复杂的算法奠定了基础。
3 Trust Region Policy Optimization
在前面的讨论中,我们通过 REINFORCE、REINFORCE with baseline 以及 A2C 等方法逐步改进了策略梯度的方差问题,并引入了基于时间步的优势函数估计,提高了样本效率和训练稳定性。然而,在实际运用中发现,这些方法在更新策略时仍然使用简单的梯度上升,缺乏对策略变化幅度的约束,可能导致策略更新过大,从而引发性能崩溃或不稳定 。为了解决这一问题,TRPO(Trust Region Policy Optimization)算法应运而生。TRPO 的核心思想是引入可信域约束(trust region) ,在每次策略更新时限制新旧策略的分布差异,从而在保持策略改进的同时保证训练稳定性,为大规模和高维策略优化提供了更加可靠的框架。但是TRPO的具体实现比较复杂,但是其核心想法具有十分重要的影响,是后续一系列算法的基础。综合考虑下,接下来我们将介绍其核心思想和直观解释,对于部分深入的细节这里不做探究。
3.1 TRPO 算法核心原理
前面提到,之前我们讨论的算法面临的一个主要问题是:更新策略时仍然使用简单的梯度上升,缺乏对策略变化幅度的约束,可能导致策略更新过大,从而引发性能崩溃或不稳定。为了解决这个问题,我们希望在每次更新策略时能够控制步伐,使策略参数变化不至于太大 ,同时又能确保策略性能有所提升。我们把这个想法形式化一下,即希望在 θ k + 1 \theta_{k+1} θ k + 1 接近 θ k \theta_k θ k 的前提下满足性能单调提升的条件 J ( θ k + 1 ) ≥ J ( θ k ) J(\theta_{k+1}) \ge J(\theta_k) J ( θ k + 1 ) ≥ J ( θ k ) 。
为了达到如上目的,其涉及到两个策略效果的比较,我们需要刻画两个策略之间的关系,这样可以帮助我们分析如上问题。幸运的是,强化学习中有一个重要的等式可以做到这一点,下面进行介绍。
3.1.1 刻画两个策略的差异
则如上所述,我们需要理解两个策略之间的关系,找出描述它们差异的等式或不等式,从而为后续分析提供基础。幸运的是,我们有一个非常直观的关系式,给定两个策略,新策略 π θ \pi_\theta π θ 和旧策略 π θ 0 \pi_{\theta_0} π θ 0 :
J ( θ ) − J ( θ 0 ) = E τ ∼ ( p 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t A π θ 0 ( s t , a t ) ] = E τ ∼ π θ [ ∑ t = 0 T − 1 γ t A π θ 0 ( s t , a t ) ] = ∑ t = 0 T − 1 γ t E τ ∼ π θ [ A π θ 0 ( s t , a t ) ] = ∑ t = 0 T − 1 γ t ∑ s P π θ ( s t = s ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) = ∑ s ( ∑ t = 0 T − 1 γ t P π θ ( s t = s ) ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) = ∑ s ρ π θ ( s ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) , \begin{aligned}
J(\theta)-J(\theta_0)
&=
\mathbb{E}_{\tau \sim (p_0, \pi_\theta, p)} \Big[ \sum_{t=0}^{T-1} \gamma^t A^{\pi_{\theta_0}}(s_t, a_t) \Big] \\
&=
\mathbb{E}_{\tau\sim\pi_\theta}
\left[
\sum_{t=0}^{T-1}\gamma^t A^{\pi_{\theta_0}}(s_t,a_t)
\right] \\
&=
\sum_{t=0}^{T-1}\gamma^t
\mathbb{E}_{\tau\sim\pi_\theta}
\left[
A^{\pi_{\theta_0}}(s_t,a_t)
\right] \\
&=
\sum_{t=0}^{T-1}\gamma^t
\sum_s P_{\pi_\theta}(s_t=s)
\sum_a \pi_\theta(a\mid s)\,A^{\pi_{\theta_0}}(s,a) \\
&=
\sum_s
\left(
\sum_{t=0}^{T-1}\gamma^t P_{\pi_\theta}(s_t=s)
\right)
\sum_a \pi_\theta(a\mid s)\,A^{\pi_{\theta_0}}(s,a) \\
&=
\sum_s \rho_{\pi_\theta}(s)\sum_a \pi_\theta(a\mid s)\,A^{\pi_{\theta_0}}(s,a),
\end{aligned}
J ( θ ) − J ( θ 0 ) = E τ ∼ ( p 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t A π θ 0 ( s t , a t ) ] = E τ ∼ π θ [ t = 0 ∑ T − 1 γ t A π θ 0 ( s t , a t ) ] = t = 0 ∑ T − 1 γ t E τ ∼ π θ [ A π θ 0 ( s t , a t ) ] = t = 0 ∑ T − 1 γ t s ∑ P π θ ( s t = s ) a ∑ π θ ( a ∣ s ) A π θ 0 ( s , a ) = s ∑ ( t = 0 ∑ T − 1 γ t P π θ ( s t = s ) ) a ∑ π θ ( a ∣ s ) A π θ 0 ( s , a ) = s ∑ ρ π θ ( s ) a ∑ π θ ( a ∣ s ) A π θ 0 ( s , a ) ,
这里需要注意这里,期望是针对新策略 π θ \pi_\theta π θ 采样的轨迹,而优势函数 A π θ 0 A^{\pi_{\theta_0}} A π θ 0 是基于旧策略 π θ 0 \pi_{\theta_0} π θ 0 的。这可以直观地理解为:
“新策略的性能 = 旧策略的性能 + 新策略在旧策略优势函数下的期望累积优势”。
接下来说明其核心想法和推导过程。
推导这一关系的核心思想在于观察轨迹生成过程。任何轨迹都是由初始状态分布 ρ 0 \rho_0 ρ 0 、环境转移概率 p p p 和策略 π \pi π 共同决定的。不同策略只会影响 π \pi π ,而不会改变 ρ 0 \rho_0 ρ 0 和 p p p 。换句话说,对于不同策略,( r t , s t + 1 ) ∼ p ( ⋅ ∣ s t , a t ) (r_t, s_{t+1}) \sim p(\cdot | s_t, a_t) ( r t , s t + 1 ) ∼ p ( ⋅ ∣ s t , a t ) 以及 s 0 ∼ ρ 0 s_0 \sim \rho_0 s 0 ∼ ρ 0 始终保持不变。基于这个观察,进一步我们就希望有一个表达式,满足基于 ( s t , a t ) (s_t,a_t) ( s t , a t ) 这一状态动作对,根据 p ( ⋅ ∣ s t , a t ) p(\cdot|s_t,a_t) p ( ⋅ ∣ s t , a t ) 产生一个与下一步的状态 s t + 1 s_{t+1} s t + 1 相关的量。一个符合如上过程的式子,就是 Q π ( s t , a t ) = E ( r t , s t + 1 ) ∼ p ( ⋅ ∣ s t , a t ) [ r t + γ V π ( s t + 1 ) ] Q^\pi(s_t,a_t)=\mathbb{E}_{(r_t,s_{t+1})\sim p(\cdot|s_t,a_t)}\big[r_t+\gamma V^\pi(s_{t+1})\big] Q π ( s t , a t ) = E ( r t , s t + 1 ) ∼ p ( ⋅ ∣ s t , a t ) [ r t + γ V π ( s t + 1 ) ] ,这个式子意味着对于任意一个策略产生的轨迹,我们都可以利用如上式子去改写原有的奖励值(因为奖励值直接由 p p p 产生,而另外的 Q π Q^\pi Q π 和 V π V^\pi V π 都还依赖于另外的策略)。
则对于 J ( θ ) J(\theta) J ( θ ) 而言,我们就可以利用上式将其改写为和 J ( θ 0 ) J(\theta_0) J ( θ 0 ) 有关的式子,具体方式则是在 r t r_t r t 上利用上式子拼凑一下;然后我们会引入和 V π θ 0 ( s ) V^{\pi_{\theta_0}}(s) V π θ 0 ( s ) 相关的量,但是这个量的系数有折扣因子,可以构建所谓的“望远镜”结构(类似于 ∑ t = 0 T − 1 ( a t − a t + 1 ) = a 0 − a T \sum_{t=0}^{T-1} (a_t - a_{t+1}) = a_0 - a_T ∑ t = 0 T − 1 ( a t − a t + 1 ) = a 0 − a T ,这样两两相叠加,展开相减只剩头尾),我们把他展开以后引入一个量进行两两抵消就会发现其就是 J ( θ 0 ) J(\theta_0) J ( θ 0 ) ,具体推导如下:
J ( θ ) = E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t r t ] = E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t ( r t + γ V π θ 0 ( s t + 1 ) − γ V π θ 0 ( s t + 1 ) ) ] = E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t ( Q π θ 0 ( s t , a t ) − γ V π θ 0 ( s t + 1 ) + V π θ 0 ( s t ) − V π θ 0 ( s t ) ) ] = E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t ( Q π θ 0 ( s t , a t ) − V π θ 0 ( s t ) ) ] + E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t ( − γ V π θ 0 ( s t + 1 ) + V π θ 0 ( s t ) ) ] = E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t A π θ 0 ( s t , a t ) ] + E τ ∼ ( ρ 0 , π θ , p ) [ V π θ 0 ( s 0 ) ] = E τ ∼ ( ρ 0 , π θ , p ) [ ∑ t = 0 T − 1 γ t A π θ 0 ( s t , a t ) ] + J ( θ 0 ) \begin{aligned} J(\theta)&=\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^tr_t\big]\\ &=\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^t(r_t+\gamma V^{\pi_{\theta_0}}(s_{t+1})-\gamma V^{\pi_{\theta_0}}(s_{t+1}))\big]\\ &=\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^t(Q^{\pi_{\theta_0}}(s_t,a_t)-\gamma V^{\pi_{\theta_0}}(s_{t+1})+V^{\pi_{\theta_0}}(s_t)-V^{\pi_{\theta_0}}(s_t))\big]\\ &=\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^t(Q^{\pi_{\theta_0}}(s_t,a_t)-V^{\pi_{\theta_0}}(s_t))\big]+\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^t(-\gamma V^{\pi_{\theta_0}}(s_{t+1})+V^{\pi_{\theta_0}}(s_t))\big]\\ &=\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^tA^{\pi_{\theta_0}}(s_t,a_t)\big]+\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[V^{\pi_{\theta_0}}(s_0)\big]\\ &=\mathbb{E}_{\tau\sim(\rho_0,\pi_\theta,p)}\big[\sum_{t=0}^{T-1}\gamma^tA^{\pi_{\theta_0}}(s_t,a_t)\big]+J(\theta_0) \end{aligned}
J ( θ ) = E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t r t ] = E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t ( r t + γ V π θ 0 ( s t + 1 ) − γ V π θ 0 ( s t + 1 )) ] = E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t ( Q π θ 0 ( s t , a t ) − γ V π θ 0 ( s t + 1 ) + V π θ 0 ( s t ) − V π θ 0 ( s t )) ] = E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t ( Q π θ 0 ( s t , a t ) − V π θ 0 ( s t )) ] + E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t ( − γ V π θ 0 ( s t + 1 ) + V π θ 0 ( s t )) ] = E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t A π θ 0 ( s t , a t ) ] + E τ ∼ ( ρ 0 , π θ , p ) [ V π θ 0 ( s 0 ) ] = E τ ∼ ( ρ 0 , π θ , p ) [ t = 0 ∑ T − 1 γ t A π θ 0 ( s t , a t ) ] + J ( θ 0 )
基于此,我们可以将目标函数表示为基于另一个策略的优势函数的期望累积值,而旧策略性能 J ( θ 0 ) J(\theta_0) J ( θ 0 ) 是固定的。由此,我们的优化目标可以转化为 最大化新策略在旧策略优势函数下的期望累积优势 ,从而在保证策略更新幅度不大的同时,实现单调的性能提升。这也是 TRPO 架构设计的理论基础。
3.1.2 代理目标函数(surrogate objective function)
基于如上推导,再引入折扣状态访问度量,我们可以将期望部分展开,得到等价的表达式
J ( θ ) = J ( θ 0 ) + ∑ s ρ π θ ( s ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) J(\theta)=J(\theta_0)+\sum_s\rho_{\pi_\theta}(s)\sum_a\pi_\theta(a|s)\,A^{\pi_{\theta_0}}(s,a) J ( θ ) = J ( θ 0 ) + ∑ s ρ π θ ( s ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) ,其中 ρ π θ ( s ) \rho_{\pi_\theta}(s) ρ π θ ( s ) 表示在策略 π θ \pi_\theta π θ 下折扣意义下访问状态 s s s 的频率。从这个形式可以清楚地看出,新策略的性能提升来自于两部分:
一是它在各个状态下选择动作的方式 π θ ( a ∣ s ) \pi_\theta(a|s) π θ ( a ∣ s )
二是它在这些状态上的访问分布 ρ π θ ( s ) \rho_{\pi_\theta}(s) ρ π θ ( s )
然而,正是第二点带来了实际优化中的困难,因为 ρ π θ \rho_{\pi_\theta} ρ π θ 本身依赖于策略参数 θ \theta θ ,而且这种依赖是通过环境动力学多步递推产生的,是一个高阶、隐式的依赖关系,直接对其进行优化在计算和分析上都非常棘手。
为了解决这一问题,TRPO 引入了一个关键的近似思想:在策略更新步幅足够小的前提下,新策略和旧策略在状态访问分布上的差异是有限的 。因此,我们可以用旧策略的状态访问分布 ρ π θ 0 \rho_{\pi_{\theta_0}} ρ π θ 0 来近似 ρ π θ \rho_{\pi_\theta} ρ π θ ,从而将目标函数简化为 L θ 0 ( θ ) = J ( θ 0 ) + ∑ s ρ π θ 0 ( s ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) . L_{\theta_0}(\theta) =J(\theta_0)+\sum_s\rho_{\pi_{\theta_0}}(s)\sum_a\pi_\theta(a|s)\,A^{\pi_{\theta_0}}(s,a). L θ 0 ( θ ) = J ( θ 0 ) + ∑ s ρ π θ 0 ( s ) ∑ a π θ ( a ∣ s ) A π θ 0 ( s , a ) . 这个函数被称为代理目标函数(surrogate objective function) 。
它的核心作用在于:用一个低阶、结构清晰、易于优化的函数,近似原本依赖于长期状态分布、难以直接处理的真实目标函数 J ( θ ) J(\theta) J ( θ ) 。在这个代理目标中,复杂的策略–环境长期交互已经被“冻结”在旧策略的状态分布和优势函数中,而优化变量只剩下当前策略 π θ \pi_\theta π θ 本身,这使得后续分析和优化成为可能。
3.1.3 限制策略变化幅度——Trust Region Constraint
当然,如上近似隐含的前提是: π θ \pi_\theta π θ 与 π θ 0 \pi_{\theta_0} π θ 0 不能相差太远,否则这里的近似就会失效。正因如此,TRPO 在代理目标函数的基础上,引入了一个衡量新旧策略差异的约束项(在原论文中使用的是 KL 散度)。这个约束可以被理解为:限制每次策略更新的幅度,从而保证代理目标对真实目标的近似是可信的 。
进一步地,在策略变化被 KL 散度严格限制的情况下,可以证明代理目标函数减去一个与 KL 散度成正比的惩罚项,是原始目标函数 J ( θ ) J(\theta) J ( θ ) 的一个下界。即,存在常数 C > 0 C>0 C > 0 ,使得 J ( θ ) ≥ L θ 0 ( θ ) − C ⋅ D K L max ( π θ 0 ∥ π θ ) J(\theta)\;\ge\; L_{\theta_0}(\theta) - C \cdot D^{\max}_{\mathrm{KL}}(\pi_{\theta_0}\,\|\,\pi_\theta) J ( θ ) ≥ L θ 0 ( θ ) − C ⋅ D KL m a x ( π θ 0 ∥ π θ ) 这一步非常关键:它将“策略更新不能太大”从一种经验性直觉,转化为一个严格的函数下界。(在接下来MM算法的语境下,也可以说右边这一项才是真正的代理目标函数,因为这才是下界函数,但是后面这个约束项在后续中存在多种性质,不一定被显式地写在表达式里面,但是我们关注的优化目标还是 L θ 0 ( θ ) L_{\theta_0}(\theta) L θ 0 ( θ ) 这一项 ,所以我们还是用这种说法)
在如上讨论的支撑下,我们得到的方法符合MM(Minorize-Maximizationn)算法的条件了。接下来就是每次迭代找到原目标函数的一个下界函数(也就是 L θ 0 ( θ ) − C ⋅ D K L max ( π θ 0 ∥ π θ ) L_{\theta_0}(\theta) - C \cdot D^{\max}_{\mathrm{KL}}(\pi_{\theta_0}\,\|\,\pi_\theta) L θ 0 ( θ ) − C ⋅ D KL m a x ( π θ 0 ∥ π θ ) 这一项,假设前一轮迭代得到参数 θ k \theta_k θ k ),求下界函数的最大值得到参数 θ k + 1 \theta_{k+1} θ k + 1 ,然后重复。这样通过合理的近似与受控的更新步长,在实践中实现稳定、单调改进的策略优化过程。
简单说一下MM算法的核心思想,就是当原目标函数较难优化时,MM算法不直接对原目标函数求最优解,而去求解逼近于原目标函数的一个易于优化的代理目标函数,通过对这个代理函数求解,使得代理目标函数的最优解逼近于原目标函数的最优解。每迭代一次,根据所求解构造用于下一次迭代的新的替代函数,然后对新的替代函数最优化求解得到下一次迭代的求解。
但是这里不对这个过程进行进一步的详细介绍,因为这个MM算法不太实用。虽然其有性能改进的保证,但是更新的步长会比较小。所以我们接下来正式介绍TRPO实用版本下的优化问题。
则我们将原来的 D K L max ( π θ 0 ∥ π θ ) D^{\max}_{\mathrm{KL}}(\pi_{\theta_0}\,\|\,\pi_\theta) D KL m a x ( π θ 0 ∥ π θ ) 这一限制变成一项约束,也就是要求 D K L max ( π θ 0 ∥ π θ ) < δ D^{\max}_{\mathrm{KL}}(\pi_{\theta_0}\,\|\,\pi_\theta)<\delta D KL m a x ( π θ 0 ∥ π θ ) < δ ,这就是置信域限制(Trust Region Constraints) 。但是因为其需要限制每一个状态点的差异,这在连续状态空间会不太好办。我们将其用平均KL散度近似代替,也就是 D ‾ KL ρ ( θ 1 , θ 2 ) : = E s ∼ ρ [ D KL ( π θ 1 ( ⋅ ∣ s ) ∥ π θ 2 ( ⋅ ∣ s ) ) ] . \overline{D}_{\text{KL}}^\rho(\theta_1, \theta_2) := \mathbb{E}_{s \sim \rho} \left[ D_{\text{KL}}\left( \pi_{\theta_1}(\cdot|s) \parallel \pi_{\theta_2}(\cdot|s) \right) \right]. D KL ρ ( θ 1 , θ 2 ) := E s ∼ ρ [ D KL ( π θ 1 ( ⋅ ∣ s ) ∥ π θ 2 ( ⋅ ∣ s ) ) ] . 这样我们就得到了TRPO算法下的优化问题:
maximize θ L θ old ( θ ) subject to D ‾ KL ρ θ old ( θ old , θ ) ≤ δ . \begin{aligned}\underset{\theta}{\text{maximize}} \quad & L_{\theta_{\text{old}}}(\theta) \\\text{subject to} \quad & \overline{D}_{\text{KL}}^{\rho_{\theta_{\text{old}}}}(\theta_{\text{old}}, \theta) \leq \delta.\end{aligned}
θ maximize subject to L θ old ( θ ) D KL ρ θ old ( θ old , θ ) ≤ δ .
3.1.4 基于采样改写目标函数——重要性采样
基于前面的推导,通过代理目标函数并结合策略差异约束,我们已经能够在理论上保证策略更新的稳定性。然而,在将这一目标真正落实到基于采样的优化过程 中时,还存在一个关键的实践问题需要解决。回顾我们得到的代理目标函数: L θ old ( θ ) = J ( θ old ) + ∑ s ρ π θ old ( s ) ∑ a π θ ( a ∣ s ) A π θ old ( s , a ) . L_{\theta_{\text{old}}}(\theta)= J(\theta_{\text{old}}) + \sum_s \rho_{\pi_{\theta_{\text{old}}}}(s) \sum_a \pi_\theta(a|s)A^{\pi_{\theta_{\text{old}}}}(s,a). L θ old ( θ ) = J ( θ old ) + ∑ s ρ π θ old ( s ) ∑ a π θ ( a ∣ s ) A π θ old ( s , a ) . 从形式上可以看到,这个目标函数存在一个“分布不一致”的问题:
状态分布 ρ π θ old ( s ) \rho_{\pi_{\theta_{\text{old}}}}(s) ρ π θ old ( s ) 来自旧策略 π θ old \pi_{\theta_{\text{old}}} π θ old ;
动作分布 却使用了新策略 π θ ( a ∣ s ) \pi_\theta(a|s) π θ ( a ∣ s ) 。
但是在实际采样过程中,我们只能从旧策略 π θ old \pi_{\theta_{\text{old}}} π θ old 与环境交互获得数据,即采样得到的是 s ∼ ρ π θ old , a ∼ π θ old ( a ∣ s ) s \sim \rho_{\pi_{\theta_{\text{old}}}}, a \sim \pi_{\theta_{\text{old}}}(a|s) s ∼ ρ π θ old , a ∼ π θ old ( a ∣ s ) 而无法直接从 π θ ( a ∣ s ) \pi_\theta(a|s) π θ ( a ∣ s ) 采样动作。因此,代理目标函数在当前形式下是不可直接估计的 。为了解决这一问题,TRPO 引入了 **重要性采样(importance sampling)**的思想。其核心做法是:在保持采样分布不变(仍然使用旧策略采样)的前提下,通过一个概率比值来“修正”期望中动作分布的变化
具体而言,我们利用恒等式: π θ ( a ∣ s ) = π θ old ( a ∣ s ) π θ ( a ∣ s ) π θ old ( a ∣ s ) \pi_\theta(a|s)= \pi_{\theta_{\text{old}}}(a|s) \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} π θ ( a ∣ s ) = π θ old ( a ∣ s ) π θ old ( a ∣ s ) π θ ( a ∣ s ) ,将代理目标函数改写为:
L θ old ( θ ) = J ( θ old ) + ∑ s ρ π θ old ( s ) ∑ a π θ old ( a ∣ s ) π θ ( a ∣ s ) π θ old ( a ∣ s ) A π θ old ( s , a ) . \begin{aligned} L_{\theta_{\text{old}}}(\theta) &= J(\theta_{\text{old}}) + \sum_s \rho_{\pi_{\theta_{\text{old}}}}(s) \sum_a \pi_{\theta_{\text{old}}}(a|s) \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} A^{\pi_{\theta_{\text{old}}}}(s,a). \end{aligned}
L θ old ( θ ) = J ( θ old ) + s ∑ ρ π θ old ( s ) a ∑ π θ old ( a ∣ s ) π θ old ( a ∣ s ) π θ ( a ∣ s ) A π θ old ( s , a ) .
这样一来,目标函数中的状态和动作都服从 π θ old \pi_{\theta_{\text{old}}} π θ old ,从而可以完全通过旧策略采样得到的轨迹来估计 ,而新策略 π θ \pi_\theta π θ 仅通过重要性权重 π θ ( a ∣ s ) π θ old ( a ∣ s ) \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} π θ old ( a ∣ s ) π θ ( a ∣ s ) 体现出来。将上述表达式写成期望形式,就得到了 TRPO 实际优化的问题:
maximize θ E s ∼ ρ π θ old , a ∼ π θ old [ π θ ( a ∣ s ) π θ old ( a ∣ s ) A θ old ( s , a ) ] subject to E s ∼ ρ π θ old [ D KL ( π θ old ( ⋅ ∣ s ) ∥ π θ ( ⋅ ∣ s ) ) ] ≤ δ . \begin{aligned}\underset{\theta}{\text{maximize}} \quad & \mathbb{E}_{s \sim \rho_{\pi_{\theta_{\text{old}}}}, a \sim \pi_{\theta_{\text{old}}}} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} A_{\theta_{\text{old}}}(s, a) \right] \\\text{subject to} \quad & \mathbb{E}_{s \sim \rho_{\pi_{\theta_{\text{old}}}}} \left[ D_{\text{KL}}\left( \pi_{\theta_{\text{old}}}(\cdot|s) \parallel \pi_\theta(\cdot|s) \right) \right] \leq \delta.\end{aligned}
θ maximize subject to E s ∼ ρ π θ old , a ∼ π θ old [ π θ old ( a ∣ s ) π θ ( a ∣ s ) A θ old ( s , a ) ] E s ∼ ρ π θ old [ D KL ( π θ old ( ⋅ ∣ s ) ∥ π θ ( ⋅ ∣ s ) ) ] ≤ δ .
3.1.5补充
无论是 TRPO 还是 PPO,它们之所以只能 用 π θ old \pi_{\theta_{\text{old}}} π θ old 与环境交互采样,而无法直接从 π θ \pi_\theta π θ 采样,主要受制于以下三大维度的不可抗力:因果律(时间悖论)、环境的黑盒属性,以及算法对数据复用(Sample Efficiency)的极度渴望。
1. 物理层面的“时间悖论”:新策略还不存在
这是一个最直观的工程现实:
采样的目的 是为了收集数据(计算优势函数 A A A ),从而计算出梯度,来更新得到 π θ \pi_\theta π θ 。
如果你要用 π θ \pi_\theta π θ 去采样,前提是你得先有 π θ \pi_\theta π θ 。
但 π θ \pi_\theta π θ 是优化阶段的结果。在还没开始优化、正在与环境互动的那个时间点,我们手里唯一完整、可用、且参数确定的模型 ,就只有 π θ old \pi_{\theta_{\text{old}}} π θ old 。
这就像是“鸡和蛋”的问题:没有数据就没法优化出 π θ \pi_\theta π θ ,没有 π θ \pi_\theta π θ 就没法用 π θ \pi_\theta π θ 采样。所以,只能拿手头的 π θ old \pi_{\theta_{\text{old}}} π θ old 去干活。
2. 环境的“黑盒”属性:无法预测的 ρ π θ \rho_{\pi_\theta} ρ π θ
这是最核心的数学原因。在强化学习中,我们要最大化的是新策略的期望回报 η ( π θ ) \eta(\pi_\theta) η ( π θ ) 。
根据 Kakade & Langford (2002) 提出的经典恒等式,新策略的回报可以精确展开为:
η ( π θ ) = η ( π θ old ) + E s ∼ ρ π θ , a ∼ π θ [ A π θ old ( s , a ) ] \eta(\pi_\theta) = \eta(\pi_{\theta_{\text{old}}}) + \mathbb{E}_{s \sim \rho_{\pi_\theta}, a \sim \pi_\theta}[A_{\pi_{\theta_{\text{old}}}}(s, a)]
η ( π θ ) = η ( π θ old ) + E s ∼ ρ π θ , a ∼ π θ [ A π θ old ( s , a )]
注意看期望里的下标,这里有两个致命的麻烦:
动作采样 a ∼ π θ a \sim \pi_\theta a ∼ π θ :这个好解决,我们可以用重要性采样(Importance Sampling) ,把期望转变成 E a ∼ π θ old [ π θ π θ old A ] \mathbb{E}_{a \sim \pi_{\theta_{\text{old}}}} [\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}} A] E a ∼ π θ old [ π θ old π θ A ] 。
状态分布 s ∼ ρ π θ s \sim \rho_{\pi_\theta} s ∼ ρ π θ :这是绝对无法通过数学手段转换的死胡同!
环境的动态转移概率 P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t) P ( s t + 1 ∣ s t , a t ) 对算法来说是一个黑盒。只有真正让一个策略去环境里跑一圈,环境才会告诉你这个策略会遇到哪些状态 s s s 。
因为 π θ \pi_\theta π θ 是新策略,它的行为逻辑和 π θ old \pi_{\theta_{\text{old}}} π θ old 不一样,它可能会走到悬崖边,也可能会原地打转。我们绝对无法在不与环境交互的情况下,凭空算出或模拟出 ρ π θ \rho_{\pi_\theta} ρ π θ (新策略的状态分布)。
TRPO/PPO/TAPO 的破局之法:
既然求不出 s ∼ ρ π θ s \sim \rho_{\pi_\theta} s ∼ ρ π θ ,数学家们做了一个大胆的局部近似(Local Approximation) :
只要我们能用 KL 散度(Trust Region)保证新策略 π θ \pi_\theta π θ 和老策略 π θ old \pi_{\theta_{\text{old}}} π θ old 不要差得太远,那么它们在环境里溜达时遇到的状态分布也会非常接近。
于是,数学目标被强行替换成了替代目标(Surrogate Objective) :
L π θ old ( π θ ) = η ( π θ old ) + E s ∼ ρ π θ old , a ∼ π θ [ A π θ old ( s , a ) ] L_{\pi_{\theta_{\text{old}}}}(\pi_\theta) = \eta(\pi_{\theta_{\text{old}}}) + \mathbb{E}_{s \sim \rho_{\pi_{\theta_{\text{old}}}}, a \sim \pi_\theta}[A_{\pi_{\theta_{\text{old}}}}(s, a)]
L π θ old ( π θ ) = η ( π θ old ) + E s ∼ ρ π θ old , a ∼ π θ [ A π θ old ( s , a )]
这就是为什么你看到的状态 s s s 必须从 ρ π θ old \rho_{\pi_{\theta_{\text{old}}}} ρ π θ old 中采样! 因为只有 ρ π θ old \rho_{\pi_{\theta_{\text{old}}}} ρ π θ old 对应的数据是我们刚刚跑完环境切实拿在手里的,而 ρ π θ \rho_{\pi_\theta} ρ π θ 存在于不可知的未来。
3. 数据复用机制:冻结采样,多次优化
退一万步讲,假设我们采取最极端的做法:让 π θ \pi_\theta π θ 每走一步(更新一次微小的梯度),就立刻变成新的 π θ old \pi_{\theta_{\text{old}}} π θ old ,然后再去环境里采样一步。这样不就能几乎做到“直接从 π θ \pi_\theta π θ 采样”了吗?
可以,这叫纯粹的 On-policy(如传统的 REINFORCE 算法) 。但这会带来毁灭性的后果:极度低效(Sample Inefficiency) 。
与环境交互(比如跑物理仿真、或者让大模型生成回答打分)的成本是极其昂贵的。如果你采一次样只更新一次参数就扔掉,显卡大半的时间都在等环境返回数据。
TAPO/PPO 这些算法被发明出来的初衷,就是为了“榨干一批数据的价值”:
我们用 π θ old \pi_{\theta_{\text{old}}} π θ old 跑到环境里一口气收集一大批数据(比如 4000 步)。
我们把这批数据死死冻结(固定住 s s s 和 a a a )。
我们在这批数据上,让新模型 π θ \pi_\theta π θ 连续更新 4 到 10 个 Epoch。
在这个持续优化的过程中,π θ \pi_\theta π θ 在不断变化,但它脚下的基石(训练数据)必须是稳固不变的,只能是最初 π θ old \pi_{\theta_{\text{old}}} π θ old 探明的那条路。
3.2 小结
如上最终形式清楚地体现了 TRPO 的两条核心思想:
目标函数层面 :在旧策略采样到的数据上,通过重要性采样权重,评估新策略在旧策略优势函数下的表现,从而推动策略向“高优势动作”方向更新。
约束层面 :通过对新旧策略的平均 KL 散度加以限制,严格控制每一次策略更新的幅度,确保代理目标函数的近似是可信的,从而为策略性能的单调改进提供理论保障。
至此,TRPO 将“稳定的理论目标”“可实现的采样估计”和“受控的策略更新”三者统一在了一个清晰的优化框架之中。
这里简单直观地讨论一下如上式子的意义,总的来说:
TRPO 的目标函数,本质上是在“不偏离旧策略太多”的前提下,让新策略更倾向于那些在旧策略下被证明是“好动作”的行为。这里的变量是 θ \theta θ ,而由于 θ old \theta_{\text{old}} θ old 是固定的,所以 π θ old ( a ∣ s ) , A θ old ( s , a ) \pi_{\theta_{\text{old}}}(a|s),A_{\theta_{\text{old}}}(s, a) π θ old ( a ∣ s ) , A θ old ( s , a ) 也是固定的。我们一般认为优势函数代表这个动作比平均水平好还是差,当 A θ old ( s , a ) > 0 A_{\theta_{\text{old}}}(s, a)>0 A θ old ( s , a ) > 0 时意味着动作好于平均水平,而当 A θ old ( s , a ) < 0 A_{\theta_{\text{old}}}(s, a)<0 A θ old ( s , a ) < 0 时意味着动作差于平均水平。则要增大TRPO的目标函数,我们就需要增大好动作对应的概率,降低坏动作对应的概率。所以TRPO的目标函数就是要让新策略更倾向于那些在旧策略下被证明是“好动作”的行为 。
而后面的约束条件就是不允许新策略与旧策略差异太大,做较为保守的改进,避免一次更新把策略推到“灾难性区域”。
尽管 TRPO 在理论上为策略优化提供了单调改进的保证 ,但其实际求解过程仍然较为复杂。具体而言,TRPO 需要将“最大化代理目标函数”与“KL 散度约束”组合成一个带约束的优化问题,并借助二阶近似、共轭梯度法以及线搜索等一系列数值优化技巧来近似求解。这不仅对实现提出了较高要求,也显著增加了工程复杂度和计算开销。因此,在实际应用中,TRPO 往往较难作为一个通用、易复现的算法被广泛采用。
正是基于这一现实背景,后续PPO(Proximal Policy Optimization)被提出,作为对 TRPO 的一种更易实现但思想一脉相承的改进方案。
4 Proximal Policy Optimization
如上所述,PPO(Proximal Policy Optimization)作为对 TRPO 的一种更易实现但思想一脉相承的改进方案被提出,接下来我们会看见其依然保留了TRPO的核心思想和组件——**代理目标函数、限制策略变化幅度、采样策略(重要性采样)**等。
4.0 引入
作为TRPO一脉相承的算法,PPO 的核心目标并未改变:依然希望在每一次策略更新中,限制新旧策略之间的差异 ,从而避免过大的策略跳跃,保证训练过程的稳定性和性能的持续提升。不同之处在于,PPO 试图用更加简单、直接的方式来实现这一目标,而不再显式地求解一个复杂的约束优化问题。
在原始 PPO 论文中,作者提出了两种实现这一思想的具体方法:
PPO-Penalty :
该方法将 TRPO 中的 KL 散度约束转化为目标函数中的一个惩罚项,即在原有的代理目标函数上减去一个与新旧策略 KL 散度成正比的惩罚项。惩罚系数会根据当前策略更新是否过大进行动态调整,从而在一定程度上控制策略变化幅度。这种做法在思想上与 TRPO 较为接近,但在实践中对惩罚系数的调节较为敏感,稳定性和效果并不总是理想。
PPO-Clip :
该方法不再显式引入 KL 散度项,而是通过对重要性采样比值进行裁剪(clipping),直接限制策略更新对目标函数的影响范围。其做法更加简单、直观,并且避免了额外超参数(如惩罚系数)的复杂调节。
大量实验结果表明,PPO-Clip 在实现复杂度更低的情况下,能够达到与 TRPO 相当甚至更优的性能表现 ,并且在不同任务和超参数设置下表现出更强的鲁棒性。因此,在实际使用和后续研究中,PPO 通常默认指的就是 PPO-Clip 方法。
基于这一原因,接下来的讨论将重点围绕 PPO-Clip 展开,进一步说明其目标函数形式、直观含义以及相较于 TRPO 的关键简化之处。
4.1 PPO 算法核心原理
如上所述,PPO 算法继承了 TRPO 的核心理念——保守的策略改进(conservative policy improvement) ,同时对关键组件进行了更直接、更易实现的改造。理解 PPO,我们一样可以从之前提到的三个核心维度来把握:代理目标函数、策略变化幅度的限制方式,以及采样与更新策略的改进 。
4.1.1 代理目标函数:延续 TRPO 的核心出发点
和TRPO 一样,PPO 的出发点依然是:直接优化真实目标函数 J ( θ ) J(\theta) J ( θ ) 过于复杂,因此引入一个代理目标函数(surrogate objective) ,在“旧策略附近”对真实目标进行近似。在形式上,PPO 仍然使用基于重要性采样的代理目标,即通过比例项 r ( θ ) = π θ ( a ∣ s ) π θ old ( a ∣ s ) r(\theta) = \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} r ( θ ) = π θ old ( a ∣ s ) π θ ( a ∣ s ) ,来衡量新旧策略在同一状态动作对上的差异,并结合优势函数 A ^ t \hat A_t A ^ t ,刻画“新策略是否在旧策略认为好的方向上进行调整”。
4.1.2 限制策略变化幅度:从 KL 约束到 Clip 操作
TRPO 的关键在于 Trust Region :通过对新旧策略的 KL 散度加约束,保证策略更新“不要走太远”。但这一约束导致了复杂的二阶优化过程。
而 PPO 的核心创新在于:不再显式引入 KL 约束,而是直接在目标函数层面对策略变化幅度进行限制。 具体来说,PPO 不去约束整体分布的 KL 散度,而是关注更直接的量——重要性采样比值 r ( θ ) r(\theta) r ( θ ) 。直觉上:
当 r ( θ ) ≈ 1 r(\theta) \approx 1 r ( θ ) ≈ 1 时,新旧策略接近;
当 r ( θ ) r(\theta) r ( θ ) 偏离 1 过多时,说明策略变化过大。
PPO 的做法是:限制 r ( θ ) r(\theta) r ( θ ) 不要偏离 1 太多 ,即通过裁剪(clip)操作将其限制在 [ 1 − ε , 1 + ε ] [1-\varepsilon, 1+\varepsilon] [ 1 − ε , 1 + ε ] 的区间内。注意这一裁剪是和优势函数符号结合的,原来的代理目标函数期望算子内的项为 r ( θ ) A ^ t r(\theta)\hat A_t r ( θ ) A ^ t ,而裁剪操作就是控制前面的 r ( θ ) r(\theta) r ( θ ) :
C l i p ε ( π θ ( a ∣ s ) π θ k ( a ∣ s ) , A ^ t ) = { min ( π θ ( a ∣ s ) π θ k ( a ∣ s ) , 1 + ε ) A ^ t if A ^ t ≥ 0 max ( π θ ( a ∣ s ) π θ k ( a ∣ s ) , 1 − ε ) A ^ t if A ^ t < 0 \mathcal{Clip}_\varepsilon\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}, \hat{A}_t \right) = \begin{cases} \min\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}, 1+\varepsilon \right) \hat{A}_t & \text{if } \hat{A}_t \geq 0 \\ \max\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}, 1-\varepsilon \right) \hat{A}_t & \text{if } \hat{A}_t < 0 \end{cases}
C l i p ε ( π θ k ( a ∣ s ) π θ ( a ∣ s ) , A ^ t ) = ⎩ ⎨ ⎧ min ( π θ k ( a ∣ s ) π θ ( a ∣ s ) , 1 + ε ) A ^ t max ( π θ k ( a ∣ s ) π θ ( a ∣ s ) , 1 − ε ) A ^ t if A ^ t ≥ 0 if A ^ t < 0
当 A ^ t > 0 \hat A_t > 0 A ^ t > 0 时,限制“变好”的幅度,防止过度放大优势;
当 A ^ t < 0 \hat A_t < 0 A ^ t < 0 时,限制“变差”的幅度,防止策略被过度惩罚。
因此,PPO 的 Clip 机制本质上做了两件事:
隐式限制了新旧策略的差异 (对应 TRPO 的 Trust Region 思想);
保留了代理目标函数的结构 ,仍然在“旧策略优势”的指导下进行优化。
需要强调的是,Clip 并不是简单地“限制所有变化”,而是只对目标函数的有效提升部分进行裁剪 ,也就是限制“变好”的情况,使得当策略偏移过大时,继续更新不再带来额外收益,从而自然“刹车”。但是如上式子没有限制“变坏”的情况,因为其在目标函数层面已经做了这个事情了。
另外,如上式子更常见的表达形式是 min ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) \min(r_t(\theta)\hat{A}_t, clip(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t) min ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ,而最后我们基于此得到的目标函数就是:
L C L I P ( θ ) = E ^ t [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{CLIP}(\theta) = \hat{\mathbb{E}}_t\left[\min(r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t)\right]
L C L I P ( θ ) = E ^ t [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ]
也就是把原来里面求期望的项改为Clip操作对应的目标即可。
4.1.3 采样与更新策略:从单次更新到多轮迭代
在 TRPO 中,虽然通过重要性采样可以使用由 π θ old \pi_{\theta_{\text{old}}} π θ old 采集的数据,但由于策略偏移是通过 KL 约束在外部控制的,一旦多次复用同一批轨迹,策略可能迅速偏离旧策略,使代理目标的近似失效。
而 PPO 的 Clip 目标函数本身就内置了对策略偏移幅度的限制 。一旦策略变化过大,目标函数便进入“平台区”,梯度不再推动策略继续偏移。这一特性带来了一个非常重要的工程优势:同一批由旧策略采集的轨迹,可以被安全地多次使用。
因此,PPO 可以采用:
多个 epoch 的更新;
mini-batch 随机梯度下降;
显著提高样本利用率,而不必担心策略偏移失控。
从直观角度看,PPO 的目标函数就像被“削平了顶部”:无论优势信号多大,只要更新超过一定范围,收益就不再增加,这使得训练过程更加稳定、可控。这一点我们可以参考原PPO论文中展示的图片,这里的Clip操作会使得目标函数有一个顶峰,再多也不能超过了:
4.2 PPO 算法实现
4.2.1 优势函数的估计——广义优势估计(GAE)
在前面的算法中,我们都会使用到对于优势函数的估计。我们前面主要介绍了两种估计方式,基于蒙特卡洛估计的,也就是采样一条轨迹以后计算累积折扣奖励,这样更新的效率会低一些;基于时序差分的,也就是通过一步估计+价值函数估计的方法实现,这样更新的效率会高一些。
但是我们还没有讨论一个现实情况,也就是价值函数的估计一开始是不准确的,如果直接使用会导致估计值存在一定的偏差。我们重新从方差与偏差的角度看待一下如上两种方式。
蒙特卡洛估计,其基于完整轨迹,使用 A t ≈ G t − V ( s t ) A_t \approx G_t - V(s_t) A t ≈ G t − V ( s t ) 估计, 其中 G t G_t G t 是从时间步 t t t 开始的累计折扣回报。这种方法的特点在于:
偏差较小 :在采样轨迹充分、价值函数准确或作为 baseline 时,G t G_t G t 是对真实回报的无偏估计;
方差极大 :因为回报 G t G_t G t 会受到后续所有随机性的影响;
从偏差–方差的角度看,这是一个低偏差、高方差 的估计方式。
单步时序差分估计,则使用一步 TD 误差构造优势:A t ≈ r t + γ V ( s t + 1 ) − V ( s t ) . A_t \approx r_t + \gamma V(s_{t+1}) - V(s_t). A t ≈ r t + γ V ( s t + 1 ) − V ( s t ) . 这种方式的特点在于:
方差较小 :只依赖一步奖励和当前的价值函数;
偏差极大 :优势的估计高度依赖于价值函数 V ( s ) V(s) V ( s ) 的估计;但是在训练早期,价值函数往往估计不准,这种偏差会被直接传递到策略更新中。
那么是否存在一种更加折中的方法,能够在偏差和方差之间进行连续调节?可以的,这一方法就是广义优势估计(Generalized Advantage Estimation, GAE) 。
则单步时序差分估计使用的是一步 TD 误差,那我们使用 n 步 TD 误差就可以得到对应的 n 步优势估计: A ^ t ( n ) = ∑ l = 0 n − 1 γ l r t + l + γ n V ( s t + n ) − V ( s t ) . \hat{A}_t^{(n)} = \sum_{l=0}^{n-1} \gamma^l r_{t+l} + \gamma^n V(s_{t+n}) - V(s_t). A ^ t ( n ) = ∑ l = 0 n − 1 γ l r t + l + γ n V ( s t + n ) − V ( s t ) . 可以看出,当 n = 1 n=1 n = 1 的时候就是我们的单步时序差分估计,而当 n → ∞ n\to\infty n → ∞ 的时候就是蒙特卡洛估计。可以得到当 n n n 越来越大的时候,估计的方差会越来越大,偏差会越来越小。
另外,上述形式可以进一步改写为一系列 TD 误差的加权和。一步 TD 误差为 δ t = r t + γ V ( s t + 1 ) − V ( s t ) . \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t). δ t = r t + γ V ( s t + 1 ) − V ( s t ) . 将 A ^ t ( n ) \hat{A}_t^{(n)} A ^ t ( n ) 展开后,可以得到一个等价表达: A ^ t ( n ) = ∑ l = 0 n − 1 γ l δ t + l . \hat{A}_t^{(n)} = \sum_{l=0}^{n-1} \gamma^l \, \delta_{t+l}. A ^ t ( n ) = ∑ l = 0 n − 1 γ l δ t + l .
既然不同步数的多步 TD 优势各有优缺点,一个更合理的做法不是“选其中某一个”,而是将所有步数的估计进行加权融合 。GAE 正是基于这一思想提出的,我们使用指数加权衰减加权平均 ,引入衰减因子 λ \lambda λ 得到:
A ^ t GAE ( γ , λ ) = ∑ k = 1 ∞ ( 1 − λ ) λ k − 1 A ^ t ( k ) . \hat{A}_t^{\text{GAE}(\gamma,\lambda)} = \sum_{k=1}^{\infty} (1-\lambda)\lambda^{k-1} \hat{A}_t^{(k)}.
A ^ t GAE ( γ , λ ) = k = 1 ∑ ∞ ( 1 − λ ) λ k − 1 A ^ t ( k ) .
将前面的表达式代入到这里的优势估计并展开计算后,可以得到一个等价且更直观的形式:
A ^ t GAE = ∑ l = 0 ∞ ( γ λ ) l δ t + l . \hat{A}_t^{\text{GAE}} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \, \delta_{t+l}.
A ^ t GAE = l = 0 ∑ ∞ ( γ λ ) l δ t + l .
那这里的关键超参数就是 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ ∈ [ 0 , 1 ] ,它控制了不同时间尺度信息的权重分配,起到了和原来的 n n n 类似的作用,但是由于其是一个连续数值,会更加平滑:
当 λ \lambda λ 较小时,权重集中在短期 TD 误差上,估计更稳定但偏差较大;
当 λ \lambda λ 较大时,远期 TD 误差的权重增大,估计更接近蒙特卡洛回报,偏差更小但方差更大。
4.2.2 PPO 算法
则基于如上讨论,我们可以得到PPO算法的实现:
5 Group Relative Policy Optimization
接下来我们介绍GRPO(Group Relative Policy Optimization) 算法,它进一步保留了PPO方法的核心思路,同时在实现上做出了进一步的简化和效率改进。与传统的 PPO 或其他策略梯度方法不同,GRPO提升效率的关键在于省去了独立的价值函数(critic)网络 ,并通过对 同一策略生成的一组样本(或输出)进行“群体相对比较” 的方式来构造优势信号,从而引导策略更新。
5.1 GRPO 算法原理
之前讨论的PPO算法,其为了进行优势估计,通常需要额外训练一个单独的价值函数(critic)来估计状态值 V ( s ) V(s) V ( s ) 并计算优势函数(如通过 GAE),这种价值网络在实际大模型的情况下的规模有可能与策略网络规模相似,这就会导致如下缺点:
Critic 网络消耗额外显存与计算资源;
价值估计不准确会直接影响优势估计,并进而影响策略更新稳定性
PPO 的价值网络与策略网络往往需要协调训练,导致整体训练复杂度更高
而GRPO算法,其通过**组内相对奖励归一化(group-relative normalization)**来直接估计优势,不再依赖显式训练的价值网络,从而大幅降低计算成本和内存消耗。我们重点则阐述其如何对优势进行估计的。另外GRPO最初产生影响的情景是在大模型中,所以接下来会涉及到一些大模型的术语,但是理解其核心即可。
5.1.1 群体式采样与奖励比较
之前我们使用PPO等算法,在大模型场景中可能使用单点输出,也就是一个状态/上下文生成一个输出,也就是一条轨迹。但是 GRPO 采取的是群体采样的策略,也就是对每个输入上下文生成 一组候选输出 (例如多个候选回答或行为),记为 { o 1 , o 2 , … , o G } . \{o_1, o_2, \ldots, o_G\}. { o 1 , o 2 , … , o G } . 对于这组输出中的每一个,都通过某种打分机制(规则、模型或人类偏好)得到对应的原始奖励 r i r_i r i
然后在这组内部将奖励进行归一化处理,例如用组内平均值与标准差来构造群体相对优势 :
A ^ i = r i − mean ( { r j } ) std ( { r j } ) + ϵ \hat{A}_i = \frac{r_i - \text{mean}(\{r_j\})}{\text{std}(\{r_j\}) + \epsilon}
A ^ i = std ({ r j }) + ϵ r i − mean ({ r j })
其中 mean 和 std 分别是组内奖励的平均值与标准差, ϵ \epsilon ϵ 用于数值稳定。这样得到的优势是相对于样本组内部其他成员的表现差异 ,而不再依赖于某个单独估值网络。
5.1.2 奖励的获取与归一化
如上介绍了GRPO估计优势函数的大致思路,但是具体实现上我们会有不同的奖励的获取和归一化方式,具体阐述如下:
在大模型的场景中,这里奖励的获得与归一化方式主要有两种:
Outcome Supervision(结果监督)
对每个问题 q q q ,从旧策略 π θ old \pi_{\theta_{\text{old}}} π θ old 采样一组输出 { o 1 , o 2 , … , o G } \{o_1, o_2, \dots, o_G\} { o 1 , o 2 , … , o G } 。
使用奖励模型(reward model)对每个完整输出 o i o_i o i 给出一个最终奖励 r i r_i r i 。
此时我们对奖励进行归一化的方式就是: r ~ i = r i − mean ( r ) std ( r ) + ϵ \tilde{r}_i = \frac{r_i - \text{mean}(\bold{r})}{\text{std}(\bold{r}) + \epsilon} r ~ i = std ( r ) + ϵ r i − mean ( r )
每个输出的所有 token 的优势函数统一设为这个输出对应的组内归一化奖励:A ^ i , t = A ^ i \hat{A}_{i,t} = \hat{A}_i A ^ i , t = A ^ i ,这样做也就是意味着一个输出的每个token的优势函数都是相同的值,这是可以理解的,因为我们奖励只有最后一步才产生,中间步数的奖励都是0,所以token对应的优势函数虽然是接下来步骤的奖励和,实际上只有最后一步奖励。
Process Supervision(过程监督)
适用于复杂任务(如数学推理),在每个推理步骤结束时提供奖励。与前面不同,这里中间步也有奖励,所以在优势函数的计算上不太一样。
对每个输出 o i o_i o i 的每个步骤 j j j ,奖励模型给出步骤奖励 r index ( j ) i r_{\text{index}(j)}^i r index ( j ) i ,进一步考虑所有奖励并进行归一化,我们可以得到 r ~ index ( j ) i = r index ( j ) i − mean ( r ) std ( r ) + ϵ \tilde{r}_{\text{index}(j)}^i = \frac{r_{\text{index}(j)}^i - \text{mean}(\bold{r})}{\text{std}(\bold{r}) + \epsilon} r ~ index ( j ) i = std ( r ) + ϵ r index ( j ) i − mean ( r )
此时每个 token 的优势函数为其后续步骤奖励的累积和:A ^ i , t = ∑ j : index ( j ) ≥ t r ~ index ( j ) i \hat{A}_{i,t} = \sum_{j:\text{index}(j)\ge t} \tilde{r}_{\text{index}(j)}^i A ^ i , t = ∑ j : index ( j ) ≥ t r ~ index ( j ) i
5.1.3 KL散度的估计
在大模型的情景下,我们除了在目标函数中通过裁剪操作限制更新过程中的新旧策略差异外,还需要防止策略模型过度优化奖励模型(reward model),因为大模型是经过预训练加监督微调的,强化学习如果过度可能导致其损失预训练过程中获取的知识,所以我们还需要限制其和监督微调后的模型 π ref \pi_{\text{ref}} π ref 的差距。
PPO的做法是在每个 token 的奖励中引入了 KL 惩罚项:r t = r ϕ ( q , o ≤ t ) − β log π θ ( o t ∣ q , o < t ) π ref ( o t ∣ q , o < t ) r_t = r_\phi(q, o_{\le t}) - \beta \log \frac{\pi_\theta(o_t \mid q, o_{<t})}{\pi_{\text{ref}}(o_t \mid q, o_{<t})} r t = r ϕ ( q , o ≤ t ) − β log π ref ( o t ∣ q , o < t ) π θ ( o t ∣ q , o < t )
其中, π ref \pi_{\text{ref}} π ref 通常是初始的 SFT 模型, β \beta β 为惩罚系数。其目的就是通过惩罚当前策略与参考策略的偏离,限制策略更新幅度,避免生成的输出偏离原有合理分布过大,从而保持训练稳定。
而 GRPO 的做法则是将 KL 正则从 reward 中剥离,直接在目标函数中对策略进行正则化:L KL = β D KL ( π θ ∥ π ref ) L_{\text{KL}} = \beta \, D_{\text{KL}}(\pi_\theta \,\|\, \pi_{\text{ref}}) L KL = β D KL ( π θ ∥ π ref ) ,但是我们也不能直接得到KL散度的值,还是得进行估计,GRPO采取的是一个
无偏估计器计算 KL 散度:
D KL ( π θ ∥ π ref ) = π ref ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − log π ref ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − 1 D_{\text{KL}}(\pi_\theta \,\|\, \pi_{\text{ref}}) = \frac{\pi_{\text{ref}}(o_{i,t} \mid q, o_{i,<t})}{\pi_\theta(o_{i,t} \mid q, o_{i,<t})} - \log \frac{\pi_{\text{ref}}(o_{i,t} \mid q, o_{i,<t})}{\pi_\theta(o_{i,t} \mid q, o_{i,<t})} - 1
D KL ( π θ ∥ π ref ) = π θ ( o i , t ∣ q , o i , < t ) π ref ( o i , t ∣ q , o i , < t ) − log π θ ( o i , t ∣ q , o i , < t ) π ref ( o i , t ∣ q , o i , < t ) − 1
这样做就避免了在 reward 上引入复杂的 KL 修正,简化了优势函数 A ^ i , t \hat{A}_{i,t} A ^ i , t 的计算。但是效果上,仍然可以约束新策略与参考策略的偏离,类似于 PPO 中通过 KL 或 Clip 限制更新幅度的作用,但实现上更直接、更稳定。
5.1.4 目标函数
综上,我们可以得到在大模型上下文下GRPO的目标函数如下:
J GRPO ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min [ π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) A ^ i , t , clip ( π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) , 1 − ε , 1 + ε ) A ^ i , t ] − β D KL [ π θ ∥ π ref ] } \begin{aligned} \mathcal{J}_{\text{GRPO}}(\theta) &= \mathbb{E}\left[ q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{\text{old}}}(O|q) \right] \\ &\quad \frac{1}{G} \sum_{i=1}^G \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \left\{ \min\left[ \frac{\pi_\theta(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t}|q, o_{i,<t})} \hat{A}_{i,t}, \text{clip}\left( \frac{\pi_\theta(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t}|q, o_{i,<t})}, 1-\varepsilon, 1+\varepsilon \right) \hat{A}_{i,t} \right] - \beta \mathbb{D}_{\text{KL}}[\pi_\theta \parallel \pi_{\text{ref}}] \right\} \end{aligned}
J GRPO ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] G 1 i = 1 ∑ G ∣ o i ∣ 1 t = 1 ∑ ∣ o i ∣ { min [ π θ old ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) A ^ i , t , clip ( π θ old ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) , 1 − ε , 1 + ε ) A ^ i , t ] − β D KL [ π θ ∥ π ref ] }
我们可以看到其基于PPO算法的主要改进就是把优势函数改为组内相对奖励归一化的估计,并且将原本处于奖励上的限制新策略与参考策略的偏离的KL散度项直接改到目标函数中**。**
5.2 GRPO算法实现
则我们可以得到GRPO算法实现如下(来源于GRPO方法原论文):
参考文献
[1] Murphy, Kevin. 《Reinforcement Learning: An Overview》. arXiv:2412.05265. 预印本, arXiv, 2025年12月1日. https://doi.org/10.48550/arXiv.2412.05265 .
[2] Schulman, John, Sergey Levine, Philipp Moritz, Michael I. Jordan和Pieter Abbeel. 《Trust Region Policy Optimization》. arXiv:1502.05477. 预印本, arXiv, 2017年4月20日. https://doi.org/10.48550/arXiv.1502.05477 .
[3] Schulman, John, Filip Wolski, Prafulla Dhariwal, Alec Radford和Oleg Klimov. 《Proximal Policy Optimization Algorithms》. arXiv:1707.06347. 预印本, arXiv, 2017年8月28日. https://doi.org/10.48550/arXiv.1707.06347 .
[4] Shao, Zhihong, Peiyi Wang, Qihao Zhu, 等. 《DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models》. arXiv:2402.03300. 预印本, arXiv, 2024年4月27日. https://doi.org/10.48550/arXiv.2402.03300 .
附录
证明一
命题: 当 t > t ′ t>t' t > t ′ 时,有:
E p θ ( τ ) [ ∇ θ log π θ ( a t ∣ s t ) γ t ′ r t ′ ] = 0 \boxed{ \mathbb{E}_{p_\theta(\tau)} \left[ \nabla_\theta \log \pi_\theta(a_t \mid s_t)\gamma^{t'} r_{t'} \right] =0}
E p θ ( τ ) [ ∇ θ log π θ ( a t ∣ s t ) γ t ′ r t ′ ] = 0
证明: 当 t > t ′ t>t' t > t ′ 时,我们设 τ ( t ) = ( s 0 , a 0 , r 0 , ⋯ , s t ) \tau^{(t)}=(s_0, a_0, r_0, \cdots, s_t) τ ( t ) = ( s 0 , a 0 , r 0 , ⋯ , s t ) ,则我们可以将上式期望按时间步 t t t 处分解为条件期望(这里依据概率论中 E [ X ] = E [ E [ X ] ∣ Y ] \mathbb{E}[X]=\mathbb{E}\big[\mathbb{E}[X]\mid Y\big] E [ X ] = E [ E [ X ] ∣ Y ] ,以及 E [ X f ( Y ) ∣ Y ] = f ( Y ) E [ X ∣ Y ] \mathbb E[Xf(Y)|Y] = f(Y)\mathbb E[X|Y] E [ X f ( Y ) ∣ Y ] = f ( Y ) E [ X ∣ Y ] 这两条性质,理解其含义即可):E p θ ( τ ) [ ∇ θ log π θ ( a t ∣ s t ) γ t ′ r t ′ ] = E [ γ t ′ r t ′ E [ ∇ θ log π θ ( a t ∣ s t ) ∣ τ ( t ) ] ] . \mathbb{E}_{p_\theta(\tau)}\big[\nabla_\theta \log \pi_\theta(a_t\mid s_t)\gamma^{t'} r_{t'}\big] = \mathbb{E} \Big[ \gamma^{t'} r_{t'} \mathbb{E} \big[ \nabla_\theta \log \pi_\theta(a_t\mid s_t) \mid \tau^{(t)} \big] \Big]. E p θ ( τ ) [ ∇ θ log π θ ( a t ∣ s t ) γ t ′ r t ′ ] = E [ γ t ′ r t ′ E [ ∇ θ log π θ ( a t ∣ s t ) ∣ τ ( t ) ] ] . 接下来计算内层条件期望,对任意给定状态 s t s_t s t ,有:
E a t ∼ π θ ( ⋅ ∣ s t ) [ ∇ θ log π θ ( a t ∣ s t ) ] = ∑ a t π θ ( a t ∣ s t ) , ∇ θ log π θ ( a t ∣ s t ) = ∑ a t ∇ θ π θ ( a t ∣ s t ) = ∇ θ ∑ a t π θ ( a t ∣ s t ) = ∇ θ 1 = 0. \begin{aligned} \mathbb{E}_{a_t\sim\pi_\theta(\cdot\mid s_t)} \big[ \nabla_\theta \log \pi_\theta(a_t\mid s_t) \big] &= \sum_{a_t} \pi_\theta(a_t\mid s_t), \nabla_\theta \log \pi_\theta(a_t\mid s_t) \\ &= \sum_{a_t} \nabla_\theta \pi_\theta(a_t\mid s_t) \\ &= \nabla_\theta \sum_{a_t} \pi_\theta(a_t\mid s_t) \\ &= \nabla_\theta 1 \\ &= 0. \end{aligned}
E a t ∼ π θ ( ⋅ ∣ s t ) [ ∇ θ log π θ ( a t ∣ s t ) ] = a t ∑ π θ ( a t ∣ s t ) , ∇ θ log π θ ( a t ∣ s t ) = a t ∑ ∇ θ π θ ( a t ∣ s t ) = ∇ θ a t ∑ π θ ( a t ∣ s t ) = ∇ θ 1 = 0.
代回外层期望后可得原式值为0.
证明二(Baseline 项的期望为零)
命题: 若 b ( s t ) b(s_t) b ( s t ) 为任意仅依赖于状态 s t s_t s t 、与动作 a t a_t a t 无关的函数,则有:
E p θ ( τ ) [ ∇ θ ln π θ ( a t ∣ s t ) b ( s t ) ] = 0. \boxed{ \mathbb{E}_{p_\theta(\tau)} \Big[ \nabla_\theta \ln \pi_\theta(a_t \mid s_t) b(s_t) \Big] = 0. }
E p θ ( τ ) [ ∇ θ ln π θ ( a t ∣ s t ) b ( s t ) ] = 0.
证明: 设 τ ( t ) = ( s 0 , a 0 , r 0 , … , s t ) \tau^{(t)} = (s_0, a_0, r_0, \dots, s_t) τ ( t ) = ( s 0 , a 0 , r 0 , … , s t ) ,则我们可以将轨迹期望在时间步 t t t 处分解为条件期望。根据概率论中 E [ X ] = E [ E [ X ∣ Y ] ] , E [ X f ( Y ) ∣ Y ] = f ( Y ) E [ X ∣ Y ] , \mathbb{E}[X] = \mathbb{E}\big[\mathbb{E}[X \mid Y]\big], \mathbb{E}[X f(Y) \mid Y] = f(Y)\mathbb{E}[X \mid Y], E [ X ] = E [ E [ X ∣ Y ] ] , E [ X f ( Y ) ∣ Y ] = f ( Y ) E [ X ∣ Y ] , 有:
E p θ ( τ ) [ ∇ θ ln π θ ( a t ∣ s t ) b ( s t ) ] = E [ b ( s t ) E [ ∇ θ ln π θ ( a t ∣ s t ) ∣ τ ( t ) ] ] . \begin{aligned} \mathbb{E}_{p_\theta(\tau)} \Big[ \nabla_\theta \ln \pi_\theta(a_t \mid s_t)\, b(s_t) \Big] &= \mathbb{E} \Big[ b(s_t)\, \mathbb{E} \big[ \nabla_\theta \ln \pi_\theta(a_t \mid s_t) \mid \tau^{(t)} \big] \Big]. \end{aligned}
E p θ ( τ ) [ ∇ θ ln π θ ( a t ∣ s t ) b ( s t ) ] = E [ b ( s t ) E [ ∇ θ ln π θ ( a t ∣ s t ) ∣ τ ( t ) ] ] .
接下来计算内层条件期望。由于在给定 τ ( t ) \tau^{(t)} τ ( t ) 后,状态 s t s_t s t 已确定,动作 a t a_t a t 仅由策略 π θ ( ⋅ ∣ s t ) \pi_\theta(\cdot \mid s_t) π θ ( ⋅ ∣ s t ) 采样,因此有:
E a t ∼ π θ ( ⋅ ∣ s t ) [ ∇ θ ln π θ ( a t ∣ s t ) ] = ∑ a t π θ ( a t ∣ s t ) ∇ θ ln π θ ( a t ∣ s t ) = ∑ a t ∇ θ π θ ( a t ∣ s t ) = ∇ θ ∑ a t π θ ( a t ∣ s t ) = ∇ θ 1 = 0. \begin{aligned} \mathbb{E}_{a_t \sim \pi_\theta(\cdot \mid s_t)} \big[ \nabla_\theta \ln \pi_\theta(a_t \mid s_t) \big] &= \sum_{a_t} \pi_\theta(a_t \mid s_t)\, \nabla_\theta \ln \pi_\theta(a_t \mid s_t) \\ &= \sum_{a_t} \nabla_\theta \pi_\theta(a_t \mid s_t) \\ &= \nabla_\theta \sum_{a_t} \pi_\theta(a_t \mid s_t) \\ &= \nabla_\theta 1 \\ &= 0. \end{aligned}
E a t ∼ π θ ( ⋅ ∣ s t ) [ ∇ θ ln π θ ( a t ∣ s t ) ] = a t ∑ π θ ( a t ∣ s t ) ∇ θ ln π θ ( a t ∣ s t ) = a t ∑ ∇ θ π θ ( a t ∣ s t ) = ∇ θ a t ∑ π θ ( a t ∣ s t ) = ∇ θ 1 = 0.
将该结果代回外层期望,可得原式值为0.