格子世界表示我试图想出一个2-d格世界的,其利用的Q功能的神经网络的Q学习算法的状态更好的代表性。的神经网络
在教程Q-learning with Neural Networks中,网格表示为整数的三维数组(0或1)。第一个和第二个维度表示网格世界中对象的位置。第三维编码它是哪个对象。因此,对于其中包含4个对象的4x4网格,您将代表具有64个元素的3维数组(4x4x4)的状态。这意味着,输入层中的神经网络将有64个节点,因此它可以接受网格世界的状态作为输入。
我想减少神经网络中的节点数量,以便训练不会花费太长时间。那么,你能代表网格世界成为二维数组吗?
我试图将一个4x4的网格世界表示为二维的二维数组,并使用不同的值来表示不同的对象。例如,我用0.1代表球员,用0.4代表球门。但是,当我实现这个算法时,算法完全停止了学习。
现在我认为我的问题可能是我需要更改我在图层中使用的激活函数。我目前使用双曲正切激活函数。我的输入值范围从(0 - 1)。我的输出值范围从(-1到1)。我也尝试了sigmoid函数。
我意识到这是一个复杂的问题要问一个问题关于。对于网络架构的任何建议将不胜感激。
UPDATE
有三个变种游戏: 1.世界是静态的。所有对象都在同一个地方开始。 2.玩家的起始位置是随机的。所有其他物体保持不变。 3.每个网格是完全随机的。
有了更多的测试,我发现我可以用我的二维数组表示完成前两个变种。所以我认为我的网络架构可能没问题。我发现的是,我的网络现在非常容易发生灾难性的遗忘(比我使用3D阵列时更为严重)。我必须使用“体验重播”来让它学习,但即使如此,我仍然无法完成第三个变体。我会继续尝试。我非常震惊改变网格世界代表的差异有多大。它根本没有改进性能。
是的,环境确实发生了变化。我更新了我的问题。 – Galen
@Galen我也编辑了我的答案。我再次强调这一点:尝试使用'ReLU'而不是'tanh'。你有没有使用梯度下降优化器?试试Adam或RMSprop。 – Simon
我目前正在使用从2000个unqiue体验池中随机抽取的最小批量大小进行测试。至于如何探索它是我开始epsilon在1.0,并慢慢衰减到0.1。我通常等到3万集左右。如果没有改善,那么我会阻止它。它会达到500k天(不使用GPU) – Galen