卷积神经网络

已完成

尽管可以对任何类型的机器学习使用深度学习模型,但它们对于处理由大量数值组成的数据(例如图像)特别有用。 处理图像的机器学习模型是计算机视觉这个人工智能领域的基础,并且近年来,深度学习技术推动这一领域取得了惊人的进展。

在这一领域,深度学习取得成功的核心在于一种称为“卷积神经网络”(或 CNN)的模型。 CNN 通常通过提取图像中的特征,然后将这些特征馈送到完全连接的神经网络来生成预测。 网络中的特征提取层具有以下效果:将特征数量从潜在的巨大单个像素值阵列减少到支持标签预测的较小功能集。

CNN 中的层

CNN 由多个层组成,每个层在提取特征或预测标签时执行特定的任务。

卷积层

主要的层类型之一是卷积层,它可以提取图像中的重要特征。 卷积层的工作原理是向图像应用筛选器。 筛选器由一个包含权重值矩阵的内核定义。

例如,可以按如下所示定义一个 3x3 的筛选器:

 1  -1   1
-1   0  -1
 1  -1   1

图像也仅仅是像素值的矩阵。 若要应用筛选器,请将其“叠加”到图像上,并计算筛选器内核下相应图像像素值的加权总和。 然后,将结果分配给与图像大小相同的新值矩阵中一个等效的 3x3 块的中心单元格。 例如,假设一张 6 x 6 的图像具有以下像素值:

255 255 255 255 255 255 
255 255 100 255 255 255
255 100 100 100 255 255
100 100 100 100 100 255
255 255 255 255 255 255
255 255 255 255 255 255

将筛选器应用于图像左上方的 3x3 块,如下所示:

255 255 255      1  -1   1    (255 x 1)+(255 x -1)+(255 x 1) +
255 255 100  x  -1   0  -1  = (255 x -1)+(255 x 0)+(100 x -1) +   = 155
255 100 100      1  -1   1    (255 x1 )+(100 x -1)+(100 x 1)

将结果分配给新矩阵中的相应像素值,如下所示:

 ?   ?   ?   ?   ?   ?  
 ?  155  ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?

现在,筛选器沿着(卷积)移动,通常使用的步骤大小为 1(即向右移动一个像素),并计算下一个像素的值

255 255 255      1  -1   1    (255 x 1)+(255 x -1)+(255 x 1) +
255 100 255  x  -1   0  -1  = (255 x -1)+(100 x 0)+(255 x -1) +   = -155
100 100 100      1  -1   1    (100 x1 )+(100 x -1)+(100 x 1)

现在,我们可以填写新矩阵的下一个值。

 ?   ?   ?   ?   ?   ?  
 ?  155 -155 ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?

此过程将重复进行,直到我们对图像所有的 3x3 块应用筛选器来生成如下所示的新的值矩阵:

?   ?   ?    ?    ?   ?
?  155 -155 155 -155  ?
? -155 310 -155  155  ?
?  310 155  310   0   ?
? -155 -155 -155  0   ?
?   ?   ?    ?    ?   ?

由于筛选器内核的大小,无法计算边缘像素的值;因此,我们通常只应用填充值(通常为 0):

0   0   0    0    0   0
0  155 -155 155 -155  0
0 -155 310 -155  155  0
0  310 155  310   0   0
0 -155 -155 -155  0   0
0   0   0    0    0   0

卷积的输出通常会传递到激活函数,该函数通常是一个修正线性单元 (ReLU) 函数,可确保将负值设置为 0:

0   0   0    0    0   0
0  155  0   155   0   0
0   0  310   0   155  0
0  310 155  310   0   0
0   0   0    0    0   0
0   0   0    0    0   0

生成的矩阵是特征值的特征图,可用于训练机器学习模型。

注意:特征图中的值可以大于像素的最大值 (255),因此,如果想要将特征图可视化为图像,需要将特征值规范化为介于 0 到 255 之间。

卷积过程如下面的动画所示。

