强化学习4-PPO算法

策略梯度算法

假设一条马尔科夫轨迹为 \tau,那么该轨迹发生的概率为:p_\theta (\tau)=p(s_1)\prod_{t=1}^{T}p(a_t|s_t;\theta )p(s_{t+1}|s_t,a_t)

不考虑折扣衰减,该轨迹获得的收益为累计回报:R(\tau )=\sum_{t=0}^{T}r_t

由于马尔科夫链是采样得到的,因此当前策略可获得的期望奖励为:
\overline{R_\theta } =\sum_{\tau}^{} p_\theta (\tau )R(\tau ) = \mathbb{E}_{\tau \sim p_\theta (\tau )} [R(\tau ) ]

策略梯度定义:
\nabla_{\theta} J(\theta)=\nabla_{\theta} \mathbb{E}[R(\tau)]=\nabla_{\theta} \sum_{\tau} p_{\theta}(\tau) R(\tau)=\sum_{\tau} \nabla_{\theta} p_{\theta}(\tau) R(\tau)

根据公式:\nabla \log{f(x)}=\frac{1}{f(x)}\nabla {f(x)},我们的目标是最大化期望值,故我们对目标函数进行求导:
\begin{aligned} \nabla \overline{R}_{\theta} & =\sum_{\tau} R(\tau) \nabla p_{\theta}(\tau) \\ & =\sum_{\tau} R(\tau) p_{\theta}(\tau) \frac{\nabla p_{\theta}(\tau)}{p_{\theta}(\tau)} \\ & =\sum_{\tau} R(\tau) p_{\theta}(\tau) \nabla \log p_{\theta}(\tau) \\ & =\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \end{aligned}

最终策略梯度变成了求R(\tau) \nabla \log p_{\theta}(\tau)的期望,我们可以可以通过经验平均进行估计。我们可以使用当前策略\pi_\theta采样N条轨迹\tau后,利用N轨迹的经验平均逼近策略梯度(具体公式推导可查看上篇文档):
\begin{aligned} \nabla \overline{R}_{\theta} & =\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\ & =\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) \end{aligned}

一个PG方法的完整流程如下:


首先采集数据,然后基于前面得到的梯度提升的式子更新参数,随后再根据更新后的策略再采集数据,再更新参数,如此循环进行。
注意到图中的大红字only used once,因为在更新参数后,策略已经变了,而先前的数据是基于更新参数前的策略得到的。

A2C方法

从上面可知:PG方法在更新策略时,基本思想就是增加reward大的动作出现的概率,减小reward小的策略出现的概率。

增加基线

假设现在有一种情况,我们的reward在无论何时都是正的,对于没有采样到的动作,它的reward是0。因此,如果一个比较好的动作没有被采样到,而采样到的不好的动作得到了一个比较小的正reward,那么没有被采样到的好动作的出现概率会越来越小,这显然是不合适的,因此我们需要增加一个奖励的基线,让reward有正有负。

\nabla \overline{R}_{\theta} =\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(R(\tau^{n}) - b) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n}),b \approx E [R(\tau )]

增加折扣因子

该轨迹获得的收益为累计回报:R(\tau )=\sum_{t=0}^{T}r_t,它是有问题的,当前动作与过去时刻的回报可能并没有多大的联系,故我们可以把每个动作的reward期望值修改为,该动作之后接收到的reward值,并且按照累积折算进行计算,因为某个动作在时间间隔上产生的影响,应该是越接近,影响越大。即R(\tau )=\sum_{{t}'=t}^{T_n} \gamma^{{t}' - t} r_{{t}'}^n。因此梯度表示为:
\nabla \overline{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(\sum_{{t}'=t}^{T_n} \gamma^{{t}' - t} r_{{t}'}^n - b) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n})

优势函数

在AC方法中,使用Q^{\pi \theta}(s_{t}^{n}, a_{t}^{n})来替代R(\tau^{n}),同时使用一个独立的Critic网络来计算该Q函数值。现在,我们假设基准偏置b表示为状态的价值函数V^{\pi \theta}(s_{t}^{n}),因此梯度可以表示为:
\nabla \overline{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(Q^{\pi \theta}(s_{t}^{n}, a_{t}^{n}) - V^{\pi \theta}(s_{t}^{n})) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n})

这时需要分别计算两个网络:状态-动作价值函数Q和状态函数V,再根据贝尔曼方程,上式表示为:
\nabla \overline{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(r_t^n + V^{\pi}(s_{t+1}^n) - V^{\pi}(s_{t}^{n})) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n})

以上就是优势函数的概念:在状态s_t下,选择动作a_t比其他动作的优势有多少,即A(s, a)=Q(s, a) - V(s)

重要性采样

在第一节的PG算法中有个问题,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。
举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。

那么为了提升我们的训练速度,让采样到的数据可以重复使用,我们可以将on-policy的方式转换为off-policy的方式。即我们的训练数据通过另一个Actor(对应的网络参数为θ'得到)。这要怎么做呢?通过下面的思路:

基于重要性采样的原则,我们可以用另外一个策略\pi_{\theta}',与环境互动采样数据来训练\theta,从而间接计算R(\tau) \nabla \log p_{\theta}((\tau)

重要性采样原理如下:
\begin{aligned} \mathbb{E}_{x \sim p}[f(x)] & =\int f(x) p(x) dx \\ & =\int f(x) \frac{p(x)}{q(x)} q(x) d x \\ & =\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] \end{aligned}

w(x)=\frac{p(x)}{q(x)}即重要性权重(importance weight)。通过这个恒等式,我们可以将求\mathbb{E}_{x \sim p}[f(x)]期望的问题转到另一个分布q(x)下面!即当我们当前的目标分布不太方便得到的时候,我们可以通过另外一个较容易得到的分布,来求得当前的目标分布。

因此,我们可以将梯度表示为:
\begin{aligned} \nabla R_{\theta} & =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} \mid s_{t}\right)\right] \\ & =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^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t} \mid s_{t}\right)\right] \\ & =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} \mid s_{t}\right) p_{\theta}\left(s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} \mid 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} \mid s_{t}\right)\right] \\ & =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} \mid s_{t}\right)\right] \end{aligned}

