强化学习从基础到进阶–事例与实践[8]:近端战略优化(proximal policy optimization,PPO)算法

相关链接以及码源见文末

1.从同战略到异战略PPO算法

在介绍近端战略优化(proximal policy optimization,PPO) 之前,咱们先回顾同战略和异战略这两种练习办法的区别。在强化学习里边,要学习的是一个智能体。假如要学习的智能体和与环境交互的智能体是相同的,咱们称之为同战略。假如要学习的智能体和与环境交互的智能体不是相同的,咱们称之为异战略。

为什么咱们会想要考虑异战略?让咱们回想一下战略梯度。战略梯度是同战略的算法,由于在战略梯度中,咱们需求一个智能体、一个战略和一个艺人。艺人去与环境交互收集数据,收集许多的轨道 \tau,依据收集到的数据依照战略梯度的公式更新战略的参数,所以战略梯度是一个同战略的算法。PPO是战略梯度的变形,它是现在 OpenAI 默认的强化学习算法。

∇R=E∼p()[R()∇log⁡p()](8.1) \nabla \bar{R}_{\theta}=\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \tag{8.1}

问题在于式(8.1)的 E∼p()\mathbb{E}_{\tau \sim p_{\theta}(\tau)} 是对战略 \pi_{\theta} 采样的轨道 \tau 求期望。一旦更新了参数,从 \theta 变成 ′\theta’ ,概率 p()p_\theta(\tau) 就不对了,之前采样的数据也不能用了。所以战略梯度是一个会花许多时间来采样数据的算法,其大大都时间都在采样数据。智能体与环境交互今后,接下来就要更新参数。咱们只能更新参数一次,然后就要重新采样数据, 才能再次更新参数。这显然是十分花时间的,所以咱们想要从同战略变成异战略,这样就能够用别的一个战略′\pi_{\theta’}、别的一个艺人′\theta’ 与环境交互(′\theta’ 被固定了),用 ′\theta’ 采样到的数据去练习 \theta。假定咱们能够用 ′\theta’ 采样到的数据去练习 \theta,咱们能够屡次运用 ′\theta’ 采样到的数据,能够屡次执行梯度上升(gradient ascent),能够屡次更新参数, 都只需求用同一批数据。由于假定 \theta 有才能学习别的一个艺人 ′\theta’ 所采样的数据,所以′\theta’ 只需采样一次,并采样多一点的数据,让 \theta 去更新许屡次,这样就会比较有效率。

详细怎样做呢?这就需求介绍重要性采样(importance sampling) 的概念。

关于一个随机变量,咱们通常用概率密度函数来描写该变量的概率散布特性。详细来说,给定随机变量的一个取值,能够依据概率密度函数来核算该值对应的概率(密度)。反过来,也能够依据概率密度函数提供的概率散布信息来生成随机变量的一个取值,这便是采样。因而,从某种意义上来说,采样是概率密度函数的逆向应用。与依据概率密度函数核算样本点对应的概率值不同,采样进程往往没有那么直接,通常需求依据待采样散布的详细特点来挑选合适的采样战略。

假定咱们有一个函数 f(x)f(x),要核算从散布 pp 采样 xx,再把 xx 代入 ff ,得到 f(x)f(x)。咱们该怎样核算 f(x)f(x) 的期望值呢?假定咱们不能对散布 pp 做积分,但能够从散布 pp 采样一些数据 xix^i。把 xix^i 代入 f(x)f(x),取它的平均值,就能够近似 f(x)f(x) 的期望值。

现在有别的一个问题,假定咱们不能从散布 pp 采样数据,只能从别的一个散布 qq 采样数据xxqq 能够是任何散布。假如咱们从 qq 采样 xix^i,就不能运用式(8.2)。由于式(8.2)是假定 xx 都是从 pp 采样出来的。

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

所以咱们做一个批改,期望值 Ex∼p[f(x)]\mathbb{E}_{x \sim 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)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}[f(x){\frac{p(x)}{q(x)}}]

就可得

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

咱们就能够写成对 qq 里边所采样出来的 xx 取期望值。咱们从 qq 里边采样 xx,再核算 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)},再取期望值。所以就算咱们不能从 pp 里边采样数据,但只需能从 qq 里边采样数据,就能够核算从 pp 采样 xx 代入 ff 今后的期望值。