A filter kernel is convolved across an image of a triangle, extracting features that emphasize the three edges and corners

  1. 图像传递到卷积层。 在本例中,图像是一个简单的几何形状。
  2. 该图像由值介于 0 到 255 的像素数组组成(对于彩色图像,这通常是一个三维数组,其中包含红色、绿色和蓝色通道的值)。
  3. 筛选器内核通常使用随机权重进行初始化(在本例中,我们选择值来突出显示筛选器可能对像素值造成的影响;但在实际的 CNN 中,初始权重通常是从随机的高斯分布生成的)。 此筛选器将用于从图像数据提取特征图。
  4. 筛选器对整个图像进行卷积,通过在每个位置应用权重总和乘以其对应的像素值来计算特征值。 此过程中应用了一个修正线性单元 (ReLU) 激活函数,以确保将负值设置为 0。
  5. 卷积后,特征图包含提取的特征值,这些值通常强调图像的关键视觉对象属性。 在本例中,特征图突出显示图像中三角形的边和角。

通常,卷积层会应用多个筛选器内核。 每个筛选器都生成不同的特征图,并且所有特征图都将传递到网络的下一层。

池化层

从图像中提取特征值后,将使用池化(或缩减像素采样)层来减少特征值的数量,同时保留提取的关键区分特征。

最常见的一种池化类型是最大池化,在最大池化中,筛选器应用于图像,并且只保留筛选器区域内的最大像素值。 例如,将 2x2 池化内核应用于图像的以下块会生成结果 155。

0   0
0  155

请注意,2x2 池化筛选器的作用是将值的数量从 4 减少到 1。

与卷积层一样,池化层的工作原理是将筛选器应用于整个特征图。 以下动画展示了一个图像映射的最大池化示例。

A filter kernel is convolved across an image of a triangle, extracting features that emphasize the three edges and corners, max pooling for an image map.

  1. 卷积层中筛选器提取的特征图包含特征值的数组。
  2. 池化内核用于减少特征值的数量。 在本例中,内核大小为 2x2,因此它将生成一个特征值数量为原数量四分之一的数组。
  3. 池化内核对特征图进行卷积,只保留每个位置中的最大像素值。

删除层

CNN 中最难解决的问题之一就是避免出现过度拟合。在过度拟合的情况下,生成的模型对训练数据表现良好,但不能很好地泛化到它没有接受过训练的新数据上。 一种可以用来减轻过拟合的技术是将训练过程随机消除(或“删除”)特征图的层包括在内。 这似乎有悖常理,但这是确保模型不会过度依赖训练图像的有效方法。

可用于减轻过度拟合的其他技术包括随机翻转、镜像或倾斜训练图像,以生成不同训练时期的数据。

平展层

使用卷积和池化层来提取图像中的突出特征后,生成的特征图是像素值的多维数组。 平展层用于将特征图平展为值向量,该向量可以用作完全连接层的输入。

完全连接层

通常,CNN 以一个完全连接的网络结束,在这个网络中,特征值通过一个或多个隐藏层传递到一个输入层,并在一个输出层中生成预测值。

基础的 CNN 结构可能如下所示:

A CNN consisting of a convolutional layer, a pooling layer, a dropping layer, a flattening layer, and a fully connected layer

  1. 图像送入卷积层中。 在本例中,有两个筛选器,因此每个图像会生成两个特征图。
  2. 特征图传递到池化层,其中 2x2 池化内核将减小特征图的大小。
  3. 删除层会随机删除某些特征图,以帮助防止过度拟合。
  4. 平展层利用剩余的特征图数组,并将它们平展为向量。
  5. 向量元素送入一个完全连接的网络,该网络将生成预测。 在本例中,网络是一个分类模型,可预测三个可能的图像类(三角形、正方形和圆圈)的概率。

训练 CNN 模型

与任何深度神经网络一样,CNN 的训练方式是在多个时期传递成批的训练数据,根据每个时期计算的损失调整权重和偏差值。 对于 CNN,调整后的权重的反向传播包括卷积层中使用的筛选器内核权重以及完全连接层中使用的权重。