本文使用代码地址:

https://gitee.com/devilmaycry812839668/reinforce_with_-experience-buffer

==============================================

前面有几篇博客分析了以reinforce算法为原型的多环境并行强化学习算法,这里是在之前的算法基础上加入了经验池回放机制。经验池回放机制一直被看做是off-policy才可以使用的方法,而on-policy算法是一直被认为无法使用这一机制的,而这一笼统观点并不完全准确。从对训练数据生成的时刻距离训练时刻的时间距离来看,off-policy 是依据old data 来进行训练的,因此只有off-policy的强化学习算法才可以使用experience replay buffer机制,而on-policy算法由于需要新鲜的fresh data 来进行训练,所以一直被认为是无法使用experience replay buffer机制的。

其实,on-policy 和 off-policy 对训练数据的差别主要是体现在是否fresh,而是否fresh就一定和experience buffer相关吗???

对于 on-policy 算法,我们可以想象这样一种场景,那就是我们可以快速的、大量的获取到新鲜的fresh data ,那么及时我们那这些数据放入一定大小的experience buffer中,只要我们保证experience buffer 的大小,新鲜数据fresh data 进入 buffer的速度足够快,足以是buffer中的数据一直保持较新的状态,那么即使我们是从experience buffer中抽取数据也是可以保证抽取到的数据是比较fresh 的, 这样就可以保证这些fresh data 可以用来训练on-policy的强化学习算法,也正是基于这个思路给出了下面的算法设计。

共11种设计,运行结果如下:

特别说明的是上面的mode=0  和 mode=8 这两种模式下均是进行了100次试验,其他的设置下均进行了1000次试验。

试验中  batch_size=50, 单进程下并行环境数envs_number=50

并行进程数设置为8

============================================

Agent_0  为最原始的并行reinforce算法,没有加入exprience buffer 机制, 这里是作为对比算法出现。

Agent_1 # experience buffer, size=50

在训练数据时依然优先出actor进程中获取训练数据,如果训练进程在请求actor进程中数据后没有获得数据(还没有数据生成)那么便从exprience buffer中抽取数据进行训练。每次训练进程在获得actor进程中的数据后都会将其加入到exprience buffer中。

Agent_2 # experience buffer, size=10

和Agent_1 算法基本完全一致,唯一不同的是experience buffer中存放的数据为Agent_1的五分之一。

Agent_3 # experience buffer中连续抽取次数设有上限15

为了解决Agent_1 和  Agent_2中有部分试验没有正确的获得结果(有部分试验没有收敛到目标结果),分析后是没有控制好buffer中数据的新鲜程度,也就是buffer中的数据更新的慢了,也可以说是actor进程生成的数据慢了,导致buffer中在没有新鲜数据进入的同时还被训练进程持续抽取数据。为了改进这一点Agent_3这里对连续抽取buffer的次数设置上限为15,也就是说在没有新的actor数据进入buffer中那么只能连续进行15次的数据抽取。

Agent_4 # experience buffer中连续抽取次数设为5

和 Agent_3 算法基本完全一致,区别为对连续抽取次数的上限设置为 5 。

Agent_5 # experience buffer中连续抽取次数设为15

与前面的1,2,3,4算法不同,Agent_5每次训练数据都是从buffer中抽取的,不会直接对actor进程传来的数据进行训练,或者说每次获得actor数据后都是先将其存入buffer中然后再从buffer抽取数据。在没有新鲜actor数据加入到buffer的情况下,连续从buffer中抽取数据的次数上限设置为15。

Agent_6 # experience buffer中连续抽取次数设为25

于Agent_5 基本相同,唯一不同的是从buffer连续抽取的次数上限设置为25。

Agent_7 # 完全从experience buffer里面抽取(每次抽取数据时不限制新数据的添加)

每次都需要从buffer中抽取,但是不和5,6那样对连续抽取次数做限制,但是每次进行网络迭代更新计算的时候都强制性的试着进行一定次数的对buffer添加数据的操作。

Agent_8 # 完全从experience buffer里面抽取(每次抽取数据时至少一次新数据的添加)

基本和Agent_7一样,唯一不同的是每次从buffer中抽取时都至少保证有一个新数据加入到buffer中,同时在此迭代更新计算时都需要进行一定次数的申请新数据加入buffer。

Agent_9 # 完全从experience buffer里面抽取(15次抽取数据时至少一次新数据的添加)

基本和Agent_7, Agent_8一样,唯一不同的是每15次从buffer中抽取时都至少保证有一个新数据加入到buffer中,同时在此迭代更新计算时都需要进行一定次数的申请新数据加入buffer,同时在此迭代更新计算时都需要进行一定次数的申请新数据加入buffer。

Agent_10 # 完全从experience buffer里面抽取(25次抽取数据时至少一次新数据的添加)

基本和Agent_7, Agent_8,Agent_9一样,唯一不同的是每25次从buffer中抽取时都至少保证有一个新数据加入到buffer中,同时在此迭代更新计算时都需要进行一定次数的申请新数据加入buffer。

Agent_11 # x: loss+( 完全从experience buffer里面抽取(25次抽取数据时至少一次新数据>的添加))