由所以从 qq 采样数据,所以咱们从 qq 采样出来的每一笔数据,都需求乘一个重要性权重(importance weight) p(x)q(x)\frac{p(x)}{q(x)} 来批改这两个散布的差异。q(x)q(x) 能够是任何散布,仅有的束缚便是 q(x)q(x) 的概率是 0 的时分,p(x)p(x) 的概率不为 0,不然会没有定义。假定 q(x)q(x) 的概率是 0 的时分,p(x)p(x) 的概率也都是 0,p(x)p(x) 除以 q(x)q(x)是有定义的。所以这个时分咱们就能够运用重要性采样,把从 pp 采样换成从 qq 采样。

重要性采样有一些问题。尽管咱们能够把 pp 换成任何的 qq。可是在完成上, ppqq 的间隔不能太大。间隔太大,会有一些问题。比如,尽管式(8.3)建立(式(8.3)左面是 f(x)f(x) 的期望值,它的散布是 pp,式(8.3)右边是 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)} 的期望值,它的散布是 qq),但假如不是核算期望值,而是核算方差,Var⁡x∼p[f(x)]\operatorname{Var}_{x \sim 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] 是不相同的。两个随机变量的平均值相同,并不代表它们的方差相同。

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

Var⁡x∼p[f(x)]=Ex∼p[f(x)2]−(Ex∼p[f(x)])2 \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}
Var⁡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 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}

Var⁡x∼p[f(x)]\operatorname{Var}_{x \sim 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] 的不同在于第一项是不同的, Var⁡x∼q[f(x)p(x)q(x)]\operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] 的第一项多乘了p(x)q(x)\frac{p(x)}{q(x)},假如 p(x)q(x)\frac{p(x)}{q(x)} 间隔很大,f(x)p(x)q(x)f(x)\frac{p(x)}{q(x)} 的方差就会很大。所以理论上它们的期望值相同,也便是,咱们只需对散布pp采样满足屡次,对散布qq采样满足屡次,得到的成果会是相同的。可是假如咱们采样的次数不够多,由于它们的方间隔离是很大的,所以咱们就有或许得到不同十分大的成果。

例如,当 p(x)p(x)q(x)q(x) 间隔很大时,就会有问题。如图 8.1 所示,假定蓝线是 p(x)p(x) 的散布,绿线是 q(x)q(x) 的散布,红线是 f(x)f(x)。假如咱们要核算 f(x)f(x)的期望值,从散布 p(x)p(x) 做采样,显然 Ex∼p[f(x)]\mathbb{E}_{x \sim p}[f(x)] 是负的。这是由于左面区域 p(x)p(x) 的概率很高,所以采样会到这个区域,而 f(x)f(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] 是正的。 咱们这边采样到这些点,去核算它们的 f(x)p(x)q(x)f(x) \frac{p(x)}{q(x)} 都是正的。咱们采样到这些点都是正的,取期望值今后也都是正的,这是由于采样的次数不够多。假定咱们采样次数很少,只能采样到右边。左面尽管概率很低,但也有或许被采样到。假定咱们十分困难采样到左面的点,由于左面的点的p(x)p(x)q(x)q(x) 是差许多的, 这边 p(x)p(x) 很大,q(x)q(x) 很小。 f(x)f(x) 十分困难终于采样到一个负的,这个负的就会被乘上一个十分大的权重,这样就能够平衡刚才那边一向采样到正的值的状况。最终咱们算出这一项的期望值,终究仍是负的。但前提是咱们要采样满足屡次,这件工作才会发生。但有或许采样次数不够多,Ex∼p[f(x)]\mathbb{E}_{x \sim 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] 或许就有很大的间隔。这便是重要性采样的问题。

强化学习从基础到进阶--案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
图 8.1 重要性采样的问题

现在要做的便是把重要性采样用在异战略的状况中,把同战略练习的算法改成异战略练习的算法。

怎样改呢?如式(8.4)所示,之前咱们用战略 \pi_{\theta} 与环境交互,采样出轨道 \tau,核算 R()∇log⁡p()R(\tau) \nabla \log p_{\theta}(\tau)。现在咱们不必 \theta 与环境交互,假定有别的一个战略 ′\pi_{\theta}’,它便是别的一个艺人,它的工作是做演示(demonstration)。

