CNN综述
卷积神经网络(CNN:Convolutional Neural Network)
卷积神经网络是一种特殊的多层神经网络,像其它的神经网络一样,卷积神经网络也使用一种反向传播算法来进行训练,不同之处在于网络的结构。卷积神经网络的网络连接具有局部连接、参数共享的特点。局部连接是相对于普通神经网络的全连接而言的,是指这一层的某个节点只与上一层的部分节点相连。参数共享是指一层中多个节点的连接共享相同的一组参数。局部连接、参数共享的使用使得需要训练的参数减少,计算量也相继减少,并且CNN通过增加网络层数,保全了全局的特征。
如下图所示,传统的神经网络基本都是全连接层,节点与上一层的所有节点都相连,这就会产生大量的参数训练,也会导致过拟合的出现。而CNN通过局部相连的特性,节点只与上一层的部分节点相连,减少了参数的数量,并在一定程度上抑制了过拟合的出现。
CNN的训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:
第一阶段,向前传播阶段:
(1)、从样本集中取一个样本,输入网络;
(2)、计算相应的实际输出;在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常执行时执行的过程。
第二阶段,向后传播阶段:
(1)计算实际输出与相应的理想输出的差;
(2)按极小化误差的方法调整权矩阵。
这两个阶段的工作一般应受到精度要求的控制。
网络的训练过程如下:
1)选定训练组,从样本集中分别随机地寻求N个样本作为训练组;
2)将各权值、阈值,置成小的接近于0的随机值,并初始化精度控制参数和学习率;
3)从训练组中取一个输入模式加到网络,并给出它的目标输出向量;
4)计算出中间层输出向量,计算出网络的实际输出向量;
5)将输出向量中的元素与目标向量中的元素进行比较,计算出输出误差;对于中间层的隐单元也需要计算出误差;
6)依次计算出各权值的调整量和阈值的调整量;
7)调整权值和调整阈值;
8)当经历M后,判断指标是否满足精度要求,如果不满足,则返回(3),继续迭代;如果满足就进入下一步;
9)训练结束,将权值和阈值保存在文件中。这时可以认为各个权值已经达到稳定,分类器已经形成。再一次进行训练,直接从文件导出权值和阈值进行训练,不需要进行初始化。
CNN主要由输入层(INPUT)、卷积层(CONV)、**函数(RELU)、池化层(POOL)和全连接层(FC)组成。
输入层:对输入的数据进行预处理,从而得到模型统一的格式,常用的操作有去均值、归一化、PCA/白化等。
卷积层:卷积是对图像和滤波矩阵做内积的操作,即为加权叠加,卷积层用来进行特征提取。
**函数:**函数可以帮助我们引入非线性因素,使得我们的神经网络能够更好的解决较为复杂的问题,常见的**函数有sigmod函数、tanh函数、ReLU函数、ELU函数、PReLU函数等。
池化层:对输入的特征图像进行压缩,使得特征图像变小,简化网络的计算复杂度,并对图像进行特征压缩,提取主要特征信息。即对输入的图像做降采样,常用的池化方法为求最大值、平均值、中位数等。
全连接层:链接所有的特征,经输出值送给分类器(如softmax分类器)。
经典的CNN:
LeNet(1998年):最早用于数字识别的CNN。这个网络是大量神经网络架构的起点,给这个领域带来了很多灵感。
AlexNet(2012年):它可以算是LeNet的一种更深更宽的版本,包含了几个比较新的技术点,首次在CNN中成功应用了ReLU、Dropout和LRN等Trick,同时AlexNet也使用了GPU进行运算加速。AlexNet可以说是神经网络在低谷期后的第一次发声,确立了深度学习(深度卷积网络)在计算机视觉的统治地位,同时也推动了深度学习在语音识别、自然语言处理、强化学习等领域的拓展。
ZF-Net(2013年):相对于AlexNet进行了微调,使用了ReLU**函数、交叉熵代价函数,使用较小的filter以保留更多的原始像素信息。
GoogleNet(2014年):VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3*3)和最大池化尺寸(2*2)。VGGNet的拓展性很强,迁移到其他图片数据上的泛化性非常好,到目前为止,VGGNet依然经常被用来提取图像特征。
VGGNet(2014年):
ResNet(2015年):。ResNet 有着简单的思路:供给两个连续卷积层的输出,并分流(bypassing)输入进入下一层。