数据分析与机器学习学习笔记--卷积神经网络(通俗理解)

1.引言

        卷积神经网络(CNN)广泛应用于图像识别和目标检测,是目前计算机视觉领域的中坚力量。上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络,在早期图像识别类的问题大多采用支持向量机解决,但是由于在2012年的Imagenet比赛中CNN表现出优异的性能,因此在2012年之后被大量应用于图像问题中,本篇就对卷积神经网络进行一个初步的解释。

2.卷积神经网络

        相比于上一篇的神经网络,卷积神经网络与其的区别主要表现在多出了卷积层,正是由于这些卷积层才能够有效提取出一些图像中细微的特征,观察下图对于普通的神经网络中间的隐层使用的都是左侧类型的全连接,所以每次的计算都是统筹的全局,因此才会造成忽略了一些细微的特征;但是观察右图,卷积层进行的是对一张图片的局部区域进行计算并提取特征,相对于全连接层该方式对于局部的特征把握肯定要更加仔细,因此卷积神经网络才能对图像的识别表现更为优秀。

数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第1张图片       数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第2张图片

        或许你有疑问为什么局部特征把握的越好在图像识别中表现就会越好?我们接着看下面的几幅图片,对于第一幅图片能够轻易的分辨出来这属于猫这一类,在此时人工神经网络和卷积神经网络没有明显的区别,但是对于后两幅图片人工神经网络的识别就不会特别好,因为从全局来看猫的特征被大部分遮蔽,经过人工神经网络计算后图片属于猫的概率不是特别大所以不会分类为猫,但是由于卷积神经网络提取的局部特征,正好猫的尾巴和脸部没有被遮挡经过计算依旧有很大概率属于猫类。经过这个简单的例子相信你已经理解了卷积神经网络为什对图像的分类表现得如此优异。

数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第3张图片   数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第4张图片   数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第5张图片

        接下来就要介绍卷积神经网络的核心部分‘卷积’,卷积简单来说就是将一个图片进行分区域计算,如下图所示,对于一个5x5的图像,我们使用3x3的卷集核,从图像的左侧开始每次选择一个3x3的区域计算并将计算结果记录在矩阵的第一个格内,让后将3x3的区域向右滑动一定距离(在图中滑动了1个距离)再次计算这次将计算结果记录在矩阵的第二个格子内,依此类推当滑动到最右侧后向下滑动一定距离,卷积的过层你应该有一个直观的了解了,接下来就是pooling层和padding层(为了分开讲解方便理解我将padding单独划为一层,在实际使用过程中padding与卷积操作结合使用,二者共同构成卷积层)。

数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第6张图片

        对于上方的卷积过层有没有发现一个问题,即数据的利用率问题,我们可以明显的发现位于原图像中央的数据进行卷积计算的次数较多而边缘部分利用的次数较少,这就造成了图像中央的特征在最后训练的模型中占比较重而边缘的数据损失了一部分的重要性,那么万一原图像中重要特征在边缘部分怎么办呢?这时就需要用到padding层,人为的在原数据矩阵边缘添加一圈0,由于边缘为0在计算时不影响最后的计算结果,同时对原图像的边缘点数据能够有效的提高利用率,通过这个方法就有效的解决了上述边缘数据不能充分利用的问题。

        pooling用来压缩数据和参数的量,防止过拟合风险,常见的pooling层有两种形式,分别为max pooling 和avg pooling,顾名思义一个是取最大值一个是取平均值,通常在连续的卷积层之间使用,如下图就是一个2x2大小的max pooling层,他将一个4x4的图像数据划分成4个2x2的区域(步长为2,如果步长为1则划分为9个区域,划分方式和卷积方式类似),并且返回每个区域的最大值记录在结果矩阵中,类似的如果使用avg pooling将返回的是每个2x2区域内的均值。或许你会疑问为什么要压缩数据,单纯观察上图经过卷积后的矩阵仅仅是一个3x3形式的,对于此矩阵计算量的确不大,但是假设我们使用的是一个224x224维的矩阵呢,不仅如此我们每个图像还有3个色彩空间整个图像的计算结果就十分大了,因此在计算机视觉领域使用pooling层是一个不可获取的存在。经过以上的卷积、池化操作后就来到了最后一步,此部分和人工神经网络类似,通过一个全连接层将之前卷积得到的数据进行输出。

数据分析与机器学习学习笔记--卷积神经网络(通俗理解)_第7张图片

        卷积神经网络的整体运行过层已经大致搭建起框架,接下来补充一些细微的知识点,完善整体框架。1.对于激活函数的使用,在卷积层使用的是Relu激活函数,因为大量的卷积操作更容易产生剃度消失的现象因此通过Relu函数进行一定的缓解(具体的表达形式已经在人工神经网络章节中写出)。2.pooling层的添加,常用的模型中pooling层并非是紧跟在卷积层后,通常是在进行几个卷积层后使用一次pooling层对数据进行压缩。3.Dropout层,为了防止训练的模型出现过拟合现象,提出了Dropout的概念,简单来说就是在最后的全连接层上随机的丢弃一些数据点达到防止过拟合的作用,该参数取值范围在[0,1]内,当取0时相当于不存在丢弃,为1时表示全部丢弃,经过实践该参数使用0.5时模型的表现最为优秀。

3.总结

        对于卷积神经网络其内部进行的前向传播和反向回馈总体来说与之前的过程类似,在次不在详细展开解释有想要了解的可以查阅相关论文阅读具体的推导过程,就我看来卷积神经网络重点要掌握卷积和池化的过程,此篇文章没有进行详尽的解释旨在帮助建立一个整体概念。在信息技术迸发的年代,卷积神经网络在现实生活中的应用十分广泛,从简单的物体分类到目标检测以及更为复杂的无人驾驶无一不需要用到CNN。卷积神经网络到此就告一段落,下一篇是最后一篇循环神经网络(RNN),由于上周有事我回到家赶出来卷积神经网络的博客后我考虑了一下决定下周和RNN一起发布,两种模型对比着了解或许更能快速的理解RNN(个人认为RNN是我写的这么多文章中最难‘理解’的一个)。

 

你可能感兴趣的:(数据分析与机器学习,深度学习)