如何选择神经网络中隐藏层和节点的数量?

34

多层感知机神经网络中的隐藏层数量会对神经网络的行为产生什么影响?同样的问题也适用于隐藏层中节点数量。

假设我想使用神经网络进行手写字符识别。在这种情况下,我将像素颜色强度值作为输入节点,并将字符类作为输出节点。

那么我该如何选择隐藏层和节点数量来解决这样的问题呢?


只是为了确定从哪里开始,你知道需要隐藏层做什么吗?顺便说一句,我不认为你能得到完美的答案。 - Tim
你应该首先理解为什么需要隐藏层(XOR)。 - Tim
2
我应该使用多少个隐藏层? 我应该使用多少个隐藏单元? - Birol Kuyumcu
显示剩余2条评论
5个回答

19

注意:此答案在回答时是正确的,但现已过时。


神经网络中很少有超过两个隐藏层。层数通常不会是您担心的网络参数之一。

尽管具有许多层的多层神经网络可以表示深度电路,但训练深度网络仍然被视为一个挑战。直到最近,实证研究通常发现,深层网络通常表现不佳,且往往比具有一到两个隐藏层的神经网络差。

Bengio, Y. & LeCun, Y., 2007. Scaling learning algorithms towards AI. Large-Scale Kernel Machines, (1), pp.1-41.

这篇引用的论文是学习网络深度、教授深度网络和深度学习的进展的良好参考。


这是正确的。从技术上讲,由于“衰减”问题,像反向传播训练的多层感知器这样的模型在使用太多层时会出现问题。如果您要有许多隐藏层,您将需要研究深度学习,它可以解决这个问题。 - bean5
1
这个观点有点过时了。如果你使用预训练,已经被证明通过增加层数可以降低误差的上限。此外,Hinton进行了一些实验,表明更多的隐藏单元意味着更好的输入表示,因此可以得到更好的结果。特别是在使用修正线性单元时。 - elaRosca
也许这在2012年是正确的,但我不确定现在是否仍然如此。我几乎可以猜测,没有超过两层的情况已经很少见了。 - chris
@ChrisAnderson,非常正确!而且我们也在使用不同类型的网络。 - Don Reba
2
我想指出上面的引用是Bengio和Lecun在他们的论文中提到的其他作者,即[Tesauro,1992]。 - Long

8

一般而言,选取超参数的方法是进行交叉验证。保留一部分数据集,使用不同的配置对神经网络进行训练,选择在保留数据集上表现最好的模型。


4
好的,这是一个可靠的方法。但是否有一种方法可以猜测它呢?比如,这些数据可能很好地用10个主成分来解释,所以我们应该有大约10个隐藏节点排列在2层中? - gintas

5
我看到的大多数问题都可以通过1-2个隐藏层来解决。已经证明,只有一个隐藏层的MLP是通用函数逼近器(Hornik et. al.)。更多的隐藏层可能会使问题变得更容易或更难。通常需要尝试不同的拓扑结构。据说,如果你想用反向传播训练你的MLP,你不能添加任意数量的隐藏层,因为在前几层中梯度会变得太小(我没有参考资料)。但是,在一些应用中,人们使用了nine layers。也许你对标准基准问题感兴趣,这个问题可以由不同的分类器和MLP拓扑结构来解决。

3
除了交叉验证不同的模型配置(隐藏层数或每层神经元数)会帮助您选择更好的配置外,一种方法是训练一个尽可能大和深的模型,并使用dropout正则化来关闭一些神经元并减少过度拟合。这种方法的参考可以在这篇论文中看到。https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

2
所有上述答案当然是正确的,但为了增加一些更多的想法:
基于这篇论文《在多个隐藏层BPNN体系结构中近似隐藏层神经元数量》(Saurabh Karsoliya),以下是一些通用规则:

总的来说:

  • 隐藏层神经元的数量应该是输入层大小的2/3 (或70%到90%)。如果不足,可以在以后添加输出层神经元的数量。
  • 隐藏层神经元的数量应该小于输入层中神经元数量的两倍。
  • 隐藏层神经元的大小在输入层大小和输出层大小之间。

始终记住,需要探索和尝试很多不同的组合。此外,可以使用GridSearch找到"最佳模型和参数"

例如,我们可以进行GridSearch以确定隐藏层的“最佳”大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接