英文原文:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
卷积神经网络(ConvNets 或CNN )是一类神经网络,已经证明在图像识别和分类等领域非常有效。 除了为机器人和自动驾驶汽车提供视力外,卷积神经网络还成功识别了面部,物体和交通标志。
图一
在 上面的 图1中,卷积神经网络能够识别场景,并且能够建议相关的标题(“足球运动员踢足球”),而图2显示了用于识别日常物品,人类和动物。 最近,卷积神经网络在几个自然语言处理任务(例如语句分类)中也有效。
图二
因此,卷积神经网络是当今大多数机器学习从业者的重要工具。 然而,了解卷积神经网络并首次学会使用它们有时可能是一种令人生畏的过程。 本博文的主要目的是了解卷积神经网络如何在图像上工作。
如果你不熟悉神经网络,我建议你阅读这篇关于多层感知器的简短教程,以便在继续之前了解它们的工作原理。 多层感知器在本文中称为“全连接层”。
LeNet架构(1990年代)
LeNet是最早推动深度学习领域的卷积神经网络之一。Yann LeCun的这项开创性工作自1988年以来经过多次成功迭代后被命名为 LeNet5 [ 3 ]。 那时,LeNet架构主要用于字符识别任务,例如阅读邮政编码,数字等。
下面,我们将直观了解LeNet架构如何识别图像。 近年来已经在LeNet基础上提出了几种改进的新的架构,但它们都使用了LeNet的主要概念,如果你对前者有清楚的了解,则相对容易理解。
图三:一个简单的ConvNeto
图3中 的卷积神经网络在 结构上与原始LeNet类似,并将输入图像分为四类:狗,猫,船或鸟(原始LeNet主要用于字符识别任务)。 从上图可以看出,在接收船只图像作为输入时,神经网络在所有四个类别中正确地为船只的分配了最高概率(0.94)。 输出层中所有概率的总和应为1(本文稍后将对此进行说明)。
图3 所示卷积神经网络中有四个主要操作:
这些操作是每个 卷积神经网络 的基本构建块 ,因此了解这些工作如何是开发对卷积神经网络的正确理解的重要一步。 下面我们将尝试直观地理解每个操作。
图像是像素值的矩阵
实质上,每个图像都可以表示为像素值矩阵。
图4:每个图像都是像素值矩阵。
通道 是用于指代图像的某个组件的常规术语。 来自标准数码相机的图像将具有三个通道 —— 红色,绿色和蓝色 —— 你可以将这些通道想象为三个彼此堆叠的2d矩阵(每种颜色一个),每个都具有0到255范围内的像素值。
灰度 图像则只有一个通道。 出于本文的目的,我们将仅考虑灰度图像,因此我们将使用表示图像的单个2d矩阵。 矩阵中每个像素的值范围为0到255 —— 0表示黑色,255表示白色。
卷积步骤
卷积神经网络的名字来自 “卷积”运算符 。 卷积神经网络中卷积的主要目的是从输入图像中提取特征。 卷积通过使用输入数据的小方块学习图像特征来保持像素之间的空间关系。 我们不会在这里讨论卷积的数学细节,但会尝试理解它对图像的作用。
如上所述,每个图像都可以被视为像素值矩阵。 考虑像素值仅为0和1的5 x 5图像(请注意,对于灰度图像,像素值范围为0到255,下面的绿色矩阵是像素值仅为0和1的特殊情况):
另外,考虑另一个3 x 3矩阵,如下所示:
然后,可以计算5 x 5图像和3 x 3矩阵的卷积,如 下面 图5中的动画 所示:
图5:卷积操作。 输出矩阵称为卷积特征或特征图。
我们花点时间了解上面的计算是如何完成的。 将橙色矩阵滑过原始图像(绿色)1个像素(也称为“步幅”),对于每个位置,我们计算元素乘法(在两个矩阵之间)并相加得到一个整数输出作为输出矩阵的一个元素(粉红色)。 注意,3×3矩阵仅“看到”每个步幅中的输入图像的一部分。
在CNN术语中,3×3矩阵称为“ 过滤器 ”或“核”或“特征检测器”,通过在图像上滑动过滤器并计算点积而形成的矩阵称为“卷积特征”或“激活图”或' “特征图” '。 重要的是要注意,过滤器充当原始输入图像的特征检测器。
从上面的动画可以明显看出,不同的过滤器矩阵将使得相同的输入图像产生不同的特征图。 例如,请考虑以下输入图像:
在下表中,我们可以看到上面图像与不同过滤器卷积作用的结果。 如图所示,我们可以在卷积运算[ 8] 之前通过更改过滤器矩阵的数值来执行边缘检测,锐化和模糊等操作 —— 这意味着不同的过滤器可以检测图像中的不同特征,例如边缘,曲线等,更多这样的例子可以在8.2.4节中找到
理解卷积操作的另一个好方法是查看下面图6中的动画:
【因文件太大无法上传显示】
图6:卷积操作。
一个过滤器(具有红色轮廓)在输入图像(卷积操作)上滑动以产生特征图。另一个过滤器(带有绿色轮廓)在同一图像上的卷积给出了不同的特征图,如图所示。值得注意的是,卷积操作捕获原始图像中的局部依赖关系。还要注意这两个不同的过滤器如何从同一原始图像生成不同的特征图。请记住,如上所述,上面的图像和两个过滤器都是数字矩阵。
实际上,CNN的在训练过程中会自己学习这些过滤器的值(虽然我们训练过程之前还需要指定参数,如过滤器数量,过滤器大小,网络架构等)我们拥有的过滤器数量越多,提取的图像特征就越多,我们的网络对未见过的图片识别效果越好。
特征图(卷积特征)的大小由三个参数[ 4 ]控制,我们需要在执行卷积步骤之前确定它们:
图7
在 上面的 图3中的 每个卷积操作之后,都使用了称为ReLU的附加操作 。ReLU代表修正线性单元,是一种非线性操作。 其输出由下式给出:
图8:ReLU操作
ReLU是元素级别操作(作用于每个像素,它将特征图中的所有负像素值替换为零。ReLU的目的是在我们的卷积神经网络中引入非线性因素,因为我们希望神经网络学习的大多数真实数据都是非线性的(卷积是线性操作 —— 元素级矩阵乘法和加法,所以我们通过引入像ReLU这样的非线性函数来解释问题的非线性部分。)
可以从下面的图9 清楚地理解ReLU操作。它显示了ReLU操作应用于上面图6中 获得的一个特征图。此处的输出特征图也称为“修正”特征图。
图9:ReLU操作。
也可以使用 其他非线性函数(例如 tanh或 sigmoid)代替ReLU,但已发现ReLU在大多数情况下表现更好。
空间池化(也称为子采样或下采样)可降低每个特征图的维度,而保留了最重要的信息。 空间池化有几种不同类型:最大,平均,总和池化等。
在最大池化的情况下,我们定义空间邻域(例如,2×2窗口)并从该窗口内的修正特征图中获取最大元素。 我们也可以取平均值(平均池化)或该窗口中所有元素的总和,而不是取最大元素。 在实践中,最大池化已被证明效果更好。
图10 显示出了通过使用2×2窗口在修正特征图(在卷积+ ReLU操作之后获得)上的最大池操作的示例。
图10:最大池。
我们将2 x 2窗口滑动2个单元格(也称为“步幅”),并在每个区域中取最大值。如图10 所示 ,这降低了我们的特征图的维度。
在图11 所示的网络中,池化操作分别应用于每个特征图(请注意,由于这个原因,我们从三个输入图中获得三个输出图)。
图11:应用于修正特征图的池
图12显示了池化对我们在 上面 图9中的ReLU操作之后收到的修正特征图的影响 。
图12:池化。
池化的功能是逐步减小输入表示的空间大小[ 4 ]。 特别地,池化
图13
到目前为止,我们已经看到了卷积,ReLU和池化的工作原理。 重要的是要理解这些层是任何CNN的基本构建块。 如图13 所示 ,我们有两组卷积,ReLU和池化层 —— 第二个卷积层使用六个过滤器对第一个池化的输出进行卷积,产生六个特征图。 然后,ReLU将单独应用于所有这六个特征图。 然后,我们分别对六个修正特征图中的每一个执行最大池操作。
这些层一起从图像中提取有用的特征,在我们的网络中引入非线性并减少特征维度,同时旨在使特征在某种程度上与缩放和平移相同[ 18 ]。
第二个池化层的输出充当全连接层的输入,我们将在下一节中讨论。
全连接层是传统的多层感知器,它在输出层使用softmax激活函数(也可以使用其他分类器,如SVM,但在本文中将坚持使用softmax)。 术语“全连接”意味着前一层中的每个神经元都连接到下一层的每个神经元。 如果你不熟悉多层感知器, 我建议你阅读 这篇文章。
卷积和池化层的输出表示输入图像的高级特征。 全连接层的目的是基于训练数据集使用这些特征将输入图像分类为各种类。 例如,我们要执行的图像分类任务有四种可能的输出,如 下面的 图14 所示(注意图14没有显示全连接层中节点之间的连接)
图14:全连接层 - 每个节点连接到相邻层中的每个其他节点
除了分类之外,添加全连接层也是学习这些特征的非线性组合的(通常)廉价方式。 卷积和池化层的大多数特征可能对分类任务有利,但这些特征的组合可能更好[ 11 ]。
这里通过使用Softmax函数 作为全连接层的输出层中的激活函数来确保全连接层的输出概率之和为1。Softmax函数接收任意实数向量,将其压缩为0到1之间的值且分量值总和为1的向量。
如上所述,卷积+池化层充当输入图像的特征提取器,而全连接层充当分类器。
请注意,在 下面的 图15 中,由于输入图像是船,因此Boat类的目标概率为1,其他三个类的目标概率为0,即
图15:训练卷积神经网络
卷积网络的整体训练过程可概括如下:
上述步骤 训练 出的卷积神经网络 —— 这实际上意味着卷积神经网络的所有权重和参数现在已经过优化,可以正确分类来自训练集的图像。
当一个新的(未见过的)图像被输入到卷积神经网络中时,网络将经前向传播并输出每个类的概率(对于新图像,输出概率使用经过正确分类所有以前的训练样例的优化过的权重来计算)。 如果我们的训练集足够大,网络将很好地推广到新图像并将它们分类为正确的类别。
注1: 上述步骤过于简单,省去了数学细节,以便为训练过程提供直观的解释。 有关数学公式和深入地理解 请参见[ 4 ]和[ 12 ]。
注2: 在上面的例子中,我们使用了两组交替的卷积和池化层。 但请注意,这些操作可以在一个卷积神经网络中重复多次。 事实上,今天一些表现最好的卷积神经网络拥有数十个卷积和池化层! 此外,在每个卷积层之后没有必要具有池化层。 从下面的 图16 中可以看出, 在进行卷积操作之前,我们可以连续进行多次卷积 + ReLU操作。在下面的图16中还要注意卷积神经网络的每一层如何显示的。
图16
一般来说,我们拥有的卷积步骤越多,我们的网络能够学会识别的功能就越复杂。 例如,在图像分类中,卷积神经网络可以从第一层中学习检测原始像素边缘,然后在第二层中使用边缘检测简单形状,然后使用这些形状来检测更高级别的特征,例如面部形状在较高层[ 14 ]。 这在 下面的 图17 中 得到了证明 —— 这些特征是使用 卷积深度信念网络学习的 ,这里的图仅用于演示这个想法(这只是一个例子:实际上卷积过滤器可能检测出对人们来说没有意义的对象) 。
图17:来自卷积深度信念网络的学习特征
Adam Harley 创建了一个在手写数字MNIST数据库上训练的卷积神经网络的可视化[ 13 ]。 我强烈建议你 使用它 来了解CNN工作的细节。
我们在下图中可以看到神经网络对于输入数字“8”的操作细节。 请注意, 图18 中 的可视化 不会单独显示ReLU操作。
图18:可视化在手写数字上训练的卷积神经网络。
输入图像包含1024个像素(32×32图像),并且第一个卷积层(卷积层1)通过将六个唯一的5×5(步幅1)过滤器与输入图像卷积而形成。 如图所示,使用六个不同的过滤器产生深度为六的特征图。
卷积层1之后是池化层1,它在卷积层1中的六个特征图上分别进行2×2最大池化(步长2)。你可以将鼠标指针移动到池化层中的任何像素上,并能观察到它来自于2 x 2网格在前一个卷积层中的作用(如图19所示)。你会注意到2 x 2网格中具有最大值(最亮的一个)的像素成为池化层的像素。
图19:可视化池操作。
池化层1之后是16个5×5(步长1)卷积过滤器,它们执行卷积运算。 接下来是池化层2,它执行2×2最大池化(步长为2)。 这两层的作用与上述的相同。
然后我们有三个全连接(FC)层。 有:
请注意,在图20中 ,输出层中的10个节点中的每个节点都连接到第2个全连接层中的100个节点(因此名称为“全连接”)。
另外,请注意输出层中唯一的明亮节点如何对应于'8' —— 这意味着网络正确地对我们的手写数字进行分类(较亮的节点表示其输出较高,即8在所有其他数字中的概率最高)。
图20:可视化全连接层。
此处 提供了相同可视化的三维版本 。
自20世纪90年代初以来,卷积神经网络就已存在。 我们讨论了上面的LeNet,它 是最早的卷积神经网络之一。 其他一些有影响力的架构列在下面[ 3 ] [ 4 ]。
THE END
在这篇文章中,我试图用简单的术语解释卷积神经网络背后的主要概念。 有几个细节我过度简化/跳过,但希望这篇文章给你一些关于它们如何工作的直觉。
这篇文章最初的灵感来自 Denny Britz 的 理解卷积神经网络在自然语言处理上的运用(我建议阅读), 这里的一些解释都是基于这篇文章。若想对于一些概念更透彻的了解,我鼓励你去阅读 斯坦福大学的在卷积神经网络课程的笔记以及下文引用中提到的其他优秀的资源。 如果你在理解上述任何概念或遇到问题/建议时遇到任何问题,请随时在下面发表评论。
本文中使用的所有图像和动画属于各自的作者,如下面的参考文献部分所列。