机器学习笔记 - 卷积神经网络简介

卷积神经网络 (CNN) 可用于逐步提取越来越高级别的图像内容表示结果,这一发现标志着图像分类模型的构建取得了重大突破。CNN 不会通过预处理数据得出纹理和形状等特征,而是仅将图像的原始像素数据用作输入,然后“学习”如何提取这些特征,最终推断出这些特征构成的对象。

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

1. 卷积

卷积会提取输入特征图的图块,并向这些图块应用过滤器以计算新特征,生成输出特征图(也称为“卷积特征”,大小和深度可能与输入特征图的不同)。卷积由以下两个参数定义:

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

在进行卷积期间,过滤器(大小与图块大小相同的矩阵)会有效地在输入特征图的网格上沿水平和垂直方向滑动,一次移动一个像素,从而提取每个对应的图块(参见图 3)。

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

在图 3 中,输出特征图 (3x3) 比输入特征图 (5x5) 小。如果您希望输出特征图的大小与输入特征图相同,则可以向输入特征图的每一侧添加内边距(全部采用零值的空白行/列),生成一个具有 5x5 个可能的位置来提取 3x3 图块的 7x7 矩阵。

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

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

在训练期间,CNN 会“学习”过滤器矩阵的最优值,以便能够从输入特征图中提取有意义的特征(纹理、边缘、形状)。随着应用于输入特征图的过滤器数量(输出特征图的深度)不断增加,CNN 可以提取的特征数量也会增加。但需要做出权衡的地方是,过滤器构成了 CNN 要使用的大部分资源,因此,添加的过滤器越多,训练时间越长。此外,添加到网络的每个过滤器带来的增量价值都比上一个过滤器少,因此,工程师希望构建这样一种网络:尽量使用最少的过滤器提取出正确分类图像所需的必要特征。

2. ReLU

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

ReLU 在各种神经网络中用作激活函数;有关更多背景信息,请参阅机器学习速成课程中的神经网络简介部分。

3. 池化

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

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

  • 最大池化过滤器的大小(通常为 2x2 像素)
  • 步长:各提取图块间隔的距离(以像素为单位)。最大池化与卷积不同:在执行卷积期间,过滤器在特征图上逐个像素滑动,而在最大池化过程中,步长会确定每个图块的提取位置。对于 2x2 过滤器,距离为 2 的步长表示最大池化运算将从特征图中提取所有非重叠 2x2 图块(参见图 5)。

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

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

全连接层

卷积神经网络的末端是一个或多个全连接层(当两个层“完全连接”时,第一层中的每个节点都与第二层中的每个节点相连)。全连接层的作用是根据卷积提取的特征进行分类。通常,最后的全连接层会包含一个 softmax 激活函数,该函数会针对模型尝试预测的每个分类标签输出一个概率值(范围为:0-1)。

图 6 展示了卷积神经网络的端到端结构。

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

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/110733348
今日推荐