这种计算单个隐藏层神经网络所需隐藏神经元数量的想法是否正确?

人工智能 神经网络 深度学习 超参数优化 隐藏层 超参数
2021-11-08 02:56:00

我有一个想法来找到神经网络中所需的最佳隐藏神经元数量,但我不确定它有多准确。

假设它只有1个隐藏层,它是一个有1个输出节点的分类问题(所以它是一个二元分类任务),对于数据集中的N个特征有N个输入节点,每个节点都连接到下一个节点层。

我在想,为了确保网络能够提取数据之间的所有有用关系,那么每条数据都必须链接到其他每条数据,就像在一个完整的图表中一样。因此,如果您有 6 个输入,则必须有 15 个边才能完成。再多一点,它将重新计算先前计算的信息,再少一点就不会计算所有可能的关系。

所以,如果一个网络有 6 个输入节点,1 个隐藏节点,1 个输出节点。将有 6 + 1 个连接。有 6 个输入节点、2 个隐藏节点和 1 个输出节点,将有 12 + 2 个连接。有 3 个隐藏节点将有 21 个连接。因此,隐藏层应该有 3 个隐藏节点,以确保覆盖所有可能性。

这个答案讨论了另一种方法。为了争论,我试图让这两个例子都使用相同的数据。如果这个想法是用 6 个输入特征、1 个输出节点计算的,α=2,以及训练集中的 60 个样本,这将导致最多 4 个隐藏神经元。由于 60 个样本非常小,将其增加到 600 个将导致最多 42 个隐藏神经元。

根据我的想法,我认为最多应该有 3 个隐藏节点,我无法想象它还有用,但是有什么理由超过 3 到 42 个,就像第二个例子一样?

1个回答

我有一个想法来找到神经网络中所需的隐藏神经元的最佳数量,但我不确定它有多准确。

这是一个完全无法启动的方法,在一般情况下(神经网络的实值输入)不可能进行这样的计算。

即使只有一个输入神经元也是不可能的。这是因为即使只有一个输入,输出也可以是任意复杂的类映射。一个需要无限数量的隐藏神经元来提供简单分类器的两个输入的好例子是将 x,y 点分类为Mandelbrot 集中

在一些更受约束的示例中,具有明确定义的函数,您可以构建一个完美解决问题的最小神经网络。例如,XOR 的神经网络模型可以由两个隐藏神经元(和六个链接)组成。然而,这种分析仅限于简单的问题。如果所有输入都是布尔值,并且神经网络仅限于所有输入上的一些组合按位逻辑,您可能会想出一些您的想法的变体。

您将边数与输入之间可能的交互数量相匹配的想法不起作用,因为您只考虑两个变量之间最基本的交互,而变量实际上可以以各种方式组合形成一个函数。

此外,隐藏层中的每个神经元都使用线性加权和,加上一个固定的变换函数。这决不能保证与您试图用神经网络近似的函数形状相匹配。您可能知道的一个类比是离散傅立叶变换 - 可以通过组合不同频率的正弦波和余弦波来模拟函数的任何部分,但某些函数需要许多这样的波才能准确表示。

您在 Cross Validated Stack Exchange 中的答案链接为您提供了一个经验法则,作者发现该法则通常适用于他们使用的数据类型。这是有用的经验。您可以使用这些规则作为搜索适用于您的问题的架构的起点。这可能比您基于计算可能的变量交互的想法更有用。但是,在这两种情况下,最重要的步骤是使用一些未见过的示例进行测试,并为您的问题搜索最佳的神经网络架构。

不过,您可以通过变量交互来做一些事情。例如,尝试寻找变量的简单多项式组合与目标变量之间的线性相关性,例如绘图x1x2对比y或者x32x4对比y. . . 您可能会发现某些组合具有暗示关系的明确信号。但是如果你做这种事情要小心,如果你测试了很多这些,你发现一个线性关系纯粹是偶然的,最初看起来不错,但在测试时结果却是一个哑巴(这是一种过度拟合的形式)。因此,您通常应该测试比数据集的大小小很多,并将自己限制在一些适度的最大总功率。