本文只作为个人学习整理归纳总结,如有侵权请见谅
上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络。第一个卷积神经网络模型名为LeNet。卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,受到猫的视觉系统神经元局部敏感和方向选择特性的启发,加入了局部感知(卷积)和池化等能力,是一种高效识别方法。
(本文面向的读者默认对BP网络有一定认识)
CNN的分类模型与传统模型的不同点在于其可以直接将一幅二维图像输入模型中,接着在输出端即给出分类结果。其优势在于不需复杂的预处理,将特征抽取,模式分类完全放入一个黑匣子中,通过不断的优化来获得网络所需参数,在输出层给出所需分类,网络核心就是网络的结构设计与网络的求解。这种求解结构比以往多种算法性能更高。
该网络由输入层、卷积层、池化层、全连接层、输出层构成,这也是最经典的卷积神经网络结构。输入层输入数据集进行网络训练,卷积池化用于特征提取,全连接层将提取出的特征进行整合,在输出层得到结果。
卷积层的作用是并行(多个卷积核分别同时进行卷积,每个卷积核代表从不同的角度进行特征提取)地进行特征提取,根据多个一定的权重(即卷积核W),依次对特征图(Feature Map,每一层的输出称为特征图,输入层的特征图为它本身)内以“块”为单位的像素(该部分像素称为感知野)进行内积(卷积)运算,其输出就是提取的特征之一。
卷积层中各输出计算公式(1)如下:
式中,上角标l表示该神经元在整个神经网络中对应的层数, Xlj 表示第l层第j个神经元的输出,σ表示激活函数, Ml−1 表示第l-1层神经元的输出, Xl−1i 表示第l-1层第i个神经元的输出, Wlij 表示第l层第j个神经元和第l-1层第i个神经元之间的权值, blj 第l层的第j个神经元的偏置。
该图表示一个卷积核的一次卷积(一次卷积代表卷积核遍历完整个图像),图中黄色部分代表卷积核(filter),大小为3*3,宫格内数字代表卷积核权重;绿色部分代表被卷积的对象,蓝色框表示一步卷积(假设步长为1,一步卷积代表卷积核每次向右移动一个像素,当移动到边界时回到最左端并向下移动一个单位)的操作对象,即像素快。在卷积核移动的过程中将图片上的像素和卷积核的对应权重相乘,最后将所有乘积相加得到一个输出。
该图显示二维数据的卷积过程,如灰度图等,仅有长宽两个维度。如果输入层数据为RGB彩色图,有长宽高三个维度,此处我们习惯性称“高”为“通道”或“深度”,彩色图有Red、Green、Blue三个通道。此时,每步卷积在三个通道同时进行,输出一个值。
每一层卷积核数量代表该层输出特征图的通道数。每一个卷积核学习到一部分特征(局部特征),所以引入多个卷积核,同时学习不同的特征,最终在全连接层将所有局部特征整合。每层卷积核的大小应该相同,但卷积核内权重不同。
输出特征图大小计算公式:
在卷积层输出公式中,将卷积结果带入激活函数公式中,函数值才是特征图数值。
激活函数的作用是将特征图中的特征加强,特征部分输出值尽可能大,非特征部分尽可能淡化,我们将该过程称为“激活”。如在边缘信息检测中,特征为曲线,则特征图中曲线及周边的值较高,其他区域的值较小。现常用的两大激活函数Sigmoid函数及ReLU(线性修正)函数,但Sigmoid慢慢被高收敛性、计算量小、防止过拟合、低激活率、减少梯度消失问题的ReLU取代,下图是两函数图:
Sigmoid函数:
池化层(Pooling)又称降(下)采样层,针对卷积后的特征图,通过计算某一位置相邻域的均值或最大值的方式对其压缩,提取其重要特征,降低特征图的分辨率和网络输出对于位移及变形的敏感程度,增强网络的鲁棒性,防止过拟合,提高模型泛化能力。
在通过卷积获取图像特征之后是利用这些特征进行分类。可以用所有提取到的特征数据进行分类器的训练,但这通常会产生极大的计算量。所以在获取图像的卷积特征后,要通过池化方法(非线性采样方法)对卷积特征进行降维。将卷积特征划分为数个n*n的不相交区域,用这些区域的最大(或平均)特征来表示降维后的卷积特征。这些降维后的特征更容易进行分类。
池化在计算机视觉中的价值体现在两个方面:(1)、它减小了来自上层隐藏层的计算复杂度;(2)、这些池化单元具有不变性,即使图像有小的位移、缩放、扭曲等,提取到的特征依然会保持不变,减小了相对位置的影响。由于增强了鲁棒性,池化方法是一个高效的降低数据维度的采样方法。从更直观的角度解释池化,其基本操作与卷积层相似,只不过将卷积核的功能简化,只取对应位置的最大值、平均值等(最大池化、平均池化),并且不经过反向传播的修改。
池化特征图大小计算公式如公式2、3所示,padding=0;
一般情况下卷积神经网络中,卷积层和降采样层交替连接在一起,用于降低计算时间并逐步建立起更高的空间和数据结构不变性,并通过比较小的降采样系数使得这些特性得以维持。
通常卷积核和池化窗口大小为正方形,正方形有各向同性的性质,且易于实现。同时卷积核和池化窗口大小要适中:卷积核越小,提取的特征就会越细致,但是会丧失特征图的相关性信息,使得网络的泛化性降低;相反,卷积核越大,虽然会保留相关性信息,但是会造成特征图的细节缺失。池化窗口的增大会提高网络泛化能力,降低网络规模,但是过大的窗口会丢失大量的特征信息,造成网络性能的下降,所以窗口大小要适中。
因此在网络搭建过程中,可以借鉴成熟网络模型的案例,仿照其设置各项参数,如卷积核数目大小等,随后再进行优化。
上一层输出的特征图为局部观察结果,全连接层将其全部重置为一维向量,进行整合拼接。将其与全连接层的每个神经元相连,得到输出。
全连接层的输入是n*1的向量,并通过几个全连接层对向量进行降为。从宏观的角度解释,该步操作是其进行全局特征提取(卷积池化是局部特征提取)。
在输出层中我们经常使用softmax回归或logistic回归作为分类器。Logistic回归针对二分类问题,因此类标记(Labels)为 y(i)∈{0,1} ; softmax回归针对多分类问题,类标记(Labels)为 y(i)∈{1,2,...,k} 。
实际上可以将logistic回归代价函数看作是是softmax代价函数的特殊情况。而多分类中,对于选择softmax分类器还是个logistic分类器,取决于所有类别之间是否互斥。所有类别之间明显互斥用softmax分类器,所有类别之间不互斥有交叉的情况下最好用个logistic分类器。
在卷积神经网络中,卷积层的每一个卷积滤波器重复的作用于整个感受野中,对输入图像进行卷积,卷积结果构成了输入图像的特征图,提取出图像的局部特征。每一个卷积滤波器共享相同的参数,包括相同的权重矩阵和偏置项。共享权重的好处是在对图像进行特征提取时不用考虑局部特征的位置,通过一个卷积核的操作提取了原图的不同位置的同样特征。简单来说就是在一幅图片中的不同位置的相同目标,它们的特征是基本相同的。而且权重共享提供了一种有效的方式,使要学习的卷积神经网络模型参数数量大大降低。
在BP神经网络中,每一层的神经元节点是一个线性一维排列结构,层与层各神经元节点之间是全连接的,这样会造成权重的数量巨大而难以训练网络。卷积神经网络中,层与层之间的神经元节点不再是全连接形式,利用层间局部空间相关性将相邻每一层的神经元节点只与和它相近的上层神经元节点连接,即局部连接。这样大大降低了神经网络架构的参数规模。
使用局部感知的原因是一般人们认为图片中距离相近的部分相关性较大,而距离比较远的部分相关性较小。在卷积操作中步长的设置就对应着距离的远近。但是步长的设置并无定值需要使用者尝试。
如图所示,图像大小为32×32,即输入层输出特征图大小为32×32.卷积层C1中有6个卷积核,卷积核大小为5×5,步长默认为1,padding=0,(32-5+0)/1+1=28,则C1层输出特征图为28×28×6。池化层S2,池化窗口大小为2×2,池化层特征图深度不变,(28-2+0)/2+1=14,则输出特征图大小为14×14×6。
卷积层C3共16个5×5的卷积核,其中1-6个卷积核与S2中相连的3个特征图相连接,7-12个卷积核与S2中相连的4个特征图相连,13-15个卷积核与S2中不相连的4个特征图相连,最后一个卷积核与S2中所有特征图相连。卷积层C3输出特征图为10×10×16,池化层S4输出特征图为5×5×16。卷积层C5有120个5×5的卷积核,与S4中所有特征图相连,(5-5+0)/1+1=1,输出特征图为1×1×120。全连接层F6中国有84个神经元,采用全连接的方式,输出84×1的向量,并在输出层使用Soft max回归输出。