1x1 卷积在神经网络中意味着什么?

机器算法验证 神经网络 深度学习 卷积 卷积神经网络
2022-01-26 12:07:20

我目前正在做 Udacity 深度学习教程。在第 3 课中,他们讨论了 1x1 卷积。这种 1x1 卷积用于 Google Inception Module。我无法理解什么是 1x1 卷积。

我也看过Yann Lecun 的这篇文章

有人可以向我解释一下吗?

4个回答

假设我有一个卷积层,它输出一个形状的张量,其中:(N,F,H,W)

  • N是批量大小
  • F是卷积滤波器的数量
  • H,W是空间维度

假设输入被馈送到具有 1x1 过滤器、零填充和步幅 1 的卷积层。那么这个 1x1 卷积层的输出将具有形状F1(N,F1,H,W)

所以可以使用 1x1 conv 过滤器来改变过滤器空间中的维度。如果那么我们正在增加维度,如果我们正在减少维度,在过滤器维度中。F1>FF1<F

事实上,在 Google Inception 文章Going Deeper with Convolutions中,他们说(粗体字是我的,不是原作者的):

上述模块的一个大问题,至少在这种幼稚的形式中,是即使是适度数量的 5x5 卷积,在具有大量过滤器的卷积层之上也可能非常昂贵。

这导致了所提出架构的第二个想法:明智地应用降维和投影,否则计算需求会增加太多。这是基于嵌入的成功:即使是低维嵌入也可能包含有关相对较大的图像块的大量信息……在昂贵的 3x3 和 5x5 卷积之前,使用 1x1 卷积来计算缩减。除了用作还原外,它们还包括使用整流线性激活,这使得它们具有双重用途。

所以在 Inception 架构中,我们使用 1x1 卷积滤波器来降低滤波器维度上的维度。正如我上面所解释的,这些 1x1 卷积层通常可以用来改变过滤器空间的维度(增加或减少),在 Inception 架构中,我们看到这些 1x1 过滤器在降维方面的效果如何,明确地在过滤器维度空间中,而不是空间维度空间。

或许还有其他对 1x1 conv 过滤器的解释,但我更喜欢这种解释,尤其是在 Google Inception 架构的上下文中。

1x1 卷积只是将输入像素及其所有通道映射到输出像素,而不查看其周围的任何东西。它通常用于减少深度通道的数量,因为将具有极大深度的体积相乘通常非常慢。

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

底部的速度慢约 3.7 倍。

从理论上讲,神经网络可以“选择”使用哪个输入“颜色”来查看,而不是蛮力乘以一切。

我不了解 1x1 卷积的主要原因是因为我不了解卷积的真正工作原理——关键因素是计算多个通道/滤波器的卷积是如何工作的。为了理解这一点,我发现这个答案也很有用:any

https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work

特别是,Type 2.2 是那里卷积的正确描述。

另一个有用的答案:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

这个答案解释了您如何为每个输入/输出通道组合使用单独的过滤器。在计算每一个之后,结果在输入通道轴上求和,并留下输出通道数量的值。

这是我发现的一个视频,它帮助我了解了 1x1 卷积的工作原理。

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

以下是我从中得到的主要内容:

  • x的先前卷积但是如果在最后一层卷积中有个过滤器,你会得到一个形状的矩阵。1x1 卷积实际上是一个大小为的向量,它对整个图像进行卷积,创建一个 x输出滤波器。如果您有 1x1 卷积,则所有 1x1 卷积的输出为 sizemnf1(m,n,f1)f1mnf2(m,n,f2)
  • 因此,假设的 1x1 卷积可以看作是通过过滤器。它让网络训练如何最有效地减少维度。f2<f1f1f2

我将尝试用插图更直观、更简短地解释!

一个1*1 的转化率(又名Network-in-Network)?

假设您输入的是()。您可以(1*1* ) 视为单个神经元(一个完全连接的网络- 即为什么Network-in-Network),它在输入将它们与 (1*1* ) 相乘,然后相加,然后采用 ReLu 和输出 ( ),如果您有多个过滤器 ( ),那么输出将是 ()。nHnWncprevncprevncprevncprevnHnWncnHnWnC

因此,您可以使用池化层来减少空间维度(),并且可以使用 1*1 conv 来减少(即通道数),从而节省大量计算。例如nHnWncprev

在此处输入图像描述

因此,带走

  • 您可以使用 1x1 卷积层来减少但不能nCnHnW

  • 您可以使用池化层来减少nHnWnC

换句话说, 在此处输入图像描述

  • 你在做什么使用 1*1 CONV 过滤器是什么?您基本上采用“1 * 1 * num_input_channel_of_featureMap”大小的权重和卷积(按元素*,后跟+)这个体积在大小为“W H num_input_channel_of_featureMap”的图像/特征映射上,你得到的是大小为“W * H”的输出。

  • 现在,您可以使用“1*1*num_input_channel_of_featureMap”这种类型的“#filters”数字,并获得音量“W H #filter”作为最终输出!

  • 更准确地说,您将“1 * 1”这样 32 个不同的权重(1 * 1 体积)与输入特征图中相同位置的一个切片相乘,然后是 ReLu 并生成一个对应的数字,被视为绿色像素!

  • 1*1 CONV 有助于缩小通道数量并节省某些网络中的计算(INCEPTIONS)。!

  • 但是,当然,如果你想保持通道数与输入特征图相同,那也没关系,1*1 CONV 所做的一件事就是简单地对其应用 ReLU 非线性,这允许它学习复杂的函数神经网络