简明卷积神经网络讲解

一. 什么是卷积神经网络?

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 -----wikipedia
卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling) -----wikipedia
layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。----wikipedia。

二. 图像的卷与积

2.1 从计算机的视角重新认识图像

人们在观看一个图片的时候就简单是一个个像素呈现出的不同颜色,但是在计算机处理的过程中,图像实际上是由一个大型矩阵进行处理显示的,毕竟计算机之中能直接处理的数据只有0与1,只能进行数学运算。
下面是在MNIST数据集(一组手写数字的图片集)之中的其中一张图片,可以看到左边是我们能在平时看到的普通图片,右边是计算机对0/1进行处理显示输出的图片。
简明卷积神经网络讲解_第1张图片

2.2 卷

对于“卷”这个部分,我们可以想象一个将一张纸对角卷起来的这一个过程,在这个过程中这张纸的厚度会增加,但是其外层的表面积会减少。
我们的“卷”这个部分就是在模拟这个过程,将一个完整的图像矩阵分成为n*n的矩阵。

2.3 积

“积”这个部分是生成特征卷积核的关键方法,本质上是将“卷”之后分出来的一个个矩阵通过矩阵相乘(通常是3*3矩阵)
简明卷积神经网络讲解_第2张图片
。通过“卷”与“积”这个过程,我们可以将原来的图片进行特征提取,其效果如下图:简明卷积神经网络讲解_第3张图片

2.4 激活函数处理

我们已经讲过,上述“卷”的过程本质是线性的矩阵相乘运算。但是线性函数过于简单,受范式影响较大,无法胜任这种神经网络计算的较为大型的复杂运算。此时我们就可以引入激活函数进行中间处理,它的目的是为了增加其函数的非线性单元以适用于大型运算,其中使用最广的是ReLU(线性修正单元),其原理如下:
简明卷积神经网络讲解_第4张图片
从此图中可以看到,ReLU函数将原平滑函数修正为了非线性(x=0时不可导)函数。

2.5 卷积核的池化

池化(pooling),有的地方也称之为降维采样(SubSampling),以我的理解它就是一种有损压缩图片的算法。它能使上一步处理出来的卷积核既能在一定程度上保留卷积核特征又能减小其卷积核的文件大小,加快程序运行速度。原理是将卷积完成之后的卷积核相邻的框进行取最大值,从而达到减小其文件大小的目的。比如我们在MNIST项目中用到的最大池化(maxpooling),将一个图片按照灰度等级按照0到10进行标记,其中一个矩阵中有2-8-0-1的信息,说明其此地方还是有实际特征的(因为有个颜色十分深的点),我们可以对其进行2*2(四合一)最大池化,取其矩阵中的最大值8作为其特征进行采样,这样也就在大幅减少了其矩阵大小的同时尽可能多地保留了其卷积核的特征。
简明卷积神经网络讲解_第5张图片

其中需要注意的是,对卷积核进行池化的时候2*2采样时是比较合适的方法,当这个数字变大的时候,虽然文件大小被极度压缩,但是相对的也会丢失大量的特征导致模型预测效率低下,属于捡芝麻丢西瓜的一种做法。

2.6 卷积与池化注意事项

通常我们需要卷积和池化交替两次进行就足够了,这是因为由于如果进行多次卷积提取特征,卷积核所包含的特征就会过于鲜明,泛用性就会更差(比如正7倒7)所以当卷积这个过程进行次数过多的话,会出现一定程度的过拟合现象,类似于高考数学中三角函数和数列考其中一个,结果一直练三角函数的题考出来数列题的时候就傻了。而如果进行多次卷积池化相当于多层次池化,多进行一次22池化相当于进行了一次44池化,会丢失大量的重要特征,对我们的模型训练是没有好处的。

三 .神经网络连接

经过上述的一系列操作,我们就得到了很多的卷积核。这时候就可以将它们运用起来,这个过程我们通常称为“全连接”。
全连接是图像识别中十分重要的一个部分,其原理来自于科学家对于猫对物体识别时大脑皮层的刺激的变化,科学家发现猫去识别一个物体是有一定方向性的,比如要识别一个毛线团,猫首先会辨别出其轮廓为圆形,之后识别其为一个球体,然后确认其为毛线球。如下图:
简明卷积神经网络讲解_第6张图片
于是我们可以仿照其图像识别方法进行配置。经过两次卷积与两次池化以后,我们可以得到很多的特征图,每个卷积核都包含着原图一定数量的信息,这时我们可以将其进行相互拼接集成其所有卷积核所表达出来的特征。例如当当特征矩阵足够明确地表示出原图所存在的物体,此时计算机就会识别出我们想要得到的信息。 其大概实现原理就是这样。
简明卷积神经网络讲解_第7张图片
其中最左边就是我们的的卷积核(类似于猫的神经元),第二层对于第一层进行识别,如果第一层有足够的特征证明其为目标物体,则程序就会判断出我们想要的答案。类似于我们要识别出一只猫,需要先识别出猫耳,猫眼,猫嘴,猫尾等可以证明这是猫的特征,将通过已经识别出的特征(Hidden Layer)进行再次整理连接,程序则会有足够的特征来证明这是一只猫(Output Layer)。

四.卷积神经网络总结附图

简明卷积神经网络讲解_第8张图片
此图标示了整个卷积神经网络卷积以及全连接的全部过程,手写字母A主要就是通过卷积(特征提取),池化(有损压缩),全连接(神经网络)最终输出其字符A的。如果有意向对于其进行学习的话,建议可以从MNIST手写数字数字识别项目进行入门,相信你一定能有所成就!

你可能感兴趣的:(机器学习,python)