神经网络无法收敛时要尝试的事情

时间:2014-01-14 11:06:10

标签: machine-learning artificial-intelligence neural-network

有关神经网络的最受欢迎的问题之一似乎是:

帮助!!我的神经网络没有收敛!!

请参阅hereherehereherehere

因此,在消除网络实施中的任何错误后,应该尝试哪些最常见的事情?

我知道要尝试的事情会因网络架构而有很大差异。 但是,在构建自己的神经网络时,你能够调整哪些参数(学习率,动量,初始权重等)和实现新功能(窗口动量?)?

如果可能,请提供与语言无关的答案。这个问题旨在给那些坚持神经网络的人提供一些指导,这些神经网络没有收敛......

5 个答案:

答案 0 :(得分:3)

如果我们正在谈论分类任务,那么在训练你的网之前你应该洗牌。我的意思是,在成千上万的第2课等例子之后,不要用数千个第1课的例子来喂你的网......如果你这样做,你的网很可能不会收敛,但会倾向于预测最后训练的课程。

答案 1 :(得分:1)

如果问题只是收敛(不是实际的“训练有素的网络”,这是解决SO的广泛问题的方法)那么一旦代码合适,唯一可能是问题的是训练方法参数。如果使用朴素反向传播,则这些参数为learning ratemomentum。对于任何初始化,任何架构,正确实现的神经网络都应该收敛以便对这两个参数进行良好选择(事实上,对于momentum=0它应该收敛到某些解决方案对于足够小的learning rate)。

特别是 - 有一种称为“resillient backprop”的良好启发式方法,它实际上是无参数的appraoch,应该(几乎)总是收敛(假设正确实现)。

答案 2 :(得分:1)

我在实现自己的反向支持神经网络时遇到了这个问题。我尝试了以下方法:

  • 实施动量(并将值保持在0.5)
  • 保持学习率为0.1
  • 绘制每个神经元的误差,权重,输入和输出图表,将数据看作图表更有助于找出问题所在
  • 尝试了不同的激活功能(所有sigmoid)。但这对我没什么帮助。
  • 将所有权重初始化为-0.5到0.5之间的随机值(我的网络输出范围为-1和1)
  • 我没试过,但Gradient Checking也可以提供帮助

答案 3 :(得分:1)

如果您使用的是ReLU激活,则可能会遇到"dying ReLU"问题。简而言之,在某些条件下,任何具有ReLU激活的神经元都可能会受到(偏差)调整,从而导致它再也不会被激活。可以通过“泄漏ReLU”激活来解决此问题,该文章对此进行了详细说明。

例如,我用ReLU输出产生了一个失败的简单MLP(3层)网络。我提供了可能无法失败的数据,但仍然失败。我降低了学习率,但失败却更加缓慢。它总是收敛于以相等的概率预测每个类别。都是通过使用泄漏的ReLU而不是标准ReLU来解决的。

答案 4 :(得分:0)

在尝试了不同的元参数(优化/架构)之后,最可能的地方是 - THE DATA

至于我自己 - 为了最大限度地减少摆弄元参数,我保持优化器自动化 - Adam 可以选择。

关于应用程序与架构有一些经验法则......但最好自己处理那些问题。

指出: 根据我的经验,在您调试网络(简单的调试)之后,仍然没有收敛或达到不希望的局部最小值,通常的怀疑是数据。 天气你有相反的样品或只是不正确的(异常值),少量可以说0.6-acc到(清洗后)0.9-acc ..

一个较小但金色(干净)的数据集比一个稍微脏的数据集要好得多...... 通过扩充,您可以进一步调整结果。