【深度强化学习】5. Proximal Policy Optimization

news/2024/5/18 6:30:18 标签: 人工智能, 深度学习, 强化学习, 算法

【DataWhale导读】李宏毅老师的深度强化学习之PPO(近端策略优化)部分内容。

文章目录

    • 1. 概念/关键词
    • 2. from on-policy to off-policy
    • 3. PPO/TRPO
      • 3.1 PPO-Penalty
      • 3.2 PPO-Clip
    • 4. 参考

1. 概念/关键词

名称解释
On-Policy学习的agent和与环境互动的agent是同一个(自己打王者)
Off-Policy学习的agent和与环境互动的agent不是同一个(学习主播打王者)
A θ ( s t , a t ) A^{\theta}\left(s_{t}, a_{t}\right) Aθ(st,at)Advantage Function
importance sampling使用另外一种数据分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡罗方法结合使用

2. from on-policy to off-policy

上一篇文章讲的是Policy Gradient, 这是一种on-policy的做法,因为这个算法是一边跟环境互动,一边按照Policy Gradient的公式来更新 π \pi π的参数。

off-policy就是让当前agent学习另外一个agent经历过的轨迹,从而学习到策略,这个过程中可以重复利用采样得到的数据。

Importance Sampling(重要性采样)

重要性采样是蒙特卡洛积分的一种采样策略,详解:https://zhuanlan.zhihu.com/p/41217212

简单解释一下,下面是一个普通的期望, x i x^i xi是从p(x)中采样的,可以获取到的。
E x ∼ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) x i is sampled from  p ( x ) E_{x\sim p}[f(x)]\approx\frac{1}{N}\sum^N_{i=1}f(x^i) \\ x^i \text{is sampled from } p(x) Exp[f(x)]N1i=1Nf(xi)xiis sampled from p(x)
添加一个约束,这里只有从q(x)中采样得到的 x i x^i xi(无法直接从p(x)中获取),那么如何计算这个期望呢?这就要用到重要性采样。
E x ∼ p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim p}[f(x)]=\int f(x)p(x)dx=\int f(x)\frac{p(x)}{q(x)}q(x)dx \\ =E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Exp[f(x)]=f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]
通过引入 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)这个weight,就可以将从p中sample数据的问题转化为从q中sample数据的问题。

ISSUE: 存在问题

虽然 E x ∼ p [ f ( x ) ] = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim p}[f(x)]=E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Exp[f(x)]=Exq[f(x)q(x)p(x)], 但是两者的方差不同,如果两者 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)差距过大,这样估计出来的结果方差过大,无法正常使用。

将重要性采样引入Policy Gradient

上一篇讲的Policy Gradient公式:
∇ R θ ˉ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ l o g p θ ( τ ) ] \nabla \bar{R_\theta}=E_{\tau \sim p_\theta(\tau)}[R(\tau)\nabla log p_\theta(\tau)] Rθˉ=Eτpθ(τ)[R(τ)logpθ(τ)]

这种模式是让 θ \theta θ和环境去做互动,然后sample得到Trajectory,计算对应梯度。

