卷积操作的起源
卷积是微积分里的一个术语,指卷积运算。在图像处理中,卷积和滤波有很多应用。下图是卷积操作,Input是输入图片的像素矩阵,kernel是卷积核,选取一个滑动窗口,大小和卷积核一样,滑动窗口和卷积核进行点乘,得到的和作为输出像素值。CNN网络里的卷积核类似图像处理的卷积核(滤波器),图像处理中的滤波器是事先定义好的,每个滤波器都有特定的功能(图像锐化、检测边缘等)。CNN网络利用神经网络的反向传播功能,通过损失函数来更新滤波器的值,使得滤波器能区分不同输入图像的共同点和不同点,对输入图片进行分类。
卷积层(Convolutional Layer)
举例来说,CNN网络在前向传播的时候,让每个滤波器(卷积核)都在输入数据的宽度和高度上滑动(更精确地说是卷积),然后计算整个滤波器和输入数据任一处的内积。当滤波器沿着输入数据的宽度和高度滑过后,滤波器与滑动窗口进行点乘,点乘结果经过激活函数(常用Relu)之后,会生成一个2维的激活图(activation map),激活图给出了在每个空间位置处滤波器的反应。网络会让滤波器学习到当它看到某些类型的视觉特征时就激活,具体的视觉特征可能是某些方位上的边界,或者在第一层上某些颜色的斑点,甚至可以是网络更高层上的蜂巢状或者车轮状图案。
卷积核直观上可以理解为具有学习功能的特征提取工具,提取目标物体的突出特征。
一般输入图像表示为(w x h x c)的矩阵,w和h表示输入图像的宽和高,c表示输入图像维度,如果是灰度图像,则c=1,如果是RGB图像,则c=3。在CNN网络里,输入图像一般有两种处理方式,一种是全转换为RGB图像,如果是灰度图像,则将二维矩阵(w x h)复制3次,变成(w x h x 3);另一种是全转换为二维的灰度图像,像素值在0~255之间。
卷积层参数
- 步长(stride):卷积核(滤波器)在输入数据上进行滑动时的间隔像素。如果滤波器的步长大于1,会使输出数据的尺寸小于输入数据。
- 零填充(zero-padding):用0填充输入数据的边缘,0填充可以使输出数据和输入数据尺寸相同。
- 感受野(receptive field):卷积核的空间尺寸,一般为3x3,5x5,7x7;感受野的尺寸(宽和高)是超参数,由用户自己定义,但是深度必须和输入数据的深度相等。注意:我们对待空间维度(宽和高)与深度维度是不同的:连接在空间(宽高)上是局部的,但是在深度上总是和输入数据的深度一致。
- 例1:假设输入数据体尺寸为[32x32x3](比如CIFAR-10的RGB图像),如果感受野(或滤波器尺寸)是5x5,那么卷积层中的每个神经元会有输入数据体中[5x5x3]区域的权重,共5x5x3=75个权重(还要加一个偏差参数)。注意这个连接在深度维度上的大小必须为3,和输入数据体的深度一致。
- 例2:假设输入数据体的尺寸是[16x16x20],感受野尺寸是3x3,那么卷积层中每个神经元和输入数据体就有3x3x20=180个连接。再次提示:在空间上连接是局部的(3x3),但是在深度上是和输入数据体一致的(20)。
- 输出通道数(channel):通道(channel)对输入数据是指数据的深度,比如RBG图像,channel是3;对输出数据是指卷积核的数量(不是深度,卷积核的深度与输入数据的深度保持一致),如下图,有 6×6×3 的图片样本,使用 3x3 尺寸的卷积核(filter)进行卷积操作,那么输入图片的 channels 为 3,而卷积核的深度为3(与输入图片的深度保持一致),所以卷积核是 3x3x3,如果只有1个卷积核,步长为1,不进行零填充。那么每