3 个不同排序的相同大小的 CNN 层如何从输入层输出不同的感受野?

人工智能 深度学习 卷积神经网络 卷积算术 感受野
2021-11-14 00:22:39

以下是来自CS231n的引用:

与一个大的感受野 CONV 层相比,更喜欢一堆小滤波器 CONV。假设您将三个 3x3 CONV 层堆叠在一起(当然,两者之间存在非线性)。在这种安排下,第一个 CONV 层上的每个神经元都具有输入体积的 3x3 视图。第二个 CONV 层上的神经元具有第一个 CONV 层的 3x3 视图,因此扩展了输入体积的 5x5 视图。类似地,第三个 CONV 层上的神经元具有第二个 CONV 层的 3x3 视图,因此具有输入体积的 7x7 视图。假设我们只想使用具有 7x7 感受野的单个 CONV 层,而不是这三层 3x3 CONV。这些神经元将具有在空间范围(7x7)上相同的输入体积的感受野大小,但有几个缺点

我的可视化解释:

图片

你怎么能从第二个 CNN 层看穿第一个 CNN 层并看到一个 5x5 大小的感受野?

之前没有评论说明所有其他超参数,例如输入大小、步长、填充等,这使得这非常令人困惑。


编辑:

我想我找到了答案但我还是不明白。事实上,我比以往任何时候都更加困惑。

3个回答

如果你考虑一个小例子,当你深入到 CNN 层时,很容易可视化输入感受野的增长。

我们举一个简单的例子:

尺寸的形式为channels×height×width.

  • 输入图像I是一个3×5×5矩阵
  • 第一个卷积层的内核K1有形状3×2×2(为简单起见,我们只考虑 1 个过滤器)
  • 第二个卷积层的内核K2有形状1×2×2
  • 填充P=0
  • 跨步S=1

输出维度O由 CS231n 讲座中的以下公式计算得出。

O=(IK+2P)/S+1

当您使用第一个过滤器对输入图像进行卷积时K1,你得到一个形状的输出1×4×4(这是 CONV1 层的激活)。它的感受野与内核大小相同(K1), 那是,2×2.

当这一层(形状1×4×4) 与第二个内核 (CONV2) 进行卷积K2(1×2×2),输出将是1×3×3. 这个的感受野是3×3输入窗口,因为您已经累积了2×2上一层的窗口。

考虑您的三个 CONV 层的示例3×3内核也类似。第一层激活累加所有神经元的总和3×3输入窗口。当您进一步将此输出与内核卷积时3×3,它将累积前一层的所有输出,覆盖更大的输入感受野。

这一观察结果与深层学习更复杂的特征(如面部表情、抽象概念等)的论点一致,因为它们覆盖了我们原始输入图像的更大感受野。

问题在你的图表中。以下是获得 5x5 感受野的步骤。这是你的图表,稍微重做: 将 3x3 输入字段相加(通过权重),并通过非线性激活函数传递

请注意,新单元取输入中 9 个像素的加权和,然后应用校正线性非线性。现在,还有更多这些,创建了从图像的该部分计算的三个新数字。每个都滑动一个像素:

在此处输入图像描述

我们也重复这个过程向下三个像素,最后,我们有一个新的 3x3 输入字段:

在此处输入图像描述

请注意,右侧的新单元现在从 5x5 输入字段中获取输入。我希望这有帮助!

所引用文本的目的是在多个 [CONV -> RELU]*N 层上推断出等效合并单卷积层的缺点。

在给定的场景中,如果将 2 层 3x3 过滤器替换为等效的单层,则该等效层将需要一个具有大小为 5x5 的感受野的过滤器。

类似地,等效层过滤器需要其感受野大小为 7x7 才能压缩 3 层 3x3 过滤器。请注意,最明显的缺点将是对非线性建模的遗漏。