为了将on-policy打造成off-policy方法,进行如下修改:
∇ R θ ˉ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ∇ l o g p θ ( τ ) ] \nabla \bar{R_\theta}=E_{\tau \sim p_\theta '(\tau)}[\frac{p_\theta(\tau)}{p_{\theta '(\tau)}}R(\tau)\nabla log p_\theta(\tau)] Rθˉ=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]
也就是说,数据来源于 p θ ′ p_{\theta'} pθ中获取的,而不是 p θ p_{\theta} pθ

这种模型不需要 θ \theta θ和环境互动,存在另外一个policy θ ′ \theta ' θ, 其工作就是和环境做互动,sample得到Trajectory就可以供 θ \theta θ学习。

详细推导

Gradient for update
∇ J ˉ = E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ∇ log ⁡ p θ ( a t n ∣ s t n ) ] \nabla \bar{J}=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] \\ Jˉ=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)]
然后引入重要性采样:
= E ( s t , a t ) ∼ π θ ′ [ P θ ( s t , a t ) P θ ′ ( s t , a t ) A θ ′ ( s t , a t ) ∇ log ⁡ p θ ( a t n ∣ s t n ) ] =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta '}}\left[\frac{P_\theta(s_t,a_t)}{P_{\theta '}(s_t,a_t)}A^{\theta '}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] =E(st,at)πθ[Pθ(st,at)Pθ(st,at)Aθ(st,at)logpθ(atnstn)]
注意A的角标也应该变成 θ ′ \theta ' θ。然后展开重要性weight:
= E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ( s t ) p θ ′ ( a t ∣ s t ) p θ ′ ( s t ) A θ ′ ( s t , a t ) ∇ log ⁡ p θ ( a t n ∣ s t n ) ] =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta '}}\left[\frac{p_\theta(a_t|s_t)p_\theta(s_t)}{p_{\theta'}(a_t|s_t)p_{\theta '}(s_t)}A^{\theta '}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] =E(st,at)πθ[pθ(atst)pθ(st)pθ(atst)pθ(st)Aθ(st,at)logpθ(atnstn)]
其中 p θ ( s t ) p θ ′ ( s t ) \frac{p_\theta(s_t)}{p_{\theta '}(s_t)} pθ(st)pθ(st)可以消去,因为出现state的概率和 θ \theta θ是没有关系的,和environment有关系,所以有 p θ ( s t ) = p θ ′ ( s t ) p_{\theta}(s_t)=p_{\theta'}(s_t) pθ(st)=pθ(st)。消去后得到:
∇ J = E ( s t , a t ) ∼ π θ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ∇ log ⁡ p θ ( a t n ∣ s t n ) ] \nabla {J}=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta}}\left[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta '}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] J=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)logpθ(atnstn)]
可以通过 ∇ f ( x ) = f ( x ) ∇ log ⁡ f ( x ) \nabla f(x)=f(x) \nabla \log f(x) f(x)=f(x)logf(x)反推目标函数,由于过程太多,不便用markdown书写,具体过程如下图所示:

推导过程

推到结果如下:
J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta^{\prime}}(\theta)=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θ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]
J θ ′ ( θ ) J^{\theta '}(\theta) Jθ(θ)中的 θ \theta θ代表的是需要去optimize的参数, θ ’ \theta ’ θ代表真正跟环境互动的agent,通过 θ ′ \theta ' θsample 到的轨迹来让 θ \theta θ学习。到这一步,就可以将on-policy替换成off-policy,但是需要满足一个条件,分子分母不能相差太多,如何让他们相差不多呢?PPO算法就是用来解决这个问题。

3. PPO/TRPO

上面已经得到了目标函数,在此基础上,PPO添加了一个正则项。
J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta '}_{PPO}(\theta)=J^{\theta '}(\theta)-\beta KL(\theta,\theta ')\\ J^{\theta^{\prime}}(\theta)=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] JPPOθ(θ)=Jθ(θ)βKL(θ,θ)Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]
可以看到区别在于 β K L ( θ , θ ′ ) \beta KL(\theta,\theta ') βKL(θ,θ), KL代表的是KL divergence散度,KL散度是用来衡量两个分布的相似程度,越相似,loss越小。
K L ( p , q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) KL(p,q)=\sum_{i=1}^n p(x_i)log(\frac{p(x_i)}{q(x_i)}) KL(p,q)=i=1np(xi)log(q(xi)p(xi))
目标是最大化 J P P O θ ′ ( θ ) J^{\theta '}_{PPO}(\theta) JPPOθ(θ),那就要最小化 K L ( θ , θ ′ ) KL(\theta,\theta') KL(θ,θ),也就是说两者分布越接近越好。KL散度衡量的不是参数上的距离,而是行为上的距离,对action的space距离进行衡量。

TRPO

TRPO是PPO的前身:
J T R P O θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] K L ( θ , θ ′ ) < δ \begin{aligned} J_{T R P O}^{\theta^{\prime}}(\theta)=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} JTRPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]KL(θ,θ)<δ
不同之处在于TRPO将KL散度作为约束条件,这种方法很难处理的,很难算(属于二次规划问题吧),最好还是使用PPO来求解,两者达到的效果差不多。

3.1 PPO-Penalty

算法流程如上,先收集s,a组成的pair, 然后计算advantage function(具体如何计算不是很清楚目前,具体算法可能不一样),最后根据PPO更新目标函数即可, β \beta β是一个超参数,可以通过以上式子进行动态控制。

3.2 PPO-Clip

也就是视频中提到的PPO2, 如下公式所示:
J P P O 2 θ k ( θ ) ≈ ∑ ( s t , a t ) min ⁡ ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) , clip ⁡ ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ε , 1 + ε ) A θ k ( s t , a t ) ) \begin{aligned} J_{P P O 2}^{\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} JPPO2θk(θ)(st,at)min(pθk(atst)pθ(atst)Aθk(st,at),clip(pθk(atst)pθ(atst),1ε,1+ε)Aθk(st,at))
首先理解这个部分:
clip ⁡ ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 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) clip(pθk(atst)pθ(atst),1ε,1+ε)

上图的横轴是 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(atst)pθ(atst),纵轴是 clip function 的输出。

  • 如果 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(atst)pθ(atst) 大于 1 + ε 1+\varepsilon 1+ε,输出就是 1 + ε 1+\varepsilon 1+ε
  • 如果小于 1 − ε 1-\varepsilon 1ε, 它输出就是 1 − ε 1-\varepsilon 1ε
  • 如果介于 1 + ε 1+\varepsilon 1+ε 1 − ε 1-\varepsilon 1ε 之间, 就是输入等于输出。

  • p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(atst)pθ(atst) 是绿色的线;
  • clip ⁡ ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 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) clip(pθk(atst)pθ(atst),1ε,1+ε) 是蓝色的线;
  • 在绿色的线跟蓝色的线中间,要取一个最小的。假设前面乘上的这个 term A,它是大于0 的话,取最小的结果,就是红色的这一条线。

