如何解释OpenAI健身房中RAM环境的观察?

Vic*_*tor 2 python openai-gym

在一些OpenAI健身房环境中,有一个"ram"版本.例如:Breakout-v0Breakout-ram-v0.

使用时Breakout-ram-v0,每个观察是一个长度为128的数组.

问题:如何将Breakout-v0(160 x 210图像)的观察值转换为观察形式Breakout-ram-v0(长度为128的数组)?

我的想法是训练模型Breakout-ram-v0并显示使用Breakout-v0环境播放的训练模型.

Awo*_*ing 8

有几种方法可以理解ram选项.

假设你想学习乒乓球.如果你从像素训练,你可能会使用几层的卷积网.有趣的是,convnet的最终输出是一维特征.这些传递到完全连接的层,并可能根据图像中识别出的特征输出正确的"动作".或者您可以使用加强层处理一维特征数组.

现在让我们说你发现pong非常简单,并且可能用16x16图像而不是160x160表示.直接下采样不会给你足够的细节,所以你使用openCV来提取球和桨的位置,并创建你的迷你版16x16乒乓.具有漂亮,清晰的像素.所需的计算比你的深网更能代表游戏的本质,而你的新网站很好而且很小.然后你意识到你甚至不再需要你的回旋网了.您可以为每个16x16像素执行完全连接的图层.

所以,想想你拥有的东西.现在,您有两种不同的方式来获得游戏的简单表示,以便训练完全连接的图层.(或RL算法)

  1. 您的深度信号通过多个层并输出一维数组,比如说最后一层有256个特征.你把它传递给完全连接的层.
  2. 你的手动特征提取用OpenCV提取blob(pattles/ball),制作一个16x16的pong.通过将它传递给完全连接的层,它实际上只是一组16x16 = 256'提取的特征'.

因此,模式是您找到一种"表示"游戏状态的简单方法,然后将其传递给完全连接的图层.

输入选项3.游戏的RAM可能只是一个256字节的数组.但是你知道这包含游戏的"状态",所以它就像你的16x16版本的乒乓.它很可能比16x16表现得更好,因为它可能有关于球的方向等的信息.

因此,现在您有3种不同的方法可以简化游戏状态,以便训练完全连接的图层或增强算法.

那么,OpenAI通过给你RAM来做的事情就是帮助你避免学习游戏"代表"的任务,让你直接转向学习"政策"或根据游戏状态做些什么.

OpenAI可以提供一种"查看"ram版本的视觉输出的方法.如果他们不这样做,你可以要求他们提供.但那是你得到的最好的.他们不会对代码进行反向工程以"渲染"RAM,也不会根据像素对代码进行反向工程以"生成"'RAM',这实际上是不可能的,因为像素只是状态的一部分游戏

他们只是简单地提供ram,如果它很容易被他们使用,那么你可以尝试算法学习做什么,假设有一些东西给他们一个良好的状态表示.

没有(简单)方法可以做你所问的,就像将像素转换为RAM一样,但很可能有一种方法可以让Atari系统同时给你ram和像素,这样你就可以使用ram但是显示像素.