卷积操作是卷积神经网络(CNN)中的一种核心组件。要讲清楚卷积操作,我们只需要回答以下四个问题:什么是卷积核?卷积运算的规则是什么?padding是什么?stride是什么?
下面让我以图像处理为例子,为大家依次回答上面这几个问题。
一、什么是卷积核?
卷积核(Filter或Kernel)是一个小型的、可学习的权重矩阵,也常被称为特征检测器或过滤器。卷积核的尺寸(例如,3x3, 5x5等)是预先设定的,并且它的每个元素都有一个特定的数值。卷积核的数量通常对应于想要从输入数据中提取的特征种类数量。
【注】Filter一般是奇数,这样一来可以在计算不出现小数情况,二来能保证卷积核有一个中心点。
二、卷积运算的规则是什么?
(1)卷积操作的规则
卷积运算是指在卷积层中,卷积核在输入数据(如图像矩阵)上滑动,执行元素级别的乘法和求和操作。具体过程是,将卷积核的每个元素与输入数据上对应的元素相乘,然后将所有乘积相加以得到输出特征图上的一个值。这一过程在整个输入数据上重复进行,每次滑动一定的步长(stride),直至遍历整个输入数据。
(2)卷积操作的输出
卷积操作的输出被称为特征映射,它表示了输入数据在特定滤波器下的响应强度。每个特征映射展示了输入数据中与该滤波器对应的特征的存在和分布情况。
你仔细观察上面的动图,你会发现标准卷积操作有两个缺点:
- 输出图片的尺寸相比输入图片会变小。
- 边缘像素参与卷积次数相比中间像素明显少很多,这意味这卷积操作忽略了边缘信息。
(3)卷积操作中矩阵形状变化
怎么计算一个矩阵与的卷积核进行卷积后的输出矩阵的形状呢?(在没有填充,步幅为1时)可以通过下面这个公式来进行计算:
三、填充和步幅对卷积操作的影响
(1)Padding填充
Padding 是在输入数据(如图像)的边缘添加额外的像素层的过程。这些额外的像素通常被初始化为0,但也可以根据需要设置为其他值或进行镜像填充等。当填充一层的时候,我们写作
Padding操作的目的就是为了解决标准卷积带来的两个问题,padding有以下的优势:
-
保持输出尺寸:通过在输入的边缘添加足够的填充,可以确保卷积操作后的输出特征图尺寸与输入尺寸相同或接近,这对于构建更深的网络结构特别有用,因为它允许网络在不连续缩小特征图尺寸的情况下进行多层卷积。
-
保留边界信息:没有Padding的情况下,卷积操作可能会快速丢失图像边缘的信息,因为边缘像素参与的卷积次数较少。适当添加Padding可以帮助保留这些信息,提高对边缘特征的学习能力。
-
实现特定的对称性:在某些情况下,特定的Padding策略(如“same”填充,确保输出尺寸与输入相同)可以保持数据的某种对称性或周期性特征。
(2)Stride步幅
Stride 指的是卷积核在输入数据上滑动时的步长,即每次跳跃的像素数。
stride是控制卷积层输出特征图尺寸的另一个重要因素,这样做的好处是:
-
减少计算量和尺寸:当Stride大于1时,卷积核在输入数据上跳过某些位置,这样可以减少计算量,同时减小输出特征图的尺寸,从而增加模型的计算效率,有时也用于降低特征图的空间分辨率。
-
增加感受野:更大的Stride意味着每个输出特征单元覆盖的输入区域更大,这可以增加网络的感受野,使其能够捕捉到更广泛的上下文信息,但同时也可能导致一些细节信息的损失。
-
控制模型复杂度:通过调整Stride,可以在计算资源限制和模型性能之间找到平衡,较大的Stride可以简化模型,而较小的Stride可以增加模型的表达能力。
(3)引入padding和stride后卷积操作中的矩阵形状如何变化
当padding为,stride为时,一个矩阵与一个的卷积核之间进行卷积操作,得到的输出矩阵的形状大小是多少?计算方式如下:
如果上式的结果算出来不是整数的话,就用地板除法来处理。这样做可以理解为当卷积核过滤器超出边界时不进行该次卷积计算。
(4)两种常见的卷积操作策略
- Valid卷积(无填充卷积):在Valid卷积中,不对输入数据进行任何填充(Padding)。由于没有额外的填充,输出特征图的尺寸相比输入数据会减小。此策略常用于减少数据维度、提取更高级别的特征或者在特征检测的最后阶段。
- Same卷积(保持尺寸卷积):Same卷积的目标是在卷积操作后保持输出特征图的尺寸与输入数据相同,通过计算合适的Padding量(),可以确保输出特征图的尺寸与输入相同(在步长为1的情况下)当希望在不改变数据空间尺寸的前提下提取特征,或者在模型的中间层维持特征图尺寸以便于后续处理时,Same卷积是优选策略。这对于保持空间信息和便于定位任务(如对象检测)尤为重要。