资源技术动态关于深度学习中的卷积神经网络,你需要知道这些

关于深度学习中的卷积神经网络,你需要知道这些

2019-11-19 | |  93 |   0

原标题:关于深度学习中的卷积神经网络,你需要知道这些

来源:AI研习社       链接:https://www.yanxishe.com/TextTranslation/2244


卷积神经网络又名卷积网络或者CNN,是深度学习里面神经网络的超级明星。这些网络能够执行相对复杂的任务,包括图像、声音、文本、视频等。第一个成功的卷积网络是在20世纪90年代末由Yann LeCunn教授为贝尔实验室开发的。

image.png

在类似MNIST的分类任务中,多层感知机(MLP)是经常被使用的并且展现了非常好的性能(很高的准确度)。而且,训练时间保持在一个非常合理的范围内。然而,对于有更大图片量的数据集,模型的参数也会迅速增长,所以,训练时间变得越来越长性能也就随之变差了。


爆炸的参数数量


多层感知机在解决分类、估计、近似、识别等问题时非常有效。但是,它很快就会受到限制,尤其是遇到具有很多维度的输入数据。


比如,我们现在想建立一个深度学习模型来进行猫狗识别的任务。模型在420 x 420像素的图片数据集上进行训练;在模型训练完成后,我们想让模型来辨识一张图片是猫还是狗。举例来说,首先用的方法就是使用一个具有128个神经元输入层的感知机。因为每个层的神经元接收420 x 420的像素作为输入,并且为每个像素分配一个权重值,我们就会得到每个神经元有176400个参数,在和这128个神经元相乘,并且每个还要加上一个偏置值,总共128个偏置值。这个小型的网络需要学习超过2200万个参数,这只是对于128个神经元和单一的中间层。


如果我们想要一个更加强大的模型,还得需要额外的层数,每一层上还得需要更多的神经元。整体的参数量就会呈现爆炸的趋势增长。例如,一个3层的模型,128-256-1这样的模型,需要差不多2300万个参数。这样的模型需要大量的数据进行训练,由于需要调整的参数较多,训练阶段会持续较长时间,性能会下降;换句话说,即使我们拥有了高效率的计算能力,把这种模型训练的天衣无缝也是不可能的,然而参数问题只是需要处理一个方面而已。


图像的空间退化  


训练一个多层感知机需要把输入的数据作为向量来处理(一维的排列)。如果输入的数据是一个矩阵图像,那么它必须被压平才能得到一个向量。但是,在我们常见的图像中,相邻间的像素具有很强的联系;通过拉平图像,我们就会丢掉一些信息,在训练阶段对于网络来说解析这些数据就会变得更加困难。这证明了我们有兴趣用另一种神经网络结构来解决这类问题。我们先来看看卷积是由什么组成的。


卷积算法

卷积一个滤波器的乘积操作---也被称作是核---用矩阵图像从中提取一些预先确定的特征。从字面上讲,我们使用卷积滤波器来“过滤”图像,只显示对我们真正重要的东西。所考虑的图像是一个矩阵,所使用的滤波器也是矩阵,通常是3 x 3或者 5 x 5.让我们来看一下卷积内核是如何工作的。

image.png


卷积滤波器

6 x 6的像素表示一张图片。首先是卷积核,这里采用的3 x 3的卷积核,位于图片矩阵的左上方,卷积核只是覆盖了图片矩阵的一部分,我们让相互覆盖的每个元素的做乘积运算,然后把这些乘积都加起来得到最终的结果,对应于输出图片的一个像素。

image.png


卷积算法

然后,我们水平向右移动卷积核一个像素,在做类似的像素值乘法操作再把这些乘积加起来,得到输出图像的新的系数。


一旦在一行的末尾,内核向下垂直跨越,并再次从左边开始,我们重复同样的操作,直到内核覆盖了所有的矩阵图像。需要注意的是,内核始终保持在初始矩阵上,没有溢出。


