Visual Reinforcement Learning with Imagined Goals

2023-11-02 11:10

本文主要是介绍Visual Reinforcement Learning with Imagined Goals,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Visual Reinforcement Learning with Imagined Goals

文章来自 University of California, Berkeley,提出了一种将 goal-conditioned RL 与 无监督表示学习相结合的算法 — RIG (Reinforcement learning with Imagined Goals),该算法具有较高的样本效率,能够在真实世界中训练。

Contribution:
1)提出了一个新算法 RIG。

Code: https://github.com/vitchyr/rlkit
Env: https://github.com/vitchyr/multiworld

算法框架

如图,框架分为三个部分,左边是 VAE 的训练,中间是 Agent 的训练,右边是 Agent 的测试。

首先 看左边的 data,它只包含了状态 s s s ,这个可以在初始化之前用随机策略随便跑一下就能得到,然后将这些状态放入 VAE 进行训练,就可以得到状态的隐层表示 z = e ( s ) z = e(s) z=e(s)。训练 VAE 时,目标是最大化下式:

其中, β \beta β 是超参数,故这个也叫 β \beta β-VAE; 符号 q ϕ , p ψ , p ( z ) q_\phi, p_\psi,p(z) qϕ,pψ,p(z) 分别表示编码器,解码器和先验。

然后 开始训练 Agent:用 VAE 将观测到的状态 s t s_t st表示成 z = e ( s t ) z=e(s_t) z=e(st),然后从先验 p ( z ) p(z) p(z) 中采样一个目标 z g z_g zg,则 Agent 的目标就是学习如何从初始的 z z z 转到目标 z g z_g zg。在训练过程中, goal-conditioned RL 最小化下式 Bellman error(下式的 s , s ′ , g s,s',g s,s,g 分别改为 z , z ′ , z g z,z',z_g z,z,zg 才能对应本文):

该式与一般的 RL bellman error 相比就是多了一个 goal 参数。然后再训练策略 π θ ( z , z g ) \pi_\theta(z,z_g) πθ(z,zg),论文中用的是 TD3 框架训练的。从策略和 Q-function 的形式 π θ ( z , z g ) , Q w ( z , a , z g ) \pi_\theta(z,z_g),Q_w(z,a,z_g) πθ(z,zg),Qw(z,a,zg) 来看,Agent 接触到的信息都是状态或目标的隐层表示 z , z g z,z_g z,zg,而不是直接接受状态和目标的原型 s , s g s,s_g s,sg

最后 是测试阶段,训练 Agent 的时候,算法是自己产生 goal 的 (直接在先验中采样一个 z g z_g zg),而在测试的时候,是由用户指定 goal 的 (用户指定的是一张图片,所以标题是"Imagined Goals"),然后经过 VAE 表示成 z g = e ( s g ) z_g = e(s_g) zg=e(sg),再输入到策略网络中,执行训练好的策略,到达 goal 指定状态。

一些技巧

  • 奖励函数的设定
    我们知道 goal-conditioned RL 的目的是,让 agent 学会从某个状态 s s s 到达给定的目标状态 s g s_g sg。则将这两个状态 s s s s g s_g sg 之间的距离作为奖励值,是一种合理的奖励设计方案。但由于本论文的状态是图像,而图像像素点的距离并不能很好地反应两个状态的距离 (人眼觉得基本没有区别的两个状态/两幅图,用像素点的距离计算的话,距离值依旧很大)。
    因此,这里的方法是,先将状态 s s s 和目标 s g s_g sg 转成隐层表示 z , z g z,z_g z,zg,然后再计算他们之间的距离 (式中 A A A 为权重向量,不同的元素可以用不同的权重,但文中直接用单位阵 I I I):
  • 隐层目标 z g z_g zg 的重新设定
    重新设定目标,本质上算是一种数据增强方法。即运用一定的方法,无需与环境互动,从现有的样本中再生成一些新的样本。所以,这个技巧能够提升样本效率。
    例如,我们现有一个原始样本 ( s , a , s ′ , s g , r ) (s,a,s',s_g,r) (s,a,s,sg,r) 经过 VAE 后得到隐层表示 ( z , a , z ′ , z g , r ) (z,a,z',z_g,r) (z,a,z,zg,r),其中 ( s , a , s ′ ) (s,a,s') (s,a,s) 是环境的属性决定的,隐含有环境的动态信息,所以其对应的隐层表示 ( z , a , z ′ ) (z,a,z') (z,a,z) 也具有环境的动态信息,是不能更改的。因此,我们只能从目标 z g z_g zg 和奖励 r r r 上下手。
    可以从先验 p ( z ) p(z) p(z) 中采样目标 z g z_g zg,然后再根据奖励的计算式计算对应的奖励 r r r。这样,只要我们从环境中采样得到一个样本的状态转移关系 ( z , a , z ′ ) (z,a,z') (z,a,z),我们就能基于此生成任意多的样本 ( z , a , z ′ , z g 1 , r 1 ) (z,a,z',z_{g1},r_1) (z,a,z,zg1,r1) ( z , a , z ′ , z g 2 , r 2 ) (z,a,z',z_{g2},r_2) (z,a,z,zg2,r2),… , ( z , a , z ′ , z g n , r n ) (z,a,z',z_{gn},r_n) (z,a,z,zgn,rn)

