技术标签: Lee Hung-yi强化学习
Lee Hung-yi强化学习专栏系列博客主要转载自CSDN博主 qqqeeevvv,原专栏地址
课程视频
课件地址
所谓 on-policy (左图)指我们学习的 agent(即actor) 和与环境交互的 agent 是相同的,即 agent 一边和环境互动,一边学习;
而 off-policy (右图)指我们学习的 agent 与环境交互的 agent 是不同的,即 agent 通过看别人玩游戏来学习。
on-policy的过程是这样的:
1、使用actor π θ \pi_\theta πθ 去收集数据,用这些数据来进行参数的更新,此时参数 θ \theta θ变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲'。
2、由于参数 θ \theta θ变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲',原本actor π θ \pi_\theta πθ收集的数据就不能用了,所以要重新收集数据
3、再根据actor KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'}收集的数据,将参数KaTeX parse error: Expected group after '^' at position 7: \theta^̲'变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲''。
一直这样循环下去…………
On-policy的不足
从上面的过程可以看出,更新后的actor KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'} 的参数变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲',原来的数据就不能用了。就是说每更新一次参数就需要重新去收集数据,这样更新的效率很低,很花时间。
目标
用 KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'} 去收集数据,用这些数据去训练 π θ \pi_\theta πθ。这样就可以更新参数很多次而只用同一批数据,这就是off-policy。
代表从分布p中取样本x送入f(x)并求期望,类似于从p中取N个 x i x^i xi,然后代入f(x)求平均(近似表示),即
现在假设我们不能从分布 p 中 sample 数据,只能从分布 q 中 sample,这样不能直接套上述近似。而要用:
即从p分布sample数据变为从q分布sample数据,只需在后面乘上一个weight,即 p ( x ) q ( x ) \frac {p(x)}{q(x)} q(x)p(x)
可以看出 p、q 分布对于f(x)的计算而言差别是很大的。如果sample次数不够多,会造成只sample到每一种分布中,数量比较多(出现概率比较大)的那些样本,比如从p中sample,会容易sample到使f(x)小于0的x;从q中sample,会容易sample到使f(x)大于0的x。
如上图所示,当从p中sample x时,大多数f(x)是负的,因此 E x ∼ p [ f ( x ) ] E_{x\sim p}[f(x)] Ex∼p[f(x)]应该是负的;当sample次数不够多时(上图所示),上式不一定成立,如上图中从q中采样的x,因为sample次数不够多,很可能使得f(x)均为正(只sample到数量多的x),虽然 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)很小,但也是正的,因此 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)]应该是正的。所以,sample次数不够多时,上式不一定成立。
下面是sample次数足够的情况,此时上式是成立的。
可以看到,sample次数够多的时候,(在q中)可能就能sample到左边的点(出现数量少/概率低的x)。这样sample到左边绿线那个点的时候,f(x)是负的, p ( x ) q ( x ) \frac {p(x)}{q(x)} q(x)p(x)会得到一个很大的值,这样就会将原本是正的 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)]拉回成负的。
但这个前提是sample足够多次。如果sample次数不够多,就会造成 E x ∼ p [ f ( x ) ] E_{x\sim p}[f(x)] Ex∼p[f(x)]和 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)]有很大的差别,这就是importance sampling的不足。
回到一开始,讲了importance sampling后,我们知道如何由θ变为θ’。只需将:
这样就能用actor π θ ′ \pi_{\theta'} πθ′收集数据,给actor π θ \pi_{\theta} πθ去训练了。
使用 off-policy,使用梯度做参数更新时要注意的点:
上面讲了 θ \theta θ和KaTeX parse error: Expected group after '^' at position 7: \theta^̲'相差太多(p分布和q分布相差太多),会导致结果错误。那么为了防止 θ \theta θ和 θ ′ \theta' θ′相差太多,就可以使用PPO算法。
在原来的目标函数 J θ ′ ( θ ) J^{\theta'}(\theta) Jθ′(θ)后再加一项约束值 β K L ( θ , θ ′ ) \beta KL(\theta,\theta') βKL(θ,θ′),这个约束就像深度学习中的正则化项。
这一项和衡量 θ \theta θ和 θ ′ \theta' θ′的差距,这里的差距指的是actor行为上的差距而不是参数上的差距。(不是两个网络参数之间的差距,而是两个网络输出的差距)。
下面这个是TRPO算法:
TRPO和PPO的区别:
TRPO在作梯度上升的时候,只对求梯度上升,而KaTeX parse error: Expected group after '^' at position 17: …L(\theta,\theta^̲')只作为一个额外的约束,很难计算。(有约束优化问题)
而PPO的 β K L ( θ , θ ′ ) \beta KL(\theta,\theta') βKL(θ,θ′)是放到优化目标中(无约束优化问题),这样作梯度上升的时候就是将一整个式子(包括 β K L ( θ , θ ′ ) \beta KL(\theta,\theta') βKL(θ,θ′))一起算,比较容易算。
所以,为了方便使用,而且两者性能差不多,就直接使用PPO吧.
那 β \beta β要设多少呢?
PPO中 β \beta β 和学习率有点类似,需要手动设置。我们可以设定两个阈值 K L m a x KL_{max} KLmax和 K L m i n KL_{min} KLmin 。经过一次参数更新后,查看KL的值,如果KaTeX parse error: Expected group after '^' at position 17: …L(\theta,\theta^̲') 大于 K L m a x KL_{max} KLmax ,说明 θ \theta θ , θ k \theta^k θk 相差太大,需要加大 β \beta β ,加大惩罚。反之则减小 β \beta β ,减小惩罚。
上面讲的是PPO,下面要讲的是PPO2。
min(a,b)函数就是取a和b中的最小值。clip()函数的意思是: p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st) 小于 1 − ε 1-\varepsilon 1−ε,则取 1 − ε 1-\varepsilon 1−ε;若 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st) 大于 1 + ε 1+\varepsilon 1+ε 则取 1 + ε 1+\varepsilon 1+ε ;若介于两者之间,则取 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st) ,即输入等于输出。
上面为clip()函数的图像,横轴指的就是 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st)。
总的图像:
绿线代表min()函数的第一项的图像,蓝线代表min()函数的第二项的图像,红线代表最终min()函数的输出结果。
若A>0,则取下图左边红线部分,若A<0则取下图右边红色部分。
这个式子其实就是让 θ \theta θ 和 θ k \theta^k θk 不要差距太大。如果A(advantage function)>0,代表当前的action是好的,所以我们希望 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st)越大越好(即横轴代表的 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st) 增大),但是 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) 和 p θ k ( a t ∣ s t ) p_{\theta^k}(a_t|s_t) pθk(at∣st) 二者不能相差太多,所以设了一个上界 1 + ε 1+\varepsilon 1+ε (上图左边);A<0,则说明当前的action不好,所以希望 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) 越小越好(即横轴代表的 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st) 减小),同理同样要设一个下界 1 − ε 1-\varepsilon 1−ε 。
最后再放一下PPO和PPO2的对比:
这里有人纠结怎么一开始写的PPO是取期望,而这里的PPO和PPO2怎么变成是累加的?
TRPO / PPO2 等方法的实验效果:
这边可能不清晰,可以看论文原文
简单说一下,PPO(Clip)是紫色的线,可以看到每个任务中的效果都是名列前茅。
文章浏览阅读1.4w次,点赞12次,收藏45次。Inter集成显卡安装pytorch安装pytorch计算机右键“管理”->“设备显示器”->“显示适配器”,查看显卡。我的电脑只有Inter的集成显卡,没有独显。刚开始接触,对GPU不懂,查了些资料,了解到一些内容。GPU可以认为是显卡的CPU,主要处理高度线程化的并行处理任务(大规模计算任务)。CUDA是面向Nvidia的GPU的,所以,如果要搭建CUDA环境必须要有nvidia显卡。集成显卡是显卡集成在主板上的。但是不管是集显还是独显都有GPU。安装pytorchpytorch_intel 显卡怎么安装pytorch
文章浏览阅读5w次,点赞216次,收藏909次。模拟CMOS集成电路设计中的gm/id设计方法及用Cadence Virtuoso IC617仿真有关参数曲线_gm/id
文章浏览阅读1w次,点赞8次,收藏36次。windows自动启动程序并登陆账号密码的VBS脚本备注:这是VBS脚本,中间的TAB次数根据不同的程序会有不同的差异,请自行调整 类似qq一类的程序,经测试可以实现,其他程序没有尝试,初学者,如有疑问可下方评论沟通。dim programprogram="程序路径"set Wshell=CreateObject("Wscript.Shell")set oexec=Wshell.E..._win7自动重启脚本写入账号
文章浏览阅读8.3k次。题目描述:输入一批学生的成绩(整数),输出最高分。 输入:输入包含多个非负整数和一个负整数。该负数不作为有效成绩,只表示输入结束。 输出:输出一个整数,即最高分。单独占一行。 样例输入:7 6 5 9 2 -1样例输出:9程序代码:import java.util.*;public class Main{ ..._java输出最高分学院姓名
文章浏览阅读3.2k次。1,EnginCheckOrder(头表实体)public class EnginCheckOrder implements Serializable { private String id; private String checkOrderCode; private String contractCode; private String jobCod..._mybatis concat(#{sysregion.code,jdbctype=varchar},'___')
文章浏览阅读1.2w次,点赞12次,收藏21次。最近用到了Latex,顺便下载了texstudio之前有用到过但是是一次安装完成的没碰过任何问题,这次系统重装之后是先安装的texstudio然后安装的texlive不知是不是先后顺序导致了这个问题,话不多说直接上解决方案。这是一个网上的图片,其实处理方案很简单,它报错的是找不到pdflatex.exe,这个应用程序我们只需找到相应的PdfLaTeX这一行,点击后面的像打印机一样的东西(这个是..._latex.exe 文件夹
文章浏览阅读458次。计算机组成原理——关于数据对齐存储1. 综述 博客:http://blog.csdn.net/cyxcw1/article/details/9080519(C/C++数据边界对齐的注意事项) 对齐:变量的起始地址为其大小的整数倍。如short型占两个字节,其起始地址就要从偶数地址开始。 对齐可以加快内存的访问速度。转载于:https://www.cnblogs.com...
文章浏览阅读1.3k次。目录文章目录目录基本概念冲突域(Collision Domain)广播域(Broadcast Domain)冲突域与广播域的区别IP 网络数据传输方式物理网络设备发展简述中继器(Repeater)集线器(hub)网桥(bridge)网桥的工作原理网桥基于 MAC 的转发原理网桥的核心作用网桥的主要缺点交换机(Switch)交换机的工作原理网桥与交换...
文章浏览阅读7.9k次,点赞9次,收藏31次。Linux 通过 Docker 部署甜糖星愿服务,利用空闲带宽挂机赚钱此教程适用于ARM架构的机器,比如树莓派等。群晖NAS搭建甜糖星愿服务教程:https://www.awsl9527.cn/archives/539.html威联通NAS搭建甜糖星愿服务教程:https://blog.zeruns.tech/archives/627.html甜糖星愿计划甜糖星愿计划是由甜糖公司结合边缘计算云厂商推出的用户激励计划。用户通过贡献闲置带宽,即可获取星愿积分。星愿可用于折现或兑换商品。收益情况:按测_甜糖二进制部署
文章浏览阅读46次。C++中虚函数功能的实现机制要理解C++中虚函数是如何工作的,需要回答四个问题。1、 什么是虚函数。虚函数由于必须是在类中声明的函数,因此又称为虚方法。所有以virtual修饰符开始的成员函数都成为虚方法。此时注意是virtual修饰的成员函数不是virtual修饰的成员函数名。例如:基类中定义: virtual void...
文章浏览阅读3.3k次。这样由A端发起得请求,经过nginx转发到B端得业务代码里,B端再拿到参数后,再发起请求到C端,等C端处理后,结果返回B端,B端将报文返回到A端,整个流程就可以了。_java实现代理转发请求
文章浏览阅读577次。1、理解备份与恢复1.1、什么是备份与恢复数据库备份通常分为如下两种:1、物理备份:u哦哦你过来备份组成数据库的物理文件(包含数据文件、控制文件、归档重做日志文件),也即是在其他位置存放数据库物理文件的同本,比如脱机的磁盘或者磁带设备;2、逻辑备份:指备份数据库中的逻辑数据,比如数据表和存储过程,可以使用Oracle的数据泵工具导出到二进制文件,在数据库恢复时导入到数据库。1和2的关系:..._分配的通道:ora_disk_1