PPO Algorithm
‘‘目录
PPO ALGORITHM
进行看别人文章:
如何直观理解PPO算法?[理论篇] - 知乎 (zhihu.com)
【强化学习8】PPO - 知乎 (zhihu.com)
PPO(OpenAI)
Proximal Policy Optimization(PPO)算法原理及实现! - 简书 (jianshu.com)
1-Critic的作用与效果.mp4_哔哩哔哩_bilibili
涉及coding层面
PPO ALGORITHM
进行看别人文章:
如何直观理解PPO算法?[理论篇] - 知乎 (zhihu.com)
- 老实说这篇文章,我并没有汲取太多的有关PPO的东西,原因是因为他讲的有关知识太少,肤浅和杂乱,且针对强化学习,没有一点基础是看不懂他讲的什么。下面是我给出的自己汲取到的东西:
- OpenAL将PPO作为首选算法;PPO是目前来讲最广的一种算法;
- PPO 是基于AC框架;
- AC产生的一个问题:AC产生的数据,只能更新一次
- PPO做的工作就是在一定条件下将数据存下来
- PPO采用important-sampling 重要性采样技术 做到离线策略;
【强化学习8】PPO - 知乎 (zhihu.com)
- 这篇文章讲的较好,基本把PPO的内核讲到位了:
- DPPO(Deepmind PPO)
- 首先,简单回顾policy gradient 的损失函数:
- gradient :
- 以上属于policy gradient ,但是policy gradient 的方差很大,并且对超参数很敏感。目前用的解决方法是 trust region constraint 限制gradient 的变化量,从而使得损失函数单调递增。eg:TRPO:
- 约束项的作用是抑制policy的变化量不要太大,从而使policy的损失能够单调递增
- TRPO需要使用对偶梯度法进行优化,有很大难度。因此,openAI 提出了一个简化TRPO => PPO 。 PPO使用一个正则项作为trust region restraint ,根据trust region restraint 是否被遵守来设定正则化的系数,从而避免使用对偶法,Deepmind PPO:
先运行当前的policy,采集T个sample,再更新policy和critic。所以,ppo是一种online policy
KL是一个约束项,避免变化太大;子循环2的作用是估计state value函数的参数,它使用了一条轨迹上的样本来估计
DPPO是一种同步并行PPO算法。同步并行算法的原理可用下图来表示。DPPO把网络参数存在到一个服务器上,并且会在每一个gradient step后同步地更新workers的参数。Algorithm 2是DPPO的服务器端,用于同步地更新actor和critic参数。
PPO(OpenAI)
policy gradient 中,虽然使用一条轨迹对进行多步优化很有吸引力,但它会使得policy gradient 更新量太大,从而难保损失函数单调递增
TRPO::一种具有单调递增特性的policy gradient算法。它构造了一个带有约束项的代理objective。TRPO使用共轭梯度法求解上述约束目标函数。由于TRPO很复杂,openAI提出了PPO。早期的PPO使用一个惩罚项来替代TRPO的约束项,从而把约束优化问题转换为无约束优化问题。
该代理objective的目的是最大化其第一项,以及最小化KL,从而使 θ 变化量不会太大并且确保强化学习的目标函数单调递增。该代理objective中的 β 是一个很有争议的正则系数。TRPO不用 β 的原因是因为很难选择一个合适的β ,使算法能够适应不用的问题(TRPO和PPO是同一个作者)。另外,作者通过实验发现如果使用固定的正则系数,PPO的性能好不到哪里。
- PPO原理:
- 版本一:
版本二:
PPO算法流程
PPO算法参考了A3C很多东西。如果策略网络和评价网络贡献网络参数的话,PPO参考A3C采用了一个多任务损失函数:PPO的算法流程为,这里说明一下:N指平行运行的actor数量;T是一个小于回合长度的数;在每一次网络参数更新过程中,所有actor共产生了NT个数据,对这些数据进行epochs为K,batchsize为M的网络更新(经典的actor critic只利用数据一次,这里利用了数据K次,因此有点off-policy的感觉)。
Proximal Policy Optimization(PPO)算法原理及实现! - 简书 (jianshu.com)
- 这篇文章是整理性文章,将李弘毅老师的强化学习视频进行学习输出,值得揪着其文章,看着视频。视频里有笔记链接:(4条消息) 【笔记2-2】李宏毅深度强化学习笔记(二)Proximal Policy Optimization (PPO)_jessie_weiqing的博客-CSDN博客
- Proximal Policy Optimization
- 这个是PPO官网网页,我认为这个很官方,讲的特别好
- 首先它指出:Policy gradient methods 是利用深度神经网络进行控制的基础。但是目前来讲,由于其对步长、信号敏感度太强,导致样本效率也就很低。
- 通过TRPO和ACER来消除上述缺陷时:ACRE比PPO复杂得多,在Atari基准测试中,只比PPO好一点;TRPO 与共享策略和值函数或辅助损失不容易兼容。下面是PPO的一个变体的目标函数:
- 上面目标函数是实现一种与随机梯度下降兼容的信任域更新方法。通过消除KL惩罚和进行自适应更新来简化算法
- 测试中,该算法在连续控制任务上表现出很好的性能。几乎和ACER在Atari的表现一样,而且应用起来很简单
1-Critic的作用与效果.mp4_哔哩哔哩_bilibili
- 这个博主绝对是个宝藏博主!讲解很详细,对新人特别友好!
- 强化学习需要不断与环境交互;需要大量的模拟数据来训练;设置奖励机制,获得最终结果
这张图表达的是强化学习的工作框架!
- 在这里我整理一下PPO算法的具体流程:
- 首先呢,根据数据模型分析,我要得到最大化我的整个模型中的奖励最大;
- 其次,根据大数定律,直接穷举所有可能性就好了;
- 接下引入一个化简,log那个化简,然后将数据全部引入求解即可;
- 但是呢,根据我们陟罚臧否,不宜异同思想,提出来baseline思想,即:将奖励去均值思想,建立以0为中心的正态分布
- 但是呢,将数据带入以上公式时候,还是出现,对应一个,就要更新一次公式,这样的话,我们每一个agent只能做一次数据处理,接着呢,我们想到找一群打工的,直接帮我去训练就行,我只需要学习就okay了。引入,Off policy ,让前一轮的结果做这一轮的打工者,帮我去不断做训练。
- 最终呢,就形成了我的PPO algorithm
- importance sampling
- 替代者要尽可能接近被替代者
- 下面是摆公式了,请注意:这条公式是我们本来的“公子哥”,现在呢,需要这其实就是一个公式代换而已,尽管如此,也是想了一会,才明白。最后,求梯度的话,也可以写为实际中是他俩经过网络的预测结果尽可能差不多
- 这里说明一下:On policy & Off policy
- On policy: 就是训练数据由当前agent不断的环境交互得到的
- Off policy: 就是自己可以歇着了,找个打工的帮我来跟环境进行交互得到结果
- 我用我的理解来讲明一下,为什么忽然来个Off policy,你看啊,上述那个梯度公式,那个,是不是意味着,我们每运算一次数据后,就要改变一次,这样的话,对我们的学习来讲,就很麻烦,既要改变,又要学习,还不如找一群打工的,你们帮我去做这个改变,训练的事情,而我只需要去学习就行啦。
- 这里还有一个问题,就是这个求得的函数,只是给出奖励,那对不适合的目标没有任何惩罚,就导致,目标获取的时间长,于是,聪明的学者就提出了一个baseline,什么意思呢?希望通过奖励和惩罚来完成训练,想到了正态分布,具体是,将奖励去均值, b为奖励的均值。
- 这张图是其运行流程
- 再最后利用大数定律写成这个公式:
- 最后是求公式的梯度,
- 最后是按照大数定律思想,直接穷举所有的可能性就好了:
- 来梳理一下,这里的意思是,每一个状态对应地行为的奖励的总和,使得其数学期望最大化。这里为什么要用到数学期望呢? 原因是:求其平均值,希望不断得到更好的reward。
- 这样的话,我们更需要求神经网络中每一个权重,使得每个权重最大化,也就是使得我们的reward最大。所以这里是这样做的目标函数:
- 这样讲吧::在输入输出过程中,environment对应下一个的action,每一格action对应下一个environment 这样就使得我们将每一步的状态和action放在 一个矩阵里 (trajectory)里面,而这样的话,要使得我们的训练模型更好,就是要求每一步的reward更大,求总的reward更大。
涉及coding层面
- 导包
import torch import torch.nn as nn from torch.distributions import Categorical import gym # pip install box2d box2d-kengz --user(重要,vrep有这个没装----仅供自己看懂)
- Critic 网络
- 记得之前的那个均值b吗,我现在要做的事情就是,要评估当前模型做的事情是否是现在应该做的事情,简单来说,就是现在做的事情是否属于利益最大化。然后,我就想到,b,也就是将奖励取均值,不过这里的去均值是随学习过程持续变化的,eg:我的游戏等级越高,我对去b的值要求也就越高。
- PPO2版本
- PPO2将设置上下界,简单来说,就是打工者和老板的比值不能超过上下界。
- 导包
PPO Algorithm相关推荐
- pytorch自动编码_用pytorch第2部分从头开始编码ppo 4
pytorch自动编码 Welcome to Part 2 of our series, where we shall start coding Proximal Policy Optimizatio ...
- 用Dota2“最强”算法PPO完成CarPole和四轴飞行器悬浮任务
[飞桨开发者说]吉祥:黑龙江哈尔滨人,毕业于桂林理工大学,检测技术与自动化装置专业,百度深度学习工程师集训营最佳学员,百度强化学习7日学员 2019年Dota 2比赛中,OpenAI Five完胜世界 ...
- 强化学习中的调参经验与编程技巧(on policy篇)
©PaperWeekly 原创 · 作者|张恒瑞 单位|北京交通大学 研究方向|强化学习 在强化学习的训练过程中,常常会遇见以下问题: 在某一环境中可以 work 的超参数拿去训练别的环境却训练不出来 ...
- 李宏毅Reinforcement Learning强化学习入门笔记
文章目录 Concepts in Reinforcement Learning Difficulties in RL A3C Method Brief Introduction Policy-base ...
- 【李宏毅2020 ML/DL】P110-111 Policy Gradient Proximal Policy Optimization
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 关于强化学习,我专门花半年时间学习实践过,因此这里笔记只记录李老师的 outline .我的强化学习资源仓库: ...
- LLMs之InstructGPT:《Training language models to follow instructions with human feedback》翻译与解读
LLMs之InstructGPT:<Training language models to follow instructions with human feedback>翻译与解读 导读 ...
- 类ChatGPT逐行代码解读(2/2):从零起步实现ChatLLaMA和ColossalChat
本文为<类ChatGPT逐行代码解读>系列的第二篇,上一篇是:如何从零起步实现Transformer.ChatGLM 本文两个模型的特点是加了RLHF 第六部分 LLaMA的RLHF版:C ...
- chatgpt实际是怎样工作的?
文章翻译自: https://www.assemblyai.com/blog/how-chatgpt-actually-works/ ChatGPT 是 OpenAI 的最新语言模型,比其前身 GPT ...
- 强化学习大作业实践,不怕困难,迎难而上
强化学习:课程设计--基础任务PPO论文精读+实验复现 陈籽杏 57120309 June 12,2023 0 作业内容introduction: 本次作业作为23年强化学习课程的最后一次作业,最初选 ...
最新文章
- 设计模式之美:Memento(备忘录)
- Dart 调用C语言混合编程
- 利用python进行统计及分析第7章,构建电影分类的dummies
- GDCM:gdcm::Object的测试程序
- Linux运维工程师面试题第三套
- yolov3安卓实现_YOLOv3 的 TensorFlow 实现,GitHub 完整源码解析
- jdk重启后步行_向后介绍步行以一种新颖的方式来预测未来
- ota暗室测试_如何将Darktable用作数字暗室
- 区块链研习 | 区块链的能力很大又很小
- c语言 调用父类方法,关于C++:如何从派生类函数调用父类函数?
- 网站XSS跨站攻击脚本语法
- 基于微信小程序的医疗监督反馈小程序的设计与实现-计算机毕业设计源码+LW文档
- boren -飞机大战6
- 关于Nginx服务器的一些粗略认识
- SVN冲突 One or more files are in a conflicted state
- CDA LEVEL 1 考试,知识点《机器学习基本概念》
- 计算机之间的通信原理
- Notepad++编辑过的行颜色设置 LocationNavigate.ini设置 高亮 黄色 绿色 修改的行变为黄色 修改的行高亮显示
- Coursera | Introduction to Data Science in Python(University of Michigan)| Assignment2
- 零基础想学好C语言编程,首先要掌握的是正确的学习思路!
热门文章
- 【珠穆朗玛峰编程练习题】
- Python一张足够大的纸,纸质厚度0.5,请问对折多少次,才能到达珠穆朗玛峰的高度。(珠峰最新数据:8844.43)
- win10上安装两个ubuntu16.04系统分别安装在SSD和HHD
- SSD与HDD、HHD的区别
- PCB焊接及上电测试流程
- 2014年英语专升本英语阅读「Part II 阅读专区」【文章(图片)、答案、词汇记忆】
- 基于MIPI的高性能成像系统
- 从事大数据征信行业,你必须知道这些
- asp jsp cgi php之间的区别和优点
- CodeForces - 366C Dima and Salad