卷积神经网络的直观解释

什么是卷积神经网络,为什么它们很重要?

卷积神经网络(ConvNetsCNN)是神经网络的一个类别,在图像识别和分类等领域已被证明非常有效。除了机器人和自驾车的视觉驱动之外,ConvNets已经成功地识别了面部,物体和交通标志。

屏幕截图2017-05-28 at 11.41.55 PM.png

图1:源[1]

在上图1中,ConvNet能够识别场景,系统能够建议相关字幕(“足球运动员正在踢足球”),而图2显示了ConvNets用于识别日常物体,人类和动物。最近,ConvNets在几种自然语言处理任务(例如句子分类)中也是有效的。

屏幕截图2016-08-07 at 4.17.11 PM.png

图2:源[2]

因此,ConvNets是当今大多数机器学习从业者的重要工具。然而,了解ConvNets和学习首次使用它们有时可能是一个令人恐惧的体验。这个博文的主要目的是开发一个对卷积神经网络如何在图像上工作的理解。

如果你是一般的神经网络新手,我会推荐阅读这篇关于多层感知器的简短教程以了解它们的工作原理,然后再继续。多层感知器在这篇文章中被称为“完全连接的层”。

LeNet架构(20世纪90年代)

LeNet是第一个卷积神经网络之一,有助于推动深度学习领域。 自1988年以来,Yann LeCun的这项开创性工作被评为LeNet5之后的许多成功迭代[3]。当时LeNet架构主要用于字符识别任务,如阅读邮政编码,数字等。

下面,我们将展开LeNet架构如何学习识别图像的直觉。近年来提出了几种新的架构,即LeNet的改进,但是他们都使用LeNet的主要概念,如果您对前者有一个清晰的了解,那么相对来说更容易理解。

屏幕截图2016-08-07在4.59.29 PM.png

图3:简单的ConvNet。来源[5]

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

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

  1. 卷积
  2. 非线性度(ReLU)
  3. 集合或子抽样
  4. 分类(完全连接层)

这些操作是每个卷积神经网络的基本构建块,因此了解这些工作是如何发展ConvNets的良好理解的重要一步。我们将尝试了解下面这些操作背后的直觉。

图像是像素值的矩阵

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

8 gif.gif

图4:每个图像是像素值的矩阵。来源[ 6 ]

通道是用于指代图像的某个分量的常规术语。来自标准数码相机的图像将有三个通道 - 红色,绿色和蓝色 - 您可以将其中的三个2d矩阵(每种颜色一个)堆叠起来,每个像素的像素值范围为0到255。

灰度图像,另一方面,只有一个信道。为了这个帖子的目的,我们只会考虑灰度图像,所以我们将有一个单一的2d矩阵表示一个图像。矩阵中每个像素的值范围为0到255 - 零表示黑色,255表示白色。

卷积步骤

ConvNets从“卷积”运算符中导出其名称ConvNet的主要目的是从输入图像中提取特征。卷积通过使用小平方的输入数据学习图像特征来保持像素之间的空间关系。我们不会在这里介绍卷积的数学细节,但会尝试了解它对图像的有效性。

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

屏幕截图2016-07-24 at 11.25.13 PM

另外,考虑另外3×3的矩阵,如下所示:

屏幕截图2016-07-24 at 11.25.24 PM

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

图5:卷积运算。输出矩阵称为卷积特征或特征图。来源[ 7 ]

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

在CNN术语中,3×3矩阵称为“过滤器”或“内核”或“特征检测器”,通过将图像上的滤镜滑动并计算点积形成的矩阵称为“卷积特征”或“激活地图”或“功能地图”重要的是要注意,滤波器作为来自原始输入图像的特征检测器。

从上面的动画可以看出,滤波器矩阵的不同值将为相同的输入图像产生不同的特征图。例如,考虑以下输入图像:

111.png

在下表中,我们可以看到上述图像与不同滤镜的卷积效果。如图所示,我们可以通过在卷积运算之前更改滤波器矩阵的数值来执行边缘检测,锐化和模糊等操作[8] - 这意味着不同的滤波器可以检测图像中的不同特征,例如边缘,曲线等。更多这样的例子可以在这里的8.2.4节中找到

屏幕截图2016-08-05 at 11.03.00 PM.png

了解卷积操作的另一个好方法是通过查看下面图6的动画

giphy.gif

图6:卷积操作。来源[ 9 ]

一个过滤器(具有红色轮廓)在输入图像上滑动(卷积运算)以产生一个特征图。另一个滤镜(带有绿色轮廓)在同一图像上的卷积给出了不同的特征图,如图所示。重要的是要注意,卷积运算捕获原始图像中的本地依赖关系。还要注意这两个不同滤镜如何从相同的原始图像中生成不同的特征图。记住,上面的图像和上面的两个过滤器只是数字矩阵,我们在上面讨论过。

在实践中,CNN的学习训练过程中对自己的这些过滤器的值(虽然我们还需要指定参数,如过滤器数量过滤器大小网络架构的训练过程之前等)。我们拥有的滤镜数量越多,图像特征越多,网络变得越来越难以识别图像中的图像。

特征图(卷积特征)的大小由在卷积步骤执行之前需要决定的三个参数[ 4 ] 控制

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

屏幕截图2016-08-10 at 3.42.35 AM

图7
  • Stride: Stride是我们通过输入矩阵滑动我们的滤波器矩阵的像素数。当步幅为1时,我们一次移动一个像素的滤镜。当步幅为2时,当我们滑动它们时,滤镜会一次跳过2像素。具有更大的步幅将产生较小的特征图。
  • 零填充:有时,在边框周围用零填充输入矩阵是方便的,所以我们可以将滤波器应用于输入图像矩阵的边界元素。零填充的一个很好的特点是它允许我们控制特征图的大小。添加零填充也称为宽卷积不使用零填充将是窄卷积这已经在[ 14 ]中得到了解释
引入非线性(ReLU)

上面的图3中的每个卷积操作之后,已经使用了称为ReLU的附加操作ReLU代表整流线性单元,是非线性运算。其输出由下式给出:

屏幕截图2016-08-10 at 2.23.48 AM.png

图8:ReLU操作

ReLU是元素操作(每像素应用),并将特征图中的所有负像素值替换为零。ReLU的目的是在ConvNet中引入非线性,因为我们希望ConvNet学习的大多数真实世界数据将是非线性的(卷积是一个线性运算 - 元素矩阵乘法和加法,所以我们通过引入诸如ReLU的非线性函数来解释非线性)。

ReLU操作可以从下面的图9清楚地看出它显示了ReLU操作应用于 上面图6中获得的特征图之一此处的输出特征图也称为“整流”特征图。

屏幕截图2016-08-07在6.18.19 PM.png

图9:ReLU操作。来源[ 10 ]

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

合流步骤

空间池(也称为二次采样或下采样)降低了每个特征图的维数,但保留了最重要的信息。空间汇总可以是不同的类型:最大,平均,和等。

在Max Pooling的情况下,我们定义一个空间邻域(例如,一个2×2窗口),并从该窗口内的整流特征图中获取最大的元素。而不是使用最大的元素,我们也可以取平均值(Average Pooling)或该窗口中所有元素的总和。在实践中,Max Pooling已经显示出更好的效果。

图10  显示了通过使用2×2窗口的整流功能图(卷积+ ReLU操作后获得)上的最大池操作的示例。

屏幕截图2016-08-10 at 3.38.39 AM.png

图10:最大池。来源[4]

我们将2 x 2窗口滑动2个单元格(也称为“stride”),并在每个区域中取最大值。如图10所示,这降低了我们的特征图的维数。

图11所示的网络中池操作分别应用于每个特征图(注意,由于这一点,我们从三个输入图中得到三个输出图)。

屏幕截图2016-08-07在6.19.37 PM.png

图11:汇总应用于整改功能地图

图12  显示了在上图9中的ReLU操作后,我们收到的整流功能图集中的效果 。

屏幕截图2016-08-07在6.11.53 PM.png

图12:池。来源[10]

池的功能是逐步减少输入表示的空间大小[4]。特别是汇集

  • 使得输入表示(特征维度)更小更易于管理
  • 减少网络中的参数和计算次数,因此控制过拟合[4]
  • 使得网络对输入图像中的小变换,失真和转换不变(输入中的小失真不会改变Pooling的输出 - 因为我们在本地邻域中取最大/平均值)。
  • 帮助我们达到我们的形象的几乎不变量的不变表示(确切的术语是“等量的”)。这是非常强大的,因为我们可以检测图像中的对象,无论它们位于何处(详见[18]和[19])。
到目前为止的故事

屏幕截图2016-08-08 at 2.26.09 AM.png

图13

到目前为止,我们已经看到了卷积,ReLU和Pooling如何工作。重要的是要了解这些层是任何CNN的基本构件。如图13所示,我们有两组卷积,ReLU和Pooling层 - 第二卷卷层使用六个滤镜对第一个Pooling Layer的输出进行卷积,以产生总共六个特征图。然后将ReLU单独应用于所有这六个特征图。然后我们分别对六个整流特征图中的每一个执行Max Pooling操作。

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

第二个集合层的输出作为完全连接层的输入,我们将在下一节讨论。

完全连接层

完全连接层是传统的多层感知器,它在输出层中使用softmax激活功能(其他分类器,如SVM也可以使用,但是会在这篇文章中坚持softmax)。术语“完全连接”意味着上一层中的每个神经元连接到下一层的每个神经元。 如果您不熟悉多层感知器,我建议您阅读这篇文章

卷积层和汇集层的输出代表输入图像的高级特征。完全连接层的目的是使用这些功能将输入图像分类为基于训练数据集的各种类别。例如,我们设定执行的图像分类任务具有四个可能的输出,如下面的图14所示(请注意,图14未显示完全连接的图层中的节点之间的连接)

屏幕截图2016-08-06 at 12.34.02 AM.png

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

除了分类之外,添加完全连接的层也是学习这些特征的非线性组合的(通常)便宜的方式。来自卷积层和层叠层的大多数特征对于分类任务可能是好的,但是这些特征的组合可能更好[11]。

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

