神经网络不收敛时可以尝试的事情

Sha*_* RC 8 artificial-intelligence machine-learning neural-network

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

救命!!我的神经网络没有收敛!

这里这里这里这里这里

因此,在消除网络实施中的任何错误之后,应该尝试的最常见方法是什么?

我知道,尝试尝试的方法会因网络体系结构而异。但是,在构建自己的神经网络时,您可以调整哪些参数(学习率,动量,初始权重等)并实现哪些新功能(窗动量?)以克服一些类似的问题?

如果可能,请提供与语言无关的答案。这个问题的目的是为那些陷入神经网络而无法收敛的人们提供一些指示。

oma*_*tai 5

如果您使用 ReLU 激活,您可能会遇到“垂死的 ReLU”问题。简而言之,在某些条件下,任何具有 ReLU 激活的神经元都可能受到(偏差)调整的影响,导致它永远不会再次被激活。它可以通过“Leaky ReLU”激活来修复,在那篇文章中有很好的解释。

例如,我制作了一个带有 ReLU 输出的简单 MLP(3 层)网络,但失败了。我提供了它不可能失败的数据,但它仍然失败了。我把学习率调低了,它失败得更慢。它总是收敛到以相等的概率预测每个类别。这一切都是通过使用 Leaky ReLU 而不是标准 ReLU 来解决的。


lej*_*lot 1

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

特别是 - 有一种很好的启发式方法,称为“弹性反向传播”,它实际上是无参数方法,它应该(几乎)总是收敛(假设正确实现)。