我也曾经有过这种困惑,只有经过一番探索才消除了疑虑。
使用单通道卷积和使用多通道卷积的区别 这就是我理解错误的地方。我将尝试解释这个差异。我不是专家,请您谅解。
使用单通道卷积的卷积操作
当我们考虑一个简单的灰度 32X32 图像和一个卷积操作时,在第一层中我们应用1个或多个卷积矩阵。
根据您的示例,每个维度为5X5的卷积矩阵都会产生一个28x28的矩阵作为输出。为什么是28X28?因为,假设步幅(stride)=1且填充(padding)=0,您可以在32-5+1=28个位置上滑动一个5像素正方形的窗口。
在这种情况下,每个卷积矩阵都有5X5=25个可训练权重 + 1个可训练偏置。您可以有任意多的卷积核。但是,每个核都将是二维的,并且每个核都会产生一个28X28的输出矩阵,然后将其馈送到MAXPOOL层。
使用多通道卷积的卷积操作
如果图像是一个RGB 32X32的图片呢?根据流行文献,应该将图像视为由3个通道组成,并对每个通道执行卷积操作。我必须承认,我匆忙得出了一些误导性的结论。我曾认为我们应该针对每个通道使用三个独立的5X5卷积矩阵。我错了。
当您有3个通道时,每个卷积矩阵的维度应为3X5X5——将其视为一个单元,其中包含3个叠放的5X5矩阵。因此,您有5x5x3=75个可训练权重 + 1个可训练偏置。
第二个卷积层中会发生什么?
在你的例子中,我发现将第一个CONV1+MAXPOOL1层产生的6个特征图视为6个通道更容易理解。因此,按照之前的RGB逻辑,我们在第二个CONV2层应用的任何卷积核都应该具有6X5X5的尺寸。为什么是6? 因为CONV1+MAXPOOL1产生了6个特征图。为什么是5x5? 在你的例子中,你选择了一个大小为5x5的窗口。理论上,我可以选择3x3,这种情况下,内核维度将是6X3X3。因此,在当前示例中,如果在CONV2层中有N2个卷积矩阵,则每个这些N2个内核都将是6X5X5的矩阵。在当前示例中,N2=16,将6通道X 14X14输入图像上的6X5X5内核卷积操作将产生N2个矩阵,每个矩阵的尺寸为10X10。为什么是10? 10=14-5+1(步长=1,填充=0)。
现在,你已经有了N2=16个矩阵,准备用于MAXPOOL2层。
参考文献:LeNet架构
http://deeplearning.net/tutorial/lenet.html
注意圆圈区域。你可以看到在第二个卷积层中,操作跨越了第一层产生的4个特征图。
参考文献:Andrew Ng讲座
参考文献:多通道卷积算法是什么样子的?
我发现另一个SFO问题很好地描述了这一点。 How a Convolutional Neural Net handles channels
请注意,在引用的示例中,3个通道中的信息被压缩成2维矩阵。这就是为什么来自CONV1+MAXPOOL1层的6个特征图似乎不再对第一个完全连接的层的尺寸产生影响的原因。
注意: 输入矩阵的通道数和每个滤波器的通道数必须匹配,才能执行逐元素乘法。
因此,第一次和第二次卷积之间的主要区别在于第一次卷积中输入矩阵的通道数为1
,因此我们将使用6
个滤波器,其中每个滤波器只有一个通道(矩阵的深度)。
对于第二次卷积,输入矩阵具有6个通道(特征图
),因此这个卷积的每个滤波器也必须有6个通道。例如:16个滤波器中的每个都将具有6@3x3
的形状。
6@3x3
形状的单个滤波器的卷积步骤的结果将是WxH(宽度,高度)形状的单个通道。应用所有16个滤波器(其中每个滤波器的形状为:6@3x3
),我们将得到16个通道,其中每个通道都是单个滤波器的卷积结果。