神经网络不会聚 - 使用多层感知器

时间:2012-10-17 08:51:26

标签: neural-network

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

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

  1. 将输入和输出转换为介于0和1之间
  2. 将输入和输出转换为介于-1和1之间
  3. 增加隐藏图层数
  4. 增加隐藏层中的节点数
  5. 将发射位置,发射角度和最终位置转换为0s和1s,产生~750 + 175输入和~750输出 - 无收敛
  6. 所以,经过一整晚和早上,让我的大脑和身体反抗我,我希望有人可以帮助我在这里找出问题。这是一项神经网络无法解决的任务,还是我做错了什么?

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

2 个答案:

答案 0 :(得分:3)

如果它没有最小化训练错误,那很可能是实施中的一个错误。另一方面,如果你在一个坚持的测试装置上测量精度,那么一段时间后错误就会出现并不令人惊讶。

关于配方​​,我认为具有足够的训练数据和足够长的训练时间,足够复杂的NN可以学习映射是否对输入进行二值化(假设你使用的实现)支持非二进制输入和输出)。我对上述句子中“足够”的含义只有一个含糊的概念,但我猜想1000个样本不会这样做。另请注意,网络越复杂,估计参数通常需要的数据就越多。

答案 1 :(得分:1)

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

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

Qnan提出了一个很好的观点 - 您测量的错误究竟是什么?要真正确定训练误差为什么不向零收敛,您需要确定错误代表的确切含义。

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

在Weka中,如果我没记错的话,您可以将训练设置为执行,直到错误达到某个值或一定数量的纪元。从快速看看,看起来像Neuroph是一样的。

如果您要限制时代数量,请尝试将数字提高到更高的数字,以便为网络提供更多的迭代收敛。