Count-based exploration with neural density models论文笔记

Count-based exploration with neural density models[J]. International Conference on Machine Learning,International Conference on Machine Learning, 2017.

基于计数的神经密度模型探索

0、问题

这篇文章的关键在于弄懂pseudo-count的概念,以及是如何运用pseudo-count去进行探索的。pseudo-count主要用于生成探索奖励,即可以理解为生成内在奖励。

但是仍然保留一个疑问为在使用PixelCNN得到状态st的概率密度和状态st+1的概率密度后,为何不适用
N ^ n ( x ) = ρ n ( x ) ( 1 − ρ n ′ ( x ) ) ρ n ′ ( x ) − ρ n ( x ) \hat{\mathrm{N}}_n(x)=\frac{\rho_n(x)(1-\rho_n'(x))}{\rho_n'(x)-\rho_n(x)} N^n(x)=ρn(x)ρn(x)ρn(x)(1ρn(x))
这一公式来直接计算pseudo-count,这里的计算好像还用的是等号?而使用
N ^ n ( x ) ≈ ( e P G n ( x ) − 1 ) − 1 \hat{\mathrm{N}}_n(x)\approx\left(e^{\mathrm{PG}_n(x)}-1\right)^{-1} N^n(x)(ePGn(x)1)1
这一公式来近似计算pseudo-count?

1、Motivation

本文主要是针对强化学习中的智能体探索方面,提出了一种基于计数的探索方式。

在强化学习中,dynamics(动态模型)指的是对环境的模拟或建模。它描述了智能体与环境互动的方式,包括智能体采取行动后环境如何变化以及智能体所观察到的状态转换。

“pseudo-count”(伪计数)是一个在统计学和机器学习中常用的概念。它指的是一种人为引入的计数,用于对现有数据的不确定性进行建模。

密度模型(Density Model)是一种用于建模概率密度函数的数学模型,它可以用来描述或预测随机变量的分布。密度模型在统计学、概率论、信息论、机器学习等领域中得到了广泛应用。

2、Background

状态的概率密度模型p
ρ ( x ) = P ( X n + 1 = x ∣ X 1 … X n = x 1 : n ) = N ^ ( x ) n ^ \rho(x)=P(X_{n+1}=x|X_1\ldots X_n=x_{1:n})=\frac{\hat{N}(x)}{\hat{n}} ρ(x)=P(Xn+1=xX1Xn=x1:n)=n^N^(x)
prediction gain of ρ:
P G n ( x ) = log ⁡ ρ n ′ ( x ) − log ⁡ ρ n ( x ) \mathrm{PG}_n(x)=\log\rho_n^{\prime}(x)-\log\rho_n(x) PGn(x)=logρn(x)logρn(x)
pseudo-count:

  1. N ^ n ( x ) = ρ n ( x ) ( 1 − ρ n ′ ( x ) ) ρ n ′ ( x ) − ρ n ( x ) \hat{\mathrm{N}}_n(x)=\frac{\rho_n(x)(1-\rho_n'(x))}{\rho_n'(x)-\rho_n(x)} N^n(x)=ρn(x)ρn(x)ρn(x)(1ρn(x))

pseudo-count可以用PG来近似:
N ^ n ( x ) ≈ ( e P G n ( x ) − 1 ) − 1 \hat{\mathrm{N}}_n(x)\approx\left(e^{\mathrm{PG}_n(x)}-1\right)^{-1} N^n(x)(ePGn(x)1)1
tips:以上公式的具体推导引用了白辰甲老师的知乎回答强化学习中的探索与利用(count-based) - 知乎 (zhihu.com)

由此可以得到这篇文章中提出的内在奖励公式:
r + ( x ) : = ( N ^ n ( x ) ) − 1 / 2 r^+(x):=(\hat{\mathrm{N}}_n(x))^{-1/2} r+(x):=(N^n(x))1/2
本文估计期望回报采用mixed Monte-Carlo update (MMC)算法:
Q ( x , a ) ← Q ( x , a ) + α [ ( 1 − β ) δ ( x , a ) + β δ M C ( x , a ) ] Q(x,a)\leftarrow Q(x,a)+\alpha\left[(1-\beta)\delta(x,a)+\beta\delta_{\mathsf{MC}}(x,a)\right] Q(x,a)Q(x,a)+α[(1β)δ(x,a)+βδMC(x,a)]

其中:
δ ( x , a ) = r ( x , a ) + γ max ⁡ a ′ Q ( x ′ , a ′ ) − Q ( x , a ) \delta\left(x,a\right)=r(x,a)+\gamma\operatorname*{max}_{a^{\prime}}Q(x^{\prime},a^{\prime})-Q(x,a) δ(x,a)=r(x,a)+γamaxQ(x,a)Q(x,a)

δ MC ( x , a ) = ∑ t = 0 ∞ γ t r ( x t , a t ) − Q ( x , a ) \delta_{\text{MC}}( x , a )=\begin{aligned}\sum_{t=0}^{\infty}\gamma^{t}r(x_{t},a_{t})-Q(x,a)\end{aligned} δMC(x,a)=t=0γtr(xt,at)Q(x,a)

前者为TD算法中的目标值与实际值之差,后者为蒙特卡洛算法中实际回报与实际动作状态价值之差。

3、一些估计Return的算法

各种算法估计Return的利弊:

  1. TD(λ) with important sampling :可以保证收敛,但是重要性采样的系数引入了极大的方差,导致算法的收敛过程不稳定。
  2. Q(λ) :忽略重要性采样系数,直接乘以λ,能保证方差小,但是只有在采样策略和目标策略接近时才可以保证收敛,不安全。
  3. Retrace算法:低方差(控制了重要性采样系数的大小)、安全性高(总是能“安全”地利用各种行为策略采样得到的样本,当behavior policy和target policy差很多的时候,依然能保障收敛性)、样本效率高(对reward的压缩性没有那么高),但是Retrace(λ)算法在学习时过于谨慎,可能无法充分利用探索奖励,因为在计算重要性采样比率时采样的数据会被截断,只有那些足够接近当前策略的状态-行为轨迹才会被保留

估计Return的通用算子:
R Q ( x , a ) : = Q ( x , a ) + E μ [ ∑ t ≥ 0 γ t ( ∏ s = 1 t c s ) ( r t + γ E π Q ( x t + 1 , ⋅ ) − Q ( x t , a t ) ) ] \mathcal{R}Q(x,a):=Q(x,a)+\mathbb{E}_\mu\left[\sum_{t\geq0}\gamma^t(\prod_{s=1}^tc_s)(r_t+\gamma\mathbb{E}_\pi Q(x_{t+1},\cdot)-Q(x_t,a_t))\right] RQ(x,a):=Q(x,a)+Eμ[t0γt(s=1tcs)(rt+γEπQ(xt+1,)Q(xt,at))]
将TD(λ)、Q(λ)、Retrace等算法的不同归结为c_{s}的不同:

  1. TD(λ) with import sampling:
    c s = λ ⋅ π ( a s ∣ x s ) μ ( a s ∣ x s ) c_s=\lambda\cdot\frac{\pi(a_s|x_s)}{\mu(a_s|x_s)} cs=λμ(asxs)π(asxs)

  2. Q(λ):
    c s = λ   c_s=\lambda\ cs=λ 

  3. Retrace(λ):
    c s = λ ⋅ m i n ( 1 , π ( a s ∣ x s ) μ ( a s ∣ x s ) ) c_s=\lambda\cdot min{\left(1,\frac{\pi(a_s|x_s)}{\mu(a_s|x_s)}\right)} cs=λmin(1,μ(asxs)π(asxs))

由于Retrace(λ)使用了在1处截断的Importance Sampling,方差得到了降低。同时,因为
min ⁡ ( 1 , π ( a s ∣ x s ) μ ( a s ∣ x s ) ) ≥ π ( a s ∣ x s ) \min\left(1,\frac{\pi(a_s|x_s)}{\mu(a_s|x_s)}\right)\geq\pi(a_s|x_s) min(1,μ(asxs)π(asxs))π(asxs)
所以Retrace(λ)对回报的压缩幅度更弱(尤其是在两个policy接近时),从而提高了return的利用效率。

tips:对于Retrace(λ)算子的详细推导过程见【Typical RL 19】Retrace - 知乎 (zhihu.com)

4、方法过程

使用PixelCNN,将当前状态作为输入,输出对应状态的概率密度估计,通过对状态概率密度进行计数,计算出每个状态的探索奖励,即越少访问过的状态获得的奖励越高。这样,在选择下一个动作时,在智能体的策略中加入了探索奖励的权重,以鼓励更多地探索未知的状态,从而提高学习效率和收敛速度。

为了确保pseudo-counts与真实计数近似线性增长,PG应该以n^-1的速率衰减。于是将PG_{n}替换为c_{n}*PG_{n},其中c_{n}为:
c n = c n c_n=\frac{c}{\sqrt{n}} cn=n c
文章中通过实验确定c=0.1时结果最好。

由于当神经网络模型的优化器超过局部损失的最小值时,会出现负PG,因此需要给PG设定一个阈值为0,得到最终的伪计数公式为:
N ^ n ( x ) = ( exp ⁡ ( c ⋅ n − 1 / 2 ⋅ ( PG ⁡ n ( x ) ) + ) − 1 ) − 1 \begin{aligned}\hat{\mathrm{N}}_n(x)&=\left(\exp\left(c\cdot n^{-1/2}\cdot(\operatorname{PG}_n(x))_+\right)-1\right)^{-1}\end{aligned} N^n(x)=(exp(cn1/2(PGn(x))+)1)1
因此最终得到的组合探索奖励为:
r t = r ( x , a ) + ( N ^ n ( x ) ) − 1 / 2 r_t=\begin{aligned}r(x,a)+(\hat{\text{N}}_{n}(x))^{-1/2}\end{aligned} rt=r(x,a)+(N^n(x))1/2

总而言之,引入PixelCNN是为了计算PG,进而计算状态的伪计数,将伪计数转化为智能体的内在奖励

5、实验

1、文章通过实验表明探索奖励(exploration bonus)对智能体性能的影响比较均匀,可以在很多游戏中提高智能体的表现。特别是在Reactor-PixelCNN这个环境下,使用探索奖励的效果要比没有探索奖励的Reactor更好,表现为更高的样本利用效率。

2、文章还通过实验说明了在极度难以探索的游戏中,MMC和PixelCNN探索奖励的组合效果最好,两者相辅相成,加快了训练进展并促使智能体达到高性能水平。

3、文章说明了PixelCNN模型在估计探索奖励方面的有效性,这里与CTS模型进行了对比。

4、文章通过实验发现在一定范围内增加 PG scale 可以加快算法的探索速度,并在多次试验中获得记录峰值分数。但是增加 PG scale 也会导致一些问题。因为探索奖励是一个固定的值,如果过度注重探索奖励,可能会导致算法稳定性下降,从而影响长期性能。

6、结论

虽然目前的伪计数理论对密度模型提出了严格的要求,但文章证明PixelCNN可以在更简单和更一般的设置中使用,并且可以完全在线训练。它还被证明与值函数和基于策略的RL算法广泛兼容。

PixelCNN提高了基础RL算法的学习速度和稳定性。

6、算法伪代码(以DQN为base)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache Druid连接回收引发的血案

问题 线上执行大批量定时任务,发现SQL执行失败的报错: CommunicationsException, druid version 1.1.10, jdbcUrl : jdbc:mysql://xxx?useUnicodetrue&characterEncodingUTF-8&zeroDateTimeBehaviorconvertToNull,testWhileIdle true, idle …

工商业微电网储能盈利方式研究笔记

1. 光储微电网 1.1. 关于光储微电网 光储微电网可以看成是一组由分布式光伏、储能装置、本地负荷组成的包括发、输、配、用管理系统在内的小型局域电网,并通过唯一的公共连接点接入大电网,既可以并网运行也可以独立运行。 发展分布式光储微电网的意义…

利用servlet实现对书籍书名、单价、数量等信息的添加,计算总价

1.题目要求 利用servlet实现对书籍书名、单价、数量等信息的添加,计算总价。 要求:输入两次表单信息,在一个成功返回的页面里面显示两次的数据。 2.Book实体类 package com.hjj.sevletgk.hw7.book;/*** author:嘉佳 Date:2023/10/8 15:16*…

SOME/IP 协议介绍(三)参数和数据结构的序列化

参数和数据结构的序列化 序列化是基于接口规范定义的参数列表。为了允许服务接口的迁移,反序列化,代码应忽略附加在先前已知的参数列表末尾的参数;也就是说,忽略在用于生成或参数化反序列化代码的接口规范中未定义的参数。 接口…

python 视频硬字幕去除 内嵌字幕去除工具 vsr

项目简介 开源地址:https://github.com/YaoFANGUK/video-subtitle-remover Video-subtitle-remover (VSR) 是一款基于AI技术,将视频中的硬字幕去除的软件。 主要实现了以下功能: 无损分辨率将视频中的硬字幕去除,生成去除字幕后…

本地部署企业邮箱,让企业办公更安全高效

随着信息化时代的到来,企业邮箱几乎成了企业办公的标配,承载着企业业务往来和办公协同的重要职能。基于安全性、个性化需求、系统集成等方面的需要,许多企业选择本地部署企业邮箱,本地化部署不仅能有效保障企业信息安全的同时&…

Spring6学习笔记01

一、课程简介 Spring框架是一款极其优秀的轻量级开源框架,为了解决企业应用开发的复杂性而出现。Spring框架的用途不仅仅限于服务器端的开发,从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。Spring框架凭借其…

机器人制作开源方案 | 晾衣收纳一体机器人

一、作品简介 作者:仓天赐 黄云超 吴正乐 高骏 代思旭 单位:泰州学院 指导老师:宋向前 李杨作者:仓天赐 黄云超 吴正乐 高骏 代思旭 单位:泰州学院 指导老师:宋向前 李杨 与智能家居系统含义近似的…

【Axure高保真原型】树切换动态面板案例

今天和大家分享树切换动态面板的原型模板,点击树的箭头可以打开或者收起子节点,点击最后一级人物节点,可以切换右侧面板的状态到对应的页面,左侧的树是通过中继器制作的,使用简单,只需要按要求填写中继器表…

【广州华锐互动】智能楼宇3D数字化展示,实现对建筑物的实时监控和管理

随着科技的不断发展,人们对于生活品质的要求也在不断提高。在这个信息爆炸的时代,如何将复杂的数据以直观、生动的方式呈现给用户,已经成为了一个重要的课题。智能楼宇3D数字化展示作为一种新型的建筑科技,正逐渐成为行业的新宠&a…

【QML】Qt和QML获取操作系统类型

1. Qt获取系统类型 //方法 QSysInfo::productType()//举例&#xff1a; if(QSysInfo::productType() "windows") {qDebug() << "windows system"; }官方说明&#xff1a; [static] QString QSysInfo::productType() Returns the product name of …

IntelliJ Idea 撤回git已经push的操作

最初的样子 现在的样子 解决方案 第一步&#xff0c;commit到本地撤回&#xff1a; 打开提交历史记录&#xff0c;选中回退的版本右键&#xff0c;点击“Reset Current Branch to Here…”,然后选中“Mixed”&#xff0c;点击Reset后&#xff0c;之前commit的代码会在本地显…

黑豹程序员-架构师学习路线图-百科:Knife4j API接口文档管理

文章目录 由来&#xff1a;接口文档第一代&#xff1a;Swagger第二代&#xff1a;Knife4j界面 由来&#xff1a;接口文档 古老编程是一个语言前后端通吃&#xff0c;ASP、JSP、PHP都是如此。 但随着项目规模变大&#xff0c;项目团队也开始壮大&#xff0c;岗位职责开始细分&a…

【STM32】定时器

systick定时器&#xff1a; 【STM32】Systick定时器-CSDN博客 0.通用定时器框图 1.时钟源 2.控制器 3.输入捕获 计数器实际上是与比较寄存器的影子寄存器进行比较的。 4.输出比较 1.STM32的定时器学习要点 参考手册 STM32F1xx中文参考手册.pdf 林何/STM32F103C8 - 码云 -…

Leetcode-394 字符串解码(不会,复习)

此题不会&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 题解思路&#xff1a;元组思想&#xff1a;数字[字符串]&#xff0c;每次遇到中括号意味着要重复数字次字符串…

Web APIs——综合案例

1、学生就业统计表 2、渲染业务 根据持久化数据渲染页面 步骤&#xff1a; ①&#xff1a;读取localstorage本地数据 如果有数据则转换为对象放到变量里面一会使用它渲染页面如果没有则用默认空数组[]为了测试效果&#xff0c;可以先把initData存入本地存储看效果 ②&…

Oracle11g for centos7

准备工作 x86 centos7 oracle11G 环境搭建 配置好虚拟机&#xff0c;网络通畅&#xff0c;建议最少3G内存。 安装依赖 yum install binutils compat-libstdc-33 glibc* ksh gcc gcc-c libgcc libstdc* libaio libaio-devel libXext libX11 libXau libxcb libXi make sy…

2023第六届泰迪杯数据分析,第五届泰迪杯数据分析技能赛B题源码图片分享

需要B题源码以及第六届带队”指导“请私信本人&#xff0c;团队包含技能赛双一等&#xff0c;数学建模省一&#xff0c;泰迪杯挖掘国一&#xff0c;研究生队友。 去年一等作品可视化图如下&#xff0c;私信获取源码

static关键字的三种用法

在C语言中&#xff0c;关键字"static"可以用于不同的上下文&#xff0c;具有不同的作用。以下是"static"在C语言中的主要作用&#xff1a; 1. 静态变量&#xff08;Static Variables&#xff09;&#xff1a; 在C语言中&#xff0c;使用static关键字来声明…

Java算法(五):手写数组逆置API方法,实现数组逆置。 while实现 for循环实现

Java算法&#xff08;五&#xff09; while 循环实现 需求&#xff1a; 已知一个数组&#xff0c;arr {11, 22, 33, 44, 55};使用程序实现把数组中的元素交换位置。 交换后的数组为 arr {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。 代码示例 package com.…