强化学习策略梯度

强化学习策略梯度

本文是一篇学习笔记,主要参考 OpenAI SpiningUp 文档和李宏毅老师的强化学习课程。

本文将首先推导强化学习策略梯度最简单的形式,然后对这个最简形式进行一些改造优化,最终得到我们实际中使用的标准策略梯度实现。

推导最简单的策略梯度

推导思路

我们这里考虑一个随机的、参数化的策略 π θ \pi_\theta πθ,我们的目标是最大化期望回报 J ( π θ ) = E τ ∼ π θ [ R ( τ ) ] J(\pi_\theta)=\mathbb{E}_{\tau\sim\pi_\theta}[R(\tau)] J(πθ)=Eτπθ[R(τ)]。期望回报 J ( π θ ) J(\pi_\theta) J(πθ) 是指按照特定的策略 π θ \pi_\theta πθ 采取动作所得到的最终累积回报的期望,最大化这个期望回报是强化学习的终极目标。

要注意,我们要最大化的是整个轨迹 τ \tau τ 的期望回报 R ( τ ) R(\tau) R(τ),而非某个单步的奖励 r t r_t rt,这是因为强化学习的终极目标应当是最终整体任务的结果,而非单步的奖励。

想象在电子游戏中,我们操作战斗机有左右移动和开火三个动作,移动到合适的位置并开火会得到更高的分数,但是移动这个单步动作本身是不会得到任何分数的,如果以单步的奖励为优化目标,战斗机就永远不会移动,而只能站在原地开火了,这显然不是我们想要的。在围棋、电子游戏等多个强化学习的应用场景中都是这样的,这也称为奖励延迟(reward delay)问题。

我们希望通过梯度上升来优化策略,其形如:
θ k + 1 = θ k + α ∇ θ J ( π θ ) ∣ θ k \theta_{k+1}=\theta_k+\alpha\nabla_\theta J(\pi_\theta)|_{\theta_k} \notag \\ θk+1=θk+αθJ(πθ)θk
策略的期望回报 J J J 关于参数 θ \theta θ 的梯度 ∇ θ J ( π θ ) \nabla_\theta J(\pi_\theta) θJ(πθ) 就称为策略梯度(Policy Gradient),以这种方式优化策略的算法被称为策略梯度算法,比如 Vanilla Policy Gradient、TRPO、PPO 这些一般都被称为策略梯度算法(虽然这么说稍微有点不准确)。

要实际使用这个算法,我们需要一个可以进行数值计算的策略梯度的表达式。这包括两个步骤:1)推导出策略梯度的解析解,这个解应当是一个期望的形式,2)通过有限数量的智能体-环境交互的数据,计算该期望值的样本估计。

推导过程

首先,我们给出轨迹 τ \tau τ 的概率。轨迹 τ \tau τ 是指在给定初始状态 s 0 s_0 s0 的情况下,智能体 π θ \pi_\theta πθ 根据状态采样出动作,环境根据当前状态和动作转移到新的状态,并给出一定的奖励,这样不断循环往复,直至终止状态 s T s_T sT,最终得到的状态-动作-奖励序列,就是轨迹 τ = { s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T , a T , r T } \tau=\{s_0,a_0,r_0,s_1,a_1,r_1,\dots,s_T,a_T,r_T\} τ={s0,a0,r0,s1,a1,r1,,sT,aT,rT}

