卷积神经网络(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所示:
这些操作是每一个卷积神经网络的基本构件,所以理解这些操作是对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 数量越多,提取的图像特征就越多,我们的网络就越能识别出看不见的图像中的模式。
特征映射(卷积特征)的大小由三个参数控制,我们需要在执行卷积步骤之前确定它们:
图7
在上面的图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的功能是逐步减小输入表示的空间大。
图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,即
图15:训练ConvNet
卷积网络的整体培训过程可概括如下:
上述步骤训练 ConvNet - 这实际上意味着ConvNet的所有权重和参数现在都经过了优化,可以正确分类来自训练集的图像。
当一个新的图像被输入到ConvNet中时,网络将经历正向传播步骤并输出每个类的概率(对于新图像,输出概率使用已经优化的权重来计算以正确分类所有以前的训练样例)。如果我们的训练集足够大,网络将很好地推广到新图像并将它们分类为正确的类别。
图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)层。有:
请注意,在图20中,输出层中的10个节点中的每个节点都连接到第2个全连接层中的所有100个节点(因此名称为“全连接”)。
另外,请注意输出层中唯一的明亮节点如何对应于'8' - 这意味着网络正确地对我们的手写数字进行分类(较亮的节点表示其输出较高,即8在所有其他数字中的概率最高) )。
图20:可视化Filly连接的图层
其他ConvNet架构自20世纪90年代初以来,卷积神经网络就已存在。我们讨论了上面的LeNet,它 是最早的卷积神经网络之一。其他一些有影响力的架构列在下面
在这篇文章中,我试图用简单的术语解释卷积神经网络背后的主要概念。希望这篇文章给你一些关于它们如何工作的直觉。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved