机器学习实践课程:图像分类

卷积神经网络简介

卷积神经网络 (CNN) 可用于逐步提取更高级别的映像内容表示形式,这一发现突破了图像分类模型的构建。CNN 不是将数据预处理为提取纹理和形状等特征,而是只将图片的原始像素数据作为输入,并“学习”如何提取这些特征,并最终推断它们构成的对象。

首先,CNN 会接收输入特征图:一个三维矩阵,其中前两个维度的大小对应于图片的长度和宽度(以像素为单位)。第三个维度的大小为 3(对应于彩色图片的 3 个通道:红色、绿色和蓝色)。CNN 包含一个模块堆栈,其中每个模块都执行三个操作。

1. 卷积

卷积会提取输入特征图的图块,然后对其应用过滤器以计算新特征,从而生成输出特征图或卷积特征(其大小和深度可能与输入特征图的大小和深度不同)。卷积由两个参数定义:

  • 所提取图块的大小(通常为 3x3 或 5x5 像素)。
  • 输出特征图的深度,对应于应用的过滤器数量。

在卷积期间,滤波器(矩阵大小与图块大小相同)实际上会在输入和特征图的网格上水平和垂直滑动,一次一个像素,提取每个相应的图块(参见图 3)。

4x4 特征图上的 3x3 卷积 图 3. 在 5x5 输入特征图(也深度为 1)上执行深度 1 的 3x3 卷积。可以从 5x5 特征图中提取 9 个 3x3 位置,因此这个卷积会生成 3x3 输出特征图。

对于每个过滤器-图块对,CNN 会对过滤器矩阵和图块矩阵执行元素级乘法,然后对所得矩阵的所有元素求和,以得出单个值。每个过滤器-图块对的每个结果值随后都会输出到卷积特征矩阵中(参见图 4a 和 4b)

5x5 特征图和 3x3 卷积 图 4a. 左图:5x5 输入特征图(深度为 1)。右图:3x3 卷积(深度为 1)。

图 4b. 左图:在 5x5 输入特征图上执行 3x3 卷积。右图:生成的卷积特征。点击输出特征图中的值,即可查看其计算方式。

在训练期间,CNN 会“学习”过滤器矩阵的最佳值,使其可以从输入特征图中提取有意义的特征(纹理、边缘、形状)。随着应用于输入的过滤器(输出特征图深度)数量的增加,CNN 可以提取的特征数量也会增加。不过,权衡在于过滤器构成了 CNN 消耗的大部分资源,因此,随着过滤器的增加,训练时间也会增加。此外,添加到网络中的每个过滤器提供的增量值都比上一个过滤器低,因此工程师们的目标是构建使用所需过滤器数量下限的网络,以提取准确图像分类所需的特征。

2. ReLU

每次执行卷积运算后,CNN 都会向卷积特征应用修正线性单元 (ReLU) 转换,以便在模型中引入非线性规律。ReLU 函数 \(F(x)=max(0,x)\)会针对 x > 0 的所有值返回 x,并且针对 x ≤ 0 的所有值返回 0。

3. 池化

ReLU 之后是一个池化步骤,即 CNN 对卷积特征进行下采样(以节省处理时间),从而减少特征图的维度数量,同时仍保留最关键的特征信息。此过程常用的算法称为最大池化

最大池化的运作方式与卷积类似。我们在特征图上滑动并提取指定大小的图块。对于每个图块,最大值都会输出到新的特征图,而所有其他值都会被舍弃。最大池化操作接受两个参数:

  • 最大池化过滤器的尺寸(通常为 2x2 像素)
  • 步长:各提取图块的距离(以像素为单位)。与卷积相比,过滤器在像素上逐一覆盖特征图,在最大池化中,步长决定了提取每个图块的位置。对于 2x2 过滤器,步长 2 指定了最大池化运算将从特征图中提取所有不重叠的 2x2 图块(参见图 5)。

使用 2x2 过滤器和步长 2 在 4x4 特征图上进行最大池化的动画

图 5. 左图:使用 2x2 过滤器和步长 2 在 4x4 特征图上执行最大池化运算。右图:最大池化运算的输出。请注意,生成的特征图现在是 2x2,仅保留每个图块的最大值。

全连接层

卷积神经网络的末尾是一个或多个全连接层(当两个层“完全连接”时,第一层中的每个节点都连接到第二层中的每个节点)。它们的任务是基于卷积提取的特征执行分类。通常,最终的全连接层包含一个 Softmax 激活函数,它会针对模型尝试预测的每个分类标签输出概率值(0 到 1)。

图 6 说明了卷积神经网络的端到端结构。

卷积神经网络的端到端图,显示了输入、两个卷积模块和两个用于分类的全连接层

图 6. 此处显示的 CNN 包含两个用于提取特征的卷积模块(卷积 + ReLU + 池化)和两个用于分类的全连接层。其他 CNN 可能包含更多或更少的卷积模块,以及更多或更少的全连接层。工程师经常进行实验,找出可为模型产生最佳结果的配置。