4

我开发了一个“乒乓”风格的游戏,它实际上在屏幕底部有一个球,左右两侧有弹性墙,顶部有一个粘性墙。它随机选择底部的一个点(在一条直线上)和一个随机的角度,从侧壁反弹,然后撞击顶部墙壁。这重复了 1000 次,每次,发射位置的 x 值、发射角度和它在顶墙上碰撞的位置的最终 x 值。

这给了我 2 个输入 - 发射和发射角度的 x 值和 1 个输出 - 最终位置的 x 值。我尝试使用具有 2 个输入节点、2 个隐藏节点(1 层)和 1 个输出节点的多层感知器。然而,它会收敛到一个点 ~20,然后逐渐变细。这是我尝试过的,但没有一个有帮助,要么错误永远不会收敛,要么开始发散:

  1. 将输入和输出转换为 0 和 1 之间
  2. 将输入和输出转换为介于 -1 和 1 之间
  3. 增加隐藏层数
  4. 增加隐藏层的节点数
  5. 将发射位置、发射角度和最终位置转换为 0 和 1,导致 ~750+175 输入和 ~750 输出 - 不收敛

因此,在整个晚上和早上都让我的大脑和身体反抗我之后,我希望有人能帮助我找出这里的问题。这是神经网络无法解决的任务还是我做错了什么?

PS:我使用的是Neuroph的在线版本,而不是编写自己的程序。至少这将帮助我避免实施中的问题

4

2 回答 2

3

如果它不能最小化训练错误,那很可能是实现中的一个错误。另一方面,如果您要在保留的测试集上测量准确度,那么一段时间后误差会上升也就不足为奇了。

至于公式,我认为只要有足够数量的训练数据和足够长的训练时间,一个足够复杂的神经网络就可以学习映射,无论你是否对输入进行二值化(前提是你使用的实现支持非二值输入和输出)。我对上面句子中“足够”的含义只有一个模糊的概念,但我敢猜测 1000 个样本是行不通的。另请注意,网络越复杂,估计参数所需的数据就越多。

于 2012-10-19T10:13:58.850 回答
1

为了消除 Neuroph 中潜在的实现问题,我建议尝试完全相同的过程(多层感知器、相同的参数、相同的数据等),但改用Weka

我之前在 Weka 中成功使用过 MLP,因此我可以验证此实现是否正常工作。我知道 Weka 在学术界具有相当高的渗透率,并且经过了很好的审查,但我不确定 Neuroph 自从它更新以来。如果您得到与 Neuroph 相同的结果,那么您就知道问题出在您的数据或神经网络拓扑或配置中。

Qnan 提出了一个很好的观点——你测量的误差到底是什么?要真正确定为什么训练误差没有收敛到零,您需要确定误差究竟代表什么。

此外,在停止收敛之前,神经网络在训练中运行了多少个 epoch(即迭代次数)?

在 Weka 中,如果我没记错的话,您可以将训练设置为执行,直到错误达到某个值或某个数量的 epoch。快速浏览一下,看起来 Neuroph 也是如此。

如果您要限制 epoch 的数量,请尝试将数字提高到显着更高的值,以使网络有更多的迭代来收敛。

于 2012-10-29T00:04:50.533 回答