强化学习_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction

paper Link: ICM: Curiosity-driven Exploration by Self-supervised Prediction
GITHUB Link: 官方: noreward-rl

1- 主要贡献

  1. 对好奇心进行定义与建模
    1. 好奇心定义:next state的prediction error作为该state novelty
      1. 如果智能体真的“懂”一个state,那么给出这个state和所做的action,它应该能很准确的predict出next state是什么。也就是“What I can not predict well, is novel”
  2. 提出了Intrinsic Curiosity Module(ICM)来估计一个状态的novelty大小,并给予相应的内在奖励(intrinsic reward)
  3. 研究了3种泛化环境,验证了好奇心在实际环境中的作用
    1. 稀疏的外在奖励, 好奇心使得与环境少量的互动,就那么好以实现目标;
    2. 不添加外在奖励的探索,好奇心促使主体更有效地探索;
    3. 泛化到看不见的场景(例如同一游戏的新级别),在这些场景中,从早期经验中获得的知识可以帮助agnet比重新开始更快地探索新的地方。

2- Intrinsic Curiosity Module (ICM) 框架

在这里插入图片描述

2.1 ICM三大件:

  1. Encoder( θ E \theta_E θE):
    1. 将current state转换成feature ϕ ( s t ) \phi(s_t) ϕ(st)
    2. 将next state转换成feature ϕ ( s t + 1 ) \phi(s_{t+1}) ϕ(st+1)
  2. Forward Model( θ F \theta_F θF): 给定 ϕ ( s t ) \phi(s_t) ϕ(st) 和 action a t a_t at, 来估计next state feature ϕ ^ ( s t + 1 ) \hat{\phi}(s_{t+1}) ϕ^(st+1)
    1. min ⁡ θ F L ( ϕ ^ ( s t + 1 ) , ϕ ( s t + 1 ) ) \min_{\theta_F} L(\hat{\phi}(s_{t+1}), \phi(s_{t+1})) minθFL(ϕ^(st+1),ϕ(st+1))
    2. r t i = η 2 ∣ ∣ ϕ ^ ( s t + 1 ) − ϕ ( s t + 1 ) ∣ ∣ 2 2 r^i_t = \frac{\eta}{2} ||\hat{\phi}(s_{t+1}) - \phi(s_{t+1})||^2_2 rti=2η∣∣ϕ^(st+1)ϕ(st+1)22
  3. Inverse Model( θ I \theta_I θI): 给定 ϕ ( s t ) \phi(s_t) ϕ(st) ϕ ( s t + 1 ) \phi(s_{t+1}) ϕ(st+1), 来估计action a ^ t \hat{a}_t a^t
    1. 用 $\min_{\theta_I, \theta_E} L(a_t, \hat{a}_t) $
    2. 让Encoder输出的表征限制于智能体、改变的空间里

2.2 三大件的作用:

  1. Encoder显然就是将state编码
  2. Forward Model就是基于state-Encoder和action给出next state feature, 用真实next state feature和预估的值的差异作为好奇心内在奖励
    1. 对于见到少的组合给出的预估会不准,即好奇心reward会高
  3. Inverse Model让Encoder输出的表征限制于智能体、改变的空间里
    1. 因为Encoder+Forward Model会引入一个Noisy-TV Problem(雪花屏问题):
      1. 当画面都是噪音的时候,观察者无法对下一个state做出预测
      2. 即预估和真实next state feature始终差异较大,内在奖励就非常大,会导致观察者很上瘾,一直盯着noisy TV看:比如开枪时火花的随机渲染,智能体可能就会一直停在原地开火,欣赏迸发出的火花
    2. 所以Inverse Model根据两个相邻的state来推断智能体所选的action a ^ t \hat{a}_t a^t。然后利用inverse prediction error( L ( a t , a ^ t ) L(a_t, \hat{a}_t) L(at,a^t) )来训练Encoder。
      1. 最终 Encoder就不在意两个不同的噪音的差别,也就不会提供novelty奖励了

