当前位置:   article > 正文

卷积神经网络的直观解释,卷积神经网络基础

卷积神经网络

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

卷积神经网络(ConvNets或CNNs)是一类在图像识别和分类等领域非常有效的神经网络。除了增强机器人和自动驾驶汽车的视觉功能外,ConvNets还成功地被用于人脸、物体和交通标志的识别。

图1: 图片来源:[1]

在上面的图1中,ConvNet能够识别场景,系统能够提示相关的说明(“一个足球运动员正在踢足球”),而图2显示了一个ConvNet用于识别日常对象、人和动物的示例。最近,ConvNets在一些自然语言处理任务(如句子分类)中也很有效。

图2: 图片来源:[2]

因此,ConvNets是当今大多数机器学习实践者的重要工具。然而,第一次理解并学习使用ConvNets有时可能是一种令人生畏的经历。这篇文章的主要目的是帮助初学者理解卷积神经网络如何处理图像的。

如果你是神经网络的新手,我建议你在继续学习之前,先阅读一下这篇关于多层感知机的简短教程,了解一下它们是如何工作的。在这篇文章中,多层感知机被称为“全连接层”。

LeNet架构(1990s)

LeNet是最早推动深度学习领域的卷积神经网络之一。Yann LeCun的这项开创性工作被命名为LeNet-5,这是在1988年[3]之后的多次成功迭代之后命名的。当时,LeNet体系结构主要用于字符识别任务,如读取邮政编码、数字等。

下面,我们将对LeNet架构如何学习识别图像进行直观了解。近年来提出了一些新的体系结构,它们都是对LeNet的改进,但它们都使用了LeNet的主要概念,如果你对LeNet已经有清晰的理解,则相对更容易理解。

图3: 一个简单的卷积神经网络. 图片来源:[5]

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

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

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

这些操作是每个卷积神经网络的基本构件,因此了解这些操作的工作原理是发展对卷积神经网络的良好理解的重要一步。我们将在下面尝试理解每个操作背后的原理。

图像是像素值的矩阵

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

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

通道是一个常规术语,用来指代图像的某个组成部分。一个标准数码相机的图像有三个通道——红、绿、蓝——你可以把它们想象成三个2D矩阵堆叠在一起(每种颜色一个),每个像素值在0到255之间。

另一方面,灰度图像只有一个通道。出于这篇文章的目的,我们将只考虑灰度图像,因此我们将有一个表示图像的单一2D矩阵。矩阵中每个像素的值范围从0到255,0表示黑色,255表示白色。

卷积的步骤

卷积神经网络得名于“卷积”运算符。卷积的主要目的是从输入图像中提取特征。卷积通过使用输入数据的小方块学习图像特征,来保持像素之间的空间关系。我们将不在这里讨论卷积的数学细节,但会尝试了解卷积在图像上的工作原理。

如前所述,每个图像都可以看作是像素值的矩阵。考虑一个像素值只有0和1的5×5图像(注意,对于灰度图像,像素值的范围是0到255,下面的绿色矩阵是像素值只有0和1的特殊情况):

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

然后计算5×5图像与3×3矩阵的卷积,如下图5所示的动画所示:

图5: 卷积操作。输出矩阵称为卷积特征或特征图. Source [7]

花一点时间来了解上面的计算是如何完成的。我们将橙色矩阵在原始图像(绿色)上滑动1个像素(也称为“步长”),并针对每个位置(在两个矩阵之间)计算逐元素的乘法,然后将乘法输出相加以获得最终的整数,该整数形成输出矩阵的单个元素(粉红色)。请注意,在每个步幅中,3×3的矩阵仅“看到”一部分输入图像。

CNN的术语中,3×3矩阵被称为“滤波器”、“核函数”或“特征检测器”,通过在图像上滑动滤波器并计算点积形成的矩阵被称为“卷积特征(Convolved Feature)”或“激活图(Activation Map)”或“特征图(Feature Map)”。需要注意的是,滤波器充当原始输入图像的特征检测器。