∇R=E∼p′()[p()p′()R()∇log⁡p()](8.4) \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] \tag{8.4}

′\theta’ 的工作是为\theta 做演示。它与环境交互,告诉 \theta 它与环境交互会发生什么事,借此来练习 \theta。咱们要练习的是 \theta′\theta’ 只担任做演示,担任与环境交互。咱们现在的 \tau 是从 ′\theta’ 采样出来的,是用 ′\theta’ 与环境交互。所以采样出来的 \tau 是从 ′\theta’ 采样出来的,这两个散布不相同。但没有联系,假定咱们本来是从 pp 采样,但发现不能从 pp 采样,所以咱们不必 \theta 与环境交互,能够把 pp 换成 qq,在后面补上一个重要性权重。同理,咱们把 \theta 换成 ′\theta’ 后,要补上一个重要性权重 p()p′()\frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)}。这个重要性权重便是某一个轨道 \tau\theta 算出来的概率除以这个轨道 \tau′\theta’ 算出来的概率。这一项是很重要的,由于咱们要学习的是艺人 \theta,而 \theta′\theta’ 是不太相同的,′\theta’ 见到的景象与 \theta 见到的景象或许不是相同的,所以中心要有一个批改的项。

Q:现在的数据是从 ′\theta’ 采样出来的,从 \theta 换成 ′\theta’ 有什么优点呢?

A:由于现在与环境交互的是 ′\theta’ 而不是 \theta,所以采样的数据与 \theta 自身是没有联系的。因而咱们就能够让 ′\theta’ 与环境交互采样很多的数据,\theta 能够屡次更新参数,一向到 \theta 练习到必定的程度。更新屡次今后,′\theta’ 再重新做采样,这便是同战略换成异战略的妙处。

实践在做战略梯度的时分,咱们并不是给整个轨道 \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} | s_{t}^{n}\right)\right]

咱们用艺人\theta 采样出 sts_tata_t,采样出状况-动作的对,咱们会核算这个状况-动刁难的优势(advantage)A(st,at)A^{\theta}\left(s_{t}, a_{t}\right), 便是它有多好。A(st,at)A^{\theta}\left(s_{t}, a_{t}\right) 即用累积奖励减去基线,这一项便是估测出来的。它要估测的是,在状况 sts_t 采纳动作 ata_t 是好的仍是欠好的。接下来在后面乘 ∇log⁡p(atn∣stn)\nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right),也便是假如 A(st,at)A^{\theta}\left(s_{t}, a_{t}\right) 是正的,就要增大概率;假如是负的,就要减小概率。

咱们能够经过重要性采样把同战略变成异战略,从 \theta 变成 ′\theta’。所以现在 sts_tata_t′\theta’ 与环境交互今后所采样到的数据。 可是练习时,要调整的参数是模型 \theta。由于 ′\theta’\theta 是不同的模型,所以咱们要有一个批改的项。这个批改的项,便是用重要性采样的技术,把 sts_tata_t\theta 采样出来的概率除以 sts_tata_t′\theta’ 采样出来的概率。

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} | s_{t}^{n}\right)\right]

其间,A(st,at)A^{\theta}(s_t,a_t) 有一个上标 \theta\theta 代表 A(st,at)A^{\theta}(s_t,a_t) 是艺人 \theta 与环境交互的时分核算出来的。可是实践上从 \theta 换到 ′\theta’ 的时分,A(st,at)A^{\theta}(s_t,a_t) 应该改成 A′(st,at)A^{\theta’}(s_t,a_t),为什么呢?A(st,at)A(s_t,a_t) 这一项是想要估测在某一个状况采纳某一个动作,接下来会得到累积奖励的值减去基线的值。咱们怎样估量 A(st,at)A(s_t,a_t)?咱们在状况 sts_t 采纳动作 ata_t,接下来会得到的奖励的总和,再减去基线便是 A(st,at)A(s_t,a_t)。之前是 \theta 与环境交互,所以咱们观察到的是 \theta 能够得到的奖励。但现在是 ′\theta’ 与环境交互,所以咱们得到的这个优势是依据 ′\theta’ 所估量出来的优势。但咱们现在先不要管那么多,就假定 A(st,at)A^{\theta}(s_t,a_t)A′(st,at)A^{\theta’}(s_t,a_t) 或许是差不多的。

