卷积神经网络的直观解释

卷积神经网络

卷积神经网络是神经网络的一种。它已经被证实可以很有效的使用在图像识别和分类任务中。他已经在人脸识别、目标检测、语义分割、智能机器人和自动驾驶汽车等领域取得成功。它还在自然语言处理中十分有效地完成任务,例如情感分析。通过卷积神经网络,不仅可以检测出图片中的人和物体,还可以使用自然语言处理得到图片的主题文字。例如下面一张图,一个足球运动员正在踢一个足球。

Screen Shot 2017-05-28 at 11.41.55 PM.png

第一个卷积神经网络叫作LeNet,它由Yann LeCun在1990年代发明出来。在那个时候,它被用来字符识别任务,如邮政编码识别或者数字识别。

Screen Shot 2016-08-07 at 4.59.29 PM.png

上图是LeNet的结构图,有一些细节和原版的LeNet不同,但是整体都是一样的。上图可以把输入图像分为四类:狗、猫、船和鸟。卷积神经网络经过一系列计算最终得到四个概率值,分别代表图像为每一类的概率。四个概率值的和应为1。概率值最大的那一类作为分类结果输出。

上图中的结构主要包含四个操作:

  1. 卷积
  2. 非线性函数/激活函数(ReLu)
  3. 池化
  4. 分类(全连接层)

每一个卷积神经网络都会包含这几个基本操作。我们将逐个理解这些操作。

1. 卷积

首先,我们需要知道计算机中的图像究竟是什么。

本质上,每个图像都可以表示为像素值矩阵。通道是一个传统的术语,用来指图像的某个组成部分。一个标准数码相机的图像有三个通道——红、绿、蓝——你可以把它们想象成三个相互叠加的2d矩阵(每种颜色一个),每个像素值在0到255之间。灰度图像只有一个通道,像素值的大小即表示明暗的程度。

下面开始介绍卷积。如上所述,图像是有像素值矩阵代表的。例如下图(需要补图)的一个5x5的矩阵,我们用一个3x3的矩阵对它进行卷积操作。首先3x3矩阵与5x5矩阵的第一行第一列对齐。这时候,3x3的矩阵和5x5矩阵的左上的3x3子矩阵的对应元素相乘,所得的9个乘积结果相加得到一个数字。这个数字就是3x3矩阵对5x5矩阵的第一个卷积结果。然后,3x3的矩阵在5x5矩阵上面向右滑动一个元素,再做同样的计算得到第二个数字。当滑动到5x5矩阵的右边边缘后,3x3矩阵与5x5矩阵的第二行第一列对齐,继续进行卷积计算。直到3x3矩阵的右下角和5x5矩阵的右下角矩阵对齐计算得到最后一个卷积结果,完成卷积。在卷积神经网络的术语中,这个3x3的矩阵被称为卷积核,计算的结果矩阵被称为特征图。不同的卷积核可以对同一个图像卷积计算得到不同的特征图。例如有的卷积核的任务是将图像的水平边缘检测出来,有的卷积核的任务是将图像的竖直边缘检测出来。在实践中,卷积神经网络在训练过程中会自己学习这些过滤器的值(虽然在训练过程之前我们还需要指定过滤器的数量、过滤器的大小、网络的架构等参数)。我们拥有的过滤器越多,提取的图像特征就越多,我们的网络就能更好地识别不可见图像中的模式。

2. 激活函数

在上面图3中的每个卷积操作之后,都会使用一个名为ReLU的附加操作。ReLU代表整流线性单元,是一种非线性操作。ReLU是一种逐元素操作(应用于每个像素),它将feature map中的所有负像素值替换为零。因为我们想让卷积神经网络学习的大多数的真实世界数据都是非线性的,卷积是一个线性逐元素的矩阵乘法和加法操作,所以我们在卷积操作的后面添加非线性激活函数。

3. 池化操作

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

