在上一讲中,我们详细探讨了卷积神经网络中的卷积操作,但仅限于二维图像,即单通道的灰度图像。然而,对于三维或更高维度的图像,卷积操作会变得更加复杂。
如果图像尺寸为 6×6×3,这里的“3”代表三个颜色通道,可以将其视为三个 6×6 的图像堆叠在一起。若要对这样的图像进行卷积操作,滤波器也必须是三维的,例如使用一个 3×3×3 的滤波器。需要注意的是,滤波器的通道数必须与输入图像的通道数相同。依据公式 ((n+2p-f)/s)+1,我们可以得知输出图像的尺寸为 4×4×1,这意味着经过一次卷积操作后,输出图像的通道数不再是 3 而是 1。
那么,如何理解三通道图像的卷积过程?对于单通道图像,我们已经知道卷积操作是将感受野与滤波器中的元素逐一相乘并求和。而对于三通道图像,可以将 3×3×3 的滤波器想象成一个三维立方体。将这个三维滤波器置于图像的左上角,让滤波器的 27 个数值分别乘以红、绿、蓝三个通道中的像素值。具体来说,滤波器的前 9 个数值乘以红色通道的像素值,中间 9 个数值乘以绿色通道的像素值,最后 9 个数值乘以蓝色通道的像素值。将这些乘积加总,即可得到输出像素的第一个值。
实际上,在实际图像处理中,单一滤波器往往无法充分提取复杂的图像特征。因此,通常会使用多个滤波器。例如,使用两个 3×3×3 的滤波器对上述图像进行卷积操作。每个滤波器都会产生一个 4×4 的输出,将这两个输出合并,最终形成一个 4×4×2 的输出,其中“2”表示滤波器的数量。
关于多通道卷积的另一种理解方式,可以将其类比为深度神经网络中的线性计算过程。具体来说,输入图像被视为向量 x,滤波器被视为权重矩阵 W,而偏差项为 b。卷积过程类似于标准神经网络的线性计算,随后应用激活函数进行处理。此外,卷积层的参数数量主要取决于滤波器的大小。假设滤波器大小为 f×f,通道数为 nc,则一个滤波器的参数数量为 f×f×nc。如果有 k 个滤波器,则总的参数数量为 f×f×nc×k。
接下来,我们来讨论卷积神经网络的另一个重要操作——池化。池化的主要目的是减少模型的规模,加快计算速度,并增强所提取特征的鲁棒性。常见的池化方法有两种:最大池化和平均池化。最大池化是最常用的一种,它通过选取每个区域的最大值来压缩图像。
假设池化层的输入是一个 4×4 的图像,我们使用一个 2×2 的最大池化滤波器进行处理。池化过程将输入图像分割成不同的区域,输出图像的每个元素都是其对应区域的最大值。这相当于使用一个 2×2 的滤波器以步长 2 进行操作。因此,池化的参数主要是滤波器的大小 f 和步长 s。最大池化的过程不会引入任何学习过程,只是简单地计算神经网络某一层的静态属性。
经过池化操作后,接下来便是全连接层。全连接层的细节已在深度神经网络中详细介绍,这里不再赘述。总体而言,典型的卷积神经网络通常包含卷积层、池化层和全连接层。
下一讲中,我们将尝试使用 numpy 库实现一个简单的卷积神经网络。