CNN-卷积神经网络浅析

卷积神经网络(Convolutional Neural Network)是一种层次模型,属于“端对端”的学习方式,和以往在解决图像类问题的分治法不一样,分治法是将其分解为预处理、特征提取与选择、分类器设计等若干步骤。分治法的动机是将图像识别的母问题分解为简单、可控且清晰的若干小的子问题。不过分步解决子问题时,尽管可在子问题上得到最优解,但子问题上的最优并不意味着得到全局的最后解!但是“端对端”的的学习方式是完全交给深度学习模型直接学习从原始输入到期望输出的映射。相比分治策略,“端到端”的学习方式具有协同增效的优势,有更大可能获得全局最优解。
卷积神经网络(Convolutional Neural Network)是一个专门针对图像识别问题设计的神经网络。它模仿人类识别图像的多层过程:瞳孔摄入像素;大脑皮层某些细胞初步处理,发现形状边缘、方向;抽象判定形状(如圆形、方形);进一步抽象判定。
图1
如上图所示,从最初的图像像素的认识到图像边缘的检测再到各类边缘的组合,最后对各类特征的组合形成我们看到的目标模型!

输入层

  1. 去均值:把输入数据各个维度都中心化为0,其目的就是把样本的中心拉回到坐标系原点上。
  2. 归一化:幅度归一化到同样的范围,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
    去均值和归一化
  3. PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
    PCA和白化

卷积层

卷积层是卷积神经网络(CNN)的核心,但是什么是卷积呢?卷积就是图片中的局部数据和卷积核的内积,它是为了提取图片局部的特征,那卷积核又是什么呢?卷积核又称过滤器(filter),如下图,其实就是一组带有固定的权重的神经元,一组二维矩阵,用来提取一组特定的特征,提取的特征一般称为feature map(特征映射)。至于卷积层就是多个filter的叠加形成的,至于通道就是理解为视角、角度。例如同样是提取边界特征的卷积核,可以按照R、G、B三种元素的角度提取边界,RGB在边界这个角度上有不同的表达;再比如需要检查一个人的机器学习能力,可以从特征工程、模型选择、参数调优等多个方面检测。(最初输入的图片样本的 channels ,取决于图片类型,比如RGB;卷积操作完成后输出的 out_channels ,取决于卷积核的数量。此时的 out_channels 也会作为下一次卷积时的卷积核的 in_channels;卷积核中的 in_channels ,就是上一次卷积的 out_channels ,如果是第一次做卷积,就是样本图片的 channels 。)
在这里插入图片描述
深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。

至于卷积层的参数问题,就不得不提CNN的两大“特色”了,局部感知和权值共享!在BPNN里,我们可以看见一张图片假如它是黑白的,也就是100x100x1,而隐藏层的节点数是100个,那也就是说权重就高达100x100x1x100+100=1000100个,这还是比较小的单通道图片,在现在这种小图片很少了,所以在CNN里必须的精简参数了,不然难以训练出一个好的模型!

所以CNN就提出了局部感知和权值共享的方法来解决参数过多的问题!

局部感知:科学家发现,人对事物的观察是通过对不同特征捕获的综合,视觉神经系统中有专门负责不同特征感知的视觉元。从对视觉神经系统的研究出发,神经网络的研究者提出用一个神经元每次观察输入的部分特征(比如图片的一小块),然后通过逐步移动的方法观察整个输入的方法,然后用多个这种神经元提取输入的输入的不同特征,最后在通过一个全连接网络对这些特征进行整合,最终达成分类效果。下图形象的描述了这种特征的提取。

在一篇博客中看到了一个非常贴切的比喻,张贴下给大家看下:(可以想象这么一个场景,公司根据地域分为西北区、西南区、华东区、华南区等销售区域,现进行大规模人员调整,各区域的业务人员全部撤换掉。新老员工面临工作交接,BPNN的做法是老员工排成一行,新员工排成一行,不分地域,老员工要和每个新员工交接,新员工也要和每个老员工交接,这样效率十分低下(西北地区的老员工和华南地区的新员工实际上没什么好交接的);而CNN是按照各大销售区域排队,西北地区的老员工站在一起,华东地区的老员工站在一起,下一层负责各个区域的新员工也按照负责区域站好,各个区域内部的新老员工交接即可。)
在这里插入图片描述
权值共享:其实权值共享这个词说全了就是整张图片在使用同一个卷积核内的参数,比如一个331的卷积核,这个卷积核内9个的参数被整张图共享,而不会因为图像内位置的不同而改变卷积核内的权系数。说的再直白一些,就是用一个卷积核不改变其内权系数的情况下卷积处理整张图片(当然CNN中每一层不会只有一个卷积核的,这样说只是为了方便解释而已)。

