4.2 卷积的计算过程#
在上一节内容中,我们详细介绍了卷积操作的核心理念与思想,并通过对比全连接操作与卷积操作在识别同一元素的不同方式,进一步介绍了卷积操作的核心思想。但这仅仅只是对卷积操作有了一个总体的认识,其中仍有许多细节的地方没有进行介绍。例如:什么是多卷积核卷积?卷积操作具体是怎么计算的?什么是深度卷积?哪些场景下可以运用卷积操作,仅仅只是图片吗?因此,在接下来的这节内容中,我们将主要从这4个方面来继续卷积操作的工作原理。
4.2.1 多卷积核#
1. 卷积
从本质上讲,卷积的计算过程其实同全连接一样也是各个神经元之间的线性组合并进行非线性变换,只是卷积操作在进行线性组合时选择的是特定位置上的神经元。下面我们首先通过几张示意图来直观感受一下整个卷积的过程,如图4-12所示。
如图4-12所示从左往右为整个卷积的计算过程,可以发现卷积操作其实就是每次取一个特定大小的矩阵$F$($5\times5$矩阵中的的阴影部分),然后将其对输入$X$(图中$5\times5$的矩阵)依次扫描并进行内积的运算过程。在图4-12中,阴影部分每移动一个位置就会计算得到一个卷积值($3\times3$矩阵中的阴影部分),当$F$扫描完成后就得到了整个卷积后的结果$Y$(矩阵)。
同时,我们将这个特定大小的矩阵$F$称为卷积核(Convolutional Kernel)或过滤器(Filter)亦或是探测器(Detector),它可以是一个也可以是多个,并且卷积核也可以是一个矩形;将卷积后的结果$Y$称为特征图(Feature Map),并且每一个卷积核卷积后都会得到一个对应的特征图;最后,对于输入$X$的形状,都会用3个维度来进行表示,即宽(Width)、高(High)和通道(Channel),例如图4-12中输入$X$的形状为[5,5,1]。
2. 多卷积核
在上面我们提到了卷积核的个数还可以是多个,那我们为什么需要多个卷积核进行卷积呢?在4.1节内容中我们介绍到,对于一个卷积核可以认为是具有识别某一类元素(特征)的能力,而对于一些复杂结构的数据来说仅仅只是通过一类特征来进行辨识往往是不够的,因此,通常来说我们都会通过多个不同的卷积核来对输入进行特征提取得到多个特征图,然再输入到后续的网络中进行后续任务。
如图4-13所示,左边为原始的输入图片,右边为通过两个卷积核卷积之后得到的特征图,可以发现对于同一个输入通过两个不同的卷积核对其进行卷积特征提取,最后便能得到两个不同的特征图。从图4-13右侧的特征图可以发现,上面的特征图在锐利度方面明显会强于下面的特征图,而这这也是使用多卷积核进行卷积的意义,探测到多种特征属性以有利于后续的下游任务。
4.2.2 卷积的计算过程#
到此为止, 对于卷积的原理和意义就算是交待完了,并且通过上面这些图示我们也有了更为直观的了解。但所谓数无形时少直觉,形少数时难入微,因此,下面我们就以单通道(灰度图)和三通道的输入来实际示例一下整个卷积的计算过程。
1. 单通道单卷积核
如图4-14所示,现在有一张形状为[5,5,1]的灰度图,我们需要用图4-14右边的卷积核对其进行卷积处理,同时再考虑到偏置的作用。那么其计算过程是怎么样的呢?

如图4-15所示,右边为卷积后的特征图,左边为卷积核对输入图片左上方进行卷积时的示意图,其计算过程变为卷积核与对应输入位置上的内积和再加上偏置。
因此,对于这个部分的计算过程有
$$ \underbrace{1\cdot0+2\cdot0+0\cdot1-1\cdot0+1\cdot1+0\cdot1+2\cdot1-1\cdot0-2\cdot1}_{\text{kernel}}\underbrace{\;\;+1\;\;}_{\text{bias}}=2\tag{4-1} $$同理,对于最右下角部分的卷积计算过程为
因此,对于最后卷积的结果我们得到的将是一个如图4-16右侧所示形状为[3,3,1]的特征图。到此我们就把单通道单卷积的计算过程介绍完了。下面再来看单通道多卷积核的例子。
2. 单通道多卷积核
如图4-17所示,左边依旧为输入矩阵,现在要用右边所示的两个卷积核对其进行卷积处理。

同时可以看出,在图4-17中右边的第1个卷积核就是图4-14里的卷积核,因此其计算结果同图4-16中的计算结果。对于旁边的卷积核,其计算过程如图4-18所示。

从图4-18可以看出,其计算过程与图4-15中的计算过程并无差异。最后我们便能得到如图4-19右侧所示形状为[3,3,2]的卷积特征图,其中2表示两个特征通道。

到此,对于单通道的卷积计算过程就介绍完了。但通常情况下,我们遇到更多的是对多通道输入进行卷积处理,例如包含有RGB三个通道的彩色图片等。接下来,我们就开始介绍多通道的卷积计算过程。
3. 多通道单卷积核
对于多通道的卷积过程,总体上还是还是同之前的一样,都是每次选取特定位置上的神经元进行卷积,然后依次移动直到卷积结束。下面先来看看多通道单卷积核的计算过程。

如图4-20所示,左边为包含有三个通道的输入,右边为一个卷积核和一个偏置。同时,需要强调的是图4-20右侧仅仅只是一个卷积核,而不是3个,不少读者会初学时会产生误解。这是因为输入是三个通道,所以在进行卷积的时候对应的每一个卷积核都必须要有三个通道才能进行卷积。下面我们就来看看具体的计算过程。
如图4-21所示,右边为卷积后的特征图,左边为一个三通道的卷积核对输入图片的左上方进行卷积时的示意图。因此,对于这个部分的计算过程有
$$ \begin{aligned} &\underbrace{(0\cdot2+2\cdot0+0\cdot0+0\cdot1+2\cdot0+0\cdot1+2\cdot0+1\cdot3+2\cdot0)}_{\text{channel 1}}\\ +& \underbrace{(0\cdot1+0\cdot0+0\cdot1+1\cdot0+0\cdot0+0\cdot0+1\cdot1+0\cdot1+0\cdot1)}_{\text{channel 2}}\\ +& \underbrace{(1\cdot0+1\cdot0+0\cdot1+0\cdot1+1\cdot1+0\cdot1+0\cdot1+1\cdot1+1\cdot0)}_{\text{channel 3}}\\ +&\underbrace{\;\;1\;\;}_{\text{bias}}=3+1+2+1=7 \end{aligned}\tag{4-3} $$同理,对于其它部分的卷积计算过程也类似于上述计算步骤。由此我们便能得到如图4-21右边所示卷积后的形状为[3,3,1]的特征图。
4. 多通道多卷积核
在介绍完多通道单卷积核的计算过程后,我们再来看看多通道多卷积核的计算过程。