可以得到结论:这个式子想要做的事情就是希望 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(atst),也就是你拿来做 demonstration 的 model 跟你实际上 learn 的 model,在 optimize 以后不要差距太大

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

  • 如果 A > 0,也就是某一个 s,a 的 pair 是好的,那希望增加这个pair 的概率, p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) 越大越好,但跟 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(atst) 的比值不可以超过 1 + ε 1+\varepsilon 1+ε
    • 如果超过 1 + ε 1+\varepsilon 1+ε 的话,就没有 benefit 了。在 train 的时候,当 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) 被 train 到 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) > 1 + ε \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}>1+\varepsilon pθk(atst)pθ(atst)>1+ε 时,它就会停止。
    • 假设 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(atst) 还要小,并且这个 advantage 是正的。这个 action 是好的,当然希望这个 action 被采取的概率越大越好,希望 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) 越大越好。所以假设 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) 还比 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(atst) 小,那就尽量把它挪大,但只要大到 1 + ε 1+\varepsilon 1+ε 就好。
  • 如果 A < 0,也就是某一个 s,a pair 是不好的,希望把 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) 减小。如果 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(atst) p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(atst) 还大,那你就尽量把它压小,压到 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(atst)pθ(atst) 1 − ϵ 1-\epsilon 1ϵ 的时候就停了,就不要再压得更小。

4. 参考

https://www.bilibili.com/video/BV1MW411w79n?p=2

https://datawhalechina.github.io/leedeeprl-notes/#


http://www.niftyadmin.cn/n/1003466.html

相关文章

BPM分析

BPM的产生缘由 近年来&#xff0c;随着计算机技术的发展和互联网时代的到来&#xff0c;我们已经进入了信息时代&#xff0c;也称为数字化时代&#xff0c;在这数字化的时代里&#xff0c;企业的经营管理都受到了极大的挑战。从上世纪90年代起至今&#xff0c;企业的信息化工作…

Android入门第十三篇之Gallery + ImageSwitcher

上次讲了如何使用Gallery控件&#xff0c;这次就讲Gallery 与ImageSwitcher的结合使用&#xff0c;本文实现一个简单的浏览图片的功能。先贴出程序运行截图&#xff1a; 除了Gallery可以拖拉切换图片&#xff0c;我在ImageSwitcher控件加入了setOnTouchListener事件实现&…

手把手教你安装mysql主从复制

现状描述今天个人办公电脑更换好后&#xff0c;也陆陆续续的进行数据拷贝的工作。上午下载好VMwareworkstation后&#xff0c;就用光盘安装了下Centos6.2&#xff0c;具体安装步骤这里就不一一赘述了。然后考虑到以后会用好几台做集群实验和测试&#xff0c;安装好后&#xff0…

【深度强化学习】6. Q-Learning技巧及其改进方案

【DataWhale打卡】第四次任务&#xff0c;主要是重新学习一下李宏毅的Q-learning部分的知识&#xff0c;推导很多。之前看的时候就是简单过了一遍&#xff0c;很多细节没有清楚。这篇笔记包括了李宏毅深度强化学习三个视频长度的内容。 文章目录1. 概念/解释2. Value Function3…

WIKIOI – 1012 最大公约数和最小公倍数问题

题目描述 Description 输入二个正整数x0,y0(2<x0<100000,2<y0<1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入描述 Input Description 二个正整数x0,y…

Android MediaScanner 详尽分析

MediaScanner分析 一 MediaScannerService 多媒体扫描是从MediaScannerService开始的。这是一个单独的package。位于 packages/providers/MediaProvider&#xff1a;含以下java文件 l MediaProvider.java l MediaScannerReceiver.java l MediaScannerService.java l Med…

Struts2漏洞分析之Ognl表达式特性引发的新思路

一、摘要在Ognl表达式中&#xff0c;会将被括号“()”包含的变量内容当做Ognl表达式执行。Ognl表达式的这一特性&#xff0c;引发出一种新的***思路。通过将恶意代码存储到变量中&#xff0c;然后在调用Ognl表达式的函数中使用这个变量来执行恶意的代码&#xff0c;从而实现***…

【深度强化学习】7. 稀疏奖励和模仿学习

【DataWhale打卡】李宏毅老师视频中的最后两部分&#xff0c;sparse reward和imitation learning。 文章目录1. Sparse Reward1.1 Reward Shaping1.2 Curriculum Learning1.3 Hierarchical RL2. Imitation Learning2.1 Behavior Cloning2.2 Inverse Reinforcement Learning3. 参…