从上面的动画可以明显看出,对于相同的输入图像,不同的滤波矩阵值会产生不同的特征图。以下面的输入图像为例:

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

了解卷积操作的另一种好方法是查看下面的图6中的动画:

一个过滤器(带有红色轮廓)在输入图像上滑动(卷积操作)以生成一个特征图。另一个过滤器(带有绿色轮廓线)在同一图像上的卷积得到不同的特征图,如图所示。需要注意的是,卷积操作捕获了原始图像中的局部相关性。还要注意这两个不同的过滤器如何从相同的原始图像生成不同的特征图。请记住,上面的图像和两个过滤器只是我们在上面讨论过的数值矩阵。

在实践中,CNN在训练过程中会自己学习这些滤波器的值(虽然在训练过程之前我们还需要指定过滤器的数量、过滤器的大小、网络的架构等参数)。我们拥有的过滤器数量越多,提取的图像特征就越多,我们的网络在识别图像中人眼不可见的图案方面就变得越好。

Feature Map (Convolved Feature)的大小由三个参数[4]控制,在进行卷积步骤之前我们需要确定:

  • 深度(Depth):深度对应于卷积运算中使用的滤波器的数量。在图7所示的网络中,我们使用三个不同的过滤器对原始的船的图像进行卷积,从而生成三个不同的feature map,如图所示。你可以把这三个特征图想象成堆叠的2D矩阵,因此,特征图的“深度”应该是3。
  • 步长(Stride):步长是我们在输入矩阵上滑动滤波矩阵的像素个数。当步长为1时,我们一次移动一个像素的滤波器。当步长为2时,当我们滑动滤波器时,滤波器一次跳跃2个像素。拥有更大的步幅将产生更小的特征图。

  • 零填充(Zero-padding):有时,在边界周围用零填充输入矩阵很方便,因此我们可以将滤波器应用于输入图像矩阵的边界元素。零填充的一个优点是它允许我们控制特征图的大小。添加零填充也称为宽卷积(wide convolution),不使用零填充将是窄卷积(narrow convolution)。 在[14]中已经清楚地解释了这一点。

引入非线性(ReLU)

在上面的图3中,每个卷积操作之后都会使用一个称为ReLU的附加操作。ReLU是经过整流的线性单元,是一个非线性操作。其输出为:

图8: ReLU操作

ReLU是一种按元素的操作(按像素应用),并将特征图中的所有负像素值替换为零。ReLU的目的是在我们的ConvNet中引入非线性,因为我们希望我们的ConvNet学习的大多数现实世界数据都是非线性的(卷积是线性运算–-元素明智的矩阵乘法和加法运算,因此我们通过引入诸如ReLU之类的非线性函数来解决非线性问题)。

ReLU操作可以从下面的图9中清楚地理解。它显示了应用于图6中获得的一个特征映射的ReLU操作。这里的输出特征图也称为“经过校正的(Rectified)”特征图。

图9: ReLU操作. Source [10]

其他非线性函数如tanh或sigmoid也可以代替ReLU,但ReLU在大多数情况下表现得更好。

池化步骤

空间池化(也称为次采样或下采样)降低了每个特征图的维数,但保留了最重要的信息。空间池化可以有不同的类型:Max、Average、Sum等。

在“最大池化”的情况下,我们定义一个空间邻域(例如2×2窗口),并从该窗口内经过校正的特征图中获取最大的元素。除了获取最大元素外,我们还可以获取该窗口中所有元素的平均值(平均池)或总和。 在实践中,Max Pooling已显示出更好的效果。

图10显示了一个使用2×2窗口在经过卷积的特征图(ReLU操作后得到)上进行最大池化操作的例子。

图10: Max Pooling. Source [4]

图12显示了在上面图9中的ReLU操作之后,不同池化操作对我们接收到的校正后的特征图的影响。

图12: 池化. Source [10]

