3.4 卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它利用卷积计算从带有拓扑结构的数据中提取有用的信息。它对图像和音频数据的处理效果最好。输入的图像经过一个卷积层时,会产生多个输出图像,它们被称为输出特征图,用于检测特征。初始的卷积层中的输出特征图可以学习检测基本特征,如边缘和颜色组成变换。
第二个卷积层可以检测更复杂的特征,如正方形、圆形或其他几何形状。神经网络的层数越深,卷积层可以学习的特征越复杂。例如,如果一个CNN可以将图像分类为鸡或鸭,那么神经网络底部的卷积层也许可以学会检测诸如头或腿之类的特征。
图3-14为一个全连接神经网络与卷积神经网络的结构对比图。
图3-14 全连接神经网络与卷积神经网络结构
图3-14的左图为全连接神经网络(平面),由输入层、隐藏层(1、2)、输出层组成。图3-14的右图为卷积神经网络(立体),由输入层、卷积层、池化层、全连接层组成。在卷积神经网络中有一个重要的概念——深度。下面对卷积神经网络的卷积层与池化层进行简单介绍。
1. 卷积层
卷积是指在原始的输入上进行特征提取。特征提取简言之就是在原始输入的一个小区域内进行特征的提取。如图3-15所示,左边方块是输入层,是尺寸为32×32的3通道图像。右边的小方块是filter(过滤器),尺寸为5×5,深度为3。
将输入层划分为多个区域,用filter这个固定尺寸助手,在输入层做运算,最终得到一个深度为1的特征图。图3-16表示使用多个filter分别进行卷积,最终得到多个特征图。
图3-17使用了6个filter分别进行卷积特征提取,最终得到6个特征图。将这6层叠在一起就得到了卷积层的输出结果。
图3-15 卷积层
图3-16 特征过程图
图3-17 特征提取
通常来说,一个卷积层后面跟着一个池化层,池化层汇总了由池的可接收字段决定邻域输出特征图的激活情况。下面来介绍池化层。
2. 池化层
如图3-18所示,池化就是对特征图进行特征压缩,池化也叫作下采样。选择原来某个区域的最大值(max)或平均值(mean)代替那个区域,整体就浓缩了。
图3-18 池化过程
图3-19演示了pooling(池化)操作,需要指定一个filter的尺寸、stride(步长)、pooling方式(max或mean)。
图3-19 pooling操作过程
需要注意的是,卷积操作减少了每一层需要学习的权重数量。例如,大小为224×224的输入图像输出到下一层的维度应该是224×224,那么对于一个传统的全连接神经网络,需要学习的权重个数为224×224×224×224。对于一个拥有同样输入和输出维度的卷积层,我们只需要学习滤波核函数的权值。因此,如果我们使用一个3×3的滤波核函数,则只需要学习9个权重,而不是224×224×224×224个权重。因为图像和音频的结构在局部空间中有高度的相关性,这个简化操作的效果很好。
输入图像会经过多层卷积和池化操作。随着网络层数的增加,特征图的个数也不断增加,同时图像的空间分辨率不断减小。在卷积-池化层的最后,特征图被传入全连接网络,最后是输出层。
输出单元依赖具体的任务。如果是回归问题,则输出单元的激活函数是线性的。如果是二元分类问题,则输出单元是Sigmoid类型的。对于多分类问题,输出单元是softmax类型的。
【例3-7】 CNN利用Python实现MNIST手写体识别。
运行程序,输出如下: