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


105

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

我也看过Yann Lecun的这篇文章

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


另请参阅相关问题
gkcn

1
这是有关这些模块的博客文章,详细介绍了1x1卷积:hackathonprojects.wordpress.com/2016/09/25/…–
Tommy

1
简而言之,整个想法是减少3D体积中的通道数,从而加快计算速度。
onerhao

Answers:


112

假设我有一个conv层,输出一个形张量,其中:(N,F,H,W)

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

假设此输出通过 1x1滤波器,零填充和跨度1 馈入一个conv层,则此1x1 conv层的输出将具有形状。F1(N,F1,H,W)

因此1x1转换滤镜可用于更改滤镜空间中的尺寸。如果那么我们在过滤器维中增加维数;如果我们在过滤器维中减小维数。F1>FF1<F

确实,在Google Inception的文章“用卷积更深入”中,他们指出(粗体是我的,不是原始作者的):

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

这导致了所提出的体系结构的第二个想法:明智地在任何情况下如果计算需求会增加太多的地方进行尺寸缩减和投影。这是基于嵌入的成功:即使是低维的嵌入也可能包含有关相对较大图像补丁的许多信息... 1x1卷积用于计算代价高昂的3x3和5x5卷积之前的缩减量。除了用作减少量外,它们还包括使用整流线性激活,使其具有双重用途。

因此,在Inception架构中,我们使用1x1卷积滤波器来减少滤波器维数。如上文所述,这些1x1转换层通常可用于更改滤镜空间维数(增加或减小),在Inception体系结构中,我们看到了这些1x1滤镜对于降维效果如何,尤其是在滤镜维空间中,而不是空间维度空间。

也许还有其他1x1转换过滤器的解释,但是我更喜欢这种解释,尤其是在Google Inception体系结构的背景下。


3
是在实现5x5转换之前1x1转换将先前的过滤器尺寸压缩为1吗?
伦纳德·卢

1
@LeonardLoo每个1x1内核将过滤器维数减小为1,但是您可以在一个1x1卷积中包含多个内核,因此“过滤器”的数量可以任意选择。
法佐利尼'17

41

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

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

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

最底层的大约慢3.7倍。

从理论上讲,神经网络可以使用此功能“选择”要输入的“颜色”,而不用蛮力相乘。


18
我会说1x1不仅将一个像素映射到一个输出像素,还将所有输入像素通道折叠到一个像素。在第一行的示例中,有256个输入通道,并且64个1x1内核中的每个内核都将所有256个输入通道折叠为一个“像素”(实数)。结果是您现在具有64个通道,而不是具有相同空间尺寸的256个通道,这使4x4卷积在计算上比第二行示例中的便宜。
Fazzolini '17

好点,将更新帖子:)
免费的Debreuil '17

3
您从哪里得到的速度慢了3.7倍?
CMCDragonkai '18年

@CMCDragonkai假定计算成本与权数成正比。在后一种情况下,num_weights = in_depth x out_depth x kernel_size = 256x256x4x4。在第一种情况下,num_weights = 256x64x1x1+64x265x4x4=256x64x17。取比例得出256/17〜3.7。查看第9页的白皮书,以直观地了解数字权重与输入深度和输出深度之间的关系。arxiv.org/pdf/1603.07285.pdf
Nelson Dinh,

11

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

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

特别地,类型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

这是我从中得到的主要信息:

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

好的,这是到目前为止唯一可以正确解释1x1卷积实际上是的“点”乘积的地方(m,n,f1)
Red Floyd

3

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

一个1个* 1 CONV(又名网络网络)?

假设您输入的是(n_H,n_W,n_c_prev)。你可以认为(1 * 1 * n_c_prev)作为单个神经元(全连接网络 -也就是说,为什么N / W的N / W),其正在上(n_c_prev)数字输入与乘以他们(1 * 1 * n_c_prev ),然后添加然后取ReLu&输出(n_H,n_W),如果您有多个滤镜(n_c),则输出将是(n_H,n_W,n_C)。

因此,您可以使用池化层来减少空间尺寸(n_H,n_W),并可以使用1 * 1 conv来减少n_c_prev(即通道数),从而节省了大量计算量。例如

在此处输入图片说明

因此,带走

  • 您可以使用1x1卷积层来减少n_C,但不能减少n_H,n_W。

  • 您可以使用池化层来减少n_H,n_W和n_C。

换一种说法, 在此处输入图片说明

  • 您正在使用1 * 1 CONV滤镜做什么?您基本上将“ 1 * 1 * num_input_channel_of_featureMap”的大小权重并卷积(在elementwise *后加上+),将其卷在大小为“ W H num_input_channel_of_featureMap”的图像/特征图上,得到的结果是大小为“ W * H”的输出。

  • 现在,您可以使用此类“ 1 * 1 * num_input_channel_of_featureMap”的“ #filters”编号,并将卷“ W H #filter”作为最终输出!

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

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

  • 但是,当然,如果您想使通道数与输入要素图保持相同,那也很好,1 * 1 CONV所做的一件事就是简单地对其应用ReLU非线性,这使它可以学习复杂的函数。 NN


1

关于1x1过滤器降维的另一个想法:

以FCN中的4096x8x8 fc7层为例。如果下一层(称为fc8)是2048x8x8,且过滤器大小为1,会发生什么情况?fc7在网络内部非常深,它的4096个功能在语义上都很丰富,但是每个神经元(例如,输入图像为250x250x3)具有很大的接收范围。换句话说,如果神经元非常活跃,我们知道在其语义字段中的某个位置存在相应的特征。

以fc8中具有1x1滤镜的左上神经元为例。它仅在同一接受区域(图像的左上角)连接到所有4096个神经元/特征,每个区域都由一个特征激活。其中一些(还是500个)非常活跃。如果产生的神经元也非常活跃,则意味着它可能学会了识别该接受域中的1个或多个特征。当您对fc8中的最上层神经元执行2048次此操作后,其中的许多神经元(例如250个)将非常活跃,这意味着它们从fc7的同一感受野中“收集”了特征,并且很可能超过一。

如果您继续降低尺寸,则越来越少的神经元将从同一个感受野中学习越来越多的特征。并且由于空间参数8x8保持不变,因此我们不会更改每个神经元的“视图”,因此不会降低空间粗糙度。

您可能想看一下Long,Shelhamer和Darrel的“完全卷积网络”。


1
认为这是机构的另一个很好的直觉,但我将不得不回来了,因为我发现了尺寸的符号混淆,尤其是“你做了左最上这2048次后fc8中的神经元”。
WillC '18年

我不太清楚您要说的是什么,请您说清楚点吗?
Michael Heidelberg

0

卷积的数学运算意味着在所有可能的移位位置上计算两个(连续或离散)函数的乘积。

在二维(灰度级)图像中,通过滑动窗口操作执行卷积,其中窗口(二维卷积内核)是 ×矩阵。v×v

神经网络(包括卷积神经网络)的图像处理应用已在以下文献中进行了综述:Egmont-Petersen,D.de Ridder和H.Handels。用神经网络进行图像处理-综述模式识别,第1卷。35,第10号,第2279-2301页,2002年]。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.