# [0701] Task05 策略梯度、Actor-critic 算法

  • easy-rl PDF版本 笔记整理 P4、P9
  • joyrl 比对 补充 P9 - P10
  • 相关 代码 整理

在这里插入图片描述

最新版PDF下载
地址:https://github.com/datawhalechina/easy-rl/releases
国内地址(推荐国内读者使用)
链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us6a

easy-rl 在线版本链接 (用于 copy 代码)
参考链接 2:https://datawhalechina.github.io/joyrl-book/

其它:
【勘误记录 链接】
——————
5、深度强化学习基础 ⭐️
开源内容:https://linklearner.com/learn/summary/11
——————————

随机性策略
输入: 状态
输出: 动作的概率分布

高维 或 连续动作空间 的问题

环境 和 奖励函数 无法控制
调 策略

神经网络的输入: 智能体 看到的东西
输出神经元的个数 和 动作数 一样

1、添加基线。 让奖励有正有负
2、分配合适的分数。
3、优势函数 1 + 2

REINFORCE 算法: 策略梯度、回合更新、蒙特卡洛。

P9:
actor-critic: 策略梯度 + 时序差分学习

异步优势演员-评论员算法 (asynchronous advantage actor-critic,A3C)
优势演员-评论员(advantage actor-critic,A2C)算法

在这里插入图片描述

joyrl:

基于 价值函数 的 RL 算法 的 3 个不足:
1、无法处理 具有连续动作空间 的问题
2、高方差。影响算法收敛性。
3、探索与利用的平衡 仍有改进空间

Asynchronous Advantage Actor Critic (A3C)
Advantage Actor Critic (A2C) ~~~~~       No Asynchronous !!!

——————————————————

A2C VS A3C

OpenAI 关于 A2C 的博文链接

A2C VS A3C
A2C is a synchronous, deterministic variant of Asynchronous Advantage Actor Critic (A3C) which we’ve found gives equal performance.
A2C 是 A3C 的同步、确定性变体,其性能和 A3C 的性能相当。
——————————
Asynchronous Advantage Actor Critic method (A3C) 的 3 个关键思想:
1、一种对固定长度的经验片段(例如,20个时间步)进行操作的更新方案,并使用这些片段来计算 returns 和优势函数的估计。
2、在 策略 和 值函数 之间共享层的架构。
3、异步更新。
——————————
After reading the paper, AI researchers wondered whether the asynchrony led to improved performance (e.g. “perhaps the added noise would provide some regularization or exploration?”), or if it was just an implementation detail that allowed for faster training with a CPU-based implementation.
在阅读了关于 A3C 的论文后,AI 研究人员想知道异步是否会提高性能 (例如,“也许增加的 noise 会提供一些正则化或探索?”),或者这只是一个实现细节,允许使用基于 CPU 的实现进行更快的训练。
As an alternative to the asynchronous implementation, researchers found you can write a synchronous, deterministic implementation that waits for each actor to finish its segment of experience before performing an update, averaging over all of the actors. One advantage of this method is that it can more effectively use of GPUs, which perform best with large batch sizes. This algorithm is naturally called A2C, short for advantage actor critic.
作为异步实现的替代方案,研究人员发现 可以编写一个同步的、确定性的实现,在执行更新之前等待每个 actor 完成它的体验片段,对所有 actors 进行平均。
这种方法的一个优点是它可以更有效地使用 GPUs,这在大批量处理时表现最佳。
Our synchronous A2C implementation performs better than our asynchronous implementations—we have not seen any evidence that the noise introduced by asynchrony provides any performance benefit. This A2C implementation is more cost-effective than A3C when using single-GPU machines, and is faster than a CPU-only A3C implementation when using larger policies.
我们的同步 A2C 实现比异步实现性能更好——我们没有看到任何证据表明异步引入的 noise 提供了任何性能优势。
在使用单 GPU 机器时,这种 A2C 实现比 A3C 更具成本效益,在使用更大的策略时,比仅使用 CPU 的 A3C 实现更快。

——————————————————

A3C_2016_谷歌 DeepMind PDF 链接:Asynchronous Methods for Deep Reinforcement Learning

A3C 算法伪码

在这里插入图片描述

