深度强化学习框架Acme【一】

Acme学习笔记(一)

  • Chapter 2 RL
    • Online Reinforcement Learning
    • Offline Reinforcement Learning
    • Imitation Learning
    • Learning from Demonstrations
  • Chapter 3 Acme
    • 3.1 Environments and environment loops
    • 3.2 Actors
    • 3.3 Experience replay and data storage
    • 3.4 Learners
    • 3.5 Defining agents using Builders
    • 3.6 Running an agent
    • 3.7 Distributed agents
    • 3.8 Modifications for offline agents
  • Chapter 4 Agent Algorithms
    • 4.2 Online RL

Chapter 2 RL

强化学习的设置可以看作是一个智能体基于环境观察值生成动作、环境根据动作产生奖励和下一时刻观测值的迭代循环。从数学的角度而言,这样的迭代交互可以视为马尔可夫过程或者部分可观测马尔可夫过程。智能体通过策略与环境产生交互,在深度强化学习中,通常用一个深度神经网络来表示它,为了表征更加普遍的setting,智能体使用循环网络作为策略。

Online Reinforcement Learning

在线强化学习的setting常常与给定的环境描述有关,被视为”标准“的强化学习设置。在线强化学习算法分为on-policy和off-policy两种。其中off-policy算法采用experience replay充分利用数据进行策略的更新。

Offline Reinforcement Learning

离线强化学习也被称为batch-RL,agent无法与环境进行交互,只能从给定的数据集中学习策略。在setting下学习策略无法从环境中得到反馈,那么算法就可能出现选择了数据集中没有的actions导致高回报的错误。因此,离线setting中的方法经常包含正则化,以激励学习的策略避免未知或不确定的状态-动作区域。

Imitation Learning

对于一些任务,无法定义reward,使用模仿学习能够很好解决问题。在模仿学习的setting中,环境没有定义reward,而是使用一些demonstrations,目标是学习一个与所提供的demonstrations相匹配的策略或者推断这些demonstrations行为能够获得的奖励。

Learning from Demonstrations

环境可以定义reward,但是很难优化,使用一个专家agent引导学习。

Chapter 3 Acme

Acme是一个强化学习算法的实现框架,能够用于分布式的智能体并行执行。将agent分为三个组件:与环境交互生成数据的actor,存储数据的replay系统以及更新agent行为的learner。这些组件通过builder构成一个完整的agent用于训练和评估agent的性能。
在这里插入图片描述

3.1 Environments and environment loops

使用dm_env这个包来定义环境:dm_env.Environment,里面的方法有:

重新开始一段序列
def reset(self) -> TimeStep
更新环境
def step(self, action) -> TimeStep
返回奖励
def reward_spec(self)
返回折扣因子
def discount_spec(self)
定义观察值
def observation_spec(self)
定义动作
def action_spec(self)
释放环境资源
def close(self)
......

上面六个方法为抽象方法,需要自定义。环境循环的伪代码如下:
在这里插入图片描述

3.2 Actors

Acme中实现了以下四个方法:

  • select_action:根据观测值返回动作。
  • observe:根据agent的动作生成元组(r, d, o, e)【奖励,折扣,下一时刻观测值,奖励】。
  • observe_first:与observe功能相同,但只能在一个eposide的第一步调用。
  • update:更新actor的内部参数,通常与learner的最新策略参数有关。
    使用GenericActor来构造。当一个 Actor 被实例化时,它被赋予一个实现 VariableSource 接口的对象。此接口包括一个 get_variables 方法,可用于检索最新的策略参数集。
    在这里插入图片描述

3.3 Experience replay and data storage

Acme通过使用Reverb来实现经验的存储。Reverb是一个高性能、可扩展且易于使用的回放缓冲库。它能支持大规模的数据流和学习算法。Reverb是server-client架构。

3.4 Learners

Learner的接口主要由一个step组成,该函数执行单个学习步骤来更新智能体的参数,对应于梯度下降的步长。Learner公开一个 get_variables 方法,该方法返回其参数的当前状态。通过定义此方法,Learner实现了描述Actor时引入的 VariableSource 接口,此方法主要用于在与环境交互时更新Actor。

3.5 Defining agents using Builders

定义builder的一些函数:

  • make_policy:将策略构造为环境规范(environment spec)和神经网络的函数。
  • make_replay_tables:返回replay tables。Reverb收集写入的数据,使用adder在多个表之间以不同的方式写入数据,然后可以在learner端进行采样。表的格式取决于环境的输入和输出的形状以及策略的输出。
  • make_adder:构建adder用于记录数据到replay中。输入参数为环境规范和网络。
  • make_actor:返回actor作为策略的函数。
  • make_learner:返回处理agent参数更新的learner。
  • make_dataset_iterator:构建replay client的数据迭代器。

3.6 Running an agent

