【问题标题】:Neural network doesn't converge - using Multilayer Perceptron神经网络不收敛 - 使用多层感知器
【发布时间】:2012-10-17 08:51:26
【问题描述】:

我开发了一个“乒乓”风格的游戏,它实际上在屏幕底部有一个球,左右两侧有弹力墙,顶部有一个粘性墙。它随机选择底部的一个点(在一条水平直线上)和一个随机角度,从侧壁反弹,然后撞击顶部墙壁。这重复了 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 的在线版本,而不是编写我自己的程序。至少这将帮助我避免实施中的问题

【问题讨论】:

    标签: neural-network


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。误差正在减少,但减少的速度正在降低。所以它不会低于某个数字,即~14-20。我也不想过度拟合数据以很好地与训练集一起工作,并且对任何新数据都很糟糕。我尝试增加参数的数量以包括每个墙壁上的反弹,但错误只减少了一小部分。但我认为你对样本数量有所了解。我会看看我是否可以得到一个更大的训练集,大概 10,000 个,看看是否有帮助。
    • 错误是训练错误。它有效地告诉您您的训练数据与神经网络的计算参数的匹配程度。例如,对于我的训练集 X,我使用反向传播算法来生成适合数据的参数。如果训练误差很高(> 2),则不是很好的拟合。如果它很低(
    • @PlastyGrove 我很清楚什么是训练误差,但衡量多类分类器性能的方法不止一种。我猜你只使用了分类错误的样本比例?
    • 啊,对不起。我不确定如何估计错误。正如我所说,Neuroph 为我提供了一个很好的 gui 使用并通过迭代显示错误值。我猜测误差是使用整个训练集计算得出的,以及预测与每个示例的实际值相差多远。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 抱歉回复晚了。我认为这是一个很好的建议。到目前为止,我一直假设 1000 个样本足够好。我会尝试增加这个数字并给 Weka 一个机会。谢谢!
    • @PlastyGrove - 你找到问题的答案了吗?只是好奇。
    • 为迟到的回复道歉,但我为此挣扎了很多,然后就放弃了。我觉得问题是我对神经网络的理解太基础了,有必要进一步阅读。但目前,它几乎被遗弃了
    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 2019-04-13
    • 2016-05-13
    • 2015-01-17
    • 2021-05-02
    • 2019-02-20
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多