卷积神经网络的直观解释

卷积神经网络(ConvNets或CNN)是一类神经网络,在图像识别和分类等领域非常有效。除了为机器人和自动驾驶汽车提供视力外,ConvNets还成功识别了面部,物体和交通标志等。

卷积神经网络的直观解释

图1

在上面的图1中,ConvNet能够识别场景,系统能够提示相关字幕(“a soccer player is kicking a soccer ball”),而图2展示了ConvNet用于识别日常物体、人类和动物的示例。最近,ConvNets在几种自然语言处理任务(如句子分类)中也很有效。

卷积神经网络的直观解释

图2

因此,ConvNets是当今大多数机器学习从业者的重要工具。然而,了解ConvNets并首次学会使用它们有时可能是一种令人生畏的经历。本文的主要目的是了解卷积神经网络如何在图像上工作。

LeNet架构(1990年代)

LeNet是最早推动深度学习领域的卷积神经网络之一。Yann LeCun的这项开创性工作在1988年以来的多次成功迭代之后被命名为LeNet5 。那时,LeNet架构主要用于字符识别任务,例如阅读邮政编码,数字等。

下面,我们将直观了解LeNet架构如何识别图像。近年来已经提出了几种新的架构,这些架构是对LeNet的改进,但它们都使用了LeNet的主要概念,如果您对前者有清楚的了解,则相对容易理解。

卷积神经网络的直观解释

图3:一个简单的ConvNet

图3中的卷积神经网络在结构上与原始LeNet类似,并将输入图像分为四类:狗,猫,船或鸟(原始LeNet主要用于字符识别任务)。从上图可以看出,在接收船只图像作为输入时,网络正确地为所有四个类别分配船只的最高概率(0.94)。输出层中所有概率的总和应为1。

ConvNet中有四个主要操作如上图3所示:

  1. 卷积
  2. 非线性(ReLU)
  3. 池化或子采样
  4. 分类(全连接层)

这些操作是每一个卷积神经网络的基本构件,所以理解这些操作是对ConvNets进行合理理解的重要一步。我们将尝试理解下面每个操作背后的直觉。

图像是像素值的矩阵

实质上,每个图像都可以表示为像素值矩阵。

卷积神经网络的直观解释

图4:每个图像都是像素值矩阵

通道是一个传统术语,用来指图像的某个部分。来自标准数码相机的图像将有三个通道——红、绿、蓝——你可以把它们想象成三个二维矩阵叠在一起(每个颜色对应一个),每个像素值在0到255之间。

另一方面,灰度图像只有一个通道。对于本文,我们将只考虑灰度图像,因此我们将有一个表示图像的二维矩阵。矩阵中每个像素的值范围从0到255 - 0表示黑色,255表示白色。

卷积步骤

ConvNets的名字来自“卷积”运算符。ConvNet的Convolution的主要目的是从输入图像中提取特征。卷积通过使用小的输入数据来学习图像特征,从而保持了像素之间的空间关系。我们不会在这里讨论卷积的数学细节,但会尝试理解它对图像的作用。

如上所述,每个图像都可以被视为像素值矩阵。考虑像素值仅为0和1的5 x 5图像(请注意,对于灰度图像,像素值范围为0到255,下面的绿色矩阵是像素值仅为0和1的特殊情况):

卷积神经网络的直观解释

另外,考虑另一个3 x 3矩阵,如下所示:

卷积神经网络的直观解释

然后,可以计算5 x 5图像和3 x 3矩阵的卷积,如下面图5中的动画所示:

卷积神经网络的直观解释

图5:卷积操作。输出矩阵称为卷积特征或特征映射

花一点时间来理解上面的计算是如何进行的。我们将橙色矩阵在原始图像(绿色)上滑动1个像素(也称为“stride”),对于每个位置,我们计算元素之间的乘法(两个矩阵之间),并添加乘法输出,得到最终的整数,它构成输出矩阵的一个元素(粉色)。请注意,3×3矩阵“看到”只有在每个步输入图像的一部分。

在CNN的术语,3×3矩阵被称为“filter”或“kernel”或“特征检测器”和滑动filter在图像形成的矩阵和计算点积称为“Convolved Feature”或“Activation Map”或“Feature Map”。重要的是要注意filter作为特征检测器从原始输入图像。

从上面的动画可以明显看出,不同的filter矩阵值会对相同的输入图像产生不同的Feature map。例如,考虑以下输入图像:

卷积神经网络的直观解释

在下表中,我们可以看到上面图像与不同filter卷积的影响。如图所示,我们可以通过在卷积运算之前更改filter矩阵的数值来执行边缘检测,锐化和模糊等操作- 这意味着不同的filter可以检测图像中的不同特征,例如边缘。