接下来,咱们能够拆解 p(st,at)p_{\theta}\left(s_{t}, a_{t}\right)p′(st,at)p_{\theta’}\left(s_{t}, a_{t}\right),即

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}|s_{t}\right) p_{\theta}(s_t) \\ p_{\theta’}\left(s_{t}, a_{t}\right)&=p_{\theta’}\left(a_{t}|s_{t}\right) p_{\theta’}(s_t) \end{aligned}

所以咱们可得

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} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | 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} | s_{t}^{n}\right)\right]

这儿需求做的一件工作是,假定模型是 \theta 的时分,咱们看到 sts_t 的概率,与模型是 ′\theta’ 的时分,咱们看到 sts_t 的概率是相同的,即 p(st)=p′(st)p_{\theta}(s_t)=p_{\theta’}(s_t)。由于p(st)p_{\theta}(s_t)p′(st)p_{\theta’}(s_t)是相同的,所以咱们可得

E(st,at)∼′[p(at∣st)p′(at∣st)A′(st,at)∇log⁡p(atn∣stn)](8.5) \mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] \tag{8.5}

Q:为什么咱们能够假定 p(st)p_{\theta}(s_t)p′(st)p_{\theta’}(s_t) 是相同的?

A:由于咱们会看到状况往往与采纳的动作是没有太大的联系的。比如咱们玩不同的雅达利游戏,其实看到的游戏画面都是差不多的,所以也许不同的 \thetasts_t 是没有影响的。但更直接的理由便是 p(st)p_{\theta}(s_t) 很难算,p(st)p_{\theta}(s_t)有一个参数 \theta,它表明的是咱们用 \theta 去与环境交互,核算 sts_t 出现的概率,而这个概率很难算。尤其是假如输入的是图片,相同的 sts_t 或许底子就不会出现第2次。咱们底子没有办法估量p(st)p_{\theta}(s_t),所以爽性就无视这个问题。

可是 p(at∣st)p_{\theta}(a_t|s_t)很好算,咱们有参数 \theta ,它便是一个战略网络。咱们输入状况 sts_t 到战略网络中,它会输出每一个 ata_t 的概率。所以咱们只需知道\theta′\theta’ 的参数就能够核算 p(at∣st)p′(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)}

式(8.5)是梯度,咱们能够从梯度反推本来的方针函数:

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

留意,对 \theta 求梯度时,p′(at∣st)p_{\theta^{\prime}}(a_{t} | s_{t})A′(st,at)A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) 都是常数。

所以实践上,当咱们运用重要性采样的时分,要去优化的方针函数为

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} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right]

咱们将其记为 J′()J^{\theta^{\prime}}(\theta),由于J′()J^{\theta^{\prime}}(\theta) 括号里边的 \theta 代表咱们要去优化的参数。′\theta’ 是指咱们用 ′\theta’ 做演示,便是现在真实在与环境交互的是 ′\theta’。由于 \theta 不与环境交互,是 ′\theta’ 在与环境交互。然后咱们用 ′\theta’ 与环境交互,采样出 sts_tata_t 今后,要去核算 sts_tata_t 的优势 A′(st,at)A^{\theta^{\prime}}\left(s_{t}, a_{t}\right),再用它乘 p(at∣st)p′(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)}p(at∣st)p′(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} 是简单核算的,咱们能够从采样的成果来估测A′(st,at)A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) ,所以 J′()J^{\theta^{\prime}}(\theta) 是能够核算的。实践上在更新参数的时分,咱们便是依照式(8.5)来更新参数的。

2.近端战略优化

咱们能够经过重要性采样把同战略换成异战略,但重要性采样有一个问题:假如 p(at∣st)p_{\theta}\left(a_{t} | s_{t}\right)p′(at∣st)p_{\theta’}\left(a_{t} | s_{t}\right) 相差太多,即这两个散布相差太多,重要性采样的成果就会欠好。 怎样防止它们相差太多呢?这便是PPO要做的工作。