基于重要性采样的原则,由于A^{\theta}(s_{t}, a_{t})是Actor与环境交互的时候计算出来的,所以当从\theta换到\theta^{\prime}时候,就需要变换成A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)。并且最后一项假设两个分布不能差太远,所以认为他们是相等的,为了求解方便,我们直接划掉。

但是,基于重要性采样有个缺点,就是p(x)q(x)的分布不能差别太大(这点可根据两个分布期望和方差的差异得出)。当两个分布差距比较大的时候,通过重要性采样得到的样本数据可能就不对了,如下所示:

如图所示,p(x),q(x) 两个分布差距较大,当使用 p(x) 采样少量的样本的时候,f(x) 停留在左边,这时f(x) 的期望是负的;如果我们使用q(x)分布进行一些重要性采样,得到的样本期望可能是正的。这与f(x)在左边得到的期望值就不相符合了。当然如果q(x)采样足够多的话,还是有希望采样到左边的数据,进而得到负的期望值。 那么,如果可以保证p(x)和q(x)这两个分布是在某个程度内相似的,是不是就可以解决这个问题了呢?

PPO

对上面的梯度公式,根据\nabla f(x)=f(x)\nabla logf(x),反过来用,可以得到PPO的目标函数为:
J^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})} A^{\theta^{\prime}}(s_{t}, a_{t})]

信任区域策略优化(TRPO)

我们不希望\theta\theta^{\prime}两者分布的差距不能过大,所以需要进行约束。引入KL散度来做限制。KL散度也叫相对熵,可以用来衡量两个分布之间的差异性。所以最直接的办法,就是对目标函数增加一个约束条件让他的KL散度小于\delta。目标函数如下:
\underset{\theta }{max} J_{TRPO}^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})} A^{\theta^{\prime}}(s_{t}, a_{t})] \\ subject to KL(\theta, \theta^{\prime})<\delta

TRPO 与 PPO 不一样的地方是约束项的位置不一样,PPO 是直接把约束放到要优化的式子里,可以直接用梯度上升的方法最大化这个式子。但TRPO是把 KL 散度当作约束,它希望\theta\theta^{\prime}的 KL 散度小于一个\delta。如果我们使用的是基于梯度的优化时,有约束是很难处理的,因为它把 KL 散度约束当做一个额外的约束,没有放目标里面。PPO 跟 TRPO 的性能差不多,但 PPO 在实现上比 TRPO 容易的多,所以我们一般就用 PPO,而不用TRPO

PPO1:近端策略优化惩罚(PPO-penalty)

实际上,直接求解TRPO这种带约束的问题是十分复杂的,需要计算二阶梯度。所以PPO-penalty直接将KL散度作为一个惩罚项放在目标函数中,如下所示:
\underset{\theta }{max} J_{PPO1}^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})} A^{\theta^{\prime}}(s_{t}, a_{t})] - \beta KL(\theta , \theta^{\prime})

为了更进一步提高惩罚项的作用,论文加入自适应的思想,当两者分布KL散度较大的时候,增大惩罚,使策略更新更加谨慎;当两个分布较相似的时候,减少惩罚,使之学得更快。即
\begin{cases} & \text{ if } KL(\theta , \theta^{\prime}) > KL_{max}, increase \beta \\ & \text{ if } KL(\theta , \theta^{\prime}) < KL_{min}, decrease \beta \end{cases}

PPO2:近端策略优化裁剪(PPO-clip)

PPO2再次提出更简洁的改进方法来限制\theta^{\prime}两个分布的距离。直接引入一个小的修剪量\epsilon。使这两个分布的比值约束在[1-\epsilon, 1+\epsilon]之间。PPO-clip的目标函数如下:
\underset{\theta }{max} J_{PPO2}^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[min(r_t(\theta), clip(r_t(\theta), 1-\epsilon , 1+\epsilon)) A^{\theta^{\prime}}(s_{t}, a_{t})]

其中,r_t(\theta)=\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})}表示重要性采样比率;A^{\theta^{\prime}}(s_{t}, a_{t})表示当前策略下的优势函数,当A>0时,希望增加该p_{\theta}的概率;但是不能过大,过大会使与p_\theta^{\prime}差距大,导致效果不好。反之亦然。

如上图所示,图示中的x轴是r_t(\theta,y轴表示clip(r_t(\theta), 1-\epsilon , 1+\epsilon),绿色的点表示r_t(\theta)的值,蓝色表示的是clip(r_t(\theta), 1-\epsilon , 1+\epsilon)的值,红色则表示PPO2的取值。

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容