【原创】强化学习笔记|从零开始学习PPO算法编程(pytorch版本)
从零开始学习PPO算法编程(pytorch版本)_melody_cjw的博客-CSDN博客_ppo算法 pytorch
从零开始学习PPO算法编程(pytorch版本)(二)_melody_cjw的博客-CSDN博客_ppo pytorch
从零开始学习PPO算法编程(pytorch版本)(三)_melody_cjw的博客-CSDN博客_ppo pytorch
上面3篇已经删除
PyTorch PPO 源码解读 (pytorch-a2c-ppo-acktr-gail)-老唐笔记
从零开始学习PPO算法编程(pytorch版本)(二)
从零开始学习PPO算法编程(pytorch版本)
PPO2代码 pytorch框架_方土成亮的博客-CSDN博客_ppo pytorch
https://blog.csdn.net/weixin_43145941/category_10613430.html?spm=1001.2014.3001.5482
PPO算法实战_johnjim0816的博客-CSDN博客_ppo算法
强化学习之 PPO 算法_红龙96的博客-CSDN博客_ppo算法
---------------
公式解释的好
【强化学习PPO算法】_喜欢库里的强化小白的博客-CSDN博客_ppo算法
输入输出
强化学习之图解PPO算法和TD3算法 - 知乎
评论区指出评价网格的根本功能
博主你好,在policy gradient中,损失函数loss = mean(cross_entropy(actions_prob, actions_label) * R),是计算的actions_prob和actions_label的交叉熵,但是在actor-critic中,计算actor的loss = mean(td_error * (log(第一步action对应的那个概率action_prob))),这里怎么没有交叉熵计算了呢,仅仅是log(action_prob)*td_error,,那这样的话在pg算法中能不能也只是log(action_prob)*R呢?
抱歉,我是初学者,不是很明白
博主你好,在第三步中,将s输入到网络中,得到的状态的v_值,这个状态的v_值通常怎么计算的?状态的v_值是一个平均值吗还是一系列数字
- 计算td_error = r + gamma * v_ - v,你说的是这个吧,v是critic网络的输出,就是一个确定的值,用于评价动作的好坏,至于怎么计算,其实就是输入state(针对于PPO等算法)或者输入state+action(DDPG等算法)到critic网络(BPNet或者CNN)中获得,通过不断更新优化网络参数来最终获得v值(作用:评价动作,相当于监督学习中的标签)
DQN——PPO流程总结_小葡萄co的博客-CSDN博客_ppo算法流程图
世界冠军带你从零实践强化学习心得(一)_东南坼的博客-CSDN博客
- 监督式学习:数据已有标记,运用已标记数据来做训练。
- 非监督式学习:数据没有标记,从中找出拥有相同特征的数据群。
- 强化式学习:可能手上没有任何数据,直接让模型执行,再将执行结果反馈回去做训练。
【科普】一文弄懂监督式学习、非监督式学习以及强化式学习_赵卓不凡的博客-CSDN博客_非监督学习应用
强化学习的分类和方法
强化学习主要关注的是无模型的问题,在未知的环境中进行探索学习,在生活中有广泛的应用。
其探索方案有二:
基于价值的方法(Q表格)
给每个状态都赋予一个价值的概念,来代表这个状态是好还是坏,这是一个相对的概念,让智能体往价值最高的方向行进。基于价值是确定性的。
基于策略的方法(Policy)
制定出多个策略,策略里的每个动作都有一定的概率,并让每一条策略走到底,最后查看哪个策略是最优的。基于策略是随机性的。
Q学习(Q-learning)简单理解_qq_39429669的博客-CSDN博客_q学习
先a,再更新Q(通过sas~a~),一步一更新,但是a~下步不真的执行,具体说明如下
TD temporal difference时序差分,用下一步Q值更新上一步Q值,一步一更新,Sarsa和Qlearning都是时序差分
Sarsa和Qlearning
Sarsa全称是state-action-reward-state’-action’,目的是学习特定的state下,特定action的价值Q,最终建立和优化一个Q表格,以state为行,action为列,根据与环境交互得到的reward来更新Q表格,更新公式即为上面的迭代公式。Sarsa在训练中为了更好的探索环境,采用ε-greedy方式(如下图)来训练,有一定概率随机选择动作输出。
Q-learning也是采用Q表格的方式存储Q值,探索部分与Sarsa是一样的,采用ε-greedy方式增加探索。
Q-learning跟Sarsa不一样的地方是更新Q表格的方式,即learn()函数。
Sarsa是on-policy,先做出动作再learn,Q-learning是off-policy,learn时无需获取下一步动作
二者更新Q表格的方式分别为:
二者算法对比如下图所示,有三处不同点。
世界冠军带你从零实践强化学习心得(一)_东南坼的博客-CSDN博客
因为qlearning探索性,maxQ,而不是实际执行的Q,结果更激进
反之sarsa结果更保守 ,结果见上方链接,代码见上方链接
- 神经元:神经网络中每个节点称为神经元,由两部分组成:
- 加权和:将所有输入加权求和。
- 非线性变换(激活函数):加权和的结果经过一个非线性函数变换,让神经元计算具备非线性的能力。
- 多层连接: 大量这样的节点按照不同的层次排布,形成多层的结构连接起来,即称为神经网络。
- 前向计算: 从输入计算输出的过程,顺序从网络前至后。
由此可见,神经网络的本质是一个含有很多参数的“大公式”
DQN代码如下方链接,需要看
世界冠军带你从零实践强化学习心得 (二)_东南坼的博客-CSDN博客
(十) 深度学习笔记 | 关于优化器Adam_Viviana-0的博客-CSDN博客_adam优化器
Adam优化器简单理解和实现_pipony的博客-CSDN博客_adam优化器原理
DQN走几步,从缓存取出,批量更新
Q函数的输出维数是动作维数,用到哪个,再乘上对应的动作hot数组,这一点上方链接代码有体现,下方图片也有体现
强化学习--从DQN到PPO, 流程详解 - 知乎
【强化学习】Policy Gradient算法详解_shura_R的博客-CSDN博客
详解策略梯度算法_行者AI的博客-CSDN博客_策略梯度算法
策略梯度算法(Policy Gradient)逐行代码详解_小帅吖的博客-CSDN博客_策略梯度算法代码
强化学习--从DQN到PPO, 流程详解 - 知乎
DQN用目标Q和期望Q的差更新,Q由R产生
PG直接用R更新,1回合结束,再更新
下面这个链接讲PG更新更准确,几个例子动作都是离散的,PG也可已用于连续动作,但一般不用,效果不好
Lesson4-2-PolicyGradeint算法_哔哩哔哩_bilibili
什么是 Actor Critic (Reinforcement Learning 强化学习)_哔哩哔哩_bilibili
强化学习--从DQN到PPO, 流程详解 - 知乎
AC算法用critic网络输出的v代替PG算法中的R来更新,这样就可以单步更新,不用像PG算法一样,一回合才能更新(因为R不是r,R表示从此步开始到回合结束,所有r的加权和,所以只有回合结束才能计算)
Lesson5-1-连续动作空间与DDPG_哔哩哔哩_bilibili
Lesson5-2-DDPG代码与总结_哔哩哔哩_bilibili
PARL强化学习公开课学习笔记(五)连续动作空间求解RL(DDPG) - 知乎
DDPG 上面两个链接讲的非常好,也是AC的一种,可以单步更新,实际操作中,和DQN相同,每隔若干步更新一次 ,DDPG其实可以理解成为了DQN能在连续动作空间的一种改进
A3C和DPPO跳过,需要时可以看莫凡B站视频或百度
什么是张量(tensor)?&深度学习 - 知乎
强化学习中on policy和off policy的区别-深度理解_易烊千蝈的博客-CSDN博客_on policy和off policy的区别
A2C的Q网络更新loss,也就是说评价网络的更新loss是 ,现实Q和目标Q的差值,越来越小,这样我们的现实Q就可以越来越接近目标Q,也就是说我们的现实Q越来越能准确地评价每一个动作,因为目标Q就是可以准确地评价每一个动作,才称为目标Q.
但是目标Q确实不是已知的,如果目标Q已知,我们也不用不断更新Q网络,使得现实Q越来越接近目标Q,从而获得多次更新后的现实Q,从而拿多次更新后的现实Q当作目标Q,来评价每一个动作,目标Q永远不可知,只能不断逼近.
在更新过程中,我们每一次更新需要的目标用,现实Q和多个r(乘上不同的衰减系数,gama的1次方,2次方,3次方...n次方)组成的公式代替,当然可以这样代替,因为r就是我们定义的奖赏函数,不过是单次动作的奖赏函数,还要组成公式,使这个公式可以评价多次动作,从而可以顺利到达终点,从而可以当作目标Q完成每一次更新,从而获得多次更新后的现实Q,从而拿多次更新后的现实Q当作目标Q.
Q学习、Sarsa和DQN 的Q网络更新loss的设计思路和上边的一样
A2C的演员网络的更新loss是,动作概率×评价这次动作好坏指标,越来越大.
如果好,指标为正,总的方向(loss优化方向)乘积越来越大,动作概率越来越大方向优化
如果坏,指标为负,总的方向(loss优化方向)乘积越来越大,动作概率越来越小方向优化
动作的动作概率是已知的因为A2C的演员网络就是PG网络,输出的就是动作概率,但是评价这次动作好坏的评价指标怎么得到,有人使用Q的差,这一点说的不好,下一句精彩
loss的设计就是想明白,想让什么数小,想让什么数大
PG的loss就是想让计算的大R大,DDPG的A网络的loss就是想让此动作下Q越来越大,因为用的min优化器,所以公式Q加了一个负号
PPO的评价网络更新loss和A2C一样,演员网络更新loss和A2C类似
我的算法是PPO2,PPO2效果比PPO1更好
第一个链接和第二个链接基本一样,和我说的也基本一样,第三个链接和前两个好像不同
我的代码好像和这三个都有较大的不同,但是感觉解释的时候按官方解释最好
PPO2代码 pytorch框架_方土成亮的博客-CSDN博客_ppo pytorch
强化学习--从DQN到PPO, 流程详解 - 知乎
PPO算法实战_johnjim0816的博客-CSDN博客_ppo算法
【原创】强化学习笔记|从零开始学习PPO算法编程(pytorch版本)相关推荐
- 【学习笔记】多项式相关算法
[学习笔记]多项式相关算法 手动博客搬家: 本文发表于20181125 13:19:28, 原地址https://blog.csdn.net/suncongbo/article/details/844 ...
- Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践
文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...
- Boost库学习笔记(二)算法模块-C++11标准
Boost库学习笔记(二)算法模块-C++11标准 一.综述 Boost.Algorithm是一系列人通用推荐算法的集合,虽然有用的通用算法很多,但是为了保证质量和体积,并不会将太多通用算法通过审查测 ...
- 【学习笔记】目标检测算法总结
[学习笔记]目标检测算法总结 说明 MacOS操作系统. MindNote思维导图软件. B站学习视频+原论文学习. 初学者 笔记 如有问题请多多指教 记录 Overfeat模型.R-CNN.Fast ...
- C++ Primer 学习笔记 第十章 泛型算法
C++ Primer 学习笔记 第十章 泛型算法 336 find函数 #include <iostream> #include <vector> #include <s ...
- 深度学习笔记其三:多层感知机和PYTORCH
深度学习笔记其三:多层感知机和PYTORCH 1. 多层感知机 1.1 隐藏层 1.1.1 线性模型可能会出错 1.1.2 在网络中加入隐藏层 1.1.3 从线性到非线性 1.1.4 通用近似定理 1 ...
- Python3学习笔记之-学习基础(第三篇)
Python3学习笔记之-学习基础(第三篇) 文章目录 目录 Python3学习笔记之-学习基础(第三篇) 文章目录 一.循环 1.for循环 2.while循环 3.break,continue 二 ...
- SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)
在"silverlight如何在客户端读取文件"以及"silverlight如何在客户端写入文件"两篇文章中我们初步接触了Isolated Storage概念. ...
- Linux学习笔记(3)- 网络编程以及范例程序
Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...
最新文章
- db2和mysql性能_关于DB2数据库的性能分析记录
- 中国充换电行业产销需求预测与转型升级战略分析报告2022-2028年版
- Miner3D Enterprise 企业版
- 解题报告——试题 基础练习 分解质因数——31行代码AC
- 微信竟然可以查出行轨迹了,预计又一波情侣要分手?
- 【Ubuntu-Tensorflow】TF1.0到TF1.2出现“Key LSTM/basic_lstm_cell/bias not found in checkpoin”问题
- KindEditor解决上传视频不能在手机端显示的问题
- ant-build.xml打包报错解决方法
- python watchdog_Python watchdog
- 七年前的电脑可以用python_1年前的小五都用 Python 来做什么?
- Word 2003中对不同的节设置不同的页面边框的特殊情况小结
- VisualStudio中C++程序输出一闪而过的解决方案
- java简单的数据库查询(SQLServer数据库)
- ae2020不支持的视频驱动程序_英伟达发布支持GeForce GTX 1660 SUPER的新Linux图形驱动程序...
- Windows10 安装 protobuf
- nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.chengg
- java 吃豆豆游戏背景底纹_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
- python爬虫——使用bs4爬取搜狗微信文章
- 如何解除禁用 UAC
- 跨语言词向量笔记7. 无监督跨语言词向量