反向传播迭代图示
在这里插入图片描述

  1. Forward Model的Prediction error只用来训练forward model,而不用于训练Encoder
    1. ϕ ^ ( s t + 1 ) = f F ( ϕ ( s t ) , a t ; θ F ) ; min ⁡ θ F L ( ϕ ^ ( s t + 1 ) , ϕ ( s t + 1 ) ) \hat{\phi}(s_{t+1})= f_{F}(\phi(s_t), a_t; \theta_F);\min_{\theta_F} L(\hat{\phi}(s_{t+1}), \phi(s_{t+1})) ϕ^(st+1)=fF(ϕ(st),at;θF);minθFL(ϕ^(st+1),ϕ(st+1))
    2. ϕ ( s t ) , ϕ ( s t + 1 ) \phi(s_{t}), \phi(s_{t+1}) ϕ(st),ϕ(st+1) detach
  2. Inverse Model的Inverse prediction error既用来训练Inverse model,也用来Encoder
    1. min ⁡ θ I , θ E L ( a t , a ^ t ) \min_{\theta_I, \theta_E} L(a_t, \hat{a}_t) minθI,θEL(at,a^t)
    2. a ^ t = f I ( ϕ ( s t ) , ϕ ( s t + 1 ) ; θ I ) = f I ( ϕ ( s t ) , f E ( s t + 1 ; θ E ) ) ; θ I ) \hat{a}_t = f_{I}( \phi(s_t), \phi(s_{t+1}); \theta_I) = f_{I}( \phi(s_t), f_{E}(s_{t+1}; \theta_E)); \theta_I) a^t=fI(ϕ(st),ϕ(st+1);θI)=fI(ϕ(st),fE(st+1;θE));θI)
    3. ϕ ( s t ) \phi(s_{t}) ϕ(st) detach

3- python code

ICM code

from  torch import nn 
import torch 
import torch.nn.functional as Fclass cnnICM(nn.Module):def __init__(self, channel_dim,state_dim, action_dim):super(cnnICM, self).__init__()self.state_dim = state_dimself.channel_dim = channel_dimself.action_dim = action_dimself.cnn_encoder_feature = nn.Sequential(nn.Conv2d(channel_dim, 32, kernel_size=8, stride=4),nn.ReLU(),nn.Conv2d(32, 64, kernel_size=4, stride=2),nn.ReLU(),nn.Conv2d(64, 64, kernel_size=3, stride=1),nn.ReLU(),nn.Flatten())cnn_out_dim = self._get_cnn_out_dim()self.cnn_encoder_header = nn.Sequential(nn.Linear(cnn_out_dim, 512),nn.ReLU())# 离散动作self.action_emb = nn.Embedding(self.action_dim, self.action_dim)self.forward_model = nn.Sequential(nn.Linear(512 + action_dim, 256),nn.ReLU(),nn.Linear(256, 512),)self.inverse_model = nn.Sequential(nn.Linear(512 + 512, 256),nn.ReLU(),nn.Linear(256, action_dim),nn.Softmax())@torch.no_graddef _get_cnn_out_dim(self):pic = torch.randn((1, self.channel_dim, self.state_dim, self.state_dim))return self.cnn_encoder_feature(pic).shape[1]  def encode_pred(self, state):return self.cnn_encoder_header(self.cnn_encoder_feature(state))def forward_pred(self, phi_s, action):return self.forward_model(torch.concat([phi_s, self.action_emb(action)], dim=1))def inverse_pred(self, phi_s, phi_s_next):return self.inverse_model(torch.concat([phi_s, phi_s_next], dim=1))def forward(self, state, n_state, action, mask):# 离散动作action = action.type(torch.LongTensor).reshape(-1).to(state.device)# encodephi_s = self.encode_pred(state)phi_s_next = self.encode_pred(n_state)# forward  不用于训练Encoderhat_phi_s_next = self.forward_pred(phi_s.detach(), action)# intrinisc reward & forward_loss  r_i = 0.5 * nn.MSELoss(reduction='none')(hat_phi_s_next, phi_s_next.detach())r_i = r_i.mean(dim=1) * mask forward_loss = r_i.mean()# inverse 同时用于训练Encoderhat_a = self.inverse_pred(phi_s.detach(), phi_s_next)# inverse loss inv_loss = (nn.CrossEntropyLoss(reduction='none')(hat_a, action) * mask).mean()return r_i, inv_loss, forward_loss

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

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