当然,我们不能使用任何过滤器,内核的系数将取决于我们希望过滤器突出显示的特性。让我们看看与一些著名的滤波器卷积的结果。


垂直Soble 滤波器

它的作用是突出物体的垂直线。应用到左边的初始图像,结果如下,

image.png

垂直Soble 滤波器

这一次是为了突出图像的水平轮廓。这是应用于左侧图像的结果,

image.png


水平Sobel滤波器

可以组合这些过滤器的操作来执行更复杂的操作。根据需要解决的任务,已经列出了几种可以直接使用的滤波器:平均滤波器、高斯滤波器等。在深度学习出现之前,人类专家必须计算并确定正确的过滤器来执行特定的图像处理操作:人脸检测、照片编辑,如Snapchat过滤器等。现在有了深度学习,确定这些过滤器是通过学习自动完成的,模型会根据要解决的问题,从训练数据中找到好的过滤器。例如,在猫或狗的分类问题中,过滤器可以突出分类的决定特征:耳朵的形状、眼睛的形状、嘴的形状、轮廓等。 


卷积神经网络

卷积神经网络,也称为CNNs或Convnets,使用上面介绍的卷积技术建立模型来解决数据集上的各种训练问题。在经典的猫狗分类问题中,让我们来看看卷积网络的细节。


卷积的深度学习方法

在这个分类问题中,我们有两类,即狗和猫。在这些类别中,对一个图像进行分类取决于其独特的特征,如头骨的形状、耳朵的形状、眼睛的形状等。只有这些特征对完成这个分类任务很重要,其他信息对我们来说并不重要。


因此,理想的方法是从一个图像开始,能够通过使用适当的过滤器提取出分类问题中有趣的主要特征。在深度学习环境中,模型将通过对数据集的训练来确定这些过滤器。


训练从内核(过滤器)的随机初始值开始,在训练期间,这些值将通过梯度反向传播进行更新。由于我们讨论的是深度学习,我们可以猜测为了提高模型的性能,多层卷积将一个接一个地叠加起来。


填充和边缘效果

让我们再次以上面的卷积动画为例,看看输出图像的维数,也称为特征图。输入图像是一个6 x 6像素大小的矩阵,过滤器是一个3x3矩阵,我们可以看到特征图(输出矩阵)是4x4像素大小。顺便说一下,一般来说,特征图的大小是,

image.png

特征图的大小


其中n为输入图像的维数,p为滤波器的大小。例如,对于带有5x5内核的初始120x120像素图像,其特征图大小为116x116像素。注意,卷积降低了输入图像的大小。如果我们想要输出与输入图像大小相同的特征图,我们必须在卷积之前在输入图像周围添加0,输入图像“填充0”,因此这个操作的名称为填充操作。接下来我们举例说明。


6x6像素矩阵与一个3x3的过滤器的例子


我们希望特征图具有与输入图像相同的尺寸,即带有3x3卷积滤波器的6x6像素。在上面给出的方程中,我们有p = 3, m = 6,所以n = 6 + 3 - 1 = 8。因此,有必要有一个输入图像大小为8x8像素,这意味着我们必须在原始矩阵图像周围添加零,以达到8x8像素的大小;因此有下面的矩阵,

image.png

 “填充的”矩阵


填充不是强制性的,通常会忽略它;这可能听起来像是道听途说,但它确实有实际用途。让我们看看边缘像素,最上面的左边,例如,他们只看到卷积核一次,而大多数其他像素看到它两次以上。因此,边缘像素对特征图的影响较小。为了限制这种副作用,我们用零填充原始输入图像,这样边缘的像素就不会被忽略。


激活函数

在训练期间,我们知道滤波器的系数是要更新的;正如我们在上面使用Sobel过滤器所看到的,这些可能是负的,然后在训练过程中,特征图的系数可以保持较大的负值。因为我们知道这些值表示像素级别,因此是正的,所以我们可以应用一个函数来用零替换负值并保持正值不变。这是一种被称作是relu的激活函数,这个想法与relu基本相同,即维护合理的特征图值。


卷积层

提醒一下,卷积是对输入图像应用一个过滤器或内核,然后我们得到一个特征图,突出显示输入图像的特征或“特征”:轮廓、斑点、形状等。因此,为了解决我们的分类问题(猫或狗),我们将不得不使用几个过滤器;并通过组合这些过滤器突出显示的功能;比如耳朵、眼睛的形状和轮廓,我们的模型将能够通过训练来区分狗和猫。因此,我们必须选择运算的数量,所以过滤器使用的数量,知道更多的过滤器,更多的细节将会提取的分类,更多的将模型的参数学习但是性能担保的模式(更大的准确性)。在那之后,我们必须决定做填充或不填充和使用哪个激活函数。这定义了一个卷积层。要使用多少个过滤器?64、128、256……哪个激活函数?relu, sigmoid, tanh…使用或者不使用填充方法?


比如说我们有一个卷积层有128个滤波器;它为每个过滤器提供了一个特征映射,因此一个输入图像总共有128个特征映射。这些特征图代表了图像中包含的不同信息,因此我们可以将它们视为图像的不同通道。由于RGB图像包含三个通道(红、绿、蓝),因此具有128个过滤器的卷积层提供了一个具有128个通道的单一特征映射。如果相同的图像经过另一层的256个过滤器,它将作为一个256通道的特征图输出,以此类推。


池化算法


在自然图像中,像素之间有很强的局部相关性。在一张图片中,如果你知道一个像素是红色的,这意味着,对于一个图像,如果你知道一个像素是红色的,它的四个最接近的像素也很可能是红色的阴影。在灰度图像中,如果一个像素的强度为180,那么其最近的像素的强度也将在180左右。因此,可以通过每个像素只保留一个局部代表来减小图像的尺寸,这称为池化操作。一般来说,我们会取块中最大强度的像素(也就是最大值)——最大池化——我们也可以取块中像素的强度的平均值——池化操作——作为代表。

image.png


最大池化操作

正如上面所看到的,将输入图像的每个维度(高度和宽度)合并为两半。人们可能会认为,通过将一个像素块只表示为一个像素,池化会极大地降低初始图像的质量;但事实上,输出图像(特征图)肯定是一半大,但它包含了输入图像的主要特征。


例如,我们将最大池化操作应用到水平Sobel过滤器输出的特征图中,“池化”中的图像已经放大以供比较。

image.png

  两个最大池化后的特征图


注意,即使在两次池化之后,轮廓仍然清晰可见,图像的细节也不那么丰富。池不仅仅是调整大小,而且只保留输入图像的有意义的特性。通常,在一个卷积网络中,有一个操作序列;卷积池层-卷积池层等等。通过多次重复这些操作,我们最终得到的特征图只有有意义的(根据所解决的问题)输入图像的特征。我们现在可以利用多层感知机的能力来完成分类任务。


拉平特征图

为了最终将图像分类为一个类别,例如猫或狗,我们将在最后一个卷积层的顶层建立一个多层感知机。之前的卷积和池化操作极大地减小了输入图像的大小,保持了分类的唯一有意义的特征。因为输入MLP需要输入向量(一维数组),所以我们需要“扁平化”输出特征映射。因此,MLP接收小尺寸的特征图作为一维数组,并根据这些特征图选择相应的类别。

1574174206709521.gif

拉平操作


现在你已经知道了卷积神经网络的所有关键步骤,如果你想深入了解卷积神经网络,你可以阅读下面的段落。


卷积的高级方法


