神经网络的网格世界表示

时间:2016-04-25 20:20:35

标签: neural-network reinforcement-learning q-learning

我正在尝试为Q-learning算法提供更好的二维网格世界状态表示,该算法利用神经网络进行Q函数。

在教程Q-learning with Neural Networks中,网格表示为3-d整数数组(0或1)。第一维和第二维表示网格世界中对象的位置。第三个维度编码它是哪个对象。

因此,对于其中包含4个对象的4x4网格,您将使用其中包含64个元素的3-d数组(4x4x4)来表示状态。这意味着meural网络在输入层中将有64个节点,因此它可以接受网格世界的状态作为输入。

我想减少神经网络中的节点数量,以便培训时间不长。那么,你能将网格世界表示为二维数组吗?

我试图将4x4网格世界表示为2-d的双精度数组,并使用不同的值来表示不同的对象。例如,我用0.1表示球员,用0.4表示球门。但是,当我实现这个时,算法完全停止了学习。

现在我认为我的问题可能是我需要更改我在图层中使用的激活功能。我目前正在使用双曲正切激活函数。我的输入值范围为(0 - 1)。我的输出值范围从(-1到1)。我也试过了sigmoid函数。

我意识到这是一个提出问题的复杂问题。任何有关网络架构的建议都将受到赞赏。

更新

游戏有三种变体: 世界是静止的。所有对象都在同一个地方开始。 2.球员的起始位置是随机的。所有其他对象保持不变。 3.每个网格都是随机的。

通过更多测试,我发现我可以使用我的2d数组表示完成前两个变体。所以我认为我的网络架构可能没问题。我发现我的网络现在非常容易受到灾难性的遗忘(比我使用3d阵列时更加容易)。我必须使用“体验重播”来让它学习,但即便如此,我仍然无法完成第三个变种。我会继续努力。我很震惊改变网格世界表现形式的差异有多大。它根本没有改善性能。

1 个答案:

答案 0 :(得分:2)

一些标准陈述是:

  • 多项式(通常是1度或2度):对于1度,你将有一个三维向量,其中第一个元素是偏差(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网络,以便在时间差异备份期间提供一致的目标。 这两个技巧(经验重播微型游戏和拥有单独的目标网络)是深度Q学习成功的原因。同样,请参阅DeepMind文章了解详细信息。

最后,您可能需要检查一些重要方面:

  • 你的小型客舱有多大?
  • 你的政策是多么具有探索性?
  • 在开始学习之前,您收集了多少带有随机政策的样本?
  • 你还等多少? (它总共需要500k样本才能学习)