强化学习PPO从理论到代码详解(2)---PPO1和PPO2

这篇具有很好参考价值的文章主要介绍了强化学习PPO从理论到代码详解(2)---PPO1和PPO2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在线或离线学习

 

上一节我们了解了什么是策略梯度,本节开始讲PPO理论之前,我们先提出一个概念,什么在线学习,什么离线学习。

On-policy: Then agent learned and the agent interacting with Environment is the same

Off-policy: Then agent learned and the agent interacting with Environment is not the same

英语确实不好理解,用中文讲就是说,你训练agent需要数据,这些数据可能是你训练的agent和环境交互产生的,那么这就是在线,也可能不是训练的agent产生的,而是另外的agent产生的,这就是离线。

对于一个策略梯度来说在线,离线有什么区别呢?

策略梯度根据上一节的结论,理论上的公式如下,这是一个在线学习的梯度:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

 (这里多了一个上一节没有的公式,就是用了一个均值符号)

  • 现在我们用一个去收集数据,但是更新了一次之后,就要重新去收集数据,因为之前用的是,梯度上升完了参数就变了,这就是驴唇不对马嘴🙄🙄。而且这样效率也低,为什么,因为强化学习大部分的时间都不是消耗在GPU上,而是和环境的互动上,好不容易互动出来点数据,更新一下又得扔了,能不低效吗。
  • 那么转成离线off policy好像就可以解决这个问题,也就是说我们可以从收集数据取更新,因为是固定的,就可以重复利用,大大提升效率。

****************

( 这里插一嘴,李宏毅老师在这里称作是从on-policy 到 off-policy。PPO给我的感觉也是一个离线的算法,但是easy-rl和很多其他博主都说PPO是一个在线,包括PPO2的论文原文也说PPO比其他的on-policy策略要叼。这里也欢迎讨论)强化学习PPO从理论到代码详解(2)---PPO1和PPO2

****************

重要性采样Important Sampling

我们找到了一个提升训练效率的方法, 可以从收集数据取更新,因为是固定的,就可以重复利用,大大提升效率。但是凭什么可以训练啊,你的上一章梯度公式里明明只有一个,你这公式保熟吗?🍉🍉

这里就不得不提到重要性样Important Sampling

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

 先看这个公式,假设我们有一个函数f(x),我们从一个分部p中采样,把采样到的的x在带入f(x)。这样即使我们不能对f(x)积分,只要采样够多,我们就可以f(x)在p分布中的均值得到一个均值。

现在我们在假设一种情况,如果我们不能从p中去采样,我们只能从另外一个分部q(x)去采样,可以得到f(x)在p分布中的均值吗? 答案是肯定的,具体的推导如下:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

最后结论是这样:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

这里看不懂的可以复习下概率论,如果你比较懒也不影响你理解,这里要记住的是,我们已经成功的把从p的采样,改为了从q中的采样。

我们把这个称为重要性权值。如果我们 sample非常多,那么这个重要性权不会有什么影响。但是,but,这是很理想的情况,真是情况不太可能sample的非常均匀且足够,如果这两个分布的方差非常大的话,sample的次数一旦不足,最后结果误差就会非常大!

所以现在提问Q:从p中采样和从q中采样方差Variance一样吗?

根据公式(还是概率论中的公式)来计算一下。

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

 其实p采样和q采样的方差就差了一项重要性权值,,也就是说只要我们保证这两个差别不要太大,结果就还是理想的。举个经典例子,上图

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

简单来说就是,q分布再右侧概率较大,sample时候容易偏向右,sample出来的正值的点多可能会计算错误,把f(x)均值计算成正的,但实际上它是负值。如果能采样到左边,是一个绝对值很大的负值,就可以很好的纠正最后的计算结果。

on-policy在线 → off policy 离线

经过了这么多的验证,那么我们怎么把PPO从在线推到离线呢,就像这样。其实跟上面说的一样

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

这样整个策略梯度中,我们就可以用来更新。这样就可以让采样大量数据,然后更新多次,大大提升了效率。实际上做策略梯度时,我们并不是用整条轨迹来做更新,而是根据每一个状态-动作() 对来分别计算。实际更新梯度的过程用的其实就是下式:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

然后在从在线推到离线:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

上的,代表是策略参数为与环境交互,但实际上现在我们用的是来采样,现在这个优势就是用来估算的,这里先不管那么多,假设。

然后我们在拆分这两项和

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

Q:这里恰一个问题:为什么要拆分呢?如果不拆分,或者 ,是什么,是我们输入一个动作-状态对,然后输出一个概率,但实际上我们的策略网络并不是这个结构,想一想策略网略是输入一个状态然后输出一个动作的概率分布啊。如果不懂可以接着往后看,看完代码在会后看看以这个问题。