在前面的描述中,卷积是将一个滑动矩阵(核或滤波器)与输入矩阵图像相乘。虽然这种解释在深度学习社区中很普遍,但实际的解释略有不同,但并没有复杂多少。让我们以我们的第一个卷积为例(漂亮的gif),它有一个3x3的核和一个6x6像素的矩阵。我们使用上面的公式来预测特征图的大小,4x4像素的大小。

image.png

神经元的接收域


特征图左上角的像素值直接取决于输入图像的像素值和卷积核的值。这个像素的值根据卷积算法,

image.png  

特征图的像素值


其中Wi是卷积核的系数,Xi是绿方框中矩阵的系数。我们来回顾一下卷积核,

image.png

  卷积核


上面,我们有w1 = w2 = w5 = 2, w9 = 1,还有x1 = 0, x2 = 1, x5 = 1。注意像素值表达式中的加权和。就好像我们有一个神经元,其中xi是输入,而核的wi系数是输入的权重。神经元计算加权和,加权和是特征图中像素的值,这里得到的值是5。这个被框起来的区域叫做神经元的接受区;在左上角神经元接受区上方的绿色区域。在卷积过程中,当核在输入图像上移动时,xi的值会改变,但是wi的值,核的权值不变。然后,通过梯度反向传播对其进行更新。特别地,所有这些神经元都有相同的权值wi,即卷积核的系数,因为它们在查看输入图像时具有相同的特征,例如眼睛或轮廓的存在。我们也可以向这些神经元添加一个共享的偏置b。上述激活函数实际上是应用于这些神经元的。


可以看出,第二个神经元的接受区部分地与第一个神经元的接受区重叠,等等。由于这些神经元的接受域相互重叠,如果想要的特征被翻译——向上、向下、向左或向右——它必然在另一个神经元的接受域,因此被这个神经元检测到。我们说平移有一个不变性。20世纪60年代进行的生物学研究使科学家们能够在不太复杂的情况下识别出某些动物视觉皮层的相同结构。特别是,第一个参与视觉过程的细胞将识别非常简单的几何形状:线、圆、点等。然后更高级的细胞将使用这些信息来识别一个复杂的模式。类似地,在卷积神经网络中,卷积的第一层将检测一般的几何形状:角、圆、点、轮廓等。接下来的层结合这些元素来识别更具体的形状:头骨,眼睛,耳朵等。


再次从上面的公式开始,我们知道,使用pxp过滤器对大小为nxn的图像进行卷积,输出—没有填充—大小为mxm的特征图;我们知道特征图的每个像素都与一个神经元相连,然后使用m ** 2个神经元,每个神经元观察一个大小为pxp的字段,该字段具有p ** 2个权值(每个过滤器系数一个)和一个偏差。由于这些参数是共享的,我们最终得到m ** 2神经元的p ** 2 + 1参数。


例如,使用大小为420x420px的灰度输入图像和大小为5 * 5的内核,我们将得到一个大小为m = 420-5 + 1 = 416的特征图,因此,对于一个卷积,416 * 416 = 173056个神经元!只需要学习26(5*5 + 1)个参数。


这就是卷积神经网络的有趣之处。为了进行卷积,换句话说,为了检测一个模式,神经元共享相同的突触权值和可能的偏差,这大大减少了需要学习的参数的数量。


结论

本文的目的是介绍卷积神经网络及其主要功能。一般来说,这些网络为分类和识别任务提供了很好的结果。它们也被用来解释声音、文本和视频数据。如果要解决的问题是在一个序列中寻找一个模式,那么卷积网络将是很好的选择。在以后的文章中,我们将详细讨论在训练阶段卷积网络的连续层是如何演变的,我们还将看到如何使用热图使这些网络说话。

-----------------------------------------------------------------

发起:唐里 校对:鸢尾 审核:唐里

参与翻译(1人):珺毅

英文原文:Introducing Convolutional Neural Networks in Deep Learning

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:万字干货 | 文本分类不知从何着手?看这一篇就够了

下一篇:EfficientNet解析:卷积神经网络模型尺度变换的反思

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...