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

Beh*_*roz 3 artificial-intelligence machine-learning neural-network

我试图理解这篇论文解释如何训练神经网络来进行乒乓球比赛. https://cloud.github.com/downloads/inf0-warri0r/neural_pong/README.pdf

我最近开始研究神经网络,我知道Back Propagation的概念.在本文中,Back Propagation用于训练神经网络.

在这个神经网络中有五个输入神经元.

  1. 球的x坐标(bx)
  2. 球的y坐标(by)
  3. 球在x方向上的速度(bvx)
  4. 球在y方向的速度(bvy)
  5. 桨的位置(py).

隐藏层中有十个神经元,输出层中有一个神经元,它们将输出桨(py)的位置.

在此输入图像描述

从这一点开始,我有些疑惑要清除.

由于Back Propagation是一种监督学习方法,它应该有一些所需的输出,我们从中迭代地减去当前输出以找出输出中的误差并计算梯度下降.

  1. 现在我不明白的是,在这种情况下,所需的输出是什么.球撞到墙壁的位置和桨叶的位置之间的距离是否可以保持为零?

  2. 我知道控制桨将被硬编码以与球同步移动但我们如何在训练时随机移动另一个球拍?我们应该在输入"py"中给出什么值?

  3. 在比赛的什么时候应该提供所有五个输入bx,by,bvx,bvy和py?我们应该只在球撞到墙壁时给出这些输入并执行一个神经网络迭代时代吗?

Gie*_*wev 5

首先,我想劝阻你不要将这篇论文用作教育工具.代码记录很少,而且论文本身并不是很有用.

  1. 在代码库中,他似乎使用输出作为从桨到它应该的位置的距离.然后,当桨板未命中时,他根据从桨叶到球的实际距离训练网络.

  2. 原始纸张通过简单地相互训练两个网络来移动相对的桨叶.这有一些缺点,但在这种情况下不应成为问题.py的值似乎是当前的paddle y坐标

  3. 在代码中,他为网络提供每帧的游戏状态,然后允许他们选择要移动的目标距离.然后他在错过球时训练NN.

这种设计有一些缺点.例如,你只得到一个数据点来训练每个球,并且因为当我们收集这个数据点时球总是在游戏板的边缘,所以我们没有学到如何在球时移动实际上是在地图上蹦蹦跳跳.

我建议跟踪播放时给予网络的所有值.之后,您可以使用原始游戏状态和球最终进入的实际位置来训练网络.这样即使成功阻挡球,网络也可以进行有效训练,并且可以从游戏中的所有点获得数据.