在Acme中,一个experiment(agent)是一个builder,network和environment的结合。运行实验的组件可以使用ExperimentConfig数据类型进行特征定义,给定这样的配置,Acme 提供了一个简单的 run_experiment 函数,该函数将实例化所有必要的 actor、learner、environment loop组件。以下是experiement的伪代码:
在这里插入图片描述
第一行:载入环境
第二行:从环境中读取环境规范,即observation_spec, action_spec, reward_spec, discount_spec。
第三行:载入网络
第四行:定义builder,根据network和environment_spec生成策略。
第五、六行:创造replay table
第七行:形成数据迭代器,可直接读取使用
第八行:定义learner用于参数更新
第九行:定义adder用于添加数据到replay
第十行:定义actor用于与环境交互生成数据
第十一行:包装 actor 以定期对actor运行训练步骤
第十二行:创建EnvironmentLoop
第十三行:开始运行

下图为 Acme框架的组件
在这里插入图片描述Acme提供了一些工具,定义实验环境的配置和运行方式。从practitioner的角度,其更关注创建不同的环境和网络,定义agent的配置;从user角度,则是通过创建一个agent builder来得到新的算法。
实验还包含一个logger factory来打印debug过程当中的信息。

3.7 Distributed agents

下图为分布式智能体的示意图,通过增加actor的数量,actor并行执行加快数据产生的速度,learner将有充分的数据进行学习。
在这里插入图片描述

3.8 Modifications for offline agents

Acme适用run_offline_experiment函数进行无数据生成过程、拥有固定数据集的简单实验。使用OfflineBuilder定义agent,不包含adder组件。

Chapter 4 Agent Algorithms

4.2 Online RL

经典的DQN(2013, 2015)

在这里插入图片描述
Munchausen DQN (2020)
在这里插入图片描述
改进版本的DQN,普通版本DQN通过估计下一时刻的Q值,引导agent向Q值大的方向学习,通过自举更新Q值。而Munchausen DQN提出一个不同于Q值的引导信号,log-policy。对于一个确定性策略,每个最优动作的概率为1, 其他动作的概率为0,那么取log后,最优动作的log值为0,而其他动作的log值为负无穷,当把它加入到reward当中,可以引导agent学习最优动作,对policy进行自举(最优动作未知)。
性能提升的关键:在最大化奖励的同时会最小化新旧policy的KL散度。
目标Q为
在这里插入图片描述
Recurrent Replay Distributed DQN(2018)
在这里插入图片描述
Recurrent Replay Distributed DQN 是一个分布式、有循环神经网络的DQN。用在部分可观测马尔可夫过程中,拥有较好的效果。

Distributed Distributional Deterministic Policy Gradients(2018)在这里插入图片描述
D4PG是DDPG的分布式版本,一些改进:

  1. 分布式RL:在critic中使用Q distribution来替代Q function
  2. N-step return:使用n步的return替换掉一步的return
  3. Apex 和PER:从多个actor上采样,使用优先经验回放充分利用经验。

The Twin Delayed DDPG (2018)
在这里插入图片描述
TD3是DDPG的优化版本,一些改进:

  1. double DQN:使用两个网络进行Q值估算,选择较小的作为更新目标
  2. actor更新延迟:critic运行多次后再更新actor
  3. 目标策略平滑:价值函数的更新目标每次都在action上加一个小扰动,估计更准确,更健壮

未完待续
——————————————————————————————————————
参考文献&资料:
【1】Hoffman, M.W., Shahriari, B., Aslanides, J., Barth-Maron, G., Behbahani, F.M., Norman, T., Abdolmaleki, A., Cassirer, A., Yang, F., Baumli, K., Henderson, S., Novikov, A., Colmenarejo, S.G., Cabi, S., Gulcehre, C., Paine, T.L., Cowie, A., Wang, Z., Piot, B., & Freitas, N.D. (2020). Acme: A Research Framework for Distributed Reinforcement Learning. ArXiv, abs/2006.00979.
【2】https://zhuanlan.zhihu.com/p/286495498
【3】https://zhuanlan.zhihu.com/p/474734276
【4】https://zhuanlan.zhihu.com/p/111334500
【5】https://zhuanlan.zhihu.com/p/104433790

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Backblaze发布2024 Q1硬盘故障质量报告-2

截至2024年第一季度末,我们正在跟踪279,572块正在运行的硬盘。硬盘型号在2024年第一季度末必须拥有500块或更多的硬盘,并在整个使用寿命期间累积超过100,000个硬盘工作日,达到这个条件的所有型号盘的故障率趋势表现如下: 除了三种…

后仿中必须读懂的User-defined primitives(UDP)

一 UDP定义规则 UDP,全名:User-defined primitives。 用户自己定义的原语。 UDP可分为:combinational UDP(组合逻辑)和 sequential UDP(时序逻辑)。 1.1 组合逻辑UDP combinational UDP用于…

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…

《十九》Qt Http协议及实战

前言 本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这个协议。 一、HTTP概述 HTTP(超文本传输协议)是互联网上应用最为广泛的协议之一,它定义了客户端…

linux 调试-kdb 调试内核-1