相关文章

spring中的@Configuration注解详解

一、概述与核心作用 Configuration是Spring框架中用于定义配置类的核心注解,旨在替代传统的XML配置方式,通过Java代码实现Bean的声明、依赖管理及环境配置。其核心作用包括: 标识配置类:标记一个类为Spring的配置类,…

7.计算机网络相关术语

7. 计算机网络相关术语 ACK (Acknowledgement) 确认 ADSL (Asymmetric Digital Subscriber Line) 非对称数字用户线 AP (Access Point) 接入点 AP (Application) 应用程序 API (Application Programming Interface) 应用编程接口 APNIC (Asia Pacific Network Informatio…

Hadoop 集群基础指令指南

目录 🧩 一、Hadoop 基础服务管理指令 ▶️ 启动 Hadoop ⏹️ 关闭 Hadoop 🧾 查看进程是否正常运行 📁 二、HDFS 常用文件系统指令 🛠️ 三、MapReduce 作业运行指令 📋 四、集群状态监控指令 💡 …

【MySQL数据库】事务

目录 1,事务的详细介绍 2,事务的属性 3,事务常见的操作方式 1,事务的详细介绍 在MySQL数据库中,事务是指一组SQL语句作为一个指令去执行相应的操作,这些操作要么全部成功提交,对数据库产生影…

一、OrcaSlicer源码编译

一、下载 1、OrcaSlicer 2.3.0版本的源码 git clone https://github.com/SoftFever/OrcaSlicer.git -b v2.3.0 二、编译 1、在OrcaSlicer目录运行cmd窗口,输入build_release.bat 2、如果出错了,可以多运行几次build_release.bat 3、在OrcaSlicer\b…

港口危货储存单位主要安全管理人员考试精选题目

港口危货储存单位主要安全管理人员考试精选题目 1、危险货物储存场所的电气设备应符合( )要求。 A. 防火 B. 防爆 C. 防尘 D. 防潮 答案:B 解析:港口危货储存单位存在易燃易爆等危险货物,电气设备若不防爆&…

格雷希尔用于工业气体充装站的CZ系列气罐充装转换连接器,其日常维护有哪些

格雷希尔气瓶充装连接器,长期用于压缩气体的快速充装和压缩气瓶的气密性检测,需要进行定期的维护,为每一次的充装提供更好的连接。下列建议的几点维护准则适用于格雷希尔所有充注接头,请非专业人士不要随意拆卸连接器。 格雷希尔气…

Java 多线程进阶:什么是线程安全?

在多线程编程中,“线程安全”是一个非常重要但又常被误解的概念。尤其对于刚接触多线程的人来说,不理解线程安全的本质,容易写出“偶尔出错”的代码——这类 bug 往往隐蔽且难以复现。 本文将用尽可能通俗的语言,从三个角度解释线…

MSO-Player:基于vlc的Unity直播流播放器,支持主流RTSP、RTMP、HTTP等常见格式

MSO-Player 基于libVLC的Unity视频播放解决方案 支持2D视频和360度全景视频播放的Unity插件 📑 目录 🎥 MSO-Player 📋 功能概述🚀 快速入门📚 关键组件📝 使用案例🔌 依赖项📋 注意…

navicat中导出数据表结构并在word更改为三线表(适用于navicat导不出doc)

SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,IS_NULLABLE 是否为空,COLUMN_DEFAULT 默认值,COLUMN_COMMENT 备注 FROMINFORMATION_SCHEMA.COLUMNS WHEREtable_schema db_animal(数据库名) AND table_name activity(…

docker学习笔记6-安装wordpress

一、创建自定义网络、查看网络 docker netword create blog docker network ls 二、 启动mysql容器 启动命令: docker run -d -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD123456 \ -e MYSQL_DATABASEwordpress \ -v mysql-data:/var/lib/mysql \ -v /app/myconf:/etc…

03_Mybatis-Plus LambadaQueryWrapper 表达式爆空指针异常

&#x1f31f; 03_MyBatis-Plus LambdaQueryWrapper 爆出空指针异常的坑点分析 ❓ 场景描述 来看一段常见的 MyBatis-Plus 查询写法&#xff0c;是否存在问题&#xff1f; Page<VideoInfoVo> videoInfoVosPage videoMapper.selectPage(page, new LambdaQueryWrapper&…

WEB安全--社会工程--SET钓鱼网站

1、选择要钓鱼的网站 2、打开kali中的set 3、启动后依次选择&#xff1a; 4、输入钓鱼主机的地址&#xff08;kali&#xff09;和要伪装的网站域名&#xff1a; 5、投放钓鱼网页&#xff08;服务器域名:80&#xff09; 6、获取账号密码

Ethan独立开发产品日报 | 2025-04-29

1. mrge 代码审查的光标 mrge 是一个由人工智能驱动的代码审查平台&#xff0c;能够自动审核拉取请求&#xff08;PR&#xff09;&#xff0c;为人工审查员提供超级能力。它是像 cal.com 和 n8n 这样快速发展的团队的首选工具。 关键词&#xff1a;mrge, 代码审查, AI驱动, …

ubuntu22.04 qemu arm64 环境搭建

目录 创建 安装 Qemu 启动 # 进入qemu虚拟机后执行 qemu编译器安装 创建 qemu-img create ubuntu22.04_arm64.img 40G 安装 qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 -M virt -bios QEMU_EFI.fd -nographic -drive ifnone,fileubuntu-22.04.5-live-server-a…

安全生产知识竞赛宣传口号160句

1. 安全生产是责任&#xff0c;每个人都有责任 2. 安全生产是保障&#xff0c;让我们远离危险 3. 安全生产是团结&#xff0c;共同守护每一天 4. 注重安全&#xff0c;守护明天 5. 安全生产无小事&#xff0c;关乎千家万户 6. 安全第一&#xff0c;人人有责 7. 安全生产无差别&…

Python 虚拟环境管理:venv 与 conda 的选择与配置

文章目录 前言一、虚拟环境的核心价值1.1 依赖冲突的典型场景1.2 隔离机制实现原理 二、venv 与 conda 的架构对比2.1 工具定位差异2.2 性能基准测试&#xff08;以创建环境 安装 numpy 为例&#xff09; 三、venv 的配置与最佳实践3.1 基础工作流3.2 多版本 Python 管理 四、…

【自然语言处理与大模型】如何获取特定领域的微调数据集?

在特定领域中&#xff0c;数据集通常由提出需求的一方提供。然而&#xff0c;在某些情况下&#xff0c;如果他们未能提供所需的数据&#xff0c;或者你正在独立开展一个项目&#xff0c;并且需要相应的数据来推进工作&#xff0c;这时你应该怎么办呢&#xff1f;本文提供一种思…

Map系列之ConcurrentHashMap源码分析:高并发场景下的性能密码

引言&#xff1a;当线程安全成为刚需 1.1 并发时代的Map困境 经典案例&#xff1a;电商秒杀系统超卖事故分析&#xff08;附线程堆栈截图&#xff09;传统方案缺陷&#xff1a;synchronizedMap的吞吐量陷阱&#xff08;JMH测试数据对比&#xff09;ConcurrentHashMap的定位&a…

URP - 序列图动画的实现

效果&#xff1a; 【太妃糖耶】更新了一条视频&#xff0c;快来围观&#xff01; 序列图动画的实现 首先先了解下序列图样式的纹理图片 如上图一可在Shader中使用该图片制作燃烧的火的动画&#xff0c;但是如何实现呢&#xff1f;接下来一起来看一下吧 序列图动画的实现原理大…