元学习:基础与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 卷积神经网络

卷积神经网络模型(Convolutional Neural Network,CNN)应用广泛,是最重要的神经网络模型之一。其常被用于图像处理中的图片分类和目标识别、跟踪,最早的成熟CNN是Yann LeCun等作者于1998年在论文“Gradient-Based Learning Applied to Document Recognition”[20]中提出的LeNet-5。之后常用的卷积神经网络模型包括Alex Krizhevsky等作者于2012年提出的AlexNet[21]、Matthew Zeiler和Rob Fergus于2013年提出的ZF Net[22]、Christian Szegedy等作者于2014年提出的GoogLeNet[23]、Karen Simonyan和Andrew Zisserman于2015年提出的VGG Net[24],它们在ImageNet[25]举办的图片分类比赛中获得了突出的成绩。

3.2.1 卷积层和滤波器

在模式识别(Pattern Recognition)任务中有两个主要模块:特征提取模块和分类器。分类的精度依赖于提取的特征是否反映了图片的主要信息,例如,对于猫和狗的图片分类,提取的特征应该反映出猫和狗的不同。特征提取模块针对不同的分类任务反映了任务的特性,卷积神经网络中的特征提取模块是卷积层,卷积层中包含很多个滤波器(Filter),用来提取不同的图片局部特征,不同的卷积核(Convolution Kernel)对应不同的滤波器,形成多个特征图(Feature Map)。

卷积神经网络需要对高维的图片数据进行降维,提取图片数据中的重要特征,进而对图片进行分类。图片中的像素点很多,相邻或相近的像素点之间的相关性很大,常常属于同一个物体。卷积层考虑了图片中相邻像素点所在局部的特征,用来提取图像的局部特征。在卷积神经网络模型处理图片之前,需要对图片像素点进行归一化处理,类似实例归一化方法,将图片像素点的区间归一化到0到1之间。滤波器是卷积神经网络模型处理图片的第一步,提取图片的局部特征(Local Feature),形成特征图。不同的滤波器提取的局部特征不同,对应的特征图也不同。

图3.4给出了卷积神经网络模型中滤波器的示意图。这是一个简化的例子,图中每个方格代表一个像素点,图片是11像素×11像素的,即长和宽方向都是11个像素点,对应图中无阴影区域。这里的滤波器是3像素×3像素的方块,又称为感知域(Receptive Field),对应图中加粗黑线表示的3像素×3像素边框。在每个加粗黑线边框中,9个像素点进行加权平均,得到的值被记录到右侧特征图的对应方格中。加粗黑线框移动的间距是步长,相邻加粗黑线框之间间隔2个方格,此处的步长(Stride)是2。在图片边缘的像素点取加粗黑线框时,为了补足9个像素点,需要在原来11像素×11像素的图片外侧包裹一层宽度等于步长的框,对应图中的阴影区域,阴影区域中像素点的值常常都设为0,用0来填充外侧阴影区域(Zero-Padding)。加粗黑线方框代表滤波器,形成了对原本图片中像素点的移动平均(Moving Average),计算出右侧的特征图。

图3.4还给出了卷积神经网络模型中的滤波器卷积核膨胀(Dilation)的例子,卷积核膨胀又称为扩张卷积(Dilated Convolution)或者空洞卷积。这里的膨胀率(Dilation Rate)是2,卷积核是3像素×3像素的方块,通过膨胀,变成了5像素×5像素的方块。在图片的像素点中,选取5像素×5像素的方块,但是仅考虑其中3×3=9个格子中的值。如图3.4所示,仅考虑5×5方块中3×3格点上的值:1、2、3、4、5、6、7、8、9,其余格子的值都用0填充,然后进行加权平均,计算特征图中相应位置的值。卷积核膨胀的作用是扩大感受野(Receptive Field),适应多变的输入图片的精度。对于精度很高的图片,像素点很多很密集,处理这样的图片可以使用下采样层降低图片的精度、增加卷积神经网络的层数等,但是这些都比较麻烦,使用膨胀的卷积核可以处理这样的图片。

img

图3.4 卷积神经网络模型中的滤波器和卷积核膨胀示意图

图3.5给出了图3.4中滤波器参数的示意图,这是一个简化的例子。左侧加粗黑线框代表3像素×3像素的滤波器,里面包括9个像素点。右侧加粗黑线框代表滤波器中的权重参数,此处示意图忽略了偏差参数。这里给出的简化滤波器对9个像素点进行加权平均来计算提取的特征,加权平均后通过Sigmoid或者Tanh函数进行非线性变换,在卷积神经网络中可以根据全局误差函数(Global Loss Function)进行反向传播来计算滤波器中的权重和偏差参数。

img

图3.5 卷积神经网络中的滤波器参数示意图