目标:打印bcm2835_spi_transfer_one 是如何从用户空间开始调用的 1. kernel 配置 KDB配置选项 添加 spi 控制器驱动 和 spi 设备驱动 2. 调试流程 调试内核-系统启动之后 1. 开发板进入kdb,等待pc 连接 rootraspberrypi:~# echo "ttyS0,115200"…

《ESP8266通信指南》12-Lua 固件烧录

往期 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP8266通信指南》10-MQTT通信(Arduino开发)-CSDN博客 《ESP8266通信指南》9-TCP通信(Arudino开发)-CSDN博客 《ESP8266通信指南》8-连接WIFI(Arduino开发…

AIGC技术带给我们什么?基于AIGC原理及其技术更迭的思考

AIGC技术带给我们什么?基于AIGC原理以及技术更迭的思考 前言 AI,这个词在如今人们的视野中出现频率几乎超过了所有一切其他的事物,更有意思的是,出现频率仅次于这个词的,几乎都会加上一个修饰亦或是前缀——AI&#…

SpringBoot3项目打包和运行

六、SpringBoot3项目打包和运行 6.1 添加打包插件 在Spring Boot项目中添加spring-boot-maven-plugin插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin插件配置,使用常规的java -jar命令来运行打包后的Spring Boot项目是无法找…

asp.net成绩查询系统

说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 功能模块: asp.net成绩查询系统 学生功能有查看成绩和修改账号密码等 后台管理员可以进行用户管理 管理员添加管理员查询注…

成为黑客第一步,应该从熟练掌握运维常见的工具开始

目录 1. 开发工具 2. 自动化构建和测试 3. 持续集成与交付(CI/CD) 4. 部署工具 5. 维护 6. 监控,警告&分析 1. 开发工具 代码编辑器和IDE(集成开发环境):如Visual Studio Code、IntelliJ IDEA和E…

看完这篇文章我奶奶都懂Opentracing了 (二)

二. 概念分析 1. Span和SpanContext 结合上述示例,我们从Span开始入手来进行概念分析,但是说在最前面,Span在不同的分布式链路实现中,其定义是不全一样的,尽管Opentracing已经进行了概念的统一,但是具体到…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

在拥有多个同名称密码的ap环境中,如何连接到指定信道或mac的ap路由器?

在给客户做ESP32-C3入墙开关项目时,客户问:在拥有多个同名称密码的ap环境中,如何连接到指定信道或mac的ap路由器?针对这个问题,启明云端工程师给出下面解决方法。 1、将wifi_sta_config_t配置中的channel配置为该信道…

Codeforces Round 942 (Div. 2) A-D1

题目&#xff1a; Codeforces Round 942 (Div. 2) D2有缘再补吧… A. Contest Proposal 题意 两个升序&#xff08;不降&#xff09;的序列a和b&#xff0c;可以在a的任意位置插入任意数&#xff08;要保持升序&#xff09;&#xff0c;使对任意i&#xff0c;有a[i] < b[…

js 图片渐变

1. 点击图片&#xff0c;使其渐变为另一张图片 通过定义keyframes来创建一个淡入淡出的动画效果。当图片被点击时&#xff0c;先添加淡出动画使图片透明度从0渐变到1&#xff0c;然后在1秒后切换图片源并添加淡入动画使新图片透明度从0渐变到1&#xff0c;实现图片渐变效果。 …

Django调用MTP服务器给指定邮箱发送邮件

Django调用MTP服务器发送邮箱 邮箱的激活链接含有用户数据不能直接发送需要对其进行加密 发送邮箱是借助SMTP服务器进行中转 一. 配置SMTP服务中的邮箱信息以及激活链接 1. 配置邮箱权限 打开网易邮箱设置点击POP3 开启选项 注 : 在打开的过程中会弹出授权密码一点要保存 …

【Unity动画系统】动画层级(Animation Layer)讲解与使用

如何使用Unity的Animation Layer和Avater Mask把多个动画组合使用 想让玩家持枪行走&#xff0c;但是手里只有行走和持枪站立的动作。 Unity中最方便的解决办法就是使用动画层级animation layer以及替身蒙版avatar mask。 创建一个动画层级 Weight表示权重&#xff0c;0的话则…

1.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程JavaScript,看这一篇就够了

上一章我们讲了HTML的知识&#xff0c;那么我们现在要来学习&#xff0c;JavaScript 那么首先我们要知道JavaScript写在哪里。 JavaScript核心语法 js书写的位置 1、写在页面中的script标签下 只有在代码与页面有强关联的情况下才会写在页面里 2、写在指定的js文件下通过…

下一代Nginx? OpenNjet 的入门实践

何为 OpenNjet &#xff1f; OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序&#xff0c;作为底层引擎&#xff0c;OpenNJet 实现了NGINX 云原生功能增强、安全加固和代码重构&#xff0c;利用动态加载机制可以实现不同的产品形态&#xff0…

Python基础详解二

一&#xff0c;函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现某个功能的代码段 def myMethod(data):print("数据长度为",len(data))myMethod("dsdsdsds") 函数的定义&#xff1a; def 函数名(传入参数):函数体return 返回值 def m…