由于我们考虑的是随机的参数化策略 π θ \pi_\theta πθ,所以每一个轨迹 τ \tau τ 都是有可能被采样出来的。现在我们写出给定策略 π θ \pi_\theta πθ,轨迹 τ \tau τ 被采样出来的概率,就是按照上面的描述进行转移概率的累乘:
P ( τ ∣ θ ) = ρ 0 ( s 0 ) ∏ t = 0 T P ( s t + 1 ∣ s t , a t ) π θ ( a t ∣ s t ) (1) P(\tau|\theta)=\rho_0(s_0)\prod_{t=0}^T P(s_{t+1}|s_t,a_t)\pi_\theta(a_t|s_t) \tag{1} \\ P(τθ)=ρ0(s0)t=0TP(st+1st,at)πθ(atst)(1)
然后,对轨迹 τ \tau τ 的概率进行一番处理,取对数并求关于参数 θ \theta θ 的梯度:
P ( τ ∣ θ ) = ρ 0 ( s 0 ) ∏ t = 0 T P ( s t + 1 ∣ s t , a t ) π θ ( a t ∣ s t ) log ⁡ P ( τ ∣ θ ) = log ⁡ ρ 0 ( s 0 ) + ∑ t = 0 T ( log ⁡ P ( s t + 1 ∣ s t , a t ) + log ⁡ π θ ( a t ∣ s t ) ) 取对数 ∇ θ log ⁡ P ( τ ∣ θ ) = ∇ θ log ⁡ ρ 0 ( s 0 ) + ∑ t = 0 T ( ∇ θ log ⁡ P ( s t + 1 ∣ s t , a t ) + ∇ θ log ⁡ π θ ( a t ∣ s t ) ) 对  θ  求梯度 ∇ θ log ⁡ P ( τ ∣ θ ) = 0 + ∑ t = 0 T ( 0 + ∇ θ log ⁡ π θ ( a t ∣ s t ) ) = ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ) P  和  ρ 0  都与  θ  无关,因此梯度为  0 \begin{aligned} P(\tau|\theta)&=\rho_0(s_0)\prod_{t=0}^T P(s_{t+1}|s_t,a_t)\pi_\theta(a_t|s_t) \\ \log P(\tau|\theta)&=\log\rho_0(s_0)+\sum_{t=0}^T(\log P(s_{t+1}|s_t,a_t)+\log\pi_\theta(a_t|s_t)) \quad 取对数 \\ \nabla_\theta\log P(\tau|\theta)&=\nabla_\theta\log\rho_0(s_0)+\sum_{t=0}^T(\nabla_\theta\log P(s_{t+1}|s_t,a_t)+\nabla_\theta\log\pi_\theta(a_t|s_t)) \quad 对\ \theta\ 求梯度 \\ \nabla_\theta \log P(\tau|\theta)&=0+\sum_{t=0}^T(0+\nabla_\theta\log\pi_\theta(a_t|s_t))=\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)) \quad P\ 和\ \rho_0\ 都与\ \theta\ 无关,因此梯度为\ 0 \end{aligned} \notag \\ P(τθ)logP(τθ)θlogP(τθ)θlogP(τθ)=ρ0(s0)t=0TP(st+1st,at)πθ(atst)=logρ0(s0)+t=0T(logP(st+1st,at)+logπθ(atst))取对数=θlogρ0(s0)+t=0T(θlogP(st+1st,at)+θlogπθ(atst)) θ 求梯度=0+t=0T(0+θlogπθ(atst))=t=0Tθlogπθ(atst))P  ρ0 都与 θ 无关,因此梯度为 0
至此我们得到:
∇ θ log ⁡ P ( τ ∣ θ ) = ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ) (2) \nabla_\theta\log P(\tau|\theta)=\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)) \tag{2} \\ θlogP(τθ)=t=0Tθlogπθ(atst))(2)
这个结果先放在这里,下面会用。

正式推导策略梯度 ∇ θ J ( π t θ ) \nabla_\theta J(\pi_t\theta) θJ(πtθ)
∇ θ J ( π θ ) = ∇ θ E τ ∼ π θ [ R ( τ ) ] 目标是最大化期望回报 = ∇ θ ∫ τ P ( τ ∣ θ ) R ( τ ) 期望的定义展开 = ∫ τ ∇ θ P ( τ ∣ θ ) R ( τ ) 求梯度拿进来 = ∫ τ P ( τ ∣ θ ) ∇ θ log ⁡ P ( τ ∣ θ ) R ( τ ) 对数导数形式变换技巧,这个形式变换在机器学习推导中很常用 = E τ ∼ π θ [ ∇ θ log ⁡ P ( τ ∣ θ ) R ( τ ) ] 再转换回期望的形式 ∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) R ( τ ) ] 将上面式 ( 2 ) 的推导结果代入 \begin{aligned} \nabla_\theta J(\pi_\theta)&=\nabla_\theta\mathbb{E}_{\tau\sim\pi_\theta}[R(\tau)] \quad 目标是最大化期望回报 \\ &=\nabla_\theta\int_\tau P(\tau|\theta)R(\tau) \quad 期望的定义展开 \\ &=\int_\tau\nabla_\theta P(\tau|\theta)R(\tau) \quad 求梯度拿进来 \\ &=\int_\tau P(\tau|\theta)\nabla_\theta\log P(\tau|\theta)R(\tau) \quad 对数导数形式变换技巧,这个形式变换在机器学习推导中很常用 \\ &=\mathbb{E}_{\tau\sim\pi_\theta}[\nabla_\theta\log P(\tau|\theta)R(\tau)] \quad 再转换回期望的形式 \\ \nabla_\theta J(\pi_\theta)&=\mathbb{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)R(\tau)\right] \quad 将上面式(2)的推导结果代入 \end{aligned} \notag \\ θJ(πθ)θJ(πθ)=θEτπθ[R(τ)]目标是最大化期望回报=θτP(τθ)R(τ)期望的定义展开=τθP(τθ)R(τ)求梯度拿进来=τP(τθ)θlogP(τθ)R(τ)对数导数形式变换技巧,这个形式变换在机器学习推导中很常用=Eτπθ[θlogP(τθ)R(τ)]再转换回期望的形式=Eτπθ[t=0Tθlogπθ(atst)R(τ)]将上面式(2)的推导结果代入

