目录:
part I :来源
part II :应用
part III :作用(降维、升维、跨通道交互、增加非线性)
part IV :从fully-connected layers的角度理解
一、来源:[1312.4400] Network In Network (如果1×1卷积核接在普通的卷积层后面,配合激活函数,即可实现network in network的结构)
二、应用:GoogleNet中的Inception、ResNet中的残差模块
三、作用:
1、降维(减少参数)
例子1 : GoogleNet中的3a模块
输入的feature map是28×28×192
1×1卷积通道为64
3×3卷积通道为128
5×5卷积通道为32
左图卷积核参数:192 × (1×1×64) +192 × (3×3×128) + 192 × (5×5×32) = 387072
右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了:
192 × (1×1×64) +(192×1×1×96+ 96 × 3×3×128)+(192×1×1×16+16×5×5×32)= 157184
同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量(feature map尺寸指W、H是共享权值的sliding window,feature map 的数量就是channels)
左图feature map数量:64 + 128 + 32 + 192(pooling后feature map不变) = 416 (如果每个模块都这样,网络的输出会越来越大)
右图feature map数量:64 + 128 + 32 + 32(pooling后面加了通道为32的1×1卷积) = 256
GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)
例子2:ResNet中的残差模块
假设上一层的feature map是w*h*256,并且最后要输出的是256个feature map
左侧操作数:w*h*256*3*3*256 =589824*w*h
右侧操作数:w*h*256*1*1*64 + w*h*64*3*3*64 +w*h*64*1*1*256 = 69632*w*h,,左侧参数大概是右侧的8.5倍。(实现降维,减少参数)
2、升维(用最少的参数拓宽网络channal)
例子:上一个例子中,不仅在输入处有一个1*1卷积核,在输出处也有一个卷积核,3*3,64的卷积核的channel是64,只需添加一个1*1,256的卷积核,只用64*256个参数就能把网络channel从64拓宽四倍到256。
3、跨通道信息交互(channal 的变换)
例子:使用1*1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3*3,64channels的卷积核前面添加一个1*1,28channels的卷积核,就变成了3*3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。
注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window
4、增加非线性特性
1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。
备注:一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuro。
四、从fully-connected layers的角度来理解1*1卷积核
将其看成全连接层
左边6个神经元,分别是a1—a6,通过全连接之后变成5个,分别是b1—b5
左边6个神经元相当于输入特征里面的channels:6
右边5个神经元相当于1*1卷积之后的新的特征channels:5
左边 W*H*6 经过 1*1*5的卷积核就能实现全连接
In Convolutional Nets, there is no such thing as “fully-connected layers”. There are only convolution layers with 1x1 convolution kernels and a full connection table– Yann LeCun
参考: One by One [ 1 x 1 ] Convolution - counter-intuitively useful /1X1卷积核到底有什么作用呢?/关于1*1卷积核的理解/如何理解卷积神经网络中的1*1卷积
一对一[1×1]卷积 - 反直觉有用
每当我讨论或展示GoogleNet架构时,都会出现一个问题 -
“为什么1x1卷积?它不是多余的?
左:**与3x3大小的内核进行卷积**右:**与内核大小为1x1的卷积**
简单的答案
最简单的解释是1x1卷积导致维度简化。例如,200 x 200的图像有50个与20个1x1滤镜卷积的特征会导致200 x 200 x 20的大小。但是,再次,这是在卷积神经网络中做降维的最好方法吗?效率与效率有什么关系?
复杂的答案
功能转换
尽管1x1卷积是一种“特征池”技术,但它不仅仅是对特定层的各种通道/特征映射进行特征汇总。1x1卷积在过滤器空间中像坐标依赖变换一样起作用[ 1 ]。这里需要注意的是,这种转换是严格线性的,但在1x1卷积的大多数应用中,它成功的是像ReLU这样的非线性激活层。这种转换是通过(随机)梯度下降来学习的。但是一个重要的区别是,由于较小的内核大小(1x1),它会受到较少的过度拟合影响。
更深的网络
在这篇题为“ Network in Network”的文章中首先介绍了逐一卷积。在本文中,作者的目标是生成一个更深层的网络,而不是简单地堆叠更多层。它用一个较小的感知器层代替少数滤波器,混合了1x1和3x3的卷积。从某种意义上说,它可以被看作是“走得更远”而不是“更深”,但是应该指出的是,在机器学习术语中,“走向广泛”往往意味着在训练中增加更多数据。1x1(x F)卷积的组合在数学上等同于多层感知器。[ 2 ]。
初始模块
在GoogLeNet架构中,1x1卷积用于两个目的
- 如上所述,通过添加“网络在网络”中的“初始模块”来深化网络。
- 减少此“启动模块”内的尺寸。
- 通过在每次1x1卷积后立即生成ReLU来增加更多的非线性。
以下是论文的摘要,阐述了以上几点:
GoogLeNet中的1x1卷积
从右边的图像可以看出,1×1卷积(黄色)特别用于3×3和5×5卷积之前,以减小尺寸。应该注意的是,两步卷积运算总是可以合并为一个,但在这种情况下以及在大多数其他深度学习网络中,卷积之后是非线性激活,因此卷积不再是线性运算符并且不能组合。
在设计这样一个网络时,重要的是要注意,初始卷积核的大小应该大于1x1,以便具有能够捕获本地空间信息的接受域。根据NIN论文,1x1卷积等效于跨通道参数化汇聚层。从论文 - “这种级联跨通道参数池结构允许跨渠道信息的复杂和可学习的交互”。
跨渠道信息学习(级联1×1卷积)受到生物启发,因为人类视觉皮层具有调谐到不同方向的感受野(核心)。例如
不同的方向调整人类视觉皮层 来源的感受野分布
更多用途
汇集1x1卷积
- 1x1更高步长的卷积通过降低分辨率导致数据更多减少,同时损失非空间非常少的相关信息。
1x1与步幅卷积
- Yann LeCun相信他们是一样的 - 用1x1卷积代替完全连接的层,
在卷积网络中,没有“完全连接的层”这样的东西。只有1x1卷积核的卷积层和一个完整的连接表。- Yan LeCun
使用这个美妙的代码生成的卷积gif图像,1x1卷积和3x3卷积的更多图像可以在 这里找到