2016-04-25 196 views
3

格子世界表示我试图想出一个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阵列时更为严重)。我必须使用“体验重播”来让它学习,但即使如此,我仍然无法完成第三个变体。我会继续尝试。我非常震惊改变网格世界代表的差异有多大。它根本没有改进性能。

回答

2

一些标准表示是:

  • 多项式(通常第一或第二程度):为第一程度,你将有一个3维向量,其中第一元件是偏置(度0 ),第二个是坐标x,第三个是坐标y。对于更高的学位,你也会有x^2, y^2, xy ...。如果环境发生变化,您还需要对物体位置进行相同处理。

  • Radial basis functions(或tile coding由于状态空间是离散的):你将有一个N x N矢量(N是环境的大小),并且每个基础/瓦会告诉你如果代理是在相应的细胞中。你也可以有更少的基地/瓷砖,每一个覆盖不止一个细胞。然后,您可以为环境中的对象添加多项式(如果它们的位置发生更改)。

无论如何,64维输入不应该是NN的问题。我不确定tanh是最好的非线性函数。如果您阅读the famous DeepMind paper,您会看到他们使用了整流线性激活(why? read this)。

此外,请务必在反向传播期间使用gradient descent optimizer

编辑

有基本上是1和第2版没有区别(实际上,具有无规剂初始位置甚至可能加快学习)。第三个版本当然更困难,因为你必须在你的状态表示中包含关于环境的细节。

无论如何,我建议的功能仍然是相同的:多项式或径向基函数。

经验回放几乎是强制性的,正如我在上面引用的DeepMind论文中所述。此外,使用第二个深度网络作为Q函数的目标,您可能会发现有益处。我不认为这是在教程中建议的(我可能错过了它)。基本上,目标r + max(a) gamma * Q(s', a)由与您的策略使用的Q网络不同的网络提供。每个C都会将您的Q网络参数复制到您的Q-target-network,以便在时间差异备份期间提供一致的目标。 这两个技巧(体验重播与minibatches和有一个单独的目标网络)是什么使深Q学习成功。有关详细信息,请再次参阅DeepMind纸张。

最后,一些重要的方面,你可能要检查:

  • 有多大你minibatches?
  • 你的政策有多探索?
  • 在开始学习之前,您会收集多少个带有随机策略的样本?
  • 你还等多少钱? (总共可以轻松学习500k个样本)
+0

是的,环境确实发生了变化。我更新了我的问题。 – Galen

+0

@Galen我也编辑了我的答案。我再次强调这一点:尝试使用'ReLU'而不是'tanh'。你有没有使用梯度下降优化器?试试Adam或RMSprop。 – Simon

+0

我目前正在使用从2000个unqiue体验池中随机抽取的最小批量大小进行测试。至于如何探索它是我开始epsilon在1.0,并慢慢衰减到0.1。我通常等到3万集左右。如果没有改善,那么我会阻止它。它会达到500k天(不使用GPU) – Galen