对于高维图像数据,卷积神经网络利用了卷积和池化层,能够高效提取图像的重要“特征”,再通过后面的全连接层处理“压缩的图像信息”及输出结果。对比标准的全连接网络,卷积神经网络的模型参数大大减少了。
其定义是两个函数中一个函数(g)经过反转和位移后再相乘得到的积的积分。如下图,函数g是过滤器。它被反转后再沿水平轴滑动。在每一个位置,我们都计算f和反转后的g之间相交区域的面积。这个相交区域的面积就是特定位置出的卷积值。
CNN通过设计的卷积核(convolutionfilter,也称为kernel)与图片做卷积运算(平移卷积核去逐步做乘积并求和)。
如下示例设计一个(特定参数)的3×3的卷积核:
让它去跟图片做卷积,卷积的具体过程是:
可以发现,通过特定的filter,让它去跟图片做卷积,就可以提取出图片中的某些特征,比如边界特征。
进一步的,我们可以借助庞大的数据,足够深的神经网络,使用反向传播算法让机器去自动学习这些卷积核参数,不同参数卷积核提取特征也是不一样的,就能够提取出局部的、更深层次和更全局的特征以应用于决策。
卷积神经网络通常由3个部分构成:卷积层,池化层,全连接层。简单来说,卷积层负责提取图像中的局部及全局特征;池化层用来大幅降低参数量级(降维);全连接层用于处理“压缩的图像信息”并输出结果。
卷积层主要功能是动态地提取图像特征,由滤波器filters和激活函数构成。一般要设置的超参数包括filters的数量、大小、步长,激活函数类型,以及padding是“valid”还是“same”。
另外的,卷积的类型除了标准卷积,还演变出了反卷积、可分离卷积、分组卷积等各种类型,可以自行验证。
通过卷积运算的介绍,可以发现卷积层有两个主要特点:局部连接(稀疏连接)和权值共享。
由于局部连接(稀疏连接)和权值共享的特点,使得CNN具有仿射的不变性(平移、缩放等线性变换)
池化层可对提取到的特征信息进行降维,一方面使特征图变小,简化网络计算复杂度;另一方面进行特征压缩,提取主要特征,增加平移不变性,减少过拟合风险。但其实池化更多程度上是一种计算性能的一个妥协,强硬地压缩特征的同时也损失了一部分信息,所以现在的网络比较少用池化层或者使用优化后的如SoftPool。
池化层设定的超参数,包括池化层的类型是Max还是Average(Average对背景保留更好,Max对纹理提取更好),窗口大小以及步长等。如下的MaxPooling,采用了一个2×2的窗口,并取步长stride=2,提取出各个窗口的max值特征(AveragePooling就是平均值):
在经过数次卷积和池化之后,我们最后会先将多维的图像数据进行压缩“扁平化”,也就是把(height,width,channel)的数据压缩成长度为height×width×channel的一维数组,然后再与全连接层连接(这也就是传统全连接网络层,每一个单元都和前一层的每一个单元相连接,需要设定的超参数主要是神经元的数量,以及激活函数类型),通过全连接层处理“压缩的图像信息”并输出结果。
LeNet-5由YannLeCun设计于1998年,是最早的卷积神经网络之一。它是针对灰度图进行训练的,输入图像大小为32321,不包含输入层的情况下共有7层。下面逐层介绍LeNet-5的结构:
第一层是卷积层,用于过滤噪音,提取关键特征。使用5*5大小的过滤器6个,步长s=1,padding=0。
第三层使用5*5大小的过滤器16个,步长s=1,padding=0。
第四层使用2*2大小的过滤器,步长s=2,padding=0。没有需要学习的参数。
第五层是卷积层,有120个5*5的单元,步长s=1,padding=0。
有84个单元。每个单元与F5层的全部120个单元之间进行全连接。
Output层也是全连接层,采用RBF网络的连接方式(现在主要由Softmax取代,如下示例代码),共有10个节点,分别代表数字0到9(因为Lenet用于输出识别数字的),如果节点i的输出值为0,则网络识别的结果是数字i。