基本和Agent_10一样,同时在此迭代更新计算时都需要进行一定次数的申请新数据加入buffer,唯一不同的是每25次从buffer中抽取时都至少保证有一个新数据加入到buffer中,并且需要同时保证在这25次抽取数据之内上一次抽取的训练过程所得结果要优之前100次所得结果的平均值,否则需要等待新的数据加入到buffer中才可以进行数据抽取。或者说和Agent_10唯一不同的是在不需要等待新数据加入到buffer中的条件不仅是在没有新数据加入buffer中最多不能连续抽取25次数据,同时还需要保证上一次的运行结果要优于之前100次的平均值, 否则必须需要新数据加入buffer后才可以抽取数据。通过运行结果(上图)可以发现加入第二个限制条件后优化效果没有比Agent_10好,反而变得更差了,这说明通过上次结果与前100次结果均值做比较难以判断buffer中数据是否足够fresh,该设置反而导致优化效果下降。

经过试验可以发现on-policy的强化学习在特定情况下也是可以使用experience buffer的。on-policy算法多环境并行化时在使用experience buffer机制后,对没有新数据加入buffer中情况下连续抽取buffer数据的次数做一定限制(次数上限)可以很好的提升算法性能。

===============================================

同策略强化学习算法可以使用经验缓存池(experience buffer)吗 ??? 设计一个基于缓存池的改进reinforce算法,给出初步的尝试 ---------- (reinforce + experience buffer)的更多相关文章

  1. 强化学习 CartPole实验的一些启发 有没有可能设计一个新的实验呢?(杆子可以向360度方向倾倒,可行吗?)

    最近在看强化学习方面的东西,突然想到了这么一个事情,那就是经典的CartPole游戏我们改变一下,或者说升级一下,那么使用强化学习是否能得到不错的效果呢? 原始游戏如图: 一点个人的想法: ===== ...

  2. DQN 处理 CartPole 问题——使用强化学习,本质上是训练MLP,预测每一个动作的得分

    代码: # -*- coding: utf-8 -*- import random import gym import numpy as np from collections import dequ ...

  3. 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度

    摘  要  在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,它们中大多是由于网站之间转载造成的.为提高检索效率和用户满意度,提出一种基于特征向量的大规模中文近似网页检测算法DDW(Det ...

  4. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  5. 强化学习之四:基于策略的Agents (Policy-based Agents)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

  6. 强化学习(三)用动态规划(DP)求解

    在强化学习(二)马尔科夫决策过程(MDP)中,我们讨论了用马尔科夫假设来简化强化学习模型的复杂度,这一篇我们在马尔科夫假设和贝尔曼方程的基础上讨论使用动态规划(Dynamic Programming, ...

  7. 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识

    原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI)     ------------------------------- ...

  8. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

  9. 【转载】 强化学习(三)用动态规划(DP)求解

    原文地址: https://www.cnblogs.com/pinard/p/9463815.html ------------------------------------------------ ...

  10. ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏

    今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...

随机推荐

  1. win11 恢复Win10右键菜单的方法

    1.Win+R运行CMD 2.输入:reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocS ...

  2. .net core (.net6) 读取配置文件 appsettings.json

    .net core (.net6) 读取配置文件 appsettings.json 新建个工具类,方便其它地方使用,代码如下 AppHelper: namespace net6mvc.Utils { ...

  3. post请求 restTemplate.postForObject restTemplate.postForEntity java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to xxx POSTpost请求

    1.restTemplate调用的两种方式及获取字符串转换对象model的处理,统一按接收字符串,然后gson转换为对象的方式. ResponseData对象包含的属性private String r ...

  4. Imdeploy笔记

    Smiling & Weeping ---- 天气不好的时候,我会小心地把自己心上的裂缝补起来.为什么?... LMDeploy 的量化和部署 1 环境配置 2 服务部署 2.1 模型转换 2 ...

  5. cuda性能优化-2.访存优化

    简介 在CUDA程序中, 访存优化个人认为是最重要的优化项. 往往kernel会卡在数据传输而不是计算上, 为了最大限度利用GPU的计算能力, 我们需要根据GPU硬件架构对kernel访存进行合理的编 ...

  6. apache开源 国内镜像地址

    https://mirrors.tuna.tsinghua.edu.cn/apache/kylin/apache-kylin-3.1.1/

  7. IDEA安装配置

    1.安装IDEA选择免费体验 2.下载对应版本的破解补丁 agent.jar -2.1 将agent.jar补丁和important.txt放置到idea安装目录 3.修改VMoption javaa ...

  8. spring事务传递特性-REQUIRES_NEW和NESTED

    spring对于事务的实现的确是它的一大优点,节省了程序员不少时间. 关于事务,有许多可以聊的内容,例如实现方式.实现原理.传递特性等. 本文讨论传递特性中的REQUIRES_NEW,NESTED. ...

  9. springboot使用mail提示没有该类型的bean

    @Autowired private JavaMailSenderImpl javaMailSender; 自动注入时提示没有该类型的Bean. 原因 没有配置邮件发送相关的配置信息. spring: ...

  10. 关于c指针的理解

    1 #include<stdio.h> 2 { 3 int a= 100,b=10; 4 int *p1=&a,*p2=&b; 5 *p1=b; 6 *p2=a; 7 pr ...