池的功能是逐步减小输入表示[4]的空间大小。特别是,池使输入表示(特征维度)更小,更易于管理。减少了网络中的参数和计算量,从而控制了过拟合[4]。使网络不受输入图像中的小转换、扭曲和平移的影响(输入中的小扭曲不会改变池的输出——因为我们取本地邻域中的最大值/平均值)。帮助我们得到图像的几乎尺度不变的表示(确切的术语是“等变”)。这是非常强大的,因为我们可以检测图像中的对象,无论它们位于何处(详细信息请阅读[18]和[19])。

到目前为止我们已经从图像中提取到了一些特征,保存在特征图中。下面的全连接层则承担分类任务。

4. 全连接层

卷积层和池化层的输出表示输入图像的高级特性。全连通层的目的是利用这些特征,根据训练数据集将输入图像分类为不同的类。除了分类,添加一个全连接层也是(通常)学习这些特性的非线性组合的一种廉价方法。卷积层和池化层的大多数特性可能对分类任务有好处,但是这些特性的组合可能会更好。例如前面提取到的特征有眼和鼻子和嘴巴,两个眼睛和一个鼻子一个嘴巴的组合就可以检测出来一个人脸。完全连接层的输出概率之和为1。通过使用Softmax作为全连接层输出层中的激活函数来确保这一点。Softmax函数取一个任意实值分数的向量,并将其压缩为一个值介于0和1之间的向量,其和为1。

总的来说,卷积层和池化层作为特征提取器从图像中提取特征。全连接层作为分类器。

训练

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

步骤1:我们用随机值初始化所有过滤器和参数/权重

Step2:网络以训练图像为输入,经过正向传播步骤(卷积、ReLU、池操作,同时在全连通层中进行正向传播),得到每个类的输出概率。
假设上面船型图像的输出概率为[0.2,0.4,0.1,0.3]
由于第一个训练示例的权重是随机分配的,所以输出概率也是随机的。

Step3:计算输出层的总误差(所有4类的总和)
总误差=∑½(目标概率-输出概率)²

Step4:利用反向传播计算网络中所有权值的误差梯度,利用梯度下降更新所有滤波值/权值和参数值,使输出误差最小化。
权重按其对总误差的贡献比例进行调整。
当再次输入相同的图像时,输出概率现在可能是[0.1,0.1,0.7,0.1],这更接近目标向量[0,0,1,0]。
这意味着网络已经学会通过调整其权重/过滤器来正确地对特定图像进行分类,从而减少输出错误。

在第一步之前,过滤器的数量、过滤器的大小、网络的架构等参数都是固定的,在训练过程中不会改变,只更新过滤器矩阵的值和连接权值。

步骤5:对训练集中的所有图像重复步骤2-4。

以上步骤对ConvNet进行了训练——这本质上意味着对ConvNet的所有权重和参数进行了优化,从而正确地对训练集中的图像进行分类。当一个新的(不可见的)图像输入到ConvNet时,网络将经过正向传播步骤,并为每个类输出一个概率(对于一个新的图像,使用经过优化的权值计算输出概率,以正确分类之前的所有训练示例)。如果我们的训练集足够大,网络将(有希望地)很好地推广到新的图像,并将它们分类为正确的类别。

可视化卷积神经网络

一般来说,卷积层越多,我们的网络就能识别出越复杂的特征。例如,在图像分类中,ConvNet可以从第一层的原始像素中学习到检测边缘,然后使用这些边缘在第二层检测简单的形状,然后使用这些形状来检测更高层次的特征,例如在更高层次中的面部形状。下图演示了这一点——这些特征是使用卷积深度信念网络学习到的,这里的图只是为了演示这个想法(这只是一个例子:真实生活中的卷积滤波器可能检测到对人类没有意义的对象)。

Screen Shot 2016-08-10 at 12.58.30 PM.png

原文链接:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

猜你喜欢

转载自blog.csdn.net/JSerenity/article/details/89389818