对数导数形式变换技巧,这个形式在机器学习推导中很常用,其实就是逆用对数函数的链式求导。
1 f ( x ) d f ( x ) d x = d log ⁡ ( f ( x ) ) d x \frac{1}{f(x)}\frac{df(x)}{dx}=\frac{d\log(f(x))}{dx} \notag \\ f(x)1dxdf(x)=dxdlog(f(x))

这样,我们就得到了策略的性能 J J J 关于参数 θ \theta θ 的梯度 ∇ θ J ( π θ ) \nabla_\theta J(\pi_\theta) θJ(πθ) ,即策略梯度的表达式:
∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) R ( τ ) ] (3) \nabla_\theta J(\pi_\theta)=\mathbb{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)R(\tau)\right] \tag{3} \\ θJ(πθ)=Eτπθ[t=0Tθlogπθ(atst)R(τ)](3)
这是一个期望的形式,由于穷尽所有的轨迹 τ \tau τ 是不可能的,所以我们从分布 π θ \pi_\theta πθ 中采样 N N N 个轨迹 τ \tau τ,来使用这些样本的均值对其进行近似。具体来说,我们可以不断让智能体根据参数化策略 π θ \pi_\theta πθ 进行行动来得到一个轨迹 τ \tau τ (rollout),并最终构建出一个包含 N N N 条轨迹的数据集 D = { τ i } i = 1 , … , N \mathcal{D}=\{\tau_i\}_{i=1,\dots,N} D={τi}i=1,,N。即我们用 N N N 次采样得到的 N N N 条数据 { τ i } i = 1 , … , N \{\tau_i\}_{i=1,\dots,N} {τi}i=1,,N 来近似对所有轨迹的穷举(式中红色部分)。然后根据下式来估计策略梯度:
g ^ = 1 N ∑ τ ∈ D ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) R ( τ ) ≈ E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) R ( τ ) ] \hat{g}=\textcolor{red}{\frac{1}{N}\sum_{\tau\in\mathcal{D}}}\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)R(\tau)\approx\textcolor{red}{\mathbb{E}_{\tau\sim\pi_\theta}}\left[\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)R(\tau)\right] \notag \\ g^=N1τDt=0Tθlogπθ(atst)R(τ)Eτπθ[t=0Tθlogπθ(atst)R(τ)]
这就是策略梯度的最简可计算形式了。式中的 R ( τ ) R(\tau) R(τ) 是轨迹 τ \tau τ 得到的最终回报,这是由环境决定的,它的计算过程通常是我们所未知的(model-free),不过没有关系,我们计算关于参数 θ \theta θ 的微分不需要知道它是怎么算出来的,只要知道它的值就行。因此我们只要能够将策略 π θ \pi_\theta πθ 表示成一种可微的形式,即可以计算 ∇ θ log ⁡ π θ ( a t ∣ s t ) \nabla_\theta\log\pi_\theta(a_t|s_t) θlogπθ(atst),并且可以不断在环境中运行这个策略从而收集到轨迹数据集 D \mathcal{D} D,我们就可以计算策略梯度,并通过梯度上升来更新参数 θ \theta θ 了。

注意我们考虑随机性的策略和环境状态转移函数,这两个地方的随机性导致:对于同一个策略 π θ \pi_\theta πθ 进行多次采样得到的轨迹 τ \tau τ 是不同的。

分析与讨论

我们对推导结果进行分析和讨论,提供一些直觉上的理解。

观察这个最终的式子 (3),我们可以理解为:在根据当前策略 π θ \pi_\theta πθ 采样出的 N N N 条轨迹的经验数据上,模型需要调整策略 π \pi π 的参数 θ \theta θ ,来使得:如果整个 episode 的累积回报 R ( τ ) R(\tau) R(τ) 比较高,就让产生这个轨迹 τ \tau τ 的各个动作 a t a_t at 出现的概率 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(atst) 更高,如果 R ( τ ) R(\tau) R(τ) 比较小,就让轨迹中各个动作出现的概率更低。