现在梯度下降就可以看做是:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

蓝框中的这一项可以消掉,原因可以说是不管是用,还是看到同一状态的概率是一样的,又或者是这两项不好计算,想一想玩游戏时候,游戏画面复杂众多,好像计算某一个画面的出现概率很难计算,这里就直接消掉了,反正最后效果很好,神奇而玄学吧😂😂。

我们把要优化的目标的函数成为,是其中要优化的参数强化学习PPO从理论到代码详解(2)---PPO1和PPO2

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

再根据链式法带入,则得到最后的目标函数。(终于得到可以用的目标的函数了🤪🤪,是不是很easy)

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

  • θ 代表我们要去优化的参数
  • θ′ 是指我们用θ′ 做示范,就是现在真正在与环境交互的是θ′

近端策略优化

还记得开始的时候我们写的重要性采样原理吗?里面有很重要的一条的就是θ,θ′ 两个采样样本差异要小,这里就用KL散度(KL divergence)来衡量这个差异,如果你不知道KL散度是什么,可以看这篇。但是,这里我们只要记得KL散度就是用来衡量θ,θ′的差异大小
初学机器学习:直观解读KL散度的数学概念 - 知乎选自 http://thushv.com,作者:Thushan Ganegedara,机器之心编译。机器学习是当前最重要的技术发展方向之一。近日,悉尼大学博士生 Thushan Ganegedara 开始撰写一个系列博客文章,旨在为机器学习初学者介绍一些…https://zhuanlan.zhihu.com/p/37452654

 PPO的公式就是在上面策略梯度的基础上加上一个KL散度的限制

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

这里KL可以当做一个函数,注意这里θ 与 θ′ 的距离并不是参数上的距离,而是输出动作上的差异。

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

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

RPO 是很难处理的,因为它把 KL 散度约束当作一个额外的约束,没有放在目标(objective)里面,所以它很难计算。因此我们一般就使用 PPO,而不使用 TRPO 。PPO 与 TRPO 的性能差不多,但 PPO 在实现上比 TRPO 容易得多。

PPO1(近端策略优化惩罚)

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

PPO1 是近端策略优化惩罚(PPO-penalty),在 PPO 的论文里面还有一个自适应KL散度(adaptive KL divergence)。这里会遇到一个问题就,即β 要设置为多少?这里easy-rl解释的非常清楚了,我就直接引用了

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

KL 散度的值太大,这就代表后面惩罚的项βKL(,) 没有发挥作用,我们就把β 增大。另外,我们设一个 KL 散度的最小值。如果优化上式以后,KL 散度比最小值还要小,就代表后面这一项的效果太强了,我们怕他只优化后一项,使与  一样,这不是我们想要的,所以我们要减小 β。β 是可以动态调整的,因此我们称之为自适应KL惩罚(adaptive KL penalty)。我们可以总结一下自适应KL惩罚:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

 具体不再延伸,因为实际问题我们基本都会用PPO2而不是PPO1。本文的代码也是PPO2,所以向更具体了解的童鞋们可以再去看相关的论文。

 PPO2(近端策略优化剪裁)

PPO2可以说是简单粗暴,为什么这么说呢,看公式

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

计算KL散度太复杂,我干脆直接限定输出动作概率分布比值的最大最小值,就用min,和clip中的这一串,整个式子中:

  • min 是在第一项与第二项里面选择比较小的项
  • 有一个裁剪clip函数(代码中非常好实现,比如用numpy就有对应的api),裁剪函数是指,在括号里面有3项,如果第一项小于第二项,那就输出 1−ε;第一项如果大于第三项,那就输出 1+ε
  • ε 是一个超参数,是我们要调整的,

就是这么简单粗暴,但是,实际效果却非常好!对于clip函数,再放一张图让大家便于理解:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

那么A是如何影响结果的呢,直接放图:

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

PPO2用了min,用了clip其实还是不想让  和,差距过大,那么PPO2是怎么做到的?

  • 如果 A > 0,也就是某一个状态-动作对是好的,我们希望增大这个状态-动作对的概率。也就是,我们想让 越大越好,但它与 的比值不可以超过1+ε。根据重要性采样,如果比值过大很可能会导致结果不准确。
  • 如果 A < 0,也就是某一个状态-动作对是不好的,那么我们希望把  减小。如果比 还大,那我们就尽量把它减小1−ε 的时候停止,此时不用再减得更小。

这样和差距就不会太大。

这一章节我们分析了PPO1,PPO2,基本上所用到的理论都覆盖到了,下一章我们将一步步的写PPO2的代码。文章来源地址https://www.toymoban.com/news/detail-411590.html

