Artificial intelligence 培训代理探索未知环境';行不通

Artificial intelligence 培训代理探索未知环境';行不通,artificial-intelligence,reinforcement-learning,Artificial Intelligence,Reinforcement Learning,在阅读马克西姆·拉潘(Maxim Lapan)关于RL“深度强化学习实践”的书时,我试图创建自己的代理和环境。问题是我的经纪人似乎没有进行适当的训练。 我想做一个可以自动探索(以最有效的方式)室内建筑的代理。为此,我创建了一个类似健身房(且兼容)的环境,其特点如下: 尺寸:100px x 100px 使用二进制空间分区在每次重置时随机生成 算法(从这里开始: ) 一切都是灰色的 墙像素对应于0的值 代理是一个3x3像素的正方形,其值为192 空像素的值为255 探索的像素的值为64 对于每个动

在阅读马克西姆·拉潘(Maxim Lapan)关于RL“深度强化学习实践”的书时,我试图创建自己的代理和环境。问题是我的经纪人似乎没有进行适当的训练。 我想做一个可以自动探索(以最有效的方式)室内建筑的代理。为此,我创建了一个类似健身房(且兼容)的环境,其特点如下:

  • 尺寸:100px x 100px
  • 使用二进制空间分区在每次重置时随机生成 算法(从这里开始: )
  • 一切都是灰色的
  • 墙像素对应于0的值
  • 代理是一个3x3像素的正方形,其值为192
  • 空像素的值为255
  • 探索的像素的值为64
  • 对于每个动作(上、下、左、右),代理移动1个像素
我将奖励限制在-1和1之间,例如:

  • 如果代理探索新像素:+1.0
  • 如果代理不探索新像素:-0.1
  • 如果代理撞到墙:-1.0
获胜条件是代理至少探索了98%的像素,并获得+1奖励。或者,如果代理在8000帧期间不探索新像素,则会丢失

编辑:我认为我做错了一件事,那就是在这一集中给经纪人奖励。所以我在做奖励塑造的时候并不知道它到底是什么。据我所知,这可能是棘手的,很难正确地做到。 我将尝试只在本集结束时给予奖励(在本集中为0),如果代理撞到墙,则基本结束奖励,总奖励将是“特殊点”命中数。我将尝试不同的变化,看看我是否可以让代理学到一些东西

我使用光线投射来模拟代理的视野。它从一个空白屏幕开始,在代理周围以X像素为半径自动显示墙(如果光线未被墙阻挡)

我尝试使用DQN进行不同的增强,这些增强的代码来自本书的作者:

神经网络的模型如下所示:

(0): Conv2d(1, 32, kernel_size=(8, 8), stride=(4, 4))
(1): ReLU()
(2): Conv2d(32, 64, kernel_size=(4, 4), stride=(2, 2))
(3): ReLU()
(4): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1))
(5): ReLU()

(0): Linear(in_features=5184, out_features=512, bias=True)
(1): ReLU()
(2): Linear(in_features=512, out_features=4, bias=True)
神经网络的输入:

  • 环境的1帧:[1,1100,100]从[0,255]标准化 至[0,1]
(我没有使用帧堆叠,因为除了每个状态下的代理之外,没有移动的对象)

超参数(用于带重放缓冲区和目标网络的基本DQN):

  • lr:1e-3
  • 重播大小:800000(我最多可以使用ram)
  • 重播开始大小:50000
  • 同步目标网络:10000
  • ε从1.0开始,100万帧后结束于0.1
  • 伽马:0.99
  • 批量:32
我尝试了两件事来迫使代理进行探索:

  • 如前所述离开环境,并希望 奖励以及代理从客户处获得的反馈 “探索像素”就足够了
  • 移除探索像素颜色和奖励并添加特殊 灰度值为128的像素(1px×1px)。每次探员打到那些 像素,它将获得+1的奖励(如苹果或Pacman中的点数, 蛇等),这些特殊的像素会在被击中时消失。试图强迫代理寻找和探索以找到 这些特殊点。见下文:

问题是代理似乎没有学会探索环境。通过epsilon(或使用Noizy层的噪声)添加随机性,它可以获得更好的分数。但在那之后,经纪人的探索似乎越来越少,最终大多陷入困境。与特殊点相同,它似乎没有试图获得它们。我尝试了不同的超参数/奖励,尝试了基本的DQN,添加了增强功能(N步、noizy层、双DQN、决斗等)。我运行代码的时间从几个小时到10小时不等(在2080超级计算机上)

所以我想知道,我关于如何让代理探索地图的想法是否有问题,奖励是否有问题(我尝试过改变这些奖励),让代理探索地图是否有问题。而且我没有真正接触模型的网络,我可能需要添加更多的层?或者我上面提供的信息可能有问题。我也知道更好的方法有A2C、A3C、PPO等,但我的环境与DQN可以解决的ATARI游戏没有太大区别

如果你有任何想法


谢谢

我认为需要将状态表示为堆叠的帧。因为如果不这样做,代理就无法知道已经探测到的区域。我认为需要将状态表示为堆叠的帧。因为如果不这样做,代理就无法知道已经探测到的区域。