最终的形式上,出现了一个对数 log ⁡ \log log,这看起来似乎不太自然。我们知道实际上有 ∇ θ log ⁡ π θ ( a t ∣ s t ) = ∇ θ π θ ( a t ∣ s t ) π θ ( a t ∣ s t ) \nabla_\theta\log\pi_\theta(a_t|s_t)=\frac{\nabla_\theta\pi_\theta(a_t|s_t)}{\pi_\theta(a_t|s_t)} θlogπθ(atst)=πθ(atst)θπθ(atst),如果是要提高回报 R ( τ ) R(\tau) R(τ) 较高的轨迹 τ \tau τ 被采样出来的概率,似乎我们只要提高对应参数化策略 π θ \pi_\theta πθ 的概率就可以了,也就是分子部分。那最终形式中这个多出来的分母部分有何意义呢?其实,这里除一个 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(atst) 可以理解为用概率对梯度进行了一个归一化。因为在训练的不充分的时候,很多不是最优的动作也会被采样出来,如果他们被采样的次数很多的话,模型也会试图增大他们的概率。而有了这个概率归一化,就能避免模型偏好采样过程中出现概率比较高的动作。

同样由于采样可能不充分的问题,当 R ( τ ) R(\tau) R(τ) 都是正值的时候,也会对没有被采样到(但可能更好)的动作不太友好,因此,策略梯度在实际做的时候通常还会减去一个 baseline,这一点很重要,下面也会提到。

李宏毅老师在课程中提供了一个新的视角来看策略梯度的形式:将策略梯度与交叉熵分类对比理解。我们知道,分类任务要最小化交叉熵损失函数:
L = − ∑ i = 1 k y ^ i log ⁡ y i \mathcal{L}=-\sum_{i=1}^k\hat{y}_i\log y_i \notag \\ L=i=1ky^ilogyi
其中 k k k 是类别数, y ^ i , y i \hat{y}_i,y_i y^i,yi 分别是 gt 和 pred。 y ^ i \hat{y}_i y^i 是一个 one-hot 编码的向量,只有正确的那一维(不妨设为 0)为 1,其他维度均为 0。那么,对于标签为 0 的样本 x x x,分类的交叉熵损失函数实际就是要最大化 log ⁡ P θ ( y 0 ∣ x ) \log P_\theta(y_0|x) logPθ(y0x) ,即对于给定输入 x x x,要让输出为 y 0 y_0 y0 的概率最高。这个形式就和我们刚推导出的策略梯度很接近了,区别就在于策略梯度还多乘了一个累积回报 R ( τ ) R(\tau) R(τ)。也就是说,策略梯度可以看作是一个奖励加权的分类任务。累积越高的 action,权重越高。这也能解释我们上面提到的最好是要减掉一个 baseline,避免结果全是正的,否则模型会最大化(只是权重不同)所有采样到的动作出现的概率,导致前期未能被采样到(但可能更好)的 action 一直被打压。

代码

spining up 给出了最简的策略梯度代码示例,非常简洁,一共只有 128 行,推荐详细阅读一下。

这里重点提一下关于强化学习中实现的 “loss”。尽管我们把他称为 “损失函数”,但它并不是监督学习中通常意义上的损失函数。它与常规的损失函数有两个主要区别:

  1. 数据分布依赖于参数。损失函数通常定义在一个固定的、独立于我们希望优化的参数的数据分布上。而在这里,数据必须基于最近的策略进行采样(on policy)。
  2. 不衡量性能。损失函数通常能反映我们的模型是否在变好。但在强化学习这里,我们唯一关心的是期望回报 J J J,但是损失函数,即使从期望的角度来说,也并不能近似期望回报。这个 “损失函数” 只是我们根据期望回报的反馈设计的模型参数的梯度更新方向。

优化策略梯度

上一节中,我们已经推导出了最简策略梯度的形式。接下来,我们将对其进行改造优化,最终得到我们实际中使用的标准策略梯度实现。

reward-to-go

在我们以上的推导中,策略梯度是根据整个轨迹 τ \tau τ 的最终总回报 R ( τ ) R(\tau) R(τ) 了来进行优化。但这里其实有个问题,某个动作之前获得的奖励应该与该动作的好坏无关,我们应该只根据其后发生的奖励来优化动作。