根据任务需求不同,滤波器可以使用任何函数来对局部的像素点进行特征提取,相应的参数在卷积神经网络模型的训练过程中确定。例如,在对猫和狗的图片进行分类时,猫和狗可以处于图片中的任何位置,因此,所有滤波器中的权重参数都应该是一样的,无论猫和狗的位置在哪里,提取出来的局部特征都反映了它们是否存在。如图3.5所示,图片中所有滤波器使用的都是这9个权重参数,这样的设置有利于减小滤波器的权重参数,又不降低模型的表示力。在卷积神经网络中可以使用多个不同的滤波器来提取不同的图片局部特征,不同的滤波器使用不同的权重参数,多个滤波器得到的多个特征图继续进行后续的处理。

3.2.2 池化层和下采样层

池化层是一种下采样层,可对卷积层输出的多个特征图进行进一步降维,以提取图片中有效的特征,对特征进行进一步的抽象。当输入图片的像素很高时,需要很多池化层对特征进行抽象;当输入图片的像素较低时,需要相对较少的池化层对特征进行抽象。在卷积神经网络的设计中,卷积层后往往紧跟着池化层,这样的卷积层和池化层的配对会被重复很多次,以对图片中的特征进行抽象、提取和总结。

池化方式主要有两种:最大值池化(Max-Pooling)和平均值池化(Mean-Pooling)。最大值池化计算特征图的局部最大值,平均值池化计算特征图的局部平均值。图3.6给出了简化的池化层示意图。池化层对特征图进行降维,在特征图中取出移动但不重叠的3像素×3像素的方块,降维成右侧特征图中的每个方格。此时的步长等于移动方块的尺寸,于是方块之间不重叠。在池化层的滤波器中,方块之间往往是不重叠的,然而重叠也是可以的。最常用的是最大值池化,具有更好的鲁棒性,在迭代和传播过程中更稳定。

img

图3.6 池化层示意图

图3.7给出了最大值池化和平均值池化的简化示意图。在池化局部方块内,最大值池化计算移动加粗线方块内所有元素的最大值,放入降维后的特征图。平均值池化计算方块内所有元素的平均值,放入降维后的特征图。在降维过程中,保证获取的特征与图片中的位置无关。最大值反映了局部区域内最大的信号特征,而平均值反映了局部区域内平均的信号特征。类似地,还可以采用中位数池化等来对局部的特征进行总结和抽象。元学习常常用在神经网络模型的自动设计中,在每个任务上根据任务的特性,对神经网络模型的结构进行改造,使之智能地适应新任务,在新任务上找到最优的神经网络模型。

img

图3.7 最大值池化和平均值池化示意图

在池化层中,移动的局部方块也可以重叠。在AlexNet的论文[21]中指出,使用重叠的局部方块进行特征图的池化,有利于提高ImageNet图片分类精度。然而在一般情况下,为了提高对图片中特征抽象和总结的效率,在池化层的滤波器中移动的方块之间不重叠,且滤波器的尺寸较大,在实际应用中这样的方式有利于加快神经网络的训练,然而不利于神经网络精度的提高。一般认为,卷积神经网络的层数越多、滤波器尺寸越大、滤波器方块移动的步长越小,越有利于提高神经网络模型的精度,但是这样做会增加模型训练的时间。

下采样层(Sub-Sampling Layer或者Downsampling Layer)对卷积层输出的特征图进行降维,提取图像中的有效信息。下采样层包括池化层,但是不仅限于池化操作。降维的方法有许多,都可以考虑在下采样层中使用,下采样层是从像素点到特征之间的映射。在下采样层中,对输入特征图取出移动的局部方块,加入权重和偏差参数计算加权平均,对加权平均后的结果进行非线性变换。例如,Sigmoid或者Tanh函数的变换,类似于卷积层的操作,只是此处移动的局部方块是不重叠的,而卷积层中的方块之间有重叠,而且在一般情况下,下采样层中不包含权重或者偏差这种可训练的参数。然而事无定则,在下采样层中也可以包含可训练的参数,滤波器中移动的方块也可以有重叠,一切都要视具体情况而定,是追求精度,还是追求时间效率,具体的计算设备也会影响精度和时间成本,选择合适的解决实际问题的模型设计即可。

3.2.3 全连接层和上采样层

全连接层采用普通神经网络结构,所有神经元之间都有连接。在卷积神经网络中,在处理图片分类问题时,全连接层是隐藏层到输出层之间的全连接,意味着隐藏层中的所有神经元和输出层中的所有神经元全部交叉连接。在分类问题中,输出层的神经元个数等于类别数目,隐藏层神经元的输出作为输出层神经元的输入,全连接层将隐藏层给出的图片抽象特征映射成图片分类结果。

上采样层(Upsampling Layer)或者图像插值(Interpolation)通过在图片的像素点之间进行插值来放大图像,是从特征到像素点的映射,常用的上采样层方法包括反卷积(Deconvolution)和图像插值。上采样层常常用于需要在像素点上进行预测的任务,例如,边框(Bounding Box)问题。一种解决方案是通过对每个像素点进行分类来找到目标物体的轮廓。带有全连接层的CNN用于图片分类,将用于图片分类的CNN中的全连接层更换成上采样层,将隐藏层输出的图片抽象特征映射到图片的每个像素点上,进而对图片中的每个像素点进行分类预测。判断每个像素点是否属于目标物体,从而估计目标边框,这样就将用于图片分类的CNN转换成了基于像素点级预测的边框估计CNN模型。