池化的功能是逐渐减小输入表示的空间大小[4]。 特别是池化:

  • 使输入表示(特征维度)更小,更易于管理;
  • 减少了网络中的参数和计算量,从而控制了过拟合[4];
  • 使网络对输入图像中的小的变换、扭曲和平移保持不变(输入中的小的扭曲不会改变池化的输出——因为我们在一个本地邻域中取最大值/平均值);
  • 帮助我们获得图像的几乎不变的不变表示(确切的术语是“相等(equivariant)”)。这非常强大,因为无论物体位于何处,我们都可以检测到它们(有关详细信息,请阅读[18]和[19])。

目前为止的内容

图13

到目前为止,我们已经了解了卷积、ReLU和池化的工作原理。重要的是要了解,这些层是任何CNN的基本构建模块。如图13所示,我们有两组卷积,ReLU层和池化层:第二个卷积层使用6个滤波器对第一个池化层的输出进行卷积,总共生成6个特征图。然后将ReLU分别应用于所有这6个功能映射。然后,我们分别在六个经过修正的特征图上执行最大池化(Max Pooling)操作。

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

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

全连接层

全连接层是传统的多层感知机,在输出层使用softmax激活函数(也可以使用其他分类器,如SVM,但本文将坚持softmax)。术语“完全连接”意味着前一层的每个神经元都连接到下一层的每个神经元。如果你不熟悉多层感知机,我推荐你阅读这篇文章

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

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

除了分类之外,添加完全连接的层也是学习这些功能的非线性组合的一种(通常)廉价的方法。来自卷积层和池化层的大多数特征可能对分类任务很有用,但是这些特征的组合甚至可能更好[11]。

全连通层输出的概率之和为1。这是通过使用Softmax作为激活函数在输出层的全连接层。Softmax函数获取任意实值分数的向量,并将其压扁为0到1之间的值向量,其和为1。

放在一起–使用反向传播进行训练

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

注意,在下面的图15中,由于输入的图像是一个船,那么船这一类别的目标概率为1,其他三个类的目标概率为0,即:

  • 输入图像 = 船
  • 目标向量 = [0,0,1,0]
图15: 训练ConvNet

卷积网络的整体训练过程总结如下:

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

以上步骤对卷积神经网络进行了训练:这本质上意味着对卷积神经网络的所有权值和参数进行了优化,从而正确地对训练集中的图像进行分类。

当一个新的(不可见的)图像输入到ConvNet时,网络将进行前向传播步骤,并为每个类输出一个概率(对于一个新的图像,使用经过优化的权值来计算输出概率,以正确分类之前的所有训练示例)。如果我们的训练集足够大,网络将(有希望)很好地泛化到新的图像,并将它们分类到正确的类别。

注意

  • 上面的步骤被过度简化了,并且避免了数学上的细节来提供对训练过程的直接理解。参见[4]和[12]以获得数学公式和透彻的理解;
  • 在上面的例子中,我们使用了两组交替的卷积和池化层。但是请注意,这些操作可以在一个卷积神经网络中重复任意次数。事实上,现在一些性能最好的卷积网络有几十个卷积和池化层!同样,在每个卷积层之后也不需要有一个池化层。如下图16所示,在进行池操作之前,我们可以连续进行多个卷积ReLU操作。还要注意ConvNet的每个层在下面的图16中是如何显示的。
图16: 图片来源:[4]

可视化卷积神经网络

一般来说,我们的卷积步骤越多,我们的网络能够学习识别的复杂特征就越多。例如,在图像分类中,ConvNet可以学习从第一层的原始像素中检测边缘,然后使用这些边缘来检测第二层的简单形状,然后使用这些形状来阻止更高层次的特征,例如在更高层次[14]中的面部形状。下面的图17演示了这一点:这些特征是使用卷积深度置信网络( Convolutional Deep Belief Network)学习的,这里的图只是为了演示这个思想(这只是一个例子)。

图17: 从卷积深度置信网络中学习特征. Source [21]

Adam Harley创建了卷积神经网络的惊人可视化效果,该网络在MNIST手写数字数据库上进行了训练[13]。我强烈建议你试用它,以了解CNN的工作原理的详细信息。

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

图18: 可视化用手写数字训练的ConvNet. Source [13]