这个直觉的想法在数学上也能表示出来。具体来说,我们可以将策略梯度可以写为以下形式:
∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) ] \nabla_\theta J(\pi_\theta)=\mathbb{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)\sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1})\right] \notag \\ θJ(πθ)=Eτπθ[t=0Tθlogπθ(atst)t=tTR(st,at,st+1)]
这样,一个动作就只会根据它被采取后获得的奖励进行优化。我们将这种策略梯度的形式称为 “reward-to-go policy gradient”,它是基于轨迹中某一点之后的奖励总和(称为该点处的 “reward-to-go”):
R ^ t = ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) \hat{R}_t=\sum_{t'=t}^TR(s_{t'},a_{t'},s_{t'+1}) \notag \\ R^t=t=tTR(st,at,st+1)

EGLP定理策略梯度中的基线(baseline)

本节中我们将首先推导 EGLP (Expected Grad-Log-Prob)定理,然后介绍它在策略梯度理论中的一个应用:基线。

EGLP 定理及推导

EGLP 定理描述如下:记 P θ P_\theta Pθ 是关于随机变量 x x x 的参数化概率分布,那么有:
E x ∼ P θ [ ∇ θ log ⁡ P θ ( x ) ] = 0 \mathbb{E}_{x\sim P_\theta}[\nabla_\theta\log P_\theta(x)]=0 \notag \\ ExPθ[θlogPθ(x)]=0
证明如下:

首先我们知道概率具有归一性:
∫ x P θ ( x ) = 1 \int_x P_\theta(x)=1 \notag \\ xPθ(x)=1
对两边关于 x x x 求梯度:
∇ θ ∫ x P θ ( x ) = ∇ θ 1 = 0 \nabla_\theta\int_xP_\theta(x)=\nabla_\theta1=0 \notag θxPθ(x)=θ1=0
再根据链式法则进行对上面用过的数导数形式变换:
0 = ∇ θ ∫ x P θ ( x ) = ∫ x ∇ θ P θ ( x ) = ∫ x P θ ∇ θ log ⁡ P θ ( x ) 0 = E x ∼ P θ [ ∇ θ log ⁡ P θ ( x ) ] \begin{aligned} 0&=\nabla_\theta\int_xP_\theta(x) \\ &=\int_x\nabla_\theta P_\theta(x) \\ &=\int_x P_\theta\nabla_\theta\log P_\theta(x) \\ 0&=\mathbb{E}_{x\sim P_\theta}[\nabla_\theta\log P_\theta(x)] \end{aligned} \notag \\ 00=θxPθ(x)=xθPθ(x)=xPθθlogPθ(x)=ExPθ[θlogPθ(x)]

基线 baseline

EGLP 定理的一个直接推论是:对于任意关于状态的函数 b b b,有:
E a t ∼ π θ [ ∇ θ log ⁡ π θ ( a t ∣ s t ) b ( s t ) ] = 0 \mathbb{E}_{a_t\sim\pi_\theta}[\nabla_\theta\log\pi_\theta(a_t|s_t)b(s_t)]=0 \notag \\ Eatπθ[θlogπθ(atst)b(st)]=0
这种期望形式的项的结果是 0。也就是说,我们可以在策略梯度的表达式中添加或减去任意数量的此类项,而不会改变其期望值(但是会影响方差):
∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ( ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) − b ( s t ) ) ] (4) \nabla_\theta J(\pi_\theta)=\mathbb{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)\left(\sum_{t'=t}^TR(s_{t'},a_{t'},s_{t'+1})-b(s_t)\right)\right] \tag{4} \\ θJ(πθ)=Eτπθ[t=0Tθlogπθ(atst)(t=tTR(st,at,st+1)b(st))](4)
这里的函数 b b b 称为基线(baseline)。

最常见的基线函数就是价值函数 V π ( s t ) V^\pi(s_t) Vπ(st),它是智能体从状态 s t s_t st 开始一直按照策略 π \pi π 采样并执行动作,最终得到的平均回报。在实际中,选择 b ( s t ) = V π ( s t ) b(s_t)=V^\pi(s_t) b(st)=Vπ(st) 可以减少策略梯度样本估计的方差,从而实现更快和更稳定的策略学习。从直觉的角度来想这也是很合理的:如果智能体得到了它预期的东西,它应该对此 “感到” 中立。

