在 CNN 中,每个新过滤器是否对每个输入通道具有不同的权重,或者在输入通道中使用的每个过滤器的权重是否相同?

人工智能 卷积神经网络 权重 过滤器
2021-11-06 19:20:29

我的理解是卷积神经网络的卷积层有四个维度:input_channels, filter_height, filter_width, number_of_filters. 此外,据我了解,每个新过滤器都会在所有input_channels(或前一层的特征/激活图)上进行卷积。

但是,来自 CS231 的下图显示了每个过滤器(红色)都应用于单个通道,而不是跨通道使用相同的过滤器。这似乎表明每个通道都有一个单独的过滤器(在这种情况下,我假设它们是输入图像的三个颜色通道,但同样适用于所有输入通道)。

这令人困惑 - 每个输入通道是否有不同的独特过滤器?

卷积滤波器图

这就是源头

上图似乎与 O'reilly 的“深度学习基础”的摘录相矛​​盾

...过滤器不仅仅在单个特征图上运行。它们对在特定层生成的整个特征图体积进行操作……因此,特征图必须能够对体积进行操作,而不仅仅是区域

...此外,我的理解是,下面的这些图像表明相同的过滤器只是在所有三个输入通道上进行卷积(与上面的 CS231 图形中显示的内容相矛盾):

将体积卷积滤波器应用于 RGB 图像

RGB 图像上的卷积

4个回答

您在问题中使用的以下图片非常准确地描述了正在发生的事情。请记住,3D 过滤器(灰色立方体)的每个元素都由不同的值(3x3x3=27值)组成。因此,可以将三个不同大小的2D 过滤器3x3连接起来以形成一个大小为 的3D 过滤器3x3x3

convnet2D

图片中的3x3x3RGB 块按元素乘以3D过滤(显示为灰色)。在这种情况下,过滤器具有权3x3x3=27重。当这些权重按元素相乘然后相加时,它会给出一个值。

那么,每个输入通道是否有单独的滤波器?

的,2D 过滤器的数量与图像中输入通道的数量一样多。但是,如果您认为对于具有多个通道的输入矩阵,只有一个3D 滤波器(如上图所示),这会有所帮助。

那为什么叫 2D 卷积(如果滤波器是 3D,输入矩阵是 3D)?

这是 2D 卷积,因为滤波器的步幅仅沿高度和宽度维度(而不是深度),因此,此卷积产生的输出也是 2D 矩阵。滤波器的运动方向数量决定了卷积的维度。

注意: 如果您通过可视化单个3D 过滤器而不是多个2D 过滤器(每层一个)来建立理解,那么您将很容易理解高级 CNN 架构,如 Resnet、InceptionV3 等。

在卷积神经网络中,每个输入通道是否有唯一的过滤器,或者所有输入通道都使用相同的新过滤器?

前者。事实上,为每个输入通道/输出通道组合定义了一个单独的内核。

通常对于 CNN 架构,在您的参数描述的单个滤波器中number_of_filters,每个输入通道有一个 2D 内核。input_channels * number_of_filters一组权重,每个权重描述一个卷积核。因此,显示每个过滤器的每个输入通道的一组权重的图表是正确的。第一张图还清楚地表明,应用这些内核的结果是通过将它们相加并为每个输出通道添加偏差来组合的。

可以被视为对每个输出通道使用 3D 卷积,它恰好与输入具有相同的深度。这是您的第二张图所显示的内容,也是许多图书馆将在内部执行的内容。从数学上讲,这是相同的结果(假设深度完全匹配),尽管层类型通常标记为“Conv2D”或类似的。同样,如果您的输入类型本质上是 3D,例如体素或视频,那么您可能会使用“Conv3D”层,但在内部它可以很好地实现为 4D 卷积。

我用一个具体的例子来跟进上面的答案,希望进一步阐明卷积是如何分别相对于输入和输出通道以及权重工作的:

让例子如下(wrt到1个卷积层):

  • 输入张量为9x9x5,即5个输入通道,所以input_channels=5
  • 过滤器/内核大小为 4x4,步幅为 1
  • 输出张量为6x6x56,即56个输出通道,所以output_channels=56
  • 填充类型为“有效”(即无填充)

我们注意到:

  • 由于输入有 5 个通道,过滤器尺寸变为 4x4x5,即有 5 个单独的、唯一的 2D 过滤器,大小为 4x4(即每个有 16 个权重);为了对大小为 9x9x5 的输入进行卷积,滤波器变为 3D,并且必须为 4x4x5 大小
  • 因此:对于每个输入通道,存在一个不同的 2D 滤波器,每个滤波器具有 16 个不同的权重。换句话说,2D 过滤器的数量与输入通道的数量相匹配
  • 由于有 56 个输出通道,因此必须有 56 个 3 维滤波器 W0、W1、...、W55,大小为 4x4x5(参见 CS231 图中有 2 个 3 维滤波器 W0、W1 来解释 2 个输出通道),其中大小为 5 的第 3 维表示到 5 个输入通道的链接(参见 CS231 图形中的每个 3D 过滤器 W0、W1 具有第 3 维 3,与 3 个输入通道匹配)
  • 因此:3D 过滤器的数量等于输出通道的数量

因此,该卷积层包含:

56 个大小为 4x4x5 的 3 维过滤器(每个 = 80 个不同的权重)来解释 56 个输出通道,其中每个通道的第 3 维值 5 以匹配 5 个输入通道。总共有

number_of_filters=input_channel*output_channels=5*56=280

尺寸为 4x4 的 2D 过滤器(即总共 280x16 个不同的权重)。

我推荐我的硕士论文第 2.2.1 章作为答案。要添加到其余答案:

Keras 是您了解会发生什么的朋友:

from keras.models import Sequential
from keras.layers import Conv2D

model = Sequential()
model.add(Conv2D(32, input_shape=(28, 28, 3),
          kernel_size=(5, 5),
          padding='same',
          use_bias=False))
model.add(Conv2D(17, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(13, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(7, (3, 3), padding='same', use_bias=False))
model.compile(loss='categorical_crossentropy', optimizer='adam')

print(model.summary())

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 28, 28, 32)        2400      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 28, 28, 17)        4896      
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 28, 28, 13)        1989      
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 28, 28, 7)         819       
=================================================================
Total params: 10,104

尝试制定您的选择。如果是其他情况,这对参数意味着什么?

暗示:2400=32(355)

这种方法还可以帮助您处理其他层类型,而不仅仅是卷积层。

另请注意,您可以自由实施不同的解决方案,这些解决方案可能具有其他数量的参数。