留意,由于在 PPO 中 ′\theta’old\theta_{\text{old}},即行为战略也是 \pi_{\theta},因而 PPO 是同战略的算法。 如式(8.6)所示,PPO 实践上做的工作便是这样,在异战略的办法里优化方针函数 J′()J^{\theta^{\prime}}(\theta)。可是这个方针函数又牵涉到重要性采样。在做重要性采样的时分,p(at∣st)p_{\theta}\left(a_{t} | s_{t}\right) 不能与 p′(at∣st)p_{\theta’}\left(a_{t} | s_{t}\right)相差太多。做演示的模型不能与真实的模型相差太多,相差太多,重要性采样的成果就会欠好。咱们在练习的时分,应多加一个束缚(constrain)。这个束缚是 \theta′\theta’ 输出的动作的 KL 散度(KL divergence),这一项用于衡量 \theta′\theta’ 的类似程度。咱们期望在练习的进程中,学习出的 \theta′\theta’ 越类似越好。由于假如 \theta′\theta’ 不类似,最终的成果就会欠好。所以在 PPO 里边有两项:一项是优化本来要优化的J′()J^{\theta^{\prime}}(\theta),另一项是一个束缚。这个束缚就好像正则化(regularization)的项(term) 相同,它所做的便是期望最终学习出的 \theta′\theta’ 相差不大。

JPPO′()=J′()−KL(,′)J′()=E(st,at)∼′[p(at∣st)p′(at∣st)A′(st,at)](8.6) \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} \tag{8.6}

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

JTRPO′()=E(st,at)∼′[p(at∣st)p′(at∣st)A′(st,at)],KL(,′)< \begin{aligned} J_{\mathrm{TRPO}}^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right],\mathrm{KL}\left(\theta, \theta^{\prime}\right)<\delta \end{aligned}

TRPO 与 PPO 不相同的当地是束缚所在的方位不相同,PPO 直接把束缚放到要优化的式子里边,咱们就能够用梯度上升的办法去最大化式(8.6)。但 TRPO 是把 KL 散度当作束缚,它期望 \theta′\theta’ 的 KL 散度小于 \delta。假如咱们运用的是基于梯度的优化,有束缚是很难处理的。TRPO 是很难处理的,由于它把 KL 散度束缚当作一个额外的束缚,没有放在方针(objective)里边,所以它很难核算。因而咱们一般就运用 PPO,而不运用 TRPO 。PPO 与 TRPO 的性能差不多,但 PPO 在完成上比 TRPO 简单得多。

KL 散度到底指的是什么?这儿咱们直接把 KL 散度当作一个函数,输入是 \theta′\theta’,但并不是把 \theta′\theta’ 当作一个散布,核算这两个散布之间的间隔。所谓的 \theta′\theta’ 的间隔并不是参数上的间隔,而是行为(behavior)上的间隔。假定咱们有两个艺人————\theta′\theta’,所谓参数上的间隔便是核算这两组参数有多类似。这儿讲的不是参数上的间隔, 而是它们行为上的间隔。咱们先代入一个状况 ss,它会对动作的空间输出一个散布。假定咱们有 3 个动作,3 个或许的动作就输出 3 个值。行为间隔(behavior distance)便是,给定相同的状况,输出动作之间的间隔。这两个动作的散布都是概率散布,所以咱们能够核算这两个概率散布的 KL 散度。把不同的状况输出的这两个散布的 KL 散度的平均值便是咱们所指的两个艺人间的 KL 散度。

Q:为什么不直接核算 \theta′\theta’ 之间的间隔?核算这个间隔乃至不必核算 KL 散度,L1 与 L2 的范数(norm)也能够确保 \theta′\theta’ 很类似。

A:在做强化学习的时分,之所以咱们考虑的不是参数上的间隔,而是动作上的间隔,是由于很有或许关于艺人,参数的改动与动作的改动不必定是完全一致的。有时分参数稍微变了,它或许输出动作的就差许多。或者是参数变许多,但输出的动作或许没有什么改动。所以咱们真实介意的是艺人的动作上的间隔,而不是它们参数上的间隔。因而在做 PPO 的时分,所谓的 KL 散度并不是参数的间隔,而是动作的间隔。

2.1 近端战略优化赏罚

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