实际中, V π ( s t ) V^\pi(s_t) Vπ(st) 无法精确计算,因此一般是用一个神经网络 V ϕ ( s t ) V_\phi(s_t) Vϕ(st) (就是所谓的 critic)对其进行估计。这个价值网络要跟策略网络 π θ \pi_\theta πθ 一同进行优化,这样它估计的一直是最近策略的价值函数。

最简单、最常用(VPG、TRPO、PPO、A2C 等采用)的价值网络 V ϕ V_\phi Vϕ 训练目标是最小化 MSE:
ϕ k = arg ⁡ min ⁡ ϕ E s t , R ^ t ∼ π k [ ( V ϕ ( s t ) − R ^ t ) 2 ] \phi_k=\arg\min_\phi\mathbb{E}_{s_t,\hat{R}_t\sim\pi_k}\left[(V_\phi(s_t)-\hat{R}_t)^2\right] \notag \\ ϕk=argϕminEst,R^tπk[(Vϕ(st)R^t)2]
其中 π k \pi_k πk 是第 k k k 个 epoch 的策略。

李宏毅老师的课程中这样来介绍策略梯度中基线的作用。在一个强化学习任务中,有可能所有的回报 R ( τ ) R(\tau) R(τ) 都是正的,这样就期望 π θ \pi_\theta πθ 让所有动作选项的概率都提高,虽然听起来不太好,但这可能并不会对策略梯度的造成影响,因为即使都是正值,各自动作的绝对值也有所不同,从而概率提升的幅度不同,而实际上概率需要归一化到 1,因此 R ( τ ) R(\tau) R(τ) 绝对值较小的动作,实际上概率也是下降了。但是这是在充分采样的理想情况下。在 RL 中,我们需要对 π θ \pi_\theta πθ 进行采样来构建轨迹数据,而这很可能会导致早期一些很好的动作没有被采样到,而一些比较一般的动作,被采样到且回报为正的话,其概率又会被进一步提高,导致好的动作一直没有办法被探索到。通过引入 baseline,减掉一个合适的值,就可以打压回报不够高的动作,让好的动作更有可能被采样到。

其他形式的策略梯度

目前我们有了策略梯度的通用形式:
∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) Φ t ] \nabla_\theta J(\pi_\theta)=\mathbb{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^T\nabla_\theta\log\pi_\theta(a_t|s_t)\Phi_t\right] \notag \\ θJ(πθ)=Eτπθ[t=0Tθlogπθ(atst)Φt]
其中 Φ t \Phi_t Φt 可以是: Φ t = R ( τ ) \Phi_t=R(\tau) Φt=R(τ) Φ t = ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) \Phi_t=\sum_{t'=t}^TR(s_{t'},a_{t'},s_{t'+1}) Φt=t=tTR(st,at,st+1) Φ t = ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) − b ( s t ) \Phi_t=\sum_{t'=t}^TR(s_{t'},a_{t'},s_{t'+1})-b(s_t) Φt=t=tTR(st,at,st+1)b(st)所有这些选择策略梯度的期望值都是相同的,但是方差会不同。除了这些之外,还有两种重要的 Φ t \Phi_t Φt 的选择。一个是动作价值函数,即: Φ t = Q π θ ( s t , a t ) \Phi_t=Q^{\pi_\theta}(s_t,a_t) Φt=Qπθ(st,at),还有一个是优势函数,即: Φ t = A π θ ( s t , a t ) \Phi_t=A^{\pi_\theta}(s_t,a_t) Φt=Aπθ(st,at)

回顾一下:优势函数 A π θ ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) A^{\pi_\theta}(s_t,a_t)=Q^\pi(s_t,a_t)-V^\pi(s_t) Aπθ(st,at)=Qπ(st,at)Vπ(st) 描述了使用当前策略比选择其他动作平均而言要好多少。

现在,使用优势函数来构建策略梯度是非常常见的,不同的算法使用多种不同的方法来估计优势函数。如果对此有兴趣,可以阅读关于广义优势估计(Generalized Advantage Estimation,GAE)的论文,该论文在背景一节中深入探讨了 Φ t \Phi_t Φt 的不同选择,并提出了GAE,这是一种在策略优化算法中广泛使用的方法,用于近似优势函数。Spinning Up 实现的 VPG、TRPO 和 PPO 都利用了它。以后会单独介绍一下优势函数和 GAE。

总结

本文介绍了最简单的策略梯度算法的推导,对其导出形式进行了讨论并提供了一些直觉上的理解,并介绍了 reward-to-go 和 baseline 两项对于策略梯度最简形式的基础优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值