我是神经网络的初学者,无法理解两个概念:
- 如何确定给定神经网络的中间层数?1 对 10 或其他。
- 如何决定每个中间层的神经元数量?是否建议在每个中间层中使用相同数量的神经元,还是会因应用而异?
我是神经网络的初学者,无法理解两个概念:
全连接网络中每一层的神经元数量和层数的考虑取决于问题的特征空间。为了说明在二维情况下会发生什么以进行描述,我使用了二维空间。我使用了一位科学家作品中的图像。为了了解其他网络,CNN
我建议你看看这里。
假设你只有一个神经元,在这种情况下,在学习了网络的参数之后,你将有一个线性决策边界,可以将空间分成两个单独的类。
假设要求您分离以下数据。您将需要d1
指定上决策边界并以某种方式进行AND
操作以确定输入数据是在其左侧还是在右侧。Lined2
正在执行另一个AND
操作,调查输入数据是否高于d2
或不高于。在这种情况下d1
,试图了解输入是否在线的左侧以将输入分类为圆形,也d2
试图弄清楚输入是否在线的右侧以将输入分类为圆形。现在我们需要另一个AND
操作来包装在训练它们的参数后构造的两条线的结果。如果输入在左侧d1
和右侧d2
,则应归类为圆形。
现在假设您有以下问题,并且要求您将类分开。在这种情况下,理由与上述完全一样。
对于以下数据:
决策边界不是凸的,并且比之前的边界更复杂。首先,您必须有一个找到内圈的子网。然后你必须有另一个子网找到内部矩形决策边界,它决定矩形内部的输入不是圆形,如果它们在外面,它们是圆形的。在这些之后,您必须总结结果并说明如果输入数据在较大的矩形内部并且在内部矩形之外,则应将其分类为circle。AND
为此,您需要另一个操作。网络将是这样的:
假设要求您找到以下带圆圈的决策边界。
在这种情况下,您的网络将类似于下面提到的网络,但在第一个隐藏层中有更多的神经元。
非常好的问题,因为这个问题还没有确切的答案。这是一个活跃的研究领域。
最终,网络的架构与数据的维度有关。由于神经网络是通用逼近器,只要你的网络足够大,它就有能力拟合你的数据。
真正了解哪种架构效果最好的唯一方法是尝试所有架构,然后选择最好的架构。但是当然,对于神经网络来说,这是相当困难的,因为每个模型都需要相当长的时间来训练。有些人首先会故意训练一个“太大”的模型,然后通过删除对网络贡献不大的权重来修剪它。
如果您的网络太大,它可能会过度拟合或难以收敛。直观地说,发生的事情是您的网络正试图以比应有的更复杂的方式解释您的数据。这就像试图用一篇 10 页的文章来回答一个可以用一句话来回答的问题。可能很难构造这么长的答案,并且可能会抛出很多不必要的事实。(请参阅this question)
另一方面,如果您的网络太小,它将不适合您的数据,因此。这就像当你应该写一篇 10 页的论文时用一句话来回答一样。尽管您的答案可能很好,但您会遗漏一些相关事实。
如果您知道数据的维度,就可以判断您的网络是否足够大。要估计数据的维度,您可以尝试计算其排名。这是人们如何尝试估计网络规模的核心思想。
然而,事情并没有那么简单。事实上,如果你的网络需要是 64 维的,你是构建一个大小为 64 的隐藏层还是构建两个大小为 8 的隐藏层?在这里,我将给你一些直觉,让你知道在这两种情况下会发生什么。
深入意味着添加更多隐藏层。它的作用是允许网络计算更复杂的特征。例如,在卷积神经网络中,经常显示前几层代表“低级”特征,例如边缘,最后几层代表“高级”特征,例如面部、身体部位等。
如果您的数据非常非结构化(如图像)并且需要进行大量处理才能从中提取有用信息,您通常需要深入研究。
更深入意味着创建更复杂的功能,而“更广泛”仅仅意味着创建更多这些功能。可能您的问题可以通过非常简单的功能来解释,但需要很多功能。通常,层在网络末端变得越来越窄,原因很简单,复杂的特征比简单的特征携带更多的信息,因此你不需要那么多。
简短回答:这与您的数据维度和应用程序类型非常相关。
只有通过练习才能选择正确的层数。这个问题还没有一般的答案。通过选择网络架构,您可以将可能性空间(假设空间)限制为特定系列的张量操作,将输入数据映射到输出数据。在 DeepNN 中,每一层只能访问前一层输出中存在的信息。如果某一层丢弃了一些与手头问题相关的信息,那么后面的层将永远无法恢复这些信息。这通常被称为“信息瓶颈”。
信息瓶颈是一把双刃剑:
1)如果您使用少量的层/神经元,那么模型将只学习数据的一些有用的表示/特征而丢失一些重要的表示/特征,因为中间层的容量非常有限(欠拟合)。
2)如果您使用大量的层/神经元,那么模型将学习太多特定于训练数据的表示/特征,并且不会泛化到现实世界中和训练集之外的数据(过度拟合) )。
示例和更多发现的有用链接:
[1] https://livebook.manning.com#!/book/deep-learning-with-python/chapter-3/point-1130-232-232-0
[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/
从两年前开始使用神经网络,这是我每次不想为新系统建模时总是遇到的问题。我发现的最佳方法如下:
一般的做法是尝试不同的架构,比较结果并采取最佳配置。经验让你在第一次架构猜测时有更多的直觉。