卷积神经网络的直观解释

理解Convolution操作的另一个好方法是查看下面图6中的动画:

卷积神经网络的直观解释

图6:卷积操作

filter (具有红色轮廓)在输入图像(卷积操作)上滑动以产生特征映射。另一个filter (带有绿色轮廓)在同一图像上的卷积给出了不同的特征映射,如图所示。值得注意的是,Convolution操作捕获原始图像中的局部依赖关系。还要注意这两个不同的filter 如何从同一原始图像生成不同的特征映射。请记住,上面的图像和两个filter 只是数字矩阵。

在实践中,CNN 在训练过程中自己学习这些filter 的值(尽管我们仍然需要在训练过程之前指定诸如filter 数量,filter 大小,网络结构等参数)。我们拥有的filter 数量越多,提取的图像特征就越多,我们的网络就越能识别出看不见的图像中的模式。

特征映射(卷积特征)的大小由三个参数控制,我们需要在执行卷积步骤之前确定它们:

  • 深度(Depth):深度对应于我们用于卷积运算的filter 数量。在图7所示的网络中,我们使用三个不同的filter 对原始船图像进行卷积,从而产生三个不同的特征映射,如图所示。您可以将这三个特征映射视为堆叠的2d矩阵,因此,特征映射的“Depth”将为3。

卷积神经网络的直观解释

图7

  • Stride: Stride是 我们在输入矩阵上滑动filter 矩阵的像素数。当步幅为1时,我们一次移动filter 一个像素。当步幅为2时,当我们滑动它们时,滤镜一次跳跃2个像素。拥有更大的步幅将产生更小的特征映射。
  • Zero-padding:有时,在边界周围用零填充输入矩阵很方便,这样我们就可以将filter应用于输入图像矩阵的边界元素。Zero-padding的一个很好的特性是它允许我们控制特征映射的大小。添加Zero-padding也称为宽卷积,不使用Zero-padding将是一个窄卷积。

非线性(ReLU)

在上面的图3中的每个卷积操作之后,已经使用了称为ReLU的附加操作。ReLU是一种非线性操作。其输出由下式给出:

卷积神经网络的直观解释

图8:ReLU操作

ReLU是一个元素智能操作(应用于像素)并将所有的负像素值替换为0。ReLU的目的是在ConvNet中引入非线性,因为我们希望ConvNet学习的大多数实际数据都是非线性的(卷积是一种线性运算——元素矩阵的乘法和加法,我们通过引入一个非线性函数来解释非线性,比如ReLU)。

可以从下面的图9清楚地理解ReLU操作。它显示了ReLU操作应用于上面图6中获得的一个特征映射。此处的输出特征映射也称为“Rectified”特征映射。

卷积神经网络的直观解释

图9:ReLU操作

也可以使用其他非线性函数(例如tanh或sigmoid)代替ReLU,但已发现ReLU在大多数情况下表现更好。

池化步骤

Spatial Pooling(也称为子采样或下采样)可降低每个特征映射的维度,但保留最重要的信息。Spatial Pooling可以是不同类型:Max, Average, Sum 等。

在Max Pooling的情况下,我们定义空间邻域(例如,2×2窗口)并从该窗口内的 rectified feature map 中获取最大元素。我们也可以取平均值(Average Pooling)或该窗口中所有元素的总和。在实践中,Max Pooling已被证明可以更好地工作。

图10示出了通过使用2×2窗口在rectified 特征映射(在卷积+ ReLU操作之后获得)上的最大池化操作的示例。

卷积神经网络的直观解释

图10:最大池化

我们将2 x 2窗口滑动2个cells(也称为“步幅”),并在每个区域中取最大值。如图10所示,这降低了我们的特征映射的维度。

在图11所示的网络中,池化操作分别应用于每个特征映射(请注意,由于这个原因,我们从三个输入图中获得三个输出图)。

卷积神经网络的直观解释

图11:应用于Rectified 特征映射的池化

图12显示了Pooling对我们在上面图9中的ReLU操作之后收到的Rectified特征映射的影响。

卷积神经网络的直观解释

图12:池化

Pooling的功能是逐步减小输入表示的空间大。

  • 使输入表示(特征维度)更小,更易于管理
  • 减少网络中的参数和计算次数,因此,控制过度拟合
  • 使网络对输入图像中的小变换,失真和平移不变(输入中的小失真不会改变Pooling的输出 - 因为我们采用局部邻域中的最大/平均值)。
  • 帮助我们达到我们图像的几乎尺度不变的表示(确切的术语是“equivariant”)。这是非常强大的,因为我们可以检测图像中的对象,无论它们位于何处。

