我们先来了解一下什么是卷积神经网络
卷积神经网络:卷积神经网络与普通神经网络非常相似。每个结点都接收输入值,并以一定的权重传递给下一个结点,最后在输出层每个结点输出每个分类的分数。分值最大的即为输入数据所属的分类。
那么什么是卷积呢。
卷积:数字图像中的卷积其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的值。
可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。
所有的卷积核,都是通过训练获得的。举例用的卷积核,旨在对其物理意义进行解释,而不会直接应用于 CNN,否则效果很差。
卷积具有两个优点:
1.通过对一片区域的操作,获取局部特性。例如,使用 5*5 的卷积核,可以将这片区域的矩阵转换为一个实数值。
2.不同的区域共享卷积核。这样,所提取的属性具有相同的物理含义。同时,卷积比全连接的参数少很多。例如,一个 100×100 的图像,如果用基础的神经网络模型进行全连接,两层之间的连线有10^8条,以及有相应数量的参数;如果用单个 5 × 5 的卷积核,只需要 25 个参数。
卷积神经网络CNN:在图像分析中,将每个像素点作为独立属性来处理是不合适的。
由于图像是由像素构成的,每个像素又是由颜色构成的。每个像素都有3个参数来表示颜色信息,这么大量的数据处理起来是非常消耗资源的。
那么可以将复杂问题简化,把大量参数降维成少量参数再做处理。在大部分场景下,降维并不会影响结果。比如1000像素的图片缩小成200像素的图片,其实并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。
我们现在来了解一下人类的视觉原理:从原始信号摄入开始(瞳孔摄入像素(颜色)),接着做初步处理(边缘和方向),然后抽象(眼前的物体的形状),然后进一步抽象(大脑进一步判定该物体是只气球)。总结:颜色->边缘->大致形状->抽象出该物体。 越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。
CNN就是模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类。
CNN主要有数据输入层, 卷积层, RELU激励层, 池化层, 全连接层。
数据输入层:由于输入数据单位可能不一样,因此需要对输入的数据需要进行预处理操作
数据预处理有以下几种方法:
1.均值化处理 : 对于给定数据的每个特征减去该特征的均值(将数据集的数据中心化到0)
2.归一化操作 :在均值化的基础上再除以该特征的方差(将数据集各个维度的幅度归一化到同样的范围内)
卷积层:对输入数据进行卷积计算。计算完一个数据窗口内的局部数据后,数据窗口平移滑动,直到计算完所有数据。
RELU激励层:这一层就是激活层, 在CNN中一般使用RELU函数作为激活函数,因为迭代速度快。它的作用主要是将卷积层的输出结果做非线性映射。
RELU激活函数:RELU函数其实是分段函数,把所有的负值都变为0,而正值不变,这种操作被称为单侧抑制。
池化层:主要功能是通过逐步减小表征的空间尺寸来减小参数量和网络中的计算;池化层在每个特征图上独立操作。使用池化层可以压缩数据和参数的量,减小过拟合。如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
下采样:对于一个样值序列间隔几个样值取样一次,这样得到新序列就是原序列的下采样。
上图中,我们可以看到,原始图片是20×20的,我们对其进行下采样,采样窗口为10×10,最终将其下采样成为一个2×2大小的特征图,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。
池化层相比卷积层可以更有效的降低数据维度,这么做不但可以大大减少运算量,还可以有效的避免过拟合。
全连接层:类似传统神经网络的部分,用来输出想要的结果。
经过卷积层和池化层处理过的数据输入到全连接层,得到最终想要的结果。经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。