通常在设计卷积网络结构时,卷积层后会跟着一个池化层。池化(Pooling)的操作类似于卷积,只是将滤波器与感受野之间的元素相乘改成了对感受野直接进行最大采样。简单来说,池化层是用来缩减模型大小,提高模型计算速度及提高所提取特征的鲁棒性。池化操作通常有两种,一种是常用的最大池化(Max Pooling),另一种是不常用的平均池化(Average Pooling)。池化操作过程也非常简单,假设池化层的输入为一个4*4的图像,这里用最大池化对其进行池化,执行最大池化的池化核是一个2*2的矩阵,执行过程就是将输入矩阵拆分为不同区域,对于2*2的输出而言,输出的每个元素都是其对应区域的最大元素值。最大池化如图4.7所示。
图4.7 最大池化
最大池化过程就像是应用了一个2*2的滤波器以步长为2进行区域最大化输出操作。这里可以这么理解:池化的参数就是滤波器的大小f和步长s,池化的效果就相当于对输入图像的高度和宽度进行缩小。值得注意的是,最大池化只是计算神经网络某一层的静态属性,中间并没有什么学习过程。
池化完成之后就是标准神经网络中的全连接层了。对于全连接层,本书前三讲深度神经网络中已有详细描述,在此不再赘述。总之,一个典型的卷积网络通常包括卷积层、池化层和全连接层。
CNN发展到如今,人们早已不满足常规的卷积方式设计,除此之外,针对三维图像的3D卷积、在图像分割中应用广泛的转置卷积、GoogLeNet中常用的1*1卷积、基于1*1卷积的深度可分离卷积、为扩大感受野而设计的空洞卷积等各种花式卷积方式不断地出现在各种CNN结构设计中,感兴趣的读者可以逐一深入了解。
本讲在介绍卷积神经网络发展历程的基础上,对卷积的基本过程进行了详细地描述,之后又介绍了卷积神经网络的另外两大组成部分——池化和全连接。一个典型的卷积网络结构设计通常包括卷积层、池化层和全连接层三个部分。本书第5讲将和大家继续深入讨论卷积神经网络的结构、训练等内容。
尝试在不使用深度学习框架的基础上利用Numpy实现CNN的反向传播过程。