到了这里,关于强化学习PPO从理论到代码详解(2)---PPO1和PPO2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度强化学习(DRL)算法 2 —— PPO 之 GAE 篇

    在之前的文章里介绍了 PPO 之 Clipped Surrogate Objective 篇,提出了现有方法存在方差较大的缺点,今天我们介绍一下如何使用 GAE(Generalized Advantage Estimation)进行改进。 上文提到的 Surrogate Objective: R ˉ θ ≈ E τ ∼ q θ ′ ( τ ) [ p θ ( a t ∣ s t ) q θ ′ ( a t ∣ s t ) R ( τ ) ] bar{R}

    2024年04月13日
    浏览(43)
  • ChatGPT强化学习大杀器——近端策略优化(PPO)

    近端策略优化 ( P roximal P olicy O ptimization)来自 Proximal Policy Optimization Algorithms (Schulman et. al., 2017)这篇论文,是当前最先进的强化学习 (RL) 算法。这种优雅的算法可以用于各种任务,并且已经在很多项目中得到了应用,最近火爆的ChatGPT就采用了该算法。 网上讲解ChatGPT算法

    2024年01月21日
    浏览(52)
  • ML-Agents与自己的强化学习算法通讯——PPO篇

    在上一篇文章ML-Agents与python的Low Level API通信中,我简要介绍了Python与Unity端的ML-Agents插件的通讯代码,如何正确运行一个能够进行强化学习训练的Unity环境,并获取到响应的信息,接下来将介绍如何利用自己的强化学习算法进行训练。 这里我利用了强化学习库PARL来训练ML-Ag

    2023年04月18日
    浏览(47)
  • MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练

    本文分享自华为云社区《MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练》,作者: irrational。 半猎豹(Half Cheetah)是一个基于MuJoCo的强化学习环境,由P. Wawrzyński在“A Cat-Like Robot Real-Time Learning to Run”中提出。这个环境中的半猎豹是一个由9个链接和8个关节组成的2D机

    2024年04月29日
    浏览(48)
  • DQN,DDPG,PPO 等强化学习算法在人工智能中的未来发展方向:从大规模到小规模部署

    作者:禅与计算机程序设计艺术 随着近年来人工智能领域的蓬勃发展,强化学习(Reinforcement Learning, RL)被越来越多的人认可并应用于人工智能领域。如今,RL已经可以处理许多复杂的问题,如自动驾驶、机器人控制等。在过去的一段时间里,我一直想和各位分享一下RL在人工

    2024年02月09日
    浏览(52)
  • 【强化学习理论】状态价值函数与动作价值函数系列公式推导

    由于时常对状态价值函数与动作价值函数之间的定义区别、公式关系迷惑不清,此次进行梳理并作记录。 理解公式推导需要先了解基础定义中几个概念。 奖励函数 奖励函数 有两种记法。 ①记作 r ( s ) r(s) r ( s ) ,表示某状态 s s s 的奖励,指:转移到该状态时能够获得的奖励

    2024年02月10日
    浏览(50)
  • 强化学习代码实战(3) --- 寻找真我

          本文内容来自于南京大学郭宪老师在博文视点学院录制的视频,课程仅9元地址,配套书籍为深入浅出强化学习 编程实战 郭宪地址。       我们发现多臂赌博机执行一个动作之后,无论是选择摇臂1,摇臂2,还是摇臂3之后都会返回原来的状态,也就是说它的状态并没

    2024年02月08日
    浏览(40)
  • 第八篇:强化学习值迭代及代码实现

    你好,我是郭震(zhenguo) 前几天我们学习强化学习策略迭代,今天,强化学习第8篇:强化学习值迭代 值迭代是强化学习另一种求解方法,用于找到马尔可夫决策过程(MDP)中的最优值函数。 值迭代 值迭代可以总结为如下几点: 值迭代通过不断迭代更新值函数来逼近最优值

    2024年02月08日
    浏览(44)
  • 深度强化学习-DDPG算法原理与代码

    深度强化学习-DDPG算法原理与代码 引言 1 DDPG算法简介 2 DDPG算法原理 2.1 经验回放 2.2 目标网络 2.2.1 算法更新过程 2.2.2 目标网络的更新 2.2.3 引入目标网络的目的 2.3 噪声探索 3 DDPG算法伪代码  4 代码实现 5 实验结果 6 结论 Deep Deterministic Policy Gradient (DDPG)算法是DeepMind团队提出的

    2024年02月03日
    浏览(54)
  • 强化学习highway_env代码解读

    作为强化学习的新手,写这个系列的博客主要是为了记录学习过程,同时也与大家分享自己的所见所想。前段时间发布了人生第一篇博客,是关于highway_env的自定义环境。但博客主要是关于如何创建一个自己的环境的py文件,是基于十字路口环境创建的。在经过一段时间的摸索

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包