到目前为止

卷积神经网络的直观解释

图13

到目前为止,我们已经看到了Convolution,ReLU和Pooling的工作原理。重要的是要理解这些层是任何CNN的基本构建块。如图13所示,我们有两组Convolution,ReLU和Pooling层 - 第二个Convolution层使用六个filters对第一个Pooling Layer的输出执行卷积,以产生总共六个特征映射。然后,ReLU将单独应用于所有这六个特征映射。然后,我们分别对六个Rectified 特征映射中的每一个执行最大池化操作。

这些层一起从图像中提取有用的特征,在我们的网络中引入非线性并减少特征维度,同时旨在使特征在某种程度上与缩放和平移相同。

第二个池化层的输出充当全连接层的输入。

全连接层

全连接层是传统的多层感知器,它在输出层使用softmax激活函数(也可以使用其他分类器,如SVM,但在本文中使用softmax)。“全连接”意味着前一层中的每个神经元都连接到下一层的每个神经元。如果您不熟悉多层感知器。

卷积和池化层的输出表示输入图像的高级特征。全连接层的目的是使用这些特征根据训练数据集将输入图像分类为各种类。例如,我们要执行的图像分类任务有四种可能的输出,如下面的图14所示(注意图14没有显示全连接层中节点之间的连接)

卷积神经网络的直观解释

图14:完全连接的层 - 每个节点连接到相邻层中的每个其他节点

除了分类之外,添加完连接层也是学习这些特征的非线性组合的廉价方式(通常)。卷积和池化层的大多数特征可能对分类任务有利,但这些特征的组合可能更好。

来自全连接层的输出概率之和为1.这通过使用Softmax作为全连接层的输出层中的激活函数来确保。Softmax函数采用任意实值得分的向量,并将其压缩为0到1之间的值的向量,该向量总和为1。

全部放在一起 - 使用反向传播进行训练

如上所述,卷积+池化层充当来自输入图像的特征提取器,而全连接层充当分类器。

请注意,在下面的图15中,由于输入图像是船,因此Boat类的目标概率为1,其他三个类的目标概率为0,即

  • 输入图像=船
  • 目标矢量= [0,0,1,0]

卷积神经网络的直观解释

图15:训练ConvNet

卷积网络的整体培训过程可概括如下:

  • 步骤1:我们用随机值初始化所有filter和参数/权重
  • 步骤2:网络将训练图像作为输入,经过正向传播步骤(卷积,ReLU和池化操作以及全连接层中的正向传播)并找到每个类的输出概率。
  • 可以说上面船形图的输出概率是[0.2,0.4,0.1,0.3]
  • 由于权重是为第一个训练示例随机分配的,因此输出概率也是随机的。
  • 步骤3:计算输出层的总误差(所有4个类的总和)
  • 总误差=Σ½(目标概率 - 输出概率)²
  • 步骤4:使用反向传播计算相对于网络中所有权重的误差梯度,并使用梯度下降来更新所有filter值/权重和参数值,以最小化输出误差。
  • 权重的调整与它们对总误差的贡献成比例。
  • 当再次输入相同的图像时,输出概率现在可能是[0.1,0.1,0.7,0.1],这更接近目标矢量[0,0,1,0]。
  • 这意味着网络已经学会通过调整其权重/filter来正确地对该特定图像进行分类,从而减少输出误差。
  • filter数量,filter大小,网络架构等参数都已在步骤1之前得到修复,并且在训练过程中不会发生变化 - 只更新filter矩阵和连接权重的值。
  • 步骤5:对训练集中的所有图像重复步骤2-4。

上述步骤训练 ConvNet - 这实际上意味着ConvNet的所有权重和参数现在都经过了优化,可以正确分类来自训练集的图像。

当一个新的图像被输入到ConvNet中时,网络将经历正向传播步骤并输出每个类的概率(对于新图像,输出概率使用已经优化的权重来计算以正确分类所有以前的训练样例)。如果我们的训练集足够大,网络将很好地推广到新图像并将它们分类为正确的类别。

  • 注1:上述步骤过于简单,避免了数学细节,以便为训练过程提供直观的信息。
  • 注2:在上面的例子中,我们使用了两组交替的Convolution和Pooling层。但请注意,这些操作可以在一个ConvNet中重复多次。事实上,今天一些表现最好的ConvNets拥有数十个Convolution和Pooling层!此外,在每个卷积层之后没有必要具有池化层。从下面的图16中可以看出,在进行Pooling操作之前,我们可以连续进行多次Convolution + ReLU操作。还要注意ConvNet的每一层如何在下面的图16中可视化。

