先明白(k×k)卷积核是怎么发挥作用的
- 输入多通道特征图
假设输入的特征图有多个通道,这些特征图可以看作是形状为H×W×C的张量,其中:
- H是特征图的高
- W是特征图的宽
- C是特征图的通道数
例如,一个典型的卷积神经网络输入是3个通道的图像(RGB)
- 卷积核
卷积核是一个权重矩阵,与输入通道数有相同的深度,例如卷积核的大小为K×K×C,其中:
- K是卷积核的高度和宽度
- C是卷积核的通道数
每个卷积核对应一个输出的特征图
- 逐通道卷积计算
卷积核的每个通道和对应输入特征图的每个通道进行卷积计算。
- 卷积核的第 1 通道与输入特征图的第 1 通道进行卷积
- 卷积核的第 2 通道与输入特征图的第 2 通道进行卷积。
- 依次类推,卷积核的每个通道分别与对应的输入特征图通道进行操作。
在每个通道的卷积计算上,卷积核的窗口在特征图上滑动,卷积核与输入特征的对应位置做逐元素相乘,再将结果累加,产生一个数值。最后得到一个二维矩阵。
- 跨通道求和
逐通道卷积计算得到C个二维矩阵后,将这些矩阵进行逐元素求和,最后生成一个新的二维特征图。
换句话说,如果输入有C个通道,每个通道通过卷积会生成一个H×W的输出矩阵,所有这些输出矩阵在每个位置上相加,得到一个H×W的新特征图。 - 偏置与激活函数
在卷积的结果上,通常还会加上一个偏置,再通过激活函数(如 ReLU)来引入非线性。如果卷积核的输出通过 ReLU 激活函数,负值会被置为 0,增加网络的非线性表示能力。 - 输出新特征图
一个卷积核会生成一个新的特征图。如果有多个卷积核,就会产生多个新的特征图,输出特征图的维度变为H×W×C。
解释1×1卷积核发挥的作用
在理解K×K卷积核的作用后,我们便不难理解1×1卷积核的使用。
-
降维
当输入为6x6x32时,1×1卷积的形式为1x1x32,当只有一个卷积核时,输出特征图为6×6×1。此时便可以体会到1×1卷积的实质作用:降维。当1×1卷积核的个数小于输入通道时,就有降维的效果。 -
全连接
这里我用了别人的图 link,输入6×6×32的特征图,有一个1×1×32的卷积核,生成6×6×1的新特征图,可以把输入32通道同一位置的像素看做是32个神经元,卷积核32通道可以看做是32×1的权重矩阵,逐元素相乘求和生成新神经元的值。 -
增加非线性
1×1卷积核可以在保持feature map尺寸不变的前提下大幅增加非线性特性(利用卷积后接的非线性激活函数),把网络做的很deep。 -
跨通道信息交换
由前面的1,2点就能明白1×1卷积核,实现升维和降维的操作就是channels间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。
1×1卷积核是在channel维度上做线性组合,W和H上是共享权值和滑动窗口