CNN(卷积神经网络)


一、卷积神经网络产生的背景

传统神经网络层之间都采用全连接方式,如果层数较多,输入又是高维数据,其参数数量可能是一个天文数字。举例说明:我们现在要训练一张10001000像素的灰色图片,输入节点数即为10001000,倘若隐含层节点是100,那么从输入曾到隐含层间的权重矩阵就是1000000*100!如果还要增加隐含层或进行反向传播,那结果可想而知…除此之外采用全连接方式,参数太多还容易导致过拟合。
卷积神经网络的实质是一种算法,产生的目的是为了更好的处理诸如尺寸较大的图片等数据,同时能够节省算力。

二、卷积神经网络概念综述

卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络。
传统神经网络主要由全连接层构成,而卷积神经网络由卷积层、池化层构成,最后几层为了便于分类或者预测,将转换为全连接层。大一学生对CNN的一些初步见解示例图由两个卷积层(CONV1,CONV2)、两个池化层(POOL1,POOL2)、一个全局平均层(AAP)和一个全连接层(FC1)组成。
1、卷积层
卷积层是卷积神经网络的核心层,而卷积(Convolution)又是卷积层的核心。卷积说白了就是两个函数的一种相关运算,该运算被称为卷积运算。
输入和卷积核都是一个n维矩阵(即张量),卷积运算就是用卷积核分别乘以输入张量中的每个元素,然后输出一个代表每个输入信息的张量。其中卷积核(kernel)又称为权重过滤器或简称过滤器(filter)。接下来我们把输入、卷积核推广到更高维空间上,输入由2x2矩阵,拓展为5x5矩阵,卷积核由一个标量拓展为一个3x3矩阵

大一学生对CNN的一些初步见解
右边窗口中的4是怎么得出的?
它是输入图像中左上角的小框图中每个元素与卷积核对应元素的乘积之和,算式表达为:
11+10+11+00+11+10+01+00+1*1=4。
1.1、卷积核
卷积核,从这个名字可以看出它的重要性,它是整个卷积过程的核心。比较简单的卷积核或过滤器有Horizontalfilter、Verticalfilter、Sobel filter等。这些过滤器能够检测图像的水平边缘、垂直边缘、增强图片中心区域权重等。过滤器有一下集中。

(1)垂直边缘检测

大一学生对CNN的一些初步见解

这个过滤器是3x3矩阵(注,过滤器一般是奇数阶矩阵),其特点是有值的是第1列和第3列,第2列为0。经过这个过滤器作用后,就把原数据垂直边缘检测出来了。

(2)水平边缘检测。
以上这些过滤器是比较简单的,在深度学习中,过滤器的作用不仅在于检测垂直边缘、水平边缘等,还需要检测其他边缘特征。
过滤器如何确定呢?过滤器类似于标准神经网络中的权重矩阵W,W需要通过梯度下降算法反复迭代求得。同样,在深度学习学习中,过滤器也是需要通过模型训练来得到。卷积神经网络主要目的就是计算出这些filter的数值。确定得到了这些filter后,卷积神经网络的浅层网络也就实现了对图片所有边缘特征的检测。
1.2、步幅
卷积核中的每个元素称为权重(权重在训练过程中不断学习),每次移动的格数称为步幅(stride)。
1.3、填充
为了保证每次经过卷积或池化输出后的图片大小不变,我们可以使用Zero Padding(补零)。
根据是否扩展,Padding分为Same,Valid。
具体来说,一般在对图片扩展并补零时采用Same方式;而采用Valid方式时,对图片不扩展。实际训练过程中,一般选择Same,使用Same不会丢失信息。
设补零的圈数为p,输入数据大小为n,过滤器大小为f,步幅大小为s,则由下式:

P=(f-1)/2

卷积后的大小为式:

[(n+2p-f)/s]+1

1.4、**函数
卷积神经网络与标准的BP神经网络类似,为保证其非线性,也需要使用**函数。即在卷积运算后,给输出值另加偏移量,输入到**函数,然后作为下一层的输入。在实际应用过程中,ReLu函数在CNN中应用较多。
2、池化层
池化(pooling)又称下采样,通过卷积层获得图像的特征后,理论上可以直接使用这些特征训练分类器(如softmax等)。但是,这样会使机器面对巨大的计算量挑战,倘若算力不够,极易容易产生过拟合的现象。
为了进一步降低网络训练参数及模型的过拟合程度,就要对卷积层进行池化处理。常有的池化方式有一下三种:
(1) 最大池化:选择pooling窗口中的最大值作为采样值。
(2) 均值池化(Mean Pooling):将pooling窗口中的所有值相加取平均,以平均值作为采样值。
(3) 全局最大(或均值)池化:与平常最大或最小池化相对而言,全局池化是对整个特征图的池化,而非在移动窗口范围内的池化。

大一学生对CNN的一些初步见解

池化层在CNN中可用来减小尺寸,提高运算速度及减小噪声影响,让各特征更具有匹配意外输入的能力。池化层比卷积层简单,他没有卷积运算,只是在滤波器算子滑动区域内取最大值或平均值。池化的作用则体现在降低数据量,即保留显著特征,降低特征维度,增大感受野(通俗的说,即特征图上的一个点对应输入图上的区域)。深度网络越往后面越能捕捉到物体的语义信息,这种语义信息是建立在较大的感受野基础上的。
3、全连接层
卷积神经网络中的全连接层等价于传统BP神经网络中的隐含层。全连接层位于卷积神经网络隐含层的最后部分,并只向其它全连接层传递信号。在全连接层中,经过池化的图片矩阵将经过特殊卷积由二维变成一个一维向量。例如,在VGG16这一卷积神经网络中:
对2242243的输入,最后一层卷积可得输出为77512,如后层是一层含4096个神经元的全连接层,则可用卷积核为77512*4096的全局卷积来实现这一全连接运算过程。
如此处理将大大的减少位置分布对于特征提取的影响。例如:
大一学生对CNN的一些初步见解

经过全连接层的计算将极大忽略猫在图片中位置对于检测的影响,对于BP神经网络来说,这是难以企及的事情。因为CNN具有在一个局部学会便能感知全局的能力,而BP由于本身输入特点(有多少数据就有多少输入神经元)难以做到这一点。
4、训练
CNN的训练与传统的BP神经网络训练是类似的,不同的是在CNN中对于损失函数的定义,在CNN中,损失函数的求解依赖于交叉熵。[3]
5、输出
经过全连接层的特殊处理,图片已经被提取为一个一维向量。接下来的输出计算与传统的BP神经网络类似,在利用CNN进行结果识别时,根据已有训练得出来的权重,对全连接层的一维向量进行加权求和,得到各个结果的预测值,然后取值最大的作为识别的结果,这一点是与BP神经网络类似的:
大一学生对CNN的一些初步见解

小结:

作为神经网络算法中最具代表性的两类,BP神经网络与CNN的计算求解的关键步骤已经被我组详细的研究。BP神经网络算法是典型的全连接神经网络,其在处理小型图片时可以展现其实力,而面对大型图片数据的输入的处理速度不尽人意。CNN正是为了克服BP神经网络的缺点而提出的。从算法,算力,数据的角度来讲,神经网络算法的提出是为了用较少的人力干预完成较为满意的学习任务,为之换取的代价则是较高的算力。小组在实验时,采用AMD的CPU进行试验,计算耗时让人难以接受。而采用英伟达CUDA则计算加速效果大大提升。总之,神经网络的实现时算法,算力,数据三者结合的产物。

相关文章: