文章目录

  • 一、从同策略到异策略
    • 1.1 为什么考虑异策略?
    • 1.2 重要性采样
  • 二、近端策略优化
    • 2.1 近端策略优化惩罚
    • 2.2 近端策略优化裁剪
  • 三、关键词总结
  • 四、习题
  • 五、面试题
  • 六、Python代码实战

一、从同策略到异策略

1.1 为什么考虑异策略?

在介绍近端策略优化(proximal policy optimization,PPO) 之前,我们先回顾同策略和异策略这两种训练方法的区别。

  • 如果要学习的智能体和与环境交互的智能体是相同的,我们称之为同策略
  • 如果要学习的智能体和与环境交互的智能体不是相同的,我们称之为异策略

为什么我们会想要考虑异策略?

让我们回忆一下策略梯度。策略梯度是同策略的算法,因为在策略梯度中,我们需要一个智能体、一个策略和一个演员。

演员去与环境交互搜集数据,搜集很多的轨迹 τ\tauτ,根据搜集到的数据按照策略梯度的公式更新策略的参数,所以策略梯度是一个同策略的算法。PPO是策略梯度的变形,它是现在 OpenAI 默认的强化学习算法。
∇Rˉθ=Eτ∼pθ(τ)[R(τ)∇log⁡pθ(τ)]\nabla \bar{R}_\theta=\mathbb{E}_{\tau \sim p \theta(\tau)}\left[R(\tau) \nabla \log p_\theta(\tau)\right] ∇Rˉθ​=Eτ∼pθ(τ)​[R(τ)∇logpθ​(τ)]
问题在于上式的 Eτ∼pθ(τ)\mathbb{E}_{\tau \sim p \theta}(\tau)Eτ∼pθ​(τ) 是对策略 πθ\pi_\thetaπθ​ 采样的轨迹 τ\tauτ 求期望。一旦更新了参数,从 θ\thetaθ 变成 θ′\theta^{\prime}θ′ ,概率 pθ(τ)p_\theta(\tau)pθ​(τ) 就不对了,之前采样的数据也不能用了。

所以策略梯度是一个会花很多时间来采样数据的算法,其大多数时间都在采样数据。智能体与环境交互以后,接下来就要更新参数。我们只能更新参数一次,然后 就要重新采样数据,才能再次更新参数,这显然是非常花时间的。

所以我们想要从同策略变成异策略, 这样就可以用另外一个策略 πθ′、\pi_{\theta^{\prime}} 、πθ′​、 另外一个演员 θ′\theta^{\prime}θ′ 与环境交互 (θ′\left(\theta^{\prime}\right.(θ′ 被固定了),用 θ′\theta^{\prime}θ′ 采样到的数据去训练 θ\thetaθ 。假设我们可以用 θ′\theta^{\prime}θ′ 采样到的数据去训练 θ\thetaθ ,我们可以多次使用 θ′\theta^{\prime}θ′ 采样到的数据,可以多次执行梯度 上升 (gradient ascent),可以多次更新参数,都只需要用同一批数据。因为假设 θ\thetaθ 有能力学习另外一个 演员 θ′\theta^{\prime}θ′ 所采样的数据,所以 θ′\theta^{\prime}θ′ 只需采样一次,并采样多一点的数据,让 θ\thetaθ 去更新很多次,这样就会比较 有效率。

1.2 重要性采样

从同策略变成异策略具体怎么做呢?这就需要介绍重要性采样(importance sampling) 的概念。

假设我们有一个函数 f(x)f(x)f(x) ,要计算从分布 ppp 采样 xxx ,再把 xxx 代入 fff ,得到 f(x)f(x)f(x) 。我们该怎么计算 f(x)f(x)f(x) 的期望值呢? 假 设我们不能对分布 ppp 做积分,但可以从分布 ppp 采样一些数据 xix^ixi 。把 xix^ixi 代入 f(x)f(x)f(x) ,取它的平均值,就可以近似 f(x)f(x)f(x) 的期望值。

现在有另外一个问题,假设我们不能从分布 ppp 采样数据,只能从另外一个分布 qqq 采样数据 x,qx , qx,q 可以是任何分布。如果我 们从 qqq 采样 xix^ixi ,就不能使用下式了。因为下式是假设 xxx 都是从 ppp 采样出来的。

Ex∼p[f(x)]≈1N∑i=1Nf(xi)\mathbb{E}_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^N f\left(x^i\right) Ex∼p​[f(x)]≈N1​i=1∑N​f(xi)

所以我们做一个修正,期望值 Ex∼p[f(x)]\mathbb{E}_{x \sim p}[f(x)]Ex∼p​[f(x)] 就是 ∫f(x)p(x)dx\int f(x) p(x) \mathrm{d} x∫f(x)p(x)dx ,我们对其做如下的变换:

∫f(x)p(x)dx=∫f(x)p(x)q(x)q(x)dx=Ex∼q[f(x)p(x)q(x)]\int f(x) p(x) \mathrm{d} x=\int f(x) \frac{p(x)}{q(x)} q(x) \mathrm{d} x=\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] ∫f(x)p(x)dx=∫f(x)q(x)p(x)​q(x)dx=Ex∼q​[f(x)q(x)p(x)​]

就可得

Ex∼p[f(x)]=Ex∼q[f(x)p(x)q(x)]\mathbb{E}_{x \sim p}[f(x)]=\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Ex∼p​[f(x)]=Ex∼q​[f(x)q(x)p(x)​]

我们就可以写成对 qqq 里面所采样出来的 xxx 取期望值。我们从 qqq 里面采样 xxx ,再计算 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)}f(x)q(x)p(x)​ ,再取期望值。所以就算我 们不能从 ppp 里面采样数据,但只要能从 qqq 里面采样数据,就可以计算从 ppp 采样 xxx 代入 fff 以后的期望值。

因为是从 qqq 采样数据,所以我们从 qqq 采样出来的每一笔数据,都需要乘一个重要性权重 (importance weight) p(x)q(x)\frac{p(x)}{q(x)}q(x)p(x)​ 来修 正这两个分布的差异。 q(x)q(x)q(x) 可以是任何分布,唯一的限制就是 q(x)q(x)q(x) 的概率是 0 的时候, p(x)p(x)p(x) 的概率不为 0 ,不然会没有 定义。假设 q(x)q(x)q(x) 的概率是 0 的时候, p(x)p(x)p(x) 的概率也都是 0,p(x)0 , p(x)0,p(x) 除以 q(x)q(x)q(x) 是有定义的。所以这个时候我们就可以使用 重要性采样,把从 ppp 采样换成从 qqq 采样。

重要性采样有一些问题。虽然我们可以把 ppp 换成任何的 qqq 。但是在实现上, ppp 和 qqq 的差距不能太大。差距太大,会有一些 问题。比如,虽然上式成立 (上式左边是 f(x)f(x)f(x) 的期望值,它的分布是 ppp ,上式右边是 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)}f(x)q(x)p(x)​ 的期望值,它的分 布是 qqq ),但如果不是计算期望值,而是计算方差, Var⁡x∼p[f(x)]\operatorname{Var}_{x \sim p}[f(x)]Varx∼p​[f(x)] 和 Var⁡x∼q[f(x)p(x)q(x)]\operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]Varx∼q​[f(x)q(x)p(x)​] 是不一样的。两个随机变量的 平均值相同,并不代表它们的方差相同。

我们可以将 f(x)f(x)f(x) 和 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)}f(x)q(x)p(x)​ 代入方差的公式 Var⁡[X]=E[X2]−(E[X])2\operatorname{Var}[X]=E\left[X^2\right]-(E[X])^2Var[X]=E[X2]−(E[X])2 ,可得

Var⁡x∼p[f(x)]=Ex∼p[f(x)2]−(Ex∼p[f(x)])2Var⁡x∼q[f(x)p(x)q(x)]=Ex∼q[(f(x)p(x)q(x))2]−(Ex∼q[f(x)p(x)q(x)])2=Ex∼p[f(x)2p(x)q(x)]−(Ex∼p[f(x)])2\begin{aligned} \operatorname{Var}_{x \sim p}[f(x)]=& \mathbb{E}_{x \sim p}\left[f(x)^2\right]-\left(\mathbb{E}_{x \sim p}[f(x)]\right)^2 \\ \operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] &=\mathbb{E}_{x \sim q}\left[\left(f(x) \frac{p(x)}{q(x)}\right)^2\right]-\left(\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]\right)^2 \\ &=\mathbb{E}_{x \sim p}\left[f(x)^2 \frac{p(x)}{q(x)}\right]-\left(\mathbb{E}_{x \sim p}[f(x)]\right)^2 \end{aligned} Varx∼p​[f(x)]=Varx∼q​[f(x)q(x)p(x)​]​Ex∼p​[f(x)2]−(Ex∼p​[f(x)])2=Ex∼q​[(f(x)q(x)p(x)​)2]−(Ex∼q​[f(x)q(x)p(x)​])2=Ex∼p​[f(x)2q(x)p(x)​]−(Ex∼p​[f(x)])2​
Var⁡x∼p[f(x)]\operatorname{Var}_{x \sim p}[f(x)]Varx∼p​[f(x)] 和 Var⁡x∼q[f(x)p(x)q(x)]\operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]Varx∼q​[f(x)q(x)p(x)​] 的差别在于第一项是不同的, Var⁡x∼q[f(x)p(x)q(x)]\operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]Varx∼q​[f(x)q(x)p(x)​] 的第一项多乘了 p(x)q(x)\frac{p(x)}{q(x)}q(x)p(x)​ ,如果 p(x)q(x)\frac{p(x)}{q(x)}q(x)p(x)​ 差距很大, f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)}f(x)q(x)p(x)​ 的方差就会很大。所以理论上它们的期望值一样,也就是,我们只要对分布 ppp 采样足够多次,对 分布 qqq 采样足够多次,得到的结果会是一样的。但是如果我们采样的次数不够多,因为它们的方差差距是很大的,所以我们 就有可能得到差别非常大的结果

例如,当 p(x)p(x)p(x) 和 q(x)q(x)q(x) 差距很大时,就会有问题。如下图所示,假设蓝线是 p(x)p(x)p(x) 的分布,绿线是 q(x)q(x)q(x) 的分布,红线 是 f(x)f(x)f(x) 。如果我们要计算 f(x)f(x)f(x) 的期望值,从分布 p(x)p(x)p(x) 做采样,显然 Ex∼p[f(x)]\mathbb{E}_{x \sim p}[f(x)]Ex∼p​[f(x)] 是负的。这是因为左边区域 p(x)p(x)p(x) 的 概率很高,所以采样会到这个区域,而 f(x)f(x)f(x) 在这个区域是负的,所以理论上这一项算出来会是负的。

接下来我们改成从 q(x)q(x)q(x) 采样,因为 q(x)q(x)q(x) 在右边区域的概率比较高,所以如果我们采样的点不够多,可能只会采样到右 侧。如果我们只采样到右侧,可能 Ex∼q[f(x)p(x)q(x)]\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]Ex∼q​[f(x)q(x)p(x)​] 是正的。我们这边采样到这些点,去计算它们的 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)}f(x)q(x)p(x)​ 都是正 的。我们采样到这些点都是正的,取期望值以后也都是正的,这是因为采样的次数不够多。

假设我们采样次数很少,只能 采样到右边。左边虽然概率很低,但也有可能被采样到。假设我们好不容易采样到左边的点,因为左边的点的 p(x)p(x)p(x) 和 q(x)q(x)q(x) 是差很多的,这边 p(x)p(x)p(x) 很大, q(x)q(x)q(x) 很小。 f(x)f(x)f(x) 好不容易終于采样到一个负的,这个负的就会被乘上一个非常大 的权重,这样就可以平衡刚才那边一直采样到正的值的情况。最终我们算出这一项的期望值,终究还是负的。

但前提是我 们要采样足够多次,这件事情才会发生。但有可能采样次数不够多, Ex∼p[f(x)]\mathbb{E}_{x \sim p}[f(x)]Ex∼p​[f(x)] 与 Ex∼q[f(x)p(x)q(x)]\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]Ex∼q​[f(x)q(x)p(x)​] 可能就有很大的差 距。这就是重要性采样的问题。

现在要做的就是把重要性采样用在异策略的情况中,把同策略训练的算法改成异策略训练的算法。

怎么改? 如下式所示,之前我们用策略 πθ\pi_\thetaπθ​ 与环境交互,采样出轨迹 τ\tauτ ,计算 R(τ)∇log⁡pθ(τ)R(\tau) \nabla \log p_\theta(\tau)R(τ)∇logpθ​(τ) 。现在我们不用 θ\thetaθ 与 环境交互,假设有另外一个策略 πθ′\pi_\theta^{\prime}πθ′​ ,它就是另外一个演员,它的工作是做示范 (demonstration) 。

∇Rˉθ=Eτ∼pθ′(τ)[pθ(τ)pθ′(τ)R(τ)∇log⁡pθ(τ)]\nabla \bar{R}_\theta=\mathbb{E}_{\tau \sim p_{\theta^{\prime}}(\tau)}\left[\frac{p_\theta(\tau)}{p_{\theta^{\prime}}(\tau)} R(\tau) \nabla \log p_\theta(\tau)\right] ∇Rˉθ​=Eτ∼pθ′​(τ)​[pθ′​(τ)pθ​(τ)​R(τ)∇logpθ​(τ)]
θ′\theta^{\prime}θ′ 的工作是为 θ\thetaθ 做示范。它与环境交互,告诉 θ\thetaθ 它与环境交互会发生什么事,借此来训练 θ\thetaθ 。我们要训练的是 θ\thetaθ , θ′\theta^{\prime}θ′ 只负 责做示范,负责与环境交互。我们现在的 τ\tauτ 是从 θ′\theta^{\prime}θ′ 采样出来的,是用 θ′\theta^{\prime}θ′ 与环境交互。所以采样出来的 τ\tauτ 是从 θ′\theta^{\prime}θ′ 采样出来 的,这两个分布不一样。但没有关系,假设我们本来是从 ppp 采样,但发现不能从 ppp 采样,所以我们不用 θ\thetaθ 与环境交互,可 以把 ppp 换成 qqq ,在后面补上一个重要性权重。同理,我们把 θ\thetaθ 换成 θ′\theta^{\prime}θ′ 后,要补上一个重要性权重 pθ(τ)pθ′(τ)∘\frac{p_\theta(\tau)}{p_{\theta^{\prime}}(\tau)^{\circ}}pθ′​(τ)∘pθ​(τ)​ 。这个重要性权重 就是某一个轨迹 τ\tauτ 用 θ\thetaθ 算出来的概率除以这个轨迹 τ\tauτ 用 θ′\theta^{\prime}θ′ 算出来的概率。这一项是很重要的,因为我们要学习的是演员 θ\thetaθ ,而 θ\thetaθ 和 θ′\theta^{\prime}θ′ 是不太一样的, θ′\theta^{\prime}θ′ 见到的情形与 θ\thetaθ 见到的情形可能不是一样的,所以中间要有一个修正的项。

Q: 现在的数据是从 θ′\theta^{\prime}θ′ 采样出来的,从 θ\thetaθ 换成 θ′\theta^{\prime}θ′ 有什么好处呢?
A: 因为现在与环境交互的是 θ′\theta^{\prime}θ′ 而不是 θ\thetaθ ,所以采样的数据与 θ\thetaθ 本身是没有关系的。因此我们就可以让 θ′\theta^{\prime}θ′ 与环境交互采样 大量的数据, θ\thetaθ 可以多次更新参数,一直到 θ\thetaθ 训炼到一定的程度。更新多次以后, θ′\theta^{\prime}θ′ 再重新做采样,这就是同策略换成异策略的妙处。

实际在做策略梯度的时候,我们并不是给整个轨迹 τ\tauτ 一样的分数,而是将每一个状态-动作对分开计算。实际更新梯度的过 程可写为

E(st,at)∼πθ[Aθ(st,at)∇log⁡pθ(atn∣stn)]\mathbb{E}_{\left(s_t, a_t\right) \sim \pi \theta}\left[A^\theta\left(s_t, a_t\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)\right] E(st​,at​)∼πθ​[Aθ(st​,at​)∇logpθ​(atn​∣stn​)]
我们用演员 θ\thetaθ 采样出 sts_tst​ 与 ata_tat​ ,采样出状态-动作的对,我们会计算这个状态-动作对的优势(advantage) Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) ,就 是它有多好。 Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) 即用㽧积奖励减去基线,这一项就是估测出来的。它要估测的是,在状态 sts_tst​ 采取动作 ata_tat​ 是好的 还是不好的。接下来在后面乘 ∇log⁡pθ(atn∣stn)\nabla \log p_\theta\left(a_t^n \mid s_t^n\right)∇logpθ​(atn​∣stn​) ,也就是如果 Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) 是正的,就要增大概率; 如果是负的,就要减 小概率。

我们可以通过重要性采样把同策略变成异策略,从 θ\thetaθ 变成 θ′\theta^{\prime}θ′ 。所以现在 st、ats_t 、 a_tst​、at​ 是 θ′\theta^{\prime}θ′ 与环境交互以后所采样到的数据。但 是训练时,要调整的参数是模型 θ\thetaθ 。

因为 θ′\theta^{\prime}θ′ 与 θ\thetaθ 是不同的模型,所以我们要有一个修正的项。这个修正的项,就是用重要 性采样的技术,把 st、ats_t 、 a_tst​、at​ 用 θ\thetaθ 采样出来的概率除以 st、ats_t 、 a_tst​、at​ 用 θ′\theta^{\prime}θ′ 采样出来的概率。

E(st,at)∼πθ′[pθ(st,at)pθ′(st,at)Aθ(st,at)∇log⁡pθ(atn∣stn)]\mathbb{E}_{\left(s_t, a_t\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(s_t, a_t\right)}{p_{\theta^{\prime}}\left(s_t, a_t\right)} A^\theta\left(s_t, a_t\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)\right] E(st​,at​)∼πθ′​​[pθ′​(st​,at​)pθ​(st​,at​)​Aθ(st​,at​)∇logpθ​(atn​∣stn​)]
其中, Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) 有一个上标 θ,θ\theta , \thetaθ,θ 代表 Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) 是演员 θ\thetaθ 与环境交互的时候计算出来的。但是实际上从 θ\thetaθ 换到 θ′\theta^{\prime}θ′ 的 时候, Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) 应该改成 Aθ′(st,at)A^{\theta^{\prime}}\left(s_t, a_t\right)Aθ′(st​,at​) ,为什么呢? A(st,at)A\left(s_t, a_t\right)A(st​,at​) 这一项是想要估测在某一个状态采取某一个动作,接下来 会得到累积奖励的值减去基线的值。我们怎么估计 A(st,at)A\left(s_t, a_t\right)A(st​,at​) ? 我们在状态 sts_tst​ 采取动作 ata_tat​ ,接下来会得到的奖励的总和,再减去基线就是 A(st,at)A\left(s_t, a_t\right)A(st​,at​) 。之前是 θ\thetaθ 与环境交互,所以我们观察到的是 θ\thetaθ 可以得到的奖励。但现在是 θ′\theta^{\prime}θ′ 与环境交互,所 以我们得到的这个优势是根据 θ′\theta^{\prime}θ′ 所估计出来的优势。但我们现在先不要管那么多,就假设 Aθ(st,at)A^\theta\left(s_t, a_t\right)Aθ(st​,at​) 和 Aθ′(st,at)A^{\theta^{\prime}}\left(s_t, a_t\right)Aθ′(st​,at​) 可能 是差不多的

接下来,我们可以拆解 pθ(st,at)p_\theta\left(s_t, a_t\right)pθ​(st​,at​) 和 pθ′(st,at)p_{\theta^{\prime}}\left(s_t, a_t\right)pθ′​(st​,at​) ,即

pθ(st,at)=pθ(at∣st)pθ(st)pθ′(st,at)=pθ′(at∣st)pθ′(st)\begin{aligned} p_\theta\left(s_t, a_t\right) &=p_\theta\left(a_t \mid s_t\right) p_\theta\left(s_t\right) \\ p_{\theta^{\prime}}\left(s_t, a_t\right) &=p_{\theta^{\prime}}\left(a_t \mid s_t\right) p_{\theta^{\prime}}\left(s_t\right) \end{aligned} pθ​(st​,at​)pθ′​(st​,at​)​=pθ​(at​∣st​)pθ​(st​)=pθ′​(at​∣st​)pθ′​(st​)​

于是我们可得

E(st,at)∼πθ′[pθ(at∣st)pθ′(at∣st)pθ(st)pθ′(st)Aθ′(st,at)∇log⁡pθ(atn∣stn)]\mathbb{E}_{\left(s_t, a_t\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^{\prime}}\left(a_t \mid s_t\right)} \frac{p_\theta\left(s_t\right)}{p_{\theta^{\prime}}\left(s_t\right)} A^{\theta^{\prime}}\left(s_t, a_t\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)\right] E(st​,at​)∼πθ′​​[pθ′​(at​∣st​)pθ​(at​∣st​)​pθ′​(st​)pθ​(st​)​Aθ′(st​,at​)∇logpθ​(atn​∣stn​)]

这里需要做的一件事情是,假设模型是 θ\thetaθ 的时候,我们看到 sts_tst​ 的概率,与模型是 θ′\theta^{\prime}θ′ 的时候,我们看到 sts_tst​ 的概率是一样 的,即 pθ(st)=pθ′(st)p_\theta\left(s_t\right)=p_{\theta^{\prime}}\left(s_t\right)pθ​(st​)=pθ′​(st​) 。因为 pθ(st)p_\theta\left(s_t\right)pθ​(st​) 和 pθ′(st)p_{\theta^{\prime}}\left(s_t\right)pθ′​(st​) 是一样的,所以我们可得

E(st,at)∼πθ′[pθ(at∣st)pθ′(at∣st)Aθ′(st,at)∇log⁡pθ(atn∣stn)]\mathbb{E}_{\left(s_t, a_t\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^{\prime}}\left(a_t \mid s_t\right)} A^{\theta^{\prime}}\left(s_t, a_t\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)\right] E(st​,at​)∼πθ′​​[pθ′​(at​∣st​)pθ​(at​∣st​)​Aθ′(st​,at​)∇logpθ​(atn​∣stn​)]

Q\mathrm{Q}Q : 为什么我们可以假设 pθ(st)p_\theta\left(s_t\right)pθ​(st​) 和 pθ′(st)p_{\theta^{\prime}}\left(s_t\right)pθ′​(st​) 是一样的?
A: 因为我们会看到状态往往与采取的动作是没有太大的关系的。比如我们玩不同的雅达利游戏,其实看到的游戏画面都是 差不多的,所以也许不同的 θ\thetaθ 对 sts_tst​ 是没有影响的。但更直接的理由就是 pθ(st)p_\theta\left(s_t\right)pθ​(st​) 很难算, pθ(st)p_\theta\left(s_t\right)pθ​(st​) 有一个参数 θ\thetaθ ,它表示的 是我们用 θ\thetaθ 去与环境交互,计算 sts_tst​ 出现的概率,而这个概率很难算。尤其是如果输入的是图片,同样的 sts_tst​ 可能根本就不 会出现第二次。我们根本没有办法估计 pθ(st)p_\theta\left(s_t\right)pθ​(st​) ,所以干脆就无视这个问题。

但是 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 即好算,我们有参数 θ\thetaθ ,它就是一个策略网络。我们输入状态 sts_tst​ 到策略网络中,它会输出每一个 ata_tat​ 的概 率。所以我们只要知道 θ\thetaθ 和 θ′\theta^{\prime}θ′ 的参数就可以计算 pθ(at∣st)pθ(at∣st)∘\frac{p_\theta\left(a_t \mid s_t\right)}{p_\theta\left(a_t \mid s_t\right)^{\circ}}pθ​(at​∣st​)∘pθ​(at​∣st​)​ 。

下式是梯度,我们可以从梯度反推原来的目标函数:

∇f(x)=f(x)∇log⁡f(x)\nabla f(x)=f(x) \nabla \log f(x) ∇f(x)=f(x)∇logf(x)

注意,对 θ\thetaθ 求梯度时, pθ′(at∣st)p_{\theta^{\prime}}\left(a_t \mid s_t\right)pθ′​(at​∣st​) 和 Aθ′(st,at)A^{\theta^{\prime}}\left(s_t, a_t\right)Aθ′(st​,at​) 都是常数。
所以实际上,当我们使用重要性采样的时候,要去优化的目标函数为

Jθ′(θ)=E(st,at)∼πθ′[pθ(at∣st)pθ′(at∣st)Aθ′(st,at)]J^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_t, a_t\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^{\prime}}\left(a_t \mid s_t\right)} A^{\theta^{\prime}}\left(s_t, a_t\right)\right] Jθ′(θ)=E(st​,at​)∼πθ′​​[pθ′​(at​∣st​)pθ​(at​∣st​)​Aθ′(st​,at​)]
我们将其记为 Jθ′(θ)J^{\theta^{\prime}}(\theta)Jθ′(θ) ,因为 Jθ′(θ)J^{\theta^{\prime}}(\theta)Jθ′(θ) 括号里面的 θ\thetaθ 代表我们要去优化的参数。 θ′\theta^{\prime}θ′ 是指我们用 θ′\theta^{\prime}θ′ 做示范,就是现在真正在与 环境交互的是 θ′\theta^{\prime}θ′ 。因为 θ\thetaθ 不与环境交互,是 θ′\theta^{\prime}θ′ 在与环境交互。

然后我们用 θ′\theta^{\prime}θ′ 与环境交互,采样出 st、ats_t 、 a_tst​、at​ 以后,要去计算 sts_tst​ 与 ata_tat​ 的优势 Aθ′(st,at)A^{\theta^{\prime}}\left(s_t, a_t\right)Aθ′(st​,at​) ,再用它乘 pθθ(atst)pθ′(atst)\frac{p \theta \theta\left(a_t s_t\right)}{p_{\theta^{\prime}}\left(a_t s_t\right)}pθ′​(at​st​)pθθ(at​st​)​ 。 pθ(atst)pθ′(atst)\frac{p_\theta\left(a_t s_t\right)}{p_{\theta^{\prime}}\left(a_t s_t\right)}pθ′​(at​st​)pθ​(at​st​)​ 是容易计算的,我们可以从采样的结果来估测 Aθ′(st,at)A^{\theta^{\prime}}\left(s_t, a_t\right)Aθ′(st​,at​) , 所以 Jθ′(θ)J^{\theta^{\prime}}(\theta)Jθ′(θ) 是可以计算的。

实际上在更新参数的时候,我们就是按照下式来更新参数的。

E(st,at)∼πθ′[pθ(at∣st)pθ′(at∣st)Aθ′(st,at)∇log⁡pθ(atn∣stn)]\mathbb{E}_{\left(s_t, a_t\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^{\prime}}\left(a_t \mid s_t\right)} A^{\theta^{\prime}}\left(s_t, a_t\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)\right] E(st​,at​)∼πθ′​​[pθ′​(at​∣st​)pθ​(at​∣st​)​Aθ′(st​,at​)∇logpθ​(atn​∣stn​)]


二、近端策略优化

我们可以通过重要性采样把同策略换成异策略,但重要性采样有一个问题: 如果 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 与 pθ′(at∣st)p_{\theta^{\prime}}\left(a_t \mid s_t\right)pθ′​(at​∣st​) 相差太多,即这 两个分布相差太多,重要性采样的结果就会不好。怎么避免它们相差太多呢? 这就是PPO要做的事情。

注意,由于在PPO中θ′\theta'θ′是θold\theta_{old}θold​,即行为策略也是πθ\pi_{\theta}πθ​,因此PPO是同策略的算法。如下式所示,PPO实际上做的事情就是这样,在异策略的方法里优化目标函数 Jθ′(θ)J^{\theta^{\prime}}(\theta)Jθ′(θ) 。

JPPOθ′(θ)=Jθ′(θ)−βKL(θ,θ′)Jθ′(θ)=E(st,at)∼πθ′[pθ(at∣st)pθ′(at∣st)Aθ′(st,at)]\begin{aligned} &J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)=J^{\theta^{\prime}}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^{\prime}\right) \\ &J^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_t, a_t\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^{\prime}}\left(a_t \mid s_t\right)} A^{\theta^{\prime}}\left(s_t, a_t\right)\right] \end{aligned} ​JPPOθ′​(θ)=Jθ′(θ)−βKL(θ,θ′)Jθ′(θ)=E(st​,at​)∼πθ′​​[pθ′​(at​∣st​)pθ​(at​∣st​)​Aθ′(st​,at​)]​

但是这个目标函数又牵涉到重要性采样。在做重要性采样的时候, pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 不能与 pθ′(at∣st)p_{\theta^{\prime}}\left(a_t \mid s_t\right)pθ′​(at​∣st​) 相差太多。做示范的模型不能与真正的模型相差太多,相差太多,重要性采样的结果就会不 好。我们在训练的时候,应多加一个约束 (constrain) 。这个约束是 θ\thetaθ 与 θ′\theta^{\prime}θ′ 输出的动作的 KL散度 (KL divergence),这 一项用于衡量 θ\thetaθ 与 θ′\theta^{\prime}θ′ 的相似程度。

我们希望在训练的过程中,学习出的 θ\thetaθ 与 θ′\theta^{\prime}θ′ 越相似越好。因为如果 θ\thetaθ 与 θ′\theta^{\prime}θ′ 不相似,最 后的结果就会不好。所以在 PPO 里面有两项: 一项是优化本来要优化的 Jθ′(θ)J^{\theta^{\prime}}(\theta)Jθ′(θ) ,另一项是一个约束。这个约束就好像正则 化 (regularization) 的项(term) 一样,它所做的就是苃望最后学习出的 θ\thetaθ 与 θ′\theta^{\prime}θ′ 相差不大。

PPO 有一个前身: 信任区域策略优化 (trust region policy optimization,TRPO) 。TRPO 可表示为

JTRPO θ′(θ)=E(st,at)∼πθ′[pθ(at∣st)pθ′(at∣st)Aθ′(st,at)],KL(θ,θ′)<δJ_{\text {TRPO }}^{\theta^{\prime}}(\theta)=\mathbb{E}_{(s t, a t) \sim \pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^{\prime}}\left(a_t \mid s_t\right)} A^{\theta^{\prime}}\left(s_t, a_t\right)\right], \mathrm{KL}\left(\theta, \theta^{\prime}\right)<\delta JTRPO θ′​(θ)=E(st,at)∼πθ′​​[pθ′​(at​∣st​)pθ​(at​∣st​)​Aθ′(st​,at​)],KL(θ,θ′)<δ
TRPO 与 PPO 不一样的地方是约束所在的位置不一样,PPO 直接把约束放到要优化的式子里面,我们就可以用梯度上升的 方法去最大化式(5.6)。但 TRPO 是把 KL散度当作约束,它希望 θ\thetaθ 与 θ′\theta^{\prime}θ′ 的 KL 散度小于 δ\deltaδ 。如果我们使用的是基于梯度的优 化,有约束是很难处理的。TRPO 是很难处理的,因为它把 KL 散度约束当作一个额外的约束,没有放在目标 (objective) 里面,所以它很难计算。因此我们一般就使用 PPO,而不使用 TRPO。PPO 与 TRPO 的性能差不多,但 PPO 在实现上比 TRPO 容易得多。

Q:什么是KL散度?
A:衡量两分布之间相似程度的指标。KL散度越小,两分布越接近。更详细的KL散度的介绍可以参考我的另一篇博客:【机器学习】信息论基础(联合熵、条件熵、交叉熵、KL散度等)+ Python代码实现

Q\mathrm{Q}Q : 为什么不直接计算 θ\thetaθ 和 θ′\theta^{\prime}θ′ 之间的距离? 计算这个距离甚至不用计算 KLK LKL 散度, L1L 1L1 与 L2L 2L2 的范数 (norm) 也可以保证 θ\thetaθ 与 θ′\theta^{\prime}θ′ 很相似。
A: 在做强化学习的时候,之所以我们考虑的不是参数上的距离,而是动作上的距离,是因为很有可能对于演员,参数的变 化与动作的变化不一定是完全一致的。有时候参数稍微变了,它可能输出动作的就差很多。或者是参数变很多,但输出的 动作可能没有什么改变。所以我们真正在意的是演员的动作上的差距,而不是它们参数上的差距。因此在做 PPO 的时候, 所谓的 KL 散度并不是参数的距离,而是动作的距离。

2.1 近端策略优化惩罚