假如有100个销售区域(事实上图像远大于100),每个销售区域老员工有100名,新员工也有100名,那么BPNN就需要10000x10000=1亿次交接。而如果按照销售区域交接,每个新员工只和对应区域的100名老员工交接,那么需要10000x100=100万次,是以前的1%,进一步,卷积中存在“权值共享”,即下一层神经元A所负责的区域虽然和B负责的区域不一样,但是他们的参数是一样的。对应到上边的例子中,虽然各个区域具体的业务不一样,但是交接的模式大致相同,假设只有客户名单、业务进度两项内容。那么统一开个会就好了,参数实际上只有100*2=200个,是以前的五十万分之一。

卷积操作
图中input 7x7x3中,7*7代表图像的像素/长宽,3代表R、G、B 三个颜色通道,可以看到周边有填充0; 有两个卷积核Filter w0、Filter w1,每个filter对应每个通道有一组w权重;一个filter滑动到一个位置后计算三个通道的卷积,求和,加bias(偏置),得到这个filter在该位置的最终结果;每个filter的输出是各个通道的汇总;输出的个数与filter个数相同。所以最右边能得到两个不同的输出。

1的计算过程:
第一个通道和对应权重的结果:0*(1)+0*(1)+0*(-1)+0*(-1)+0*(0)+1*(1)+0*(-1)+0*(-1)+1*(0) = 1
第二个通道和对应权重的结果:0*(-1)+0*(0)+0*(-1)+0*(0)+1*(0)+1*(-1)+0*(1)+0*(-1)+2*(0) = -1
第三个通道和对应权重的结果:0*(0)+0*(1)+0*(0)+01+2(0)+0*(1)+0*(0)+0*(-1)+0*(0) = 0
偏置:1
1+(-1)+ 0 + 1 = 1

相信大家对于卷积的运算这都能看懂,但是可能不知道为什么要在周围填充0,下面看一个周围不填充0的,计算过程一样!
在这里插入图片描述
这样做卷积运算的缺点是,卷积图像的大小会不断缩小,另外图像的左上角的元素只被一个输出所使用,所以在图像边缘的像素在输出中采用较少,也就意味着你丢掉了很多图像边缘的信息,为了解决这两个问题,就引入了padding操作,也就是在图像卷积操作之前,沿着图像边缘用0进行图像填充。

说到这不得不说卷积步长的概念了:卷积步长是指过滤器在图像上滑动的距离

输出图像的尺寸和输入图像的大小(W)以及卷积步长(S),过滤器(filter)大小(F),填充0的数量(P)的关系满足以下公式:

全零填充(padding=SAME):输出数据体的尺寸=(W−F+2P)/S+1
不用全零填充(padding=VALID):输出数据体的尺寸=(W-F+1)/S

当不能整除的时候向下取整!

ReLU激励层

若干线性操作层的堆叠仍然只能起到线性映射的作用,无法形成复杂的函数。在实际使用中,有多达十几种激活函数可供选择。直观上,激活函数模拟了生物神经元特性:接受一组输入信号并产生输出。在神经科学中,生物神经元通常有一个阈值,当神经元所获得的输入信号累积效果超过了该阈值,神经元就被激活而处于兴奋状态;否则处于抑制状态。在最初的时候用的激活函数是Sigmoid,也叫Logistic函数。但是由于该函数两端,对于大于 8(或小于 −5)的值无论多大(或多小)都会压缩到 1(或 0)。如此便带来一个严重问题,即梯度的“饱和效应。
在这里插入图片描述
为了解决这一难题,引入了ReLU函数,也是现在最为常用的激活函数。
在这里插入图片描述

池化层(汇合层)

最大池化(Max pooling)
最大池化思想很简单,以下图为例,把4x4的图像分割成4个不同的区域,然后输出每个区域的最大值,这就是最大池化所做的事情。其实这里我们选择了2x2的过滤器,步长为2。在一幅真正的图像中提取最大值可能意味着提取了某些特定特征,比如垂直边缘、一只眼睛等等。

在这里插入图片描述
平均池化
平均池化和最大池化唯一的不同是,它计算的是区域内的平均值而最大池化计算的是最大值。在日常应用使用最多的还是最大池化。
在这里插入图片描述

池化层不会改变矩阵的深度,但是它可以缩小矩阵的大小,也可以进一步减少全连接层的节点数,从而减少整个神经网络的参数个数!

全连接层

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
全连接层在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、汇合层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的特征表示映射到样本的标记空间的作用。

卷积神经网络之优缺点
优点
  • 共享卷积核,对高维数据处理无压力
  • 无需手动选取特征,训练好权重,即得特征分类效果好
缺点
  • 需要调参,需要大样本量,训练最好要GPU
  • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

参考链接:https://www.cnblogs.com/skyfsm/p/6790245.html
https://blog.csdn.net/ice_actor/article/details/78648780?utm_source=blogxgwz0
https://blog.csdn.net/cufewxy1/article/details/80485886?utm_source=blogxgwz0
https://blog.csdn.net/cheneykl/article/details/79740810

猜你喜欢

转载自blog.csdn.net/qq_36501027/article/details/83211682
今日推荐