如何训练神经网络玩乒乓球游戏?

3
我正在尝试理解这篇论文,该论文解释了如何训练神经网络玩乒乓球游戏。 https://cloud.github.com/downloads/inf0-warri0r/neural_pong/README.pdf 我最近开始学习神经网络,并了解反向传播的概念。在这篇论文中,反向传播被用来训练神经网络。
这个神经网络有五个输入神经元:
  1. 球的x坐标(bx)
  2. 球的y坐标(by)
  3. x方向上的球速度(bvx)
  4. y方向上的球速度(bvy)
  5. 挡板的位置(py)。
这个神经网络有十个隐藏层神经元和一个输出层神经元,输出挡板的位置(py)。

enter image description here

从这一点开始,我有一些疑问需要澄清。

由于反向传播是一种监督学习方法,因此它应该有一些期望的输出,我们从中迭代地减去当前输出以找到输出中的误差并计算梯度下降。

  1. 现在我不明白的是,在这种情况下期望的输出是什么。它可以是球撞击墙壁的位置与挡板位置之间的距离,我们应该将其保持为零吗?

  2. 我知道控制挡板将被硬编码为与球同步移动,但是我们如何在训练时随机移动另一个挡板?我们应该在输入“py”中给出什么值?

  3. 在游戏的哪个时刻应该提供所有五个输入bx、by、bvx、bvy和py?当球撞击墙壁时,我们应该提供这些输入并执行一次神经网络迭代吗?

1个回答

5

首先,我想劝告你不要将这篇论文用作教育工具。代码文档很差,而且论文本身也不是非常有信息量。

  1. 在代码存储库中,他似乎将输出作为球拍到应该所在位置的距离。每当球拍失误时,他就会根据球拍到球的实际距离来训练网络。

  2. 原始论文通过简单地训练两个相互对抗的网络来移动对手的球拍。这样做有一些缺点,但在这种情况下不应该成为问题。py的值似乎是当前球拍的Y坐标。

  3. 在代码中,他在每个帧中向网络提供游戏的当前状态,然后允许它们选择一个目标距离进行移动。然后,每当他们错过球时,他就会对神经网络进行训练。

这种设计有一些缺点。例如,每个球只能为其提供一个数据点进行训练,而且由于当我们收集此数据点时球总是在游戏板的边缘,因此我们并没有学到关于球实际在地图上弹跳时如何移动的太多知识。

我建议跟踪网络所获得的所有值。稍后,您可以使用原始游戏状态和球实际结束位置来训练网络。这样即使它成功地阻止了球,也可以对网络进行有用的训练,并且它从游戏中的所有点获得数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接