卷积神经网络简介
传统的BP神经网络与DNN(深度神经网络)不同层神经元的连接方式是“全连接”,也就是这一次层的一个神经元的输入,会接受上一次每一个神经元的输出,这种方式即为“全连接神经网络”。这样的连接方式有一个的缺点:因为权值与偏置等参数量大,导致训练收敛十分缓慢。特别是对于图像这样的训练数据,动不动就是数以百万的像素,理论上虽然可以收敛,但你可能得等上N年才有结果,而且它的泛化性也会变差。例如一张黑白的 28×28 的手写数字图片,输入层的神经元就有784个,如下图所示:
若在中间只使用一层隐藏层,我们设定hidden layer有15层,此时参数 w 就有 784×15=11760 多个;若输入的是28×28 带有颜色的RGB 格式的手写数字图片,输入神经元就有28×28×3=2352 个。这很容易看出使用全连接神经网络处理图像中的需要训练参数过多的问题。而在卷积神经网络(Convolutional Neural Network,CNN)中,卷积层的神经元只与前一层的部分神经元节点相连,即它的神经元间的连 接是非全连接的,且同一层中某些神经元之间的连接的权重 w 和偏移 b 是共享的(即相同的),这样大量地减少了需要训练参数的数量。
全卷积神经网络输出的特征图如同昆虫的复眼,每个grid为一只眼睛,每只眼睛所看到的东西不一样,但是每只眼睛的视野范围相同(即,每只眼睛的感受野大小相同), 每只眼睛单独工作,互不影响。然后每只眼睛会判断:1、它看到了什么物体(类别);2、这个物体有什么特点(属性,可选项)。
卷积神经网络的特点
局部感知
一张图像,我们实际上并不需要让每个神经元都接受整个图片的信息,而是让不同区域的神经元对应一整张图片的不同局部,最后只要再把局部信息整合到一起就可以了。这样就相当于在神经元最初的输入层实现了一次降维。
局部感知即卷积核的局部感受野,指的是卷积核所覆盖的像素面积,由于每个卷积核所覆盖的面积仅是很少的一部分,是局部特征,即为局部感知。CNN是一个从局部到整体的过程(局部到整体的实现是在全连通层)。下图是全连接层和卷积层的对比。
权重共享
传统的神经网络的参数量巨大,例如对1000X1000像素的图片做一次全连接操作,需要(1000X1000)10的6次方个参数。这可以说是卷积神经网络的最重要也是它牛逼之处,刚刚我们说到全连接神经网络最大的问题就是权值参数太多,而卷积神经网络的卷积层,不同神经元的权值是共享的,这使得整个神经网络的参数大大减小,提高了整个网络的训练性能。
降采样
降采样是卷积神经网络的另一重要概念,通常也称之为池化(Pooling)。简单理解可以看作是对图像的一次“有损压缩”,因为在实际的训练中,我们并不需要对图像中的每一个细节都进行特征提取和训练,所以池化的作用就是更进一步的信息抽象和特征提取,当然也会减小数据的处理量。最常见的方式有最大值(Max)池化、最小值(Min)池化、平均值(Average)池化。池化的好处是降低了图像的分辨率,整个网络也不容易过拟合。最大值池化如图所示。
卷积神经网络的层次结构
CNN由输入和输出层以及多个隐藏层组成,隐藏层可分为卷积层,池化层、RELU层和全连通层,如下图:
- 输入层:CNN的输入为原始图像,三维(RGB)或二维的向量。
- 卷积层:CNN的核心,卷积层由一组可学习的滤波器(filter)或内核(kernels)组成,它们具有小的感受野,每个卷积核具有kernel size,padding,stride等参数。从图像的左上角依次做内积操作,提取出图片的高层次特征。
- 池化层:对conv后输出的feature map进行下采样操作,这样的好处有降低参数的数量,防止过拟合等作用。
- 激活层:在CNN中使用relu激活函数,在网络中引入了非线性。通过relu激活函数传递卷积运算的结果。因此,最终特征映射中的值不是简单的线性关系。
- 全连接层:全连接层的输入是一维向量,需要将pooling 层的输出向量flatten成一个一维的向量,然后输入到全连接层中,最后送到soft Max层进行类别的分类。
- 输出层:用于输出结果
当然中间还可以使用一些其他的功能层:
- 归一化层(Batch Normalization):在CNN中对特征的归一化
- 切分层:对某些(图片)数据的进行分区域的单独学习
- 融合层:对独立进行特征学习的分支进行融合
输入层
输入层(Input Layer)是将原始数据或者其他算法预处理后的数据输入到卷积神经网络,数据没有明确定义,可以是数字图像,可以是音频识别领域经过傅里叶变换的二维波形数据,也可以是自然语言处理中一维表示的句子向量。输入层的作用是将输入数据送入卷积神经网络进行特征提取,然后获得我们想要的结果。同时根据计算能力差异,机器存储能力差异和模型参数多少可以控制输入不同数量的数据。
在CNN的输入层中,(图片)数据输入的格式 与 全连接神经网络的输入格式(一维向量)不太一样。CNN的输入层的输入格式保留了图片 本身的结构。对于黑白的 28×28 的图片,CNN的输入是一个 28×28 的的二维神经元。