PPO 算法有两个主要的变种: 近端策略优化惩罚 (PPO-penalty) 和近端策略优化裁剪 (PPO-clip)。

我们来看一下PPO1 算法,即近端策略优化惩罚算法。

它先初始化一个策略的参数 θ0\theta^0θ0 。在每一个迭代里面,我们用前一个 训练的迭代得到的演员的参数 θk\theta^kθk 与环境交互,采样到大量状态-动作对。根据 θk\theta^kθk 交互的结果,我们估测 Aθk(st,at)A^{\theta^k}\left(s_t, a_t\right)Aθk(st​,at​) 。我 们使用 PPO 的优化公式。

但与原来的策略梯度不一样,原来的策略梯度只能更新一次参数,更新完以后,我们就要重新采 样数据。但是现在不同,我们用 θk\theta^kθk 与环境交互,采样到这组数据以后,我们可以让 θ\thetaθ 更新很多次,想办法最大化目标函 数。

如下式所示,这里面的 θ\thetaθ 更新很多次也没有关系,因为我们已经有重要性采样,所以这些经验,这些状态-动作对是 从 θk\theta^kθk 采样出来的也没有关系。 θ\thetaθ 可以更新很多次,它与 θk\theta^kθk 变得不太一样也没有关系,我们可以照样训练 θ\thetaθ 。
JPPOθk(θ)=Jθk(θ)−βKL(θ,θk)J_{\mathrm{PPO}}^{\theta^k}(\theta)=J^{\theta^k}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^k\right) JPPOθk​(θ)=Jθk(θ)−βKL(θ,θk)
在 PPO 的论文里面还有一个自适应KL散度 (adaptive KL divergence)。这里会遇到一个问题就,即 β\betaβ 要设置为多少。

这个 问题与正则化一样,正则化前面也要乘一个权重,所以 KL散度前面也要乘一个权重,但 β\betaβ 要设置为多少呢?

我们有一个 动态调整 β\betaβ 的方法。

在这个方法里面,我们先设一个可以接受的 KLK LKL 散度的最大值。假设优化完上式以后,KL散度的值 太大,这就代表后面惩罚的项 βKL(θ,θk)\beta \mathrm{KL}\left(\theta, \theta^k\right)βKL(θ,θk) 没有发挥作用,我们就把 β\betaβ 增大。

另外,我们设一个 KL\mathrm{KL}KL 散度的最小值。如果 优化完上式以后,KL散度比最小值还要小,就代表后面这一项的效果太强了,我们怕他只优化后一项,使 θ\thetaθ 与 θk−\theta^k-θk− 样,这不是我们想要的,所以我们要减小 β\betaβ 。

β\betaβ 是可以动态调整的,因此我们称之为自适应 KLK LKL 惩罚 (adaptive KL penalty)。我们可以总结一下自适应KL惩罚:

  • 如果 KL(θ,θk)>KLmax⁡\mathrm{KL}\left(\theta, \theta^k\right)>\mathrm{KL}_{\max }KL(θ,θk)>KLmax​ ,增大 β\betaβ;
  • 如果 KL(θ,θk)<KLmin⁡\mathrm{KL}\left(\theta, \theta^k\right)<\mathrm{KL}_{\min }KL(θ,θk)<KLmin​ ,减小 β\betaβ 。

近端策略优化惩罚可表示为(其实就是将KL散度项加了一个自适应权重系数)

JPPOθk(θ)=Jθk(θ)−βKL(θ,θk)Jθk(θ)≈∑(st,at)pθ(at∣st)pθk(at∣st)Aθk(st,at)\begin{aligned} &J_{\mathrm{PPO}}^{\theta^k}(\theta)=J^{\theta^k}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^k\right) \\ &J^{\theta^k}(\theta) \approx \sum_{\left(s_t, a_t\right)} \frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^k}\left(a_t \mid s_t\right)} A^{\theta^k}\left(s_t, a_t\right) \end{aligned} ​JPPOθk​(θ)=Jθk(θ)−βKL(θ,θk)Jθk(θ)≈(st​,at​)∑​pθk​(at​∣st​)pθ​(at​∣st​)​Aθk(st​,at​)​

2.2 近端策略优化裁剪

如果我们觉得计算 KL 散度很复杂,那么还有一个 PPO2算法,PPO2 即近端策略优化裁剪。近端策略优化裁剪的目标函数里面没有 KL 散度,其要最大化的目标函数为

JPPO2θk(θ)≈∑(st,at)min⁡(pθ(at∣st)pθk(at∣st)Aθk(st,at),clip⁡(pθ(at∣st)pθk(at∣st),1−ε,1+ε)Aθk(st,at))\begin{aligned} J_{\mathrm{PPO} 2}^{\theta^k}(\theta) \approx \sum_{\left(s_t, a_t\right)} \min &\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^k}\left(a_t \mid s_t\right)} A^{\theta^k}\left(s_t, a_t\right),\right.\\ &\left.\operatorname{clip}\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta k}\left(a_t \mid s_t\right)}, 1-\varepsilon, 1+\varepsilon\right) A^{\theta^k}\left(s_t, a_t\right)\right) \end{aligned} JPPO2θk​(θ)≈(st​,at​)∑​min​(pθk​(at​∣st​)pθ​(at​∣st​)​Aθk(st​,at​),clip(pθk​(at​∣st​)pθ​(at​∣st​)​,1−ε,1+ε)Aθk(st​,at​))​
其中

  • 操作符 (operator) min 是在第一项与第二项里面选择比较小的项。
  • 第二项前面有一个裁剪(clip) 函数,裁剪函数是指,在括号里面有 3 项,如果第一项小于第二项,那就输出 1−ε1-\varepsilon1−ε; 第 一项如果大于第三项,那就输出 1+ε1+\varepsilon1+ε 。
  • ε\varepsilonε 是一个超参数,是我们要调整的,可以设置成 0.10.10.1 或 0.20.20.2 。

