Neural network 神经网络的网格世界表示
我试图为Q学习算法提供一个更好的表示二维网格世界状态的方法,该算法使用神经网络作为Q函数 在本教程中,网格表示为三维整数数组(0或1)。第一个维度和第二个维度表示对象在栅格世界中的位置。第三维度对它是哪个对象进行编码 因此,对于包含4个对象的4x4网格,可以使用包含64个元素的三维数组(4x4x4)来表示状态。这意味着meural网络在输入层中将有64个节点,因此它可以接受网格世界的状态作为输入 我想减少神经网络中的节点数量,这样训练就不会花那么长时间。那么,你能把网格世界表示成二维的双倍数组吗 我尝试将4x4网格世界表示为二维双精度数组,并使用不同的值表示不同的对象。例如,我使用0.1表示玩家,0.4表示目标。然而,当我实现这个算法时,它停止了学习 现在我想我的问题可能是我需要更改我在层中使用的激活函数。我现在正在使用双曲正切激活函数。我的输入值范围为(0-1)。我的输出值范围为(-1到1)。我还尝试了sigmoid函数 我意识到这是一个复杂的问题。如对网络架构有任何建议,将不胜感激 更新 该游戏有三种变体: 1.世界是静止的。所有对象都从同一位置开始。 2.球员的起始位置是随机的。所有其他对象保持不变。 3.每个网格都是完全随机的Neural network 神经网络的网格世界表示,neural-network,reinforcement-learning,q-learning,Neural Network,Reinforcement Learning,Q Learning,我试图为Q学习算法提供一个更好的表示二维网格世界状态的方法,该算法使用神经网络作为Q函数 在本教程中,网格表示为三维整数数组(0或1)。第一个维度和第二个维度表示对象在栅格世界中的位置。第三维度对它是哪个对象进行编码 因此,对于包含4个对象的4x4网格,可以使用包含64个元素的三维数组(4x4x4)来表示状态。这意味着meural网络在输入层中将有64个节点,因此它可以接受网格世界的状态作为输入 我想减少神经网络中的节点数量,这样训练就不会花那么长时间。那么,你能把网格世界表示成二维的双倍数组吗
通过更多的测试,我发现我可以用2d数组表示完成前两个变体。所以我认为我的网络架构可能很好。我发现我的网络现在特别容易发生灾难性遗忘(比我使用3d阵列时更容易)。我必须使用“体验重播”来学习,但即使如此,我仍然无法完成第三个变体。我会继续努力的。我相当震惊改变网格世界表示法所带来的巨大变化。它根本没有提高性能。一些标准表示法是:
- 多项式(通常为一阶或二阶):对于第一阶,您将有一个三维向量,其中第一个元素是偏差(0阶),第二个是
坐标,第三个是x
坐标。对于更高的学位,您还需要y
。如果环境发生变化,您还必须对对象位置执行相同的操作x^2、y^2、xy…
- (或者因为状态空间是离散的):您将有一个
向量(nxn
是环境的大小),每个基/分片将告诉您代理是否在相应的单元中。也可以使用较少的底座/瓷砖,每个底座/瓷砖覆盖多个单元。然后,可以为环境中的对象附加多项式(如果其位置发生更改)N
tanh
是最好的非线性函数。如果你阅读,你会发现他们使用了一个校正的线性激活()
另外,请确保在反向传播期间使用
编辑
第1版和第2版之间基本上没有区别(实际上,拥有一个随机代理的初始位置甚至可以加快学习速度)。第三个版本当然更难,因为您必须在状态表示中包含有关环境的详细信息
不管怎样,我建议的特征仍然是一样的:多项式或径向基函数
体验重播几乎是强制性的,正如我在上面引用的DeepMind论文中所描述的那样。此外,您可能会发现使用第二个深度网络作为Q函数的目标是有益的。我不认为这是在教程中建议的(我可能错过了它)。基本上,目标r+max(a)gamma*Q(s',a)
由与您的策略使用的Q网络不同的网络给出。每个C
步骤都将Q网络的参数复制到Q目标网络,以便在时间差备份期间提供一致的目标。
这两个技巧(体验小批量回放和拥有单独的目标网络)是深度Q学习成功的原因。再次,请参阅DeepMind文件了解详细信息
最后,您可能需要检查一些关键方面:
- 你们的小批量有多大
- 你的政策有多探索性
- 在开始学习之前,您收集了多少随机策略的样本
- 你等了多少?(很容易需要总共500k个样本来学习)
ReLU
而不是tanh
。你用过梯度下降优化器吗?试试Adam或RMSprop。我目前正在使用从2000个unqiue体验池中随机抽取的500个小批量进行测试。至于它的探索性,我从1.0开始,慢慢衰减到0.1。我通常等到3万集左右。如果到那时还没有改善,我就停止。它需要几天才能达到500k(不使用GPU)@Galen 2000非常小,500非常大。在Atari Games的论文中,他们使用了大小为32的小批量和100万个唯一样本的数据集。他们学到的问题比网格世界要复杂得多:你的设置的问题是,你在每个步骤中使用了1/4的样本,所以你太频繁地使用相同的数据。我会将数据集大小增加到100k,并使用32个样本的小批量