卷积神经网络的直观解释

图16

可视化卷积神经网络

一般来说,我们拥有的卷积步骤越多,我们的网络就能学会识别越复杂的特征。例如,在图像分类中,ConvNet可以学习从第一层的原始像素中检测边缘,然后使用边缘在第二层中检测简单的形状,然后使用这些形状来阻止更高层次的特征,例如更高层中的面部形状。

Adam Harley创建了一个在手写数字MNIST数据库上训练的卷积神经网络的惊人可视化。

我们将在下面看到网络如何为输入'8'工作。请注意,图18中的可视化不会单独显示ReLU操作。

卷积神经网络的直观解释

图18:可视化在手写数字上训练的ConvNet

输入图像包含1024个像素(32×32图像),并且第一个卷积层(卷积层1)通过将六个唯一的5×5(步幅1)filter与输入图像卷积而形成。如图所示,使用六个不同的filters产生深度为六的特征映射。

卷积层1之后是池化层1,它在卷积层1中的六个特征映射上分别进行2×2最大池化(步长2)。您可以将鼠标指针移动到池化层中的任何像素上并观察2 x它在前一个卷积层中形成2个网格(如图19所示)。您会注意到2 x 2网格中具有最大值(最亮的一个)的像素使其成为Pooling层。

卷积神经网络的直观解释

图19:可视化池操作

池化层1之后是16个5×5(步长1)卷积filters ,它们执行卷积运算。接下来是Pooling Layer 2,它执行2×2 max pooling(步幅为2)。这两层使用与上述相同的概念。

然后我们有三个完全连接(FC)层。有:

  • 第一个FC层中有120个神经元
  • 第二个FC层中有100个神经元
  • 第三个FC层中的10个神经元对应于10个数字 - 也称为输出层

请注意,在图20中,输出层中的10个节点中的每个节点都连接到第2个全连接层中的所有100个节点(因此名称为“全连接”)。

另外,请注意输出层中唯一的明亮节点如何对应于'8' - 这意味着网络正确地对我们的手写数字进行分类(较亮的节点表示其输出较高,即8在所有其他数字中的概率最高) )。

卷积神经网络的直观解释

图20:可视化Filly连接的图层

其他ConvNet架构

自20世纪90年代初以来,卷积神经网络就已存在。我们讨论了上面的LeNet,它 是最早的卷积神经网络之一。其他一些有影响力的架构列在下面

  • LeNet(20世纪90年代):本文已经介绍过。
  • 20世纪90年代至2012年:从20世纪90年代末到2010年初,卷积神经网络正在孵化。随着越来越多的数据和计算能力的出现,卷积神经网络可以解决的任务变得越来越有趣。
  • AlexNet(2012) - 2012年,Alex Krizhevsky(以及其他人)发布了AlexNet,它是LeNet的更深和更广泛的版本,并在2012年大幅度赢得了困难的ImageNet大规模视觉识别挑战赛(ILSVRC)。它是一个关于以前的方法的重大突破和当前CNN的广泛应用可以归因于这项工作。
  • ZF Net(2013) - 2013 年ILSVRC冠军是来自Matthew Zeiler和Rob Fergus的卷积网络。它被称为ZFNet(Zeiler&Fergus Net的简称)。通过调整架构超参数,这是对AlexNet的改进。
  • GoogLeNet(2014) - 2014年 ILSVRC获奖者是Szegedy等人的卷积网络。来自谷歌。它的主要贡献是开发了一个初始模块,它大大减少了网络中的参数数量(4M,与AlexNet相比,60M)。
  • VGGNet(2014年) - 2014年ILSVRC 的亚军是被称为VGGNet的网络。它的主要贡献在于表明网络的深度(层数)是良好性能的关键组成部分。
  • ResNets(2015) -由Kaiming He(和其他人)开发的残余网络是ILSVRC 2015的获胜者.ResNets目前是迄今为止最先进的卷积神经网络模型,是在实践中使用ConvNets的默认选择(截至2016年5月) )。
  • DenseNet(2016年8月) - 最近由Gao Huang(和其他人)发布,密集连接的卷积网络使每一层以前馈方式直接连接到每个其他层。事实证明,DenseNet在五项极具竞争力的物体识别基准测试任务中,比先前最先进的架构获得了显着的改进。

结论

在这篇文章中,我试图用简单的术语解释卷积神经网络背后的主要概念。希望这篇文章给你一些关于它们如何工作的直觉。

相关推荐