神经网络输出神经元数量背后的直觉

数据挖掘 深度学习
2021-09-23 18:36:15

我正在阅读 Michael Nielsen关于深度学习的书。在第一章中,他给出了对 10 个手写数字进行分类的经典例子,并用它来解释选择输出神经元数量背后的直觉。

最初,在阅读这本书之前,我认为你需要 10 个输出神经元,每个代表一个给定的数字,这很直观,但我开始质疑我为什么这么认为。

无论如何,尼尔森是这样解释的:

您可能想知道为什么我们使用 10 个输出神经元。毕竟,网络的目标是告诉我们哪个数字 (0,1,2,…,9) 对应于输入图像。一种看似自然的方法是仅使用 4 个输出神经元,将每个神经元视为取二进制值,具体取决于神经元的输出是接近 0 还是接近 1。四个神经元足以编码答案,因为 2 ^4=16 多于输入数字的 10 个可能值。为什么我们的网络应该使用 10 个神经元呢?这不是低效吗?最终的理由是经验性的:我们可以尝试两种网络设计,结果证明,对于这个特定的问题,具有 10 个输出神经元的网络比具有 4 个输出神经元的网络学习识别数字更好。但这让我们想知道为什么使用 10 个输出神经元效果更好。是否有一些启发式方法可以提前告诉我们应该使用 10 输出编码而不是 4 输出编码?为了理解我们为什么要这样做,从第一原理开始思考神经网络在做什么是有帮助的。首先考虑我们使用 10 个输出神经元的情况。让我们专注于第一个输出神经元,它试图确定数字是否为 0。它通过权衡来自神经元隐藏层的证据来做到这一点。那些隐藏的神经元在做什么?好吧,为了论证起见,假设隐藏层中的第一个神经元检测是否存在如下图像:它有助于从第一原理思考神经网络在做什么。首先考虑我们使用 10 个输出神经元的情况。让我们专注于第一个输出神经元,它试图确定数字是否为 0。它通过权衡来自神经元隐藏层的证据来做到这一点。那些隐藏的神经元在做什么?好吧,为了论证起见,假设隐藏层中的第一个神经元检测是否存在如下图像:它有助于从第一原理思考神经网络在做什么。首先考虑我们使用 10 个输出神经元的情况。让我们专注于第一个输出神经元,它试图确定数字是否为 0。它通过权衡来自神经元隐藏层的证据来做到这一点。那些隐藏的神经元在做什么?好吧,为了论证起见,假设隐藏层中的第一个神经元检测是否存在如下图像:

在此处输入图像描述

它可以通过对与图像重叠的输入像素进行大量加权来做到这一点,并且只对其他输入进行轻微加权。以类似的方式,为了论证,我们假设隐藏层中的第二、第三和第四个神经元检测是否存在以下图像:

在此处输入图像描述

您可能已经猜到了,这四个图像共同构成了我们在前面显示的数字行中看到的 0 图像:

在此处输入图像描述

因此,如果所有四个隐藏的神经元都在放电,那么我们可以得出数字是 0 的结论。当然,这不是我们可以用来推断图像是 0 的唯一证据——我们可以合法地得到 0许多其他方式(例如,通过上述图像的翻译或轻微扭曲)。但似乎可以肯定地说,至少在这种情况下,我们可以得出输入是 0 的结论。

假设神经网络以这种方式运行,我们可以给出一个合理的解释,解释为什么网络有 10 个输出而不是 4 个更好。如果我们有 4 个输出,那么第一个输出神经元将试图决定最数字的重要位是。并且没有简单的方法可以将最重要的位与上面所示的简单形状相关联。很难想象数字的组件形状将与(例如)输出中最重要的位密切相关,这有什么好的历史原因。

现在,尽管如此,这只是一个启发式。没有什么说三层神经网络必须以我描述的方式运行,隐藏的神经元检测简单的组件形状。也许一个聪明的学习算法会找到一些权重分配,让我们只使用 4 个输出神经元。但作为一种启发式思维方式,我所描述的思维方式非常有效,并且可以为您节省大量时间来设计良好的神经网络架构。

我不明白他在倒数第二段中的意思。我将其余的内容包括在内,但倒数第二段让我感到困惑。有人可以澄清他在说什么吗?

3个回答

10 个神经元比 4 个工作得更好的原因是它允许网络独立编码所有可能的答案。

你可以有 4 个神经元并训练第一个神经元编码最低有效位,第二个神经元编码第二低有效位,依此类推。它会起作用的。

1(位:0001)的图像与 7(位 0111)的图像非常相似。想象一个图像,我们知道它是 1 还是 7,但我们不知道是哪一个。如果有 4 个输出(如上所述),您将输出 (0, 0.5, 0.5, 1),这意味着正确答案是 1、3、5 或 7。如果有 10 个输出,所有类的概率为 0,而 1 和 7 的概率为每个有 50%,这更准确地传达了可以从图像中解释的内容。

你可以有一个输出直接输出数字的值。但是 1 和 7 现在在输出节点中相距很远(整个范围是从 0 到 9),所以这个网络不可能说“1 或 7”。它可能会说:4(1 到 7 之间的中点)。这就是为什么它不能很好地工作。

恕我直言,“尼尔森的书”解释得很差。

我也想对尼尔森的书发表意见。在他的网络中,他使用 16x16 隐藏神经元和 10 个作为输出,但我最近在 Googles Colab 中发现了示例,其中 128 个神经元用于隐藏层,1 个用于输出。这种新的组合非常适用于数字(每个 100%),以至于他们现在使用服装(尽管仍然只有 10 种类型)。对我来说,这个“神奇”盒子不过是精巧的分拣机,用于分拣不同等级的砾石。你已经知道你想要的尺寸(从 0 到 9),你只需要不同尺寸的网格(一个在另一个下面),直到你得到顶部的金属和底部的沙子......

Michael Nielsen 正在讨论数字的二进制表示的最高有效位

该部分可以忽略不计,神经网络不学习 MNIST 数字的二进制表示,也就是 base-2。神经网络学习十进制数字的视觉表示,也就是以 10 为底的数字。