如何设置神经网络中神经元和层的数量


Answers:


19

完全连接的网络中,每层神经元的数量和层数的考虑取决于问题的特征空间。为了说明在二维情况下发生的情况以进行描绘,我使用了二维空间。我用过科学家的照片。为了了解其他网,CNN我建议您在这里看看。

假设您只有一个神经元,在这种情况下,在学习了网络参数之后,您将拥有一个线性决策边界,该边界可以将空间分为两个单独的类。

在此处输入图片说明

在此处输入图片说明

假设要求您分隔以下数据。您将需要d1指定指定上限的决策边界,并以某种方式进行AND操作以确定输入数据是在其左侧还是在右侧。Line d2正在执行另一项AND操作,以调查输入数据是否大于d2或等于输入数据。在这种情况下,d1我们试图了解输入是否在直线的左侧以将输入分类为圆形,也d2试图找出输入是否在直线的右侧以将输入分类为圆形。现在我们需要另一个AND运算以总结训练参数后构造的两条线的结果。如果输入位于的左侧d1和右侧d2,则应将其分类为圆形

在此处输入图片说明

现在假设您遇到以下问题,并且要求您分离这些类。在这种情况下,理由与上述完全一样。

在此处输入图片说明

对于以下数据:

在此处输入图片说明

决策边界不是凸的,并且比以前的边界复杂。首先,您必须拥有一个可以找到内部圆圈的子网。然后,您必须具有另一个子网,该子网可以找到内部矩形决策边界,该边界确定矩形内部的输入不是圆形,如果位于外部,则为圆形。之后,您必须对结果进行总结,并说输入数据是在较大矩形内部还是内部矩形外部,应将其分类为circleAND为此,您需要另一项操作。该网络将是这样的:

在此处输入图片说明


假设要求您找到以下带圆圈的决策边界。

在此处输入图片说明

在这种情况下,您的网络将类似于以下提到的网络,但在第一个隐藏层中具有更多的神经元。

在此处输入图片说明


11

很好的问题,因为还没有确切的答案。这是一个活跃的研究领域。

最终,网络的体系结构与数据的维数有关。由于神经网络是通用逼近器,因此只要您的网络足够大,它就可以拟合您的数据。

真正了解哪种架构最有效的唯一方法是尝试所有架构,然后选择最佳架构。但是,当然,对于神经网络而言,这非常困难,因为每种模型都需要花费大量时间来训练。某些人要做的是首先训练一个故意过大的模型,然后通过消除对网络没有太大贡献的权重来修剪它。

如果我的网络“太大”怎么办

如果您的网络太大,则可能会过大或难以融合。凭直觉,发生的事情是您的网络试图以比应有的更复杂的方式解释您的数据。这就像试图回答一个问题,而这个问题可以用一个句子长达10页的文章来回答。构造这么长的答案可能很困难,并且可能会抛出很多不必要的事实。(请参阅此问题

如果我的网络“太小”怎么办

另一方面,如果您的网络太小,则数据将因此不足。当您撰写一篇长达10页的论文时,就像用一个句子回答。尽管您的答案可能会很好,但是您将缺少一些相关事实。

估算网络的规模

如果知道数据的维数,则可以判断网络是否足够大。要估算数据的维数,您可以尝试计算其排名。这是人们如何估计网络规模的核心思想。

但是,它并不那么简单。的确,如果您的网络需要是64维的,那么您是要构建一个大小为64的隐藏层还是两个大小为8的隐藏层?在这里,我将为您提供两种情况下的直觉。

更深入

深入意味着增加更多的隐藏层。它的作用是允许网络计算更复杂的功能。例如,在卷积神经网络中,经常显示出前几层代表“低级”特征,例如边缘,最后几层代表“高级”特征,例如面部,身体部位等。

如果您的数据非常非结构化(例如图像),并且需要大量处理才能从中提取有用的信息,则通常需要深入研究。

扩大范围

更深入意味着创建更复杂的功能,而更广泛意味着仅创建更多这些功能。可能是您的问题可以通过非常简单的功能来解释,但是其中有很多功能是可以解决的。通常,由于复杂功能比简单功能承载的信息更多,因此,随着网络末端的临近,层变得越来越窄,因此您不需要那么多信息。


您可以使用固有维数的概念来找出问题的相关维数。本征维试图回答要完全描述一个信号需要多少个变量,它与该信号的随机源中的变量数量有关。
Pedro Henrique Monforte

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/


4

从两年前开始使用神经网络,这是我每次不想为新系统建模时都会遇到的问题。我发现的最佳方法如下:

  1. 寻找也已使用前馈网络建模的类似问题,并研究其架构。
  2. 从该配置开始,训练数据集并评估测试集。
  3. 在体系结构中执行修剪,并将数据集中的结果与以前的结果进行比较。如果模型的准确性不受影响,则可以推断原始模型过度拟合了数据。
  4. 否则,请尝试增加更多的自由度(即更多的层)。

通用方法是尝试不同的体系结构,比较结果并采用最佳配置。经验使您在第一个架构猜测中有了更多的直觉。


1

除了以前的答案外,还有一些方法是将神经网络的拓扑结构内生地出现,作为训练的一部分。最显着的是,您拥有增强型拓扑的神经进化(NEAT),从无隐藏层的基本网络开始,然后使用遗传算法“复杂化”网络结构。NEAT在许多ML框架中实现。这是一篇有关学习Mario的实现的非常容易理解的文章:CrAIg:使用神经网络学习Mario

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.