图3.8给出了卷积神经网络示意图。最左端是输入层,最右端是输出层,中间层包括卷积层和池化层,用来进行特征提取,对高维输入进行降维。根据需要,可以设置很多层的卷积层和池化层,还可以对学习率、激活函数、卷积核大小、步长等超参数进行优化,以实现更好的模型精度。这之后就是全连接层或者上采样层,全连接层将提取的特征和输出层连接起来,输出数据所属的类别;上采样层将提取的特征映射到像素点上,输出层是像素点级的预测值。卷积神经网络的结构形式灵活,可拓展性强,可以灵活组合基本结构,对超参数进行优化设置,获取更好的精度,适应不同的任务。

img

图3.8 卷积神经网络CNN示意图

3.2.4 经典卷积神经网络

ImageNet[25](详情参见链接9)是著名学者李飞飞等提出的著名图片数据集,在论文“ImageNet: A large-scale hierarchical image database”中给出了详细的讲解。ImageNet中的图片来自互联网上搜索名词后下载的所有相关图片,图片标注来自人工标注。ImageNet在2010—2017年每年举办图片分类比赛ILSVRC[26],比赛数据集的训练集中有一百多万张高清图片,需要将这些图片分类到一千个不同的类别。用CNN对这些图片分类取得了不错的效果,其中具有代表性突出贡献的CNN包括AlexNet[21]、ZFNet[22]、GoogLeNet[23](Inception模块)和VGG Net[24]。在元学习和迁移学习中,常将在ImageNet上预训练过的CNN模型进行微调,再用于新的图片分类问题中,可获得不错的分类精度。

AlexNet[21]是一种重要的CNN网络,包含6000万个参数、65万个神经元、5个卷积层、最大值池化层的组合、3个全连接层、1个Softmax输出层、分类为1000个不同类别。AlexNet结合了随机失活方法缓解过拟合问题。Alex Krizhevsky等人在论文“ImageNet Classification with Deep Convolutional Neural Networks”[21]中提到,他们提出的AlexNet在两个内存为3GB的GTX580 GPU上并行计算,运行5~6天获得了满意的训练结果,虽然计算量很大,但是AlexNet提升了图片的分类精度。在人工智能领域,人们往往追求精度的提升,而忽视计算量的投入。因为计算能力的提升非常迅速,可以预见,计算量大在未来并不是困难,人们愿意付出计算量来换取精度提升,而方法的提出往往是面向未来的,所以计算量往往不是人工智能领域人们考虑的重要因素。

ZFNet[22]也是一种重要的CNN网络,其命名与AlexNet类似,取自模型作者的姓名。ZFNet的结构和AlexNet相似,作者采用反卷积层设计了在卷积层和池化层中提取特征的逐层可视化方法。在反卷积层中将提取的特征映射到图片的像素点上,获得将提取的特征可视化的图片,看到特征反映在图片上呈现的内容,进而直观了解特征的平移不变性。通过对特征的逐层可视化,有利于改进卷积神经网络的结构,获得更好的精度。

GoogLeNet[23]是最重要的CNN网络模型之一,其是一个22层的卷积神经网络。通过反复叠加使用Inception模块增加了卷积神经网络的深度和宽度,在ImageNet图片分类比赛ILSVRC14中获得了最佳精度。AlexNet使用的参数数量是GoogLeNet的10多倍,但是GoogLeNet的层数比AlexNet多,而且GoogLeNet的精度比AlexNet更好。论文列表中的论文[23]中给出了两种形式的Inception模块,一种是将前一层的输出分别输入到1×1卷积层、3×3卷积层、5×5卷积层、3×3最大值池化层,然后将处理后的特征拼接起来,将不同尺寸的特征聚合考虑;另一种见图3.9,将前一层的输出分别输入到1×1卷积层、1×1卷积层+3×3卷积层、1×1卷积层+5×5卷积层、3×3最大值池化层+1×1卷积层,其中的1×1卷积层达到了对特征进行降维的效果,然后将处理后的特征拼接起来,将不同尺寸的特征聚合考虑。GoogLeNet将Inception模块叠合起来组成卷积神经网络模型,增加了深度和宽度,将不同Inception模块组成的CNN模型集成起来,获得了更好的模型表现。

img

图3.9 Inception模块示意图

VGG Net[24]也是最重要的CNN网络模型之一,使用非常小的3×3卷积核,并且加深了卷积神经网络模型的层数,取得了很好的模型表现。卷积层中的步长是1个像素点,最大值池化层中使用2×2的像素框,步长是2个像素点,激活函数使用ReLU函数,VGG网络层数在11~19这个数量级,网络宽度在第一层是64,最大到512,这样的设计提升了CNN的精度。

这些都是经典的深度卷积神经网络模型,是非常棒的图片特征提取器。在ImageNet上预训练过的这些经典深度卷积神经网络模型可以下载,在迁移学习和元学习中,可以将下载的预训练模型中的输出层参数进行更新,应用到新的图片分类任务中。