咱们来看一下 PPO1 算法,即近端战略优化赏罚算法。它先初始化一个战略的参数 0\theta^0。在每一个迭代里边,咱们用前一个练习的迭代得到的艺人的参数 k\theta^k 与环境交互,采样到很多状况-动刁难。依据 k\theta^k 交互的成果,咱们估测Ak(st,at)A^{\theta^{k}}\left(s_{t}, a_{t}\right)。咱们运用 PPO 的优化公式。但与本来的战略梯度不相同,本来的战略梯度只能更新一次参数,更新完今后,咱们就要重新采样数据。可是现在不同,咱们用 k\theta^k 与环境交互,采样到这组数据今后,咱们能够让 \theta 更新许屡次,想办法最大化方针函数,如式(8.7)所示。这儿边的 \theta 更新许屡次也没有联系,由于咱们已经有重要性采样,所以这些经验,这些状况-动刁难是从 k\theta^k 采样出来的也没有联系。\theta 能够更新许屡次,它与 k\theta^k 变得不太相同也没有联系,咱们能够照样练习 \theta

JPPOk()=Jk()−KL(,k)(8.7) J_{\mathrm{PPO}}^{\theta^{k}}(\theta)=J^{\theta^{k}}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^{k}\right) \tag{8.7}

在 PPO 的论文里边还有一个自适应KL散度(adaptive KL divergence)。这儿会遇到一个问题就,即\beta 要设置为多少。这个问题与正则化相同,正则化前面也要乘一个权重,所以 KL 散度前面也要乘一个权重,但 \beta 要设置为多少呢?咱们有一个动态调整 \beta 的办法。在这个办法里边,咱们先设一个能够承受的 KL 散度的最大值。假定优化完式(8.7)今后,KL 散度的值太大,这就代表后面赏罚的项KL(,k)\beta \mathrm{KL}\left(\theta, \theta^{k}\right) 没有发挥作用,咱们就把 \beta 增大。别的,咱们设一个 KL 散度的最小值。假如优化完式(8.7)今后,KL 散度比最小值还要小,就代表后面这一项的作用太强了,咱们怕他只优化后一项,使\thetak\theta^k 相同,这不是咱们想要的,所以咱们要减小 \beta\beta 是能够动态调整的,因而咱们称之为自适应KL赏罚(adaptive KL penalty)。咱们能够总结一下自适应KL赏罚:

  • 假如 KL(,k)>KLmax⁡\mathrm{KL}(\theta,\theta^k)>\mathrm{KL}_{\max},增大 \beta
  • 假如 KL(,k)<KLmin⁡\mathrm{KL}(\theta,\theta^k)<\mathrm{KL}_{\min},减小 \beta

近端战略优化赏罚可表明为

JPPOk()=Jk()−KL(,k)Jk()≈∑(st,at)p(at∣st)pk(at∣st)Ak(st,at) \begin{aligned} &J_{\text{PPO}}^{\theta^{k}}(\theta)=J^{\theta^{k}}(\theta)-\beta \text{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}

2.2 近端战略优化裁剪

假如咱们觉得核算 KL 散度很杂乱,那么还有一个 PPO2算法,PPO2 即近端战略优化裁剪。近端战略优化裁剪的方针函数里边没有 KL 散度,其要最大化的方针函数为

JPPO2k()≈∑(st,at)min⁡(p(at∣st)pk(at∣st)Ak(st,at),clip⁡(p(at∣st)pk(at∣st),1−,1+)Ak(st,at))(8.8) \begin{aligned} J_{\mathrm{PPO2}}^{\theta^{k}}(\theta) \approx \sum_{\left(s_{t}, a_{t}\right)} \min &\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right),\right.\\ &\left.\operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right) A^{\theta^{k}}\left(s_{t}, a_{t}\right)\right) \end{aligned} \tag{8.8}

其间,

  • 操作符(operator)min 是在第一项与第二项里边挑选比较小的项。
  • 第二项前面有一个裁剪(clip)函数,裁剪函数是指,在括号里边有3项,假如第一项小于第二项,那就输出 1−1-\varepsilon;第一项假如大于第三项,那就输出 1+1+\varepsilon
  • \varepsilon 是一个超参数,是咱们要调整的,能够设置成 0.1 或 0.2 。

假定设置 =0.2\varepsilon=0.2,咱们可得

clip⁡(p(at∣st)pk(at∣st),0.8,1.2) \operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}, 0.8, 1.2\right)

假如 p(at∣st)pk(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} 算出来小于 0.8,那就输出 0.8;假如算出来大于 1.2,那就输出1.2。

咱们先要了解

clip⁡(p(at∣st)pk(at∣st),1−,1+) \operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right)

