我正在尝试为 Q 学习算法提出一个更好的表示二维网格世界状态的方法,该算法将神经网络用于 Q 函数。
在教程Q-learning with Neural Networks中,网格表示为整数(0 或 1)的 3-d 数组。第一维和第二维表示对象在网格世界中的位置。第三个维度编码它是哪个对象。
因此,对于其中包含 4 个对象的 4x4 网格,您将使用包含 64 个元素的 3-d 数组 (4x4x4) 来表示状态。这意味着神经网络将在输入层中有 64 个节点,因此它可以接受网格世界的状态作为输入。
我想减少神经网络中的节点数量,这样训练就不会花那么长时间。那么,您可以将网格世界表示为二维双精度数组吗?
我试图将 4x4 网格世界表示为一个二维数组,并使用不同的值来表示不同的对象。例如,我用 0.1 代表球员,用 0.4 代表进球。然而,当我实现这个算法时,算法完全停止了学习。
现在我认为我的问题可能是我需要更改我在图层中使用的激活函数。我目前正在使用双曲正切激活函数。我的输入值范围为 (0 - 1)。我的输出值范围从(-1 到 1)。我也试过sigmoid函数。
我意识到这是一个复杂的问题要问一个问题。任何关于网络架构的建议将不胜感激。
更新
游戏有三种变体: 1. 世界是静态的。所有对象都从同一个地方开始。2. 玩家起始位置随机。所有其他对象保持不变。3. 每个网格都是完全随机的。
通过更多的测试,我发现我可以用我的二维数组表示来完成前两个变体。所以我认为我的网络架构可能没问题。我发现我的网络现在特别容易发生灾难性遗忘(比我使用 3d 数组时更容易)。我必须使用“经验回放”让它学习,但即使如此我仍然无法完成第三个变体。我会继续努力的。我很震惊改变网格世界表示所产生的差异。它根本没有提高性能。