输入图像包含1024个像素(32×32的图像),第一个卷积层(卷积层1)由6个特殊的5×5 (步长为1)滤波器与输入图像卷积而成。如前所述,使用6个不同的滤波器生成深度为6的特征图。

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

图19: 可视化池化操作. Source [13]

池化层1之后是16个5×5(步长为1)的卷积滤波器,执行卷积运算。接下来是池化层2,它实现了2×2的最大池化(步长为2)。

然后我们有三个全连接层(full-connected layer,FC)。它们是:

  • 第一个全连接层有120个神经元;
  • 第二个全连接层有100个神经元;
  • 第三个全连接层的10个神经元对应于10位数字,也称为输出层。

注意,在图20中,输出层中的10个节点分别连接到第二个全连接层中的所有100个节点(因此称为全连接)。

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

图20: 可视化全连接层. Source [13]

这里提供了相同可视化的3D版本。

其它的卷积神经网络架构

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

  • LeNet (1990s):本文已经介绍过;
  • 1990s-2012:从上世纪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等人的卷积网络。它的主要贡献是Inception模块的开发,该模块极大地减少了网络中的参数数量(4M,而AlexNet有60M);
  • VGGNet (2014):2014年ILSVRC的亚军是后来被称为VGGNet的网络。它的主要贡献是表明网络的深度(层的数量)是良好性能的关键组件;
  • ResNets (2015):由何凯明等人开发的残差网络是2015年ILSVRC的赢家。ResNet是目前最先进的卷积神经网络模型,是实践中使用卷积神经网络的默认选择(截至2016年5月);
  • DenseNet (August 2016):黄高等人最近发表的文章中,密集连接的卷积网络以前馈方式将每一层直接连接到每一层。DenseNet已经在5个高度竞争的对象识别基准任务上获得了显著的改进。在这里查看Torch的实现。

总结

在这篇文章中,我试图用简单的术语来解释卷积神经网络背后的主要概念。有几个细节我已经过度简化/跳过了,但希望这篇文章能让你对它们的工作原理有一些直观的认识。

这篇文章的灵感来自于Denny Britz的文章《Understanding Convolutional Neural Networks for NLP》(我建议大家读一读),这里的许多解释都是基于这篇文章。为了更透彻地理解其中的一些概念,我建议你阅读一下斯坦福大学关于ConvNets课程笔记,以及下面参考资料中提到的其他优秀资源。

本文中使用的所有图片和动画都属于各自的作者,如下面的参考资料部分所列。

参考

  1. karpathy/neuraltalk2: Efficient Image Captioning code in Torch, Examples
  2. Shaoqing Ren, et al, “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”, 2015, arXiv:1506.01497
  3. Neural Network Architectures, Eugenio Culurciello’s blog
  4. CS231n Convolutional Neural Networks for Visual Recognition, Stanford
  5. Clarifai / Technology
  6. Machine Learning is Fun! Part 3: Deep Learning and Convolutional Neural Networks
  7. Feature extraction using convolution, Stanford
  8. Wikipedia article on Kernel (image processing)
  9. Deep Learning Methods for Vision, CVPR 2012 Tutorial
  10. Neural Networks by Rob Fergus, Machine Learning Summer School 2015
  11. What do the fully connected layers do in CNNs?
  12. Convolutional Neural Networks, Andrew Gibiansky
  13. A. W. Harley, “An Interactive Node-Link Visualization of Convolutional Neural Networks,” in ISVC, pages 867-877, 2015 (link). Demo
  14. Understanding Convolutional Neural Networks for NLP
  15. Backpropagation in Convolutional Neural Networks
  16. A Beginner’s Guide To Understanding Convolutional Neural Networks
  17. Vincent Dumoulin, et al, “A guide to convolution arithmetic for deep learning”, 2015, arXiv:1603.07285
  18. What is the difference between deep learning and usual machine learning?
  19. How is a convolutional neural network able to learn invariant features?
  20. A Taxonomy of Deep Convolutional Neural Nets for Computer Vision
  21. Honglak Lee, et al, “Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations” (link)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/103932
推荐阅读
相关标签
  

闽ICP备14008679号