假设设置 ε=0.2\varepsilon=0.2ε=0.2 ,我们可得
clip⁡(pθ(at∣st)pθk(at∣st),0.8,1.2)\operatorname{clip}\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^k}\left(a_t \mid s_t\right)}, 0.8,1.2\right) clip(pθk​(at​∣st​)pθ​(at​∣st​)​,0.8,1.2)
如果 pθ(at∣st)pθk(at∣st)\frac{p_\theta\left(a_t \mid s_t\right)}{p_\theta k\left(a_t \mid s_t\right)}pθ​k(at​∣st​)pθ​(at​∣st​)​ 算出来小于 0.80.80.8 ,那就输出 0.80.80.8 ;如果算出来大于 1.21.21.2 ,那就输出 1.21.21.2 。 我们先要理解
clip⁡(pθ(at∣st)pθk(at∣st),1−ε,1+ε)\operatorname{clip}\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^k}\left(a_t \mid s_t\right)}, 1-\varepsilon, 1+\varepsilon\right) clip(pθk​(at​∣st​)pθ​(at​∣st​)​,1−ε,1+ε)
下图的横轴代表 pθ(at∣st)pθk(at∣st)\frac{p_\theta(a t \mid s t)}{p_{\theta k}\left(a_t \mid s_t\right)}pθk​(at​∣st​)pθ​(at∣st)​ ,纵轴代表裁剪函数的输出。

  • 如果 pθ(at∣st)pθk(at∣st)\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta k}\left(a_t \mid s_t\right)}pθk​(at​∣st​)pθ​(at​∣st​)​ 大于 1+ε,输出就是 1+ε; 1+\varepsilon \text { ,输出就是 } 1+\varepsilon \text {; }1+ε ,输出就是 1+ε;
  • 如果小于 1−ε~输出就是 1−ε; 1-\varepsilon \text { ~输出就是 } 1-\varepsilon \text {; }1−ε ~输出就是 1−ε;
  • 如果介于 1+ε∼1−ε1+\varepsilon \sim 1-\varepsilon1+ε∼1−ε 之间 ,输出等于输入。

如下图a 所示, pθ(at∣st)pθk(at∣st)\frac{p_\theta\left(a_t \mid s_t\right)}{p_\theta k\left(a_t \mid s_t\right)}pθ​k(at​∣st​)pθ​(at​∣st​)​ 是绿色的线; clip⁡(pθ(at∣st)pθk(at∣st),1−ε,1+ε)\operatorname{clip}\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_\theta k\left(a_t \mid s_t\right)}, 1-\varepsilon, 1+\varepsilon\right)clip(pθ​k(at​∣st​)pθ​(at​∣st​)​,1−ε,1+ε) 是蓝色的线;在绿色的线与蓝色的线中间,我们 要取一个最小的结果。假设前面乘上的项 AAA 大于0,取最小的结果,就是红色的这条线。如下图b 所示,如果 AAA 小于 0 ,取最小结果的以后,就得到红色的这条线。

虽然下式看起来有点儿复杂,但实现起来是比较简单的,因为下式想要做的就是希望 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 与 pθk(at∣st)p_{\theta^k}\left(a_t \mid s_t\right)pθk​(at​∣st​) 比较接 近,也就是做示范的模型与实际上学习的模型在优化以后不要差距太大。

JPPO2θk(θ)≈∑(st,at)min⁡(pθ(at∣st)pθk(at∣st)Aθk(st,at),clip⁡(pθ(at∣st)pθk(at∣st),1−ε,1+ε)Aθk(st,at))\begin{aligned} J_{\mathrm{PPO} 2}^{\theta^k}(\theta) \approx \sum_{\left(s_t, a_t\right)} \min &\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^k}\left(a_t \mid s_t\right)} A^{\theta^k}\left(s_t, a_t\right),\right.\\ &\left.\operatorname{clip}\left(\frac{p_\theta\left(a_t \mid s_t\right)}{p_{\theta^k}\left(a_t \mid s_t\right)}, 1-\varepsilon, 1+\varepsilon\right) A^{\theta^k}\left(s_t, a_t\right)\right) \end{aligned} JPPO2θk​(θ)≈(st​,at​)∑​min​(pθk​(at​∣st​)pθ​(at​∣st​)​Aθk(st​,at​),clip(pθk​(at​∣st​)pθ​(at​∣st​)​,1−ε,1+ε)Aθk(st​,at​))​