把它放在一起 - 使用反向传播训练

如上所述,Convolution + Pooling层作为输入图像的特征提取器,而完全连接的层用作分类器。

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

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

屏幕截图2016-08-07在9.15.21 PM.png

图15:培训ConvNet

卷积网络的整体训练过程可概述如下:

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

上述步骤训练ConvNet - 这实质上意味着ConvNet的所有权重和参数现在已经被优化,以正确地对训练集中的图像进行分类。

当ConvNet中输入新的(不可见的)图像时,网络将通过正向传播步骤并输出每个类的概率(对于新图像,输出概率使用已优化的权重计算,以正确分类所有以前的培训示例)。如果我们的训练集足够大,网络将(希望)推广到新的图像,并将其分类为正确的类别。

注1:上述步骤过于简单,避免了数学细节,为培训过程提供了直觉。参见[4]和[12]的数学公式和透彻的理解。

注2:在上面的例子中,我们使用了两组交替的卷积和池层。但请注意,这些操作可以在单个ConvNet中重复任意次数。事实上,一些最好的ConvNets今天有数十个卷积和池层!此外,在每个卷积层之后没有必要具有池化层。下面图16可以看出,在进行汇总操作之前,我们可以连续进行多次卷积+重新执行操作。还要注意ConvNet的每一层如下图16所示。

car.png

图16:源[ 4 ]
可视化卷积神经网络

一般来说,我们拥有的卷积步骤越多,我们的网络就越能复杂地识别。例如,在图像分类中,ConvNet可以学习检测第一层中原始像素的边缘,然后使用边缘来检测第二层中的简单形状,然后使用这些形状来阻止更高级的特征,如面部形状在较高层[14]。这在下面的图17被证明- 这些特征是使用卷积深层信念网络学习的,并且该图被包括在此仅仅是为了演示这个想法(这仅仅是一个例子:现实生活卷积滤波器可以检测到对人类没有意义的对象) 。

屏幕截图2016-08-10在12.58.30 PM.png

图17:卷积深层信仰网络的学习特征。来源[21]

亚当·哈雷(Adam Harley)创建了一个在MNIST数据库上训练的卷积神经网络的惊人可视化手写数字[13]。我强烈推荐玩弄它来了解CNN如何工作的细节。

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

conv_all.png

图18:可视化通过手写数字训练的ConvNet。来源[13]

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

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

屏幕截图2016-08-06 at 12.45.35 PM.png

图19:可视化池操作。来源[13]

汇集层1之后是执行卷积运算的十五个5×5(步幅1)卷积滤波器。接下来是Pooling Layer 2,最大池数为2×2(步幅2)。这两层使用与上述相同的概念。

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

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

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

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

final.png

图20:可视化细连的图层。来源[13]

相同可视化的3D版本可在此处使用

其他ConvNet架构

卷积神经网络始于20世纪90年代初。我们讨论了LeNet,这 是最早的卷积神经网络之一。其他一些有影响力的架构如下[3] [4]所列

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

在这篇文章中,我已经尝试简单地解释卷积神经网络背后的主要概念。有几个细节我已经过度简化/跳过,但希望这篇文章给你一些关于他们如何工作的直觉。

这篇文章最初来自Denny Britz的NLP理解卷积神经网络(我建议阅读),这里的一些解释是基于这篇  文章。对于一些概念更透彻的了解,我会鼓励你去通过音符斯坦福大学的在ConvNets课程以及根据下文引用中提到的其他优秀的资源。如果您面对任何上述概念或有任何问题/建议,请随时在下面发表评论。

本文中使用的所有图像和动画都属于其参考文献部分所列各自的作者。

参考
  1. karpathy / neuraltalk2:火炬中的高效图像字幕代码,示例
  2. Shaoqing Ren  等人,  “Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks”,2015,  arXiv:1506.01497 
  3. 神经网络架构,Eugenio Culurciello的博客
  4. CS231n卷积神经网络视觉识别,斯坦福
  5. Clarifai /技术
  6. 机器学习是乐趣!第3部分:深度学习和卷积神经网络
  7. 特征提取采用卷积,斯坦福大学
  8. 关于内核的维基百科文章(图像处理) 
  9. 深度学习方法视觉,CVPR 2012教程 
  10. 神经网络Rob Fergus,机器学习暑期学校2015
  11. 完全连接的层在CNN中做了什么? 
  12. 卷积神经网络,安德鲁吉本斯基 
  13. AW Harley,“An Interactive Node-Link Visualization of Convolutional Neural Networks”,ISVC,第867-877页,2015(链接)。演示
  14. 了解NLP的卷积神经网络
  15. 卷积神经网络中的反向传播
  16. 卷积神经网络初学者指南
  17. Vincent Dumoulin 等人,“A guide to convolution arithmetic于深度学习”,2015,arXiv:1603.07285
  18. 深度学习与普通机器学习有什么区别?
  19. 卷积神经网络如何能够学习不变特征?
  20. 深层卷积神经网络计算机视觉分类法
  21. HongLak Lee 等人,“Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations”(link

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值