图 8.2 的横轴代表 p(at∣st)pk(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)},纵轴代表裁剪函数的输出。

  • 假如 p(at∣st)pk(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} 大于1+1+\varepsilon,输出便是 1+1+\varepsilon
  • 假如小于 1−1-\varepsilon,输出便是 1−1-\varepsilon
  • 假如介于 1+1+\varepsilon ~{} 1−1-\varepsilon,输出等于输入。
强化学习从基础到进阶--案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
图 8.2 裁剪函数

如图 8.3a 所示,p(at∣st)pk(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} 是绿色的线;clip⁡(p(at∣st)pk(at∣st),1−,1+)\operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right) 是蓝色的线;在绿色的线与蓝色的线中心,咱们要取一个最小的成果。假定前面乘上的项 AA 大于 0,取最小的成果,便是赤色的这条线。如图 8.3b 所示,假如 AA 小于 0 ,取最小成果的今后,就得到赤色的这条线。

强化学习从基础到进阶--案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法

                                         图 8.3 AA对裁剪函数输出的影响

尽管式(8.8)看起来有点儿杂乱,但完成起来是比较简单的,由于式(8.8)想要做的便是期望 p(at∣st)p_{\theta}(a_{t} | s_{t})pk(at∣st)p_{\theta^k}(a_{t} | s_{t})比较挨近,也便是做演示的模型与实践上学习的模型在优化今后不要间隔太大。

怎样让它做到不要间隔太大呢?

  • 假如 A>0A > 0,也便是某一个状况-动刁难是好的,咱们期望增大这个状况-动刁难的概率。也便是,咱们想让 p(at∣st)p_{\theta}(a_{t} | s_{t}) 越大越好,但它与 pk(at∣st)p_{\theta^k}(a_{t} | s_{t}) 的比值不能够超越 1+1+\varepsilon。假如超越 1+1+\varepsilon ,就没有优点了。赤色的线便是方针函数,咱们期望方针函数值越大越好,咱们期望 p(at∣st)p_{\theta}(a_{t} | s_{t}) 越大越好。可是 p(at∣st)pk(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} 只需大过 1+1+\varepsilon,就没有优点了。所以在练习的时分,当 p(at∣st)p_{\theta}(a_{t} | s_{t}) 被练习到 p(at∣st)pk(at∣st)>1+\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}>1+\varepsilon 时,它就会停止。假定 p(at∣st)p_{\theta}(a_{t} | s_{t})pk(at∣st)p_{\theta^k}(a_{t} | s_{t}) 还要小,而且这个优势是正的。由于这个动作是好的,咱们期望这个动作被采纳的概率越大越好,期望 p(at∣st)p_{\theta}(a_{t} | s_{t}) 越大越好。所以假定 p(at∣st)p_{\theta}(a_{t} | s_{t}) 还比 pk(at∣st)p_{\theta^k}(a_{t} | s_{t}) 小,那就尽量把它变大,但只需大到 1+1+\varepsilon 就好。

  • 假如 A<0A < 0,也便是某一个状况-动刁难是欠好的,那么咱们期望把 p(at∣st)p_{\theta}(a_{t} | s_{t}) 减小。假如 p(at∣st)p_{\theta}(a_{t} | s_{t})pk(at∣st)p_{\theta^k}(a_{t} | s_{t}) 还大,那咱们就尽量把它减小,减到 p(at∣st)pk(at∣st)\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}1−1-\varepsilon 的时分停止,此刻不必再减得更小。

这样的优点便是,咱们不会让 p(at∣st)p_{\theta}(a_{t} | s_{t})pk(at∣st)p_{\theta^k}(a_{t} | s_{t}) 间隔太大。要完成这个其实很简单。

图 8.4 所示为 PPO 与其他算法的比较。优势艺人-评论员和优势艺人-评论员+信赖区域(trust region)算法是基于艺人-评论员的办法。PPO 算法是用紫色线表明,图 8.4 中每张子图表明某一个强化学习的使命,在大都状况中,PPO 都是不错的,即时不是最好的,也是第二好的。

强化学习从基础到进阶--案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
图 8.4 PPO与其他算法的比较

参考文献

  • OpenAI Spinning Up
  • 百面机器学习

更多优质内容请重视公号:汀丶人工智能

相关链接以及码源见文末

强化学习从基础到进阶-事例与实践含码源-强化学习全系列超详细算法码源齐全