怎么让它做到不要差距太大呢?

  • 如果 A>0A>0A>0 ,也就是某一个状态-动作对是好的,我们希望增大这个状态-动作对的概率。也就是,我们想让 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 越大越好,但它与 pθk(at∣st)p_{\theta k}\left(a_t \mid s_t\right)pθk​(at​∣st​) 的比值不可以超过 1+ε01+\varepsilon_01+ε0​ 如果超过 1+ε1+\varepsilon1+ε ,就没有好处了。红色的线就是目标函数, 我们希望目标函数值越大越好,我们希望 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 越大越好。但是 pθ(at∣st)pθk(atst)\frac{p \theta\left(a_t \mid s_t\right)}{p_\theta k\left(a_t s_t\right)}pθ​k(at​st​)pθ(at​∣st​)​ 只要大过 1+ε1+\varepsilon_{\text {}}1+ε​ ,就没有好处了。所以 在训练的时候,当 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 被训练到 pθ(at∣st)pθk(at∣st)>1+ε\frac{p \theta\left(a_t \mid s_t\right)}{p_\theta k\left(a_t \mid s_t\right)}>1+\varepsilonpθ​k(at​∣st​)pθ(at​∣st​)​>1+ε 时,它就会停止。假设 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 比 pθk(at∣st)p_{\theta^k}\left(a_t \mid s_t\right)pθk​(at​∣st​) 还要小,并 且这个优势是正的。因为这个动作是好的,我们希望这个动作被采取的概率越大越好,希望 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 越大越好。所以 假设 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 还比 pθk(at∣st)p_{\theta^k}\left(a_t \mid s_t\right)pθk​(at​∣st​) 小,那就尽量把它变大,但只要大到 1+ε1+\varepsilon1+ε 就好。
  • 如果 A<0A<0A<0 ,也就是某一个状态-动作对是不好的,那么我们希望把 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 减小。如果 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 比 pθk(at∣st)p_{\theta^k}\left(a_t \mid s_t\right)pθk​(at​∣st​) 还 大,那我们就尽量把它减小,减到 pθ(at(st)pθk(atst)\frac{p_\theta\left(a_t\left(s_t\right)\right.}{p_\theta k\left(a_t s_t\right)}pθ​k(at​st​)pθ​(at​(st​)​ 是 1−ε1-\varepsilon1−ε 的时候停止,此时不用再减得更小。

这样的好处就是,我们不会让 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 与 pθk(at∣st)p_{\theta k}\left(a_t \mid s_t\right)pθk​(at​∣st​) 差距太大。要实现这个其实很简单。

下图所示为 PPO 与其他算法的比较。优势演员-评论员和优势演员-评论员+信任区域 (trust region) 算法是基于演员-评论 员的方法。PPO 算法是用紫色线表示,图中每张子图表示某一个强化学习的任务,在多数情况中,PPO 都是不错的, 即时不是最好的,也是第二好的。


三、关键词总结

  • 同策略 (on-policy):要学习的智能体和与环境交互的智能体是同一个时对应的策略。
  • 异策略 (off-policy):要学习的智能体和与环境交互的智能体不是同一个时对应的策略。
  • 重要性采样 (important sampling): 使用另外一种分布, 来逼近所求分布的一种方法, 在强化学习中 通常和蒙特卡洛方法结合使用, 公式如下:
    ∫f(x)p(x)dx=∫f(x)p(x)q(x)q(x)dx=Ex∼q[f(x)p(x)q(x)]=Ex∼p[f(x)]\int f(x) p(x) \mathrm{d} x=\int f(x) \frac{p(x)}{q(x)} q(x) \mathrm{d} x=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]=E_{x \sim p}[f(x)] ∫f(x)p(x)dx=∫f(x)q(x)p(x)​q(x)dx=Ex∼q​[f(x)q(x)p(x)​]=Ex∼p​[f(x)]
    我们在已知 qqq 的分布后, 可以使用上式计算出从 ppp 这个分布采样 xxx 代人 fff 以后得到的期望值。
  • 近端策略优化 ( proximal policy optimization, PPO): 避免在使用重要性采样时由于在 θ\thetaθ 下的 pθ(at∣st)p_\theta\left(a_t \mid s_t\right)pθ​(at​∣st​) 与在 θ′\theta^{\prime}θ′ 下的 pθ′(at∣st)p_{\theta^{\prime}}\left(a_t \mid s_t\right)pθ′​(at​∣st​) 相差太多, 导致重要性采样结果偏差较大而采取的算法。具体来说就是在训练的过 程中增加一个限制, 这个限制对应 θ\thetaθ 和 θ′\theta^{\prime}θ′ 输出的动作的 KL 散度, 来衡量 θ\thetaθ 与 θ′\theta^{\prime}θ′ 的相似程度。

四、习题

5-1 基于同策略的策略梯度有什么可改进之处? 或者说其效率较低的原因在于什么?
5-2 使用重要性采样时需要注意的问题有哪些?
5-3 基于异策略的重要性采样中的数据是从 θ′\theta^{\prime}θ′ 中采样出来的, 从 θ\thetaθ 换成 θ′\theta^{\prime}θ′ 有什么优势?
5-4 在本节中近端策略优化中的 KL 散度指的是什么?


五、面试题

5-1 友善的面试官:请问什么是重要性采样呀?
5-2 友善的面试官:请问同策略和异策略的区别是什么?
5-3 友善的面试官:请简述一下近端策略优化算法。其与信任区域策略优化算法有何关系呢?


六、Python代码实战

【强化学习】PPO算法求解倒立摆问题 + Python代码实战

【EasyRL学习笔记】第五章 Proximal Policy Optimization 近端策略优化算法相关推荐

  1. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  2. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  3. 强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C(下)

    强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C 本篇实现一个基于A2C框架的PPO算法,应用于连续动作空间任务. import torch import torch.nn a ...

  4. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第五章:中级控件

    第 5 章 中级控件 本章介绍App开发常见的几类中级控件的用法,主要包括:如何定制几种简单的图形.如何使用几种选择按钮.如何高效地输入文本.如何利用对话框获取交互信息等,然后结合本章所学的知识,演示 ...

  5. 《Android深度探究HAL与驱动开发》学习笔记----第五章

    第五章 搭建S3C6410开发板的测试环境 开发板是开发和学习嵌入式技术的主要硬件设备. 主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器 ...

  6. 【EasyRL学习笔记】第九章 Actor-Critic 演员-评论员算法

    文章目录 一.前言 二.策略梯度回顾 三.深度Q网络回顾 四.优势演员-评论员算法 五.异步优势演员-评论员算法 六.路径衍生策略梯度 七.与生成对抗网络的联系 八.关键词总结 九.习题 十.面试题 ...

  7. muduo学习笔记 - 第五章 高效的多线程日志

    第五章 高效的多线程日志 日志有两种意思: 诊断日志 交易日志 本章讲的是前一种日志,文本的供人阅读的日志,通常用于故障诊断和追踪,也可用于性能分析. 日志通常要记录: 收到的每条消息的id(关键字段 ...

  8. javascript高级程序设计 学习笔记 第五章 上

      第五章   引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScri ...

  9. 数据挖掘导论学习笔记 第五章 分类算法

    5.1基于规则的分类器 基于规则的分类器的规则用析取范式R=(r1∨r2∨⋯∨rk)R=(r_1\lor r_2 \lor \cdots \lor r_k)R=(r1​∨r2​∨⋯∨rk​)表示.R称 ...

  10. css层叠样式表基础学习笔记--第五章 文本属性

    第五章 文本属性 5-01 字间距 5-02 行高 5-03 首行缩进 5-04 水平排列方式 5-05 垂直对齐方式 5-06 文本修饰 5-07 文本阴影 5-08 文本属性重置 5-01 字间距 ...

最新文章

  1. Paddle预训练模型应用工具PaddleHub
  2. Java数据类型缓存池
  3. Spring boot访问静态资源
  4. 2440 nand flash和nor flash上启动
  5. 一句命令删除docker所有镜像或容器
  6. Midi 乐器set
  7. 发光二极管pcb封装图画法_【AD封装】PH2.0座子插件贴片(带3D)
  8. where,having与 group by连用的区别
  9. 机器学习数据的划分和介绍
  10. 对数的matlab代码,Matlab的对数
  11. DQL 数据查询语⾔
  12. php又拍云,申请又拍云云存储教程(PHP V3.80+)
  13. 【总结】漫画机器学习入门(大关真之著)
  14. Pxe +ks+ cobbler+ cobbler-web 实现centos6.7,centos7.2无人值守全自动化网络安装系统。
  15. ERROR: Failed to parse XML in D:\MyAPP\XXXX\app\src\main\AndroidManifest.xml
  16. linux主机无线连接显示器,如何用Linux外接显示器或投影机
  17. 1000个瓶子和10只老鼠问题浅解
  18. C# vs Java:北乔峰 vs 南慕容
  19. jquery日期控件jedate的学习
  20. 京东短网址高可用提升最佳实践 | 京东云技术团队

热门文章

  1. Yuuki and a problem (树套树)
  2. MATLAB的appdesigner背景图片设置
  3. 联想笔记本小新air14,Fn+功能键/Insert键
  4. #10064. 「一本通 3.1 例 1」黑暗城堡
  5. 论文精读 清华ERNIE:Enhanced Language Representation with Informative Entities
  6. vmware14安装黑苹果max ox x 10.13懒人版教程
  7. php退款,PHP实现微信申请退款流程的方法
  8. Android 9(API级别28)特性总结
  9. javascript 获取邮箱的后缀
  10. Altium Designer 18中的System–Design Insight