我试图理解这篇论文解释如何训练神经网络来进行乒乓球比赛。 https://cloud.github.com/downloads/inf0-warri0r/neural_pong/README.pdf
我最近开始研究神经网络,我知道Back Propagation的概念。在本文中,Back Propagation用于训练神经网络。
这个神经网络中有五个输入神经元。
隐藏层中有十个神经元,输出层中有一个神经元将输出桨(py)的位置。
从这一点开始,我有些疑惑要清除。
由于反向传播是一种有监督的学习方法,它应该有一些所需的输出,我们从中迭代地减去当前输出以找出输出中的误差并计算梯度下降。
现在我不明白的是,在这种情况下,所需的输出是什么。球撞到墙壁的位置和球拍的位置之间的距离是否可以保持为零?
我知道控制桨将被硬编码以与球同步移动但我们如何在训练时随机移动另一个球拍?我们应该在输入“py”中给出什么值?
在比赛的什么时候应该提供bx,by,bvx,bvy和py五个输入?我们应该只在球撞到墙壁时给出这些输入并执行一个神经网络迭代时期吗?
答案 0 :(得分:5)
首先,我想劝阻您不要将本文用作教育工具。代码记录很少,而且论文本身并没有很多信息。
在代码库中,他似乎使用输出作为从桨到它应该的位置的距离。然后他会根据球拍未命中时从球拍到球的实际距离训练网络。
原始纸张通过简单地相互训练两个网络来移动相对的桨叶。这有一些缺点,但在这种情况下不应该是一个问题。 py的值似乎是当前的paddle y坐标
在代码中,他为网络提供每帧的游戏状态,然后允许他们选择要移动的目标距离。然后他会在错过球时训练NN。
这种设计有一些缺点。例如,你只得到一个数据点来训练每个球,并且因为当我们收集这个数据点时球总是在游戏板的边缘,所以我们不知道如何移动时球实际上是在地图上弹跳的。
我建议跟踪播放时给予网络的所有值。之后你可以使用原始游戏状态和球最终进入的实际位置来训练网络。这样即使成功阻挡球,网络也可以进行有效的训练,并从游戏中的所有点获得数据。 / p>