算法: Asynchronous Advantage Actor Critic (A3C) ~~~~~       每一个 actor 学习者线程
// 设 全局共享参数向量 θ \theta θ θ v \theta_v θv,全局共享计数 T = 0 T=0 T=0
//设 线程特定参数向量 θ ′ \theta^\prime θ θ v ′ \theta^\prime_v θv
初始化 线程步数计数 t ← 1 t\leftarrow1 t1
重复以下步骤:
~~~~~~        重置梯度: d θ ← 0 d\theta\leftarrow0 dθ0 d θ v ← 0 d\theta_v\leftarrow0 dθv0
~~~~~~        同步线程特定参数 θ ′ = θ \theta^\prime=\theta θ=θ θ v ′ = θ v \theta^\prime_v=\theta_v θv=θv
~~~~~~        t s t a r t = t t_{\rm start}=t tstart=t
~~~~~~        获取 状态 s t s_t st
~~~~~~       重复以下步骤:
~~~~~~~~~~~~              根据策略 π ( a t ∣ s t ; θ ′ ) \pi(a_t|s_t;\theta^\prime) π(atst;θ) 执行动作 a t a_t at
~~~~~~~~~~~~              得到 奖励 r t r_t rt 和 新的状态 s t + 1 s_{t+1} st+1
~~~~~~~~~~~~              t ← t + 1 t\leftarrow t+1 tt+1
~~~~~~~~~~~~              T ← T + 1 T\leftarrow T+1 TT+1
~~~~~~        直到 s t s_t st 为终止状态 或 t − t s t a r t = = t max ⁡ t-t_{\rm start}==t_{\max} ttstart==tmax
~~~~~~        R = { 0 终止状态  s t V ( s t , θ v ′ ) 非终止状态  s t / / 最后一个状态  B o o t s t r a p R=\left\{\begin{aligned} &0 ~~~~~~~~~~~~~~~~~~~终止状态~ s_t\\ &V(s_t,\theta_v^\prime)~~~~~非终止状态 ~s_t~~//最后一个状态 ~{\rm Bootstrap}\end{aligned}\right. R={0                   终止状态 stV(st,θv)     非终止状态 st  //最后一个状态 Bootstrap
~~~~~~       对于 i ∈ { t − 1 , ⋯ , t s t a r t } i\in\{t-1,\cdots,t_{\rm start}\} i{t1,,tstart}
~~~~~~~~~~~~              R ← r i + γ R R\leftarrow r_i+\gamma R Rri+γR
~~~~~~~~~~~~              关于 θ ′ \theta^\prime θ 的累积梯度: d θ ← d θ + ∇ θ ′ log ⁡ π ( a i ∣ s i ; θ ′ ) ( R − V ( s i ; θ v ′ ) ) d\theta\leftarrow d\theta+\nabla_{\theta^\prime}\log\pi(a_i|s_i;\theta^\prime)(R-V(s_i;\theta_v^\prime)) dθdθ+θlogπ(aisi;θ)(RV(si;θv))
~~~~~~~~~~~~              关于 θ v ′ \theta^\prime_v θv 的累积梯度: d θ v ← d θ v + ∂ ( R − V ( s i ; θ v ′ ) ) 2 ∂ θ v ′ d\theta_v\leftarrow d\theta_v+\frac{\partial(R-V(s_i;\theta_v^\prime))^2}{\partial\theta_v^\prime} dθvdθv+θv(RV(si;θv))2
~~~~~~        d θ dθ dθ 异步更新 θ θ θ,用 d θ v dθ_v dθv 异步更新 θ v θ_v θv
直到 T > T max ⁡ ~T>T_{\max}  T>Tmax

参考链接 1: https://github.com/datawhalechina/joyrl-book/tree/main/notebooks
参考链接 2: https://github.com/datawhalechina/easy-rl/tree/master/notebooks

  • A2C 代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

气压传感器在自动驾驶汽车还有哪些应用场景

气压传感器在近年来被广泛应用于各种新兴领域,以下是其中几个最新的应用: 1、自动驾驶汽车:自动驾驶汽车需要精确的气压传感器来监测道路上的气压变化,帮助车辆进行准确的定位和导航。气压传感器可以提供高精度、可靠的气压数据&…

ezKL;zk-SNARK;零知识证明简单举例说明

目录 ezKL是什么 一、基本概述 二、技术特点 三、使用场景 四、使用方法 五、结论 zk-SNARK 一、定义与特点 二、工作原理 三、应用场景 四、技术挑战 五、未来发展 零知识证明简单举例说明,怎么使用 例子一:房间钥匙的证明 例子二:身份验证 例子三:球的颜色…

git reset 和 git revert区别

git reset 和 git revert 是两个用于撤销提交历史的 Git 命令,它们的主要区别在于: 1、git reset: 作用:用于将当前分支的 HEAD 指针移动到另一个位置,通常是将其重置到之前的提交上。影响:重置会修改历史…

Nuxt 项目集成第三方UI组件库(九)

Nuxt.js 本身并不提供内置的 UI 组件库,它是一个用于构建服务端渲染(SSR)和静态生成(SSG)Vue.js应用的框架。Nuxt.js 的设计目的是提供基础的架构和配置,以便开发者可以根据自己的需求选择和集成第三方 UI …

Java中类加载器引起的ClassNotFoundException和NoClassDefFoundError

在Java开发过程中,ClassNotFoundException和NoClassDefFoundError是两种常见的异常,特别是在涉及类加载器时更容易遇到。本文将探讨这两种异常的成因、区别以及如何解决由类加载器引起的问题。 一、理解ClassNotFoundException和NoClassDefFoundError …

GUKE万能工具箱(附带源码)

GUKE万能工具箱&#xff08;附带源码&#xff09; 效果图部分源码领取完整源码下期更新 效果图 部分源码 <!DOCTYPE html> <html><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1"…

哏号分治,CF103D - Time to Raid Cowavans

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 103D - Time to Raid Cowavans 二、解题报告 1、思路分析 想了半天数据结构最终选择根号分治 我们考虑 大于 550 的公差直接暴力 小于550 的公差的所有询问&#xff0c;我们直接计算该公差后缀和&#xf…

每天一个项目管理概念之项目章程

项目管理中&#xff0c;项目章程扮演着至关重要的角色。它是项目正式启动的标志&#xff0c;为项目的执行提供法律和组织上的认可。项目章程是项目管理知识体系&#xff08;PMBOK&#xff09;中定义的关键文档之一&#xff0c;对于确保项目的顺利进行具有决定性的影响。 定义与…

strcpy,srtcmp,strlen函数漏洞利用

strcpy,srtcmp,strlen函数漏洞利用 strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中&#xff0c;遇到空字符 **b’x\00’**时停止&#xff0c;&#xff1a; 所以可以利用 strcpy不检查缓冲区 的漏洞&#xff08;构造的字符串要以\0结尾&#xff09;&#xff0c;…

prototype 和 __proto__的区别

prototype 和 __proto__ 在 JavaScript 中都与对象的原型链有关&#xff0c;但它们各自有不同的用途和含义。 prototype prototype 是函数对象的一个属性&#xff0c;它指向一个对象&#xff0c;这个对象包含了可以由特定类型的所有实例共享的属性和方法。当我们创建一个新的…

【力扣】数组中的第K个最大元素

一、题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…

C++(第五天----多继承、虚继承、虚函数、虚表)

一、继承对象的内存空间 构造函数调用顺序&#xff0c;先调用父类&#xff0c;再调用子类 #include<iostream>using namespace std;//基类 父类 class Base{ public: //公有权限 类的外部 类的内部 Base(){cout<<"Base()"<<endl;}Base(int …

ANN文献综述

人工神经网络文献综述 摘要 人工神经网络&#xff08;Artificial Neural Networks, ANNs&#xff09;是由多个简单的、相互连接的处理单元组成的自适应系统&#xff0c;通过调整这些单元之间的连接强度&#xff0c;ANNs能够实现对复杂数据的建模和预测。本文综述了ANNs的基本…

el-input-number 点击加减只能加一次

el-input-number 点击加减只能加一次 <el-input-number v-model"editForm.quantity" placeholder"请输入下单数量(店均)" change"quantityChangeFn"></el-input-number>需要在方法里面加 this.$forceUpdate() quantityChangeFn(val…

oracle用户过期/设置无限期用户/ORA-28001:the password has expired

oracle默认情况下&#xff0c;新建的账户只有180天的有效期&#xff0c;在有效期到期前一周就会报警。而一旦过了有效期&#xff0c;账户就会被锁定无法登录。所以为了方便起见&#xff0c;要修改oracle用户的有效期为无限。 1.查看用户密码的有效期设置&#xff0c;一般默认的…

【ABB】控制器语言切换

【ABB】控制器语言切换 操作流程演示 操作流程 点击【菜单】点击【Control Panel】点击【Language】点击【Chinese】点击【OK】此时会弹出弹窗&#xff0c;点击【YES】此时控制器会重启&#xff0c;重启完成就是中文了 演示 点击【菜单】 点击【Control Panel】 点击【Langua…

【hive】数据采样

参考https://hadoopsters.com/how-random-sampling-in-hive-works-and-how-to-use-it-7cdb975aa8e2&#xff0c;可以直接查看原文&#xff0c;下面只是对原文进行概括和实际性能测试。 1.distribute by sort by2.测试3.map端数据过滤优化采样 在说数据采样之前&#xff0c;需要…

贪吃蛇——C语言(VS2022含源代码,及源代码zip文件)

一.游戏背景 贪吃蛇是一款在世界上盛名已久的小游戏&#xff0c;贪食蛇游戏操作简单&#xff0c;可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候&#xff0c;而是开始。那个时候蛇身很短&#xff0c;看上去难度不大&#xff0c;却最容易死掉&#xff0c;因为把玩一条小…

包装与食品机械

《包装与食品机械》 中文核心期刊 中国科技核心期刊 投 稿 指 南 总体要求 文稿应具有科学性、创新性、实用性&#xff0c;论点明确&#xff0c;资料真实&#xff0c;文字规范&#xff0c;研究性论文须有统计学处理&#xff0c;数据准确规范。论述过程条理清晰、逻辑严密。…

Streaming local LLM with FastAPI, Llama.cpp and Langchain

题意&#xff1a; 使用FastAPI、Llama.cpp和Langchain流式传输本地大型语言模型 问题背景&#xff1a; I have setup FastAPI with Llama.cpp and Langchain. Now I want to enable streaming in the FastAPI responses. Streaming works with Llama.cpp in my terminal, but…