附上伪代码

这篇关于Visual Reinforcement Learning with Imagined Goals的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330191

相关文章

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

调试程序时,会出现下面这个报错 分析原因: 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 ,比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 // 堆区开辟的数组空间使用 delete 释放int* p = new int[10];delete p; 正

查看Excel 中的 Visual Basic 代码,要先设置excel选项

1. excel VB的简单介绍 百度安全验证 2.excel选项设置 excel表格中在选项->自定义功能区域,选择开发工具,visual baisc/查看代码,即可看到代码。 3.excel已经设置,可以直接查看

[VC] Visual Studio中读写权限冲突

前置场景: 编译没有报错,但是运行提示 内存异常: 情景1: 如下代码运行异常,提示引发了异常:写入权限冲突。*** 是 0xFFFFF..... char* str = (char*)malloc(10);str[0] = 0x30;  解决方案:要包含头文件<stdlib.h>  情景2: 在FileA文件调用FileB文件的函数,但是在FileA中却没有声明该B函数的原型

解决Visual C++ 中相互包含头文件的问题

在编MFC应用程序时,经常会遇到头文件相互包含的问题,很是苦恼,于是便求助于强大的CSDN,得到如下答案:   方法一:利用友元类   我一共有两个类,由于要在两个类的头文件里互相应用对方,所以,在每一个类的头文件里面现包含另一个类的头文件,然后在该类的定义中声明另一个类为友元类。如下:    #include "B.h"      class CA: public CDialog

如何简单而优雅地升级Visual NMP中的PHP版本

需求:自己想测试下不同版本的PHP性能,就想升级下 Visual 这个集成环境中PHP的版本 网上: 升级PHP到5.6.11  1、下载新的nts版的PHP并解压缩到bin\PHP下,保留原文件夹的名称; 2、将旧版PHP文件夹下的PHP.ini复制到新版的PHP文件夹下;修改复制的PHP.ini,将旧版PHP文件夹信息替换成新版PHP文件夹信息; 3、下载php_xdebug-2.3

应用Visual Studio Profiler分析CPU使用情况

使用Visual Studio Profiler分析CPU使用情况‌的步骤如下: 1.‌启动CPU分析:‌ 在Visual Studio中打开你要分析的项目。 在菜单栏中选择Debug > Performance Profiler,或者使用快捷键Alt + F2。 在性能分析工具窗口中,选择CPU Usage选项,这将帮助你分析应用程序的CPU使用情况。 2.‌运行CPU

已解决:Visual studio2022突然只能打字不能使用回车键、退格键

本问题已得到解决,请看以下小结: 关于《VS2022部分按键失灵》的解决方案 记录备注报错时间2024年报错版本VS2022报错复现写代码,点击删除键失灵了报错描述点击关闭提示如下: Microsoft visual studio 已检测到某个操作正在阻止用户输入。这可能是由活动模式对话框或需要阻止用户交互的任务所致。是否仍要关闭?报错截图-报错原因不详解决步骤 1.VS2022搜索键盘,点击