🏷️sec0602_Convolutional_Architecture
前面我们提到,卷积神经网络是一种至少有一个权重参数层使用卷积运算来替代一般矩阵乘法运算的前馈神经网络。所以,卷积神经网络与第5章所介绍的普通的前馈神经网络是非常相似的。它们都是由可学习权重和偏差的神经元组成。这些神经元都在接收来自前一层的若干输入后,通过点乘操作来计算输出。有些神经元还会增加一个非线性函数来对输出进行整形。整个网络依然可以被理解成一个可微的函数,将网络一端的原始像素图像转变成另外一端的类别分数。它们都会在网络最后的全连接层上使用一个损失函数来计算模型的损失值,并且所有用于优化模型的技术和技巧也都是通用的。那么,卷积神经网络到底有什么不同呢?
让我们先来简单回顾一下传统的神经网络。正如 图6-6 所示,传统神经网络以向量形式进行输入,哪怕原始的输入是2D的灰度图或者3D的彩色图,它们也都会被事先拉伸成一条向量才会被送入到网络中。以向量形式输入到网络中的信息通过一系列的隐藏层后,被送入到一个以全连接形式存在的输出层,并生成分类概率。这里的一系列隐藏层同样是以全连接的形式存在,每个隐藏层都由若干的神经元构成,并且都与前一层的所有神经元完全相连。不过每个神经元都是以完全独立的形式运行,不会与同一层的其他神经元共享参数和连接。
仔细观察 图6-6(左)中的输入,原始的手写数字图像的尺度为28×28,即长和宽的像素都是28。在普通神经网络的中,第一个隐藏层的神经元将包含28×28=784个权重参数。这个数量级的参数似乎还是可以接受的,但这种基于全连接结构的模型很难扩展到更大尺度的图像中。回顾上一章的 项目007 中的手势识别数据,那些图像的尺度是100×100的彩色图像,即高度和宽度都是100像素,颜色通道数为3。此时,第一层的参数数量将变成100×100×3=30,000个。事实上,100×100的图像依然小得可怜。随着图像尺度的增加,参数数量会呈指数级上升,特别是当模型深度进一步增加的时候。很显然,全连接带来的海量参数将造成计算资源的巨大浪费,同时还会导致严重的过拟合问题。
图6-6 三个隐藏层的普通神经网络(左)和两个卷积层的卷积神经网络(右)
与常规的前馈神经网络不同,同样以图像作为输入的卷积神经网络会以一种更合理的方式来约束体系结构的设计。卷积神经网络的所有层都会以三维的形态[H,W,C]进行排列,包括高度、宽度和深度。(需要注意的是,这里提到的深度是指一个层的激活单元的第三个维度,或者理解为第 6.5 节中所讨论的通道,而不是指深度学习中的深度,也即基于全连接的神经网络中的总层数。)例如,手势识别数据集中的输入图像就是一个激活三维体,它的高度、宽度和深度的维度分别为100×100×3。当它被输入到卷积神经网络后,模型的各个隐层同样会将其变换为不同尺度的三维体,每一层的每一个神经元都只会连接到前一层的一个局部小区域中,而不是以全连接的形式与前一层的所有神经元相连。最终的输出层以1×1×N的形态存在,其中N的维度与分类的类别数保持一致。换句话说,原始的H×W的图像会被降维成1×1尺度的单像素。每个1×1的单像素,其值都表示样本属于某一个分类的概率值,多个不同的类别则由第三个维度(深度)决定。
图6-7 卷积神经网络结构示例图
正如上面所描述的,卷积神经网络的每个层都可以通过一个可微函数来将一个激活体转换为另外一个激活体。 图6-7 所示,我们主要使用三种不同类型的层来构建卷积神经网络,分别是卷积层(Conv)、池化层(Pooling)和全连接层(FC)。与多层感知机类似,卷积神经网络也是一种前馈式的神经网络。粗略上看,它与多层感知机差不多,也是由若干的层通过堆叠组成,通过逐层抽象实现特征的提取和转化,并最终利用一个 [全连接层+Softmax]
的组合来实现类别语义的输出。与多层感知机稍微有一些不同的是,我们会使用 [卷积层-激活层-池化层]
的组合来替代传统神经网络 [全连接层-激活层]
的组合。此外,我们也同样需要一个激活函数层(ReLU)来实现元素级的非线性变换。
在本节中,我们先简要介绍一下卷积神经网络的几个基本功能层,包括输入层、输出层、激活函数层、全连接层,这些功能层在多层感知机中也有,但功能和实现上稍有不同。在后面的几个小节中,我们再重点讲解卷积层和池化层。
对于任何一个机器学习模型来说,输入层都是必不可少的,但不同模型的输入层可能是千差万别的。例如,在传统机器学习的支持向量机或者线性模型中,输入样本都需要先进行一定特征工程,按照某种预定的规则、将原始数据转换成特征向量或者特征矩阵。在多层感知机中,稍微有一些不同。一方面,输入样本可以和传统机器学习的方法一样通过特征工程来实现特征向量的转换;另一方面,也可以直接将图像像素拉成向量进行输入。这是一种飞跃,因为基于手工特征提取的特征工程存在一个巨大的问题,那就是手工特征的选择非常的主观,然而我们很难知道什么样的特征适合我们的样本。对于卷积神经网络来说,输入层的数据就变得更加直接了。我们甚至不需要将样本拉成向量形式,而是将样本直接以原始形态输入到模型中。通常,我们会以四维张量的形式将样本输入到卷积神经网络中,这个四维张量的形态定义为[N,H,W,C]。其中,第一个维度N是一次性输入到模型中的样本的批量大小,这个参数规定了模型完成一次训练,能够同时处理的样本数量。第二和第三个维度分别是图像的高和宽的像素值。第四个维度是通道,它对应于图像的色彩空间。
图6-8 卷积神经网络的输入层数据
下面,我们以 图6-8 中的三个样图为例,介绍一下常见的几种输入。第一幅图是一张灰度图,它来源于Caltech UCSD鸟类识别数据集。假设我们不改变图片的大小,那么它的输入张量就是[64,300,400,1]。这里的64表示的是批次大小(BatchSize),也就是说一次性输入模型的样本数量为64张图片。300和400表示分辨率为300×400像素,即高度为300像素、宽度为400像素的图像。最后一个维度,值为1,这意味着输入图像的色彩空间只有1个维度,换句话说就是灰度图。汇总一下,张量[64,300,400,1]代表的就是输入层的数据是一个包含64张分辨率都是300×400的灰度图集合。第二幅图是来源于MSCOCO数据集的彩色图片,它依然是以四维张量的形式进行输入。前面三个维度的定义和第一幅灰度图的定义是相同的。第四个维度3
表示每个像素都以RGB三原色空间进行保存。换句话说,这幅图是一幅彩色图。视频样本的输入会稍微有些不同,如第三幅图所示,输入张量可以采用两种模式进行输入。第一种是借助3D卷积来进行数据处理,此时的输入就会变成5D张量,增加一个时间域的维度。但更多的时候是采用第二种方法,以n个四维的视频帧来处理视频的输入。此时,视频会被转换为多个图片进行输入,其形态定义与第二幅图相同。在实际应用中,我们发现虽然3D卷积更加适合带时域的样本,但是谨慎地选择时域的长度来匹配视频样品是比较困难的。相比之下,模型对视频帧的数量并不是那么的敏感,输入5帧或者7帧对最终性能的影响并不是很大。
卷积神经网络的输出层与传统神经网络的输出层基本相同,它们都以 特征层+损失函数层
的模式进行构建。这里的特征层通常都是全连接层,只不过会以不同的形态存在。在分类任务中,模型的输出结果都是语义类别,也就是说每个类别都会对应于一个具体的标签值。因此,可以使用一个神经元数量与类别数相同的向量来做特征层,并在这个特征层之后使用一个Softmax交叉熵或者逻辑回归来生成各个类别的归一化概率。在检测和分割任务中,由于输出结果通常是一个区域,因此,对于这类基于像素区域的任务来说,它的GroundTruth使用的是与原始图像相同的特征图,而不再是一个向量。此时,我们称这个特征图为分数热图(score map),不过它的每个像素也同样都是一个全连接向量,用来标识该像素所属的类别。
卷积神经网络的激活函数与多层感知机的激活函数基本上没有什么不同,它们都是被用来增加模型非线性特性最有效的方法。激活函数可以有效地增强网络的拟合能力。基本上在多层感知机中能使用的激活函数,在卷积神经网络中也都可以用的。最常用的激活函数是Sigmoid,Tanh和ReLU及其相关变种。在这些激活函数中,ReLU激活函数由于其效率高、性能好,经常被作为默认的激活函数使用。需要注意的是,在同一个卷积神经网络中,一般只使用一种类型的激活函数,而不会混合使用。更多有关激活函数层的相关知识,请参考第 5.6 节。
全连接层是深度学习的基石,也是深度学习的起源,但同时也是深度神经网络中最被诟病的部分。追溯到最早的神经网络感知机以及它的重要变种多层感知机,它们都是基于全连接层实现的,甚至在本章中我们所要介绍的卷积神经网络,全连接层也都扮演着重要的角色。不过与早期的神经网络相比,全连接层由于其参数过多的弊端(详见第 6-3 节),它逐渐从核心的特征提取功能层变为特殊功能层。甚至于在一些新框架中,直接将大部分的全连接层都给去除了。不管如何,还是让我们一起来简单看看,在卷积神经网络中全连接层到底扮演着什么样的角色。从原理和实现上来看,卷积神经网络中的全连接层和多层感知机中的全连接层并没有什么不同,它的每个神经元都与上一层的所有神经元相连。当然,如果存在Dropout策略的话,部分神经元会根据Dropout的概率被强制抑制。从功能上来看,卷积神经网络的全连接层与多层感知机的全连接层变换就比较大了。在多层感知机中,全连接层是特征提取和变换的关键功能层,它实现将特征从一种空间向另外以一种空间的逐级变换,并最终将输入样本抽象成确定的语义信息。可以说没有全连接层就没有多层感知机。在卷积神经网络中,主干网络不再使用全连接层进行特征抽象,而是使用卷积层和池化层。全连接层通常会被放到最后一个卷积层之后来实现特征空间约束的打破以及最终特征的输出。另外一方面,它也会被放到输出层的前面实现类别的一对一映射。
图6-9 VGG16全连接层功能结构图
下面我们以VGG16模型的全连接层为例,对卷积神经网络中的全连接层做简单的解释。图6-9 的VGG16全连接层功能结构图所示,第一个全连接层FC6是跟随在最后一个卷积层Conv5之后的。卷积层Conv5的尺度为7×7×512,它包含512个7×7的特征图。如果想要将这个特征张量继续向前进行传输并送入全连接层FC6中,则需要先将卷积层Conv5拉伸成一个向量。我们知道,按照线性代数的矩阵计算规则,矩阵和向量是无法进行点乘运算的。矩阵的向量化非常简单,只需要从上至下、从左往右将矩阵中的元素进行顺序排列即可。此时,我们将得到一个(7×7×512)×1=25088×1的向量。全连接层FC6的维度为1×4096,两个向量进行矩阵乘法将得到一个25088×4096的二维矩阵,这个矩阵就是两个全连接层之间进行两两相连所获得的权重矩阵。不难计算,Conv5和FC6之前的参数数量超过1个亿。类似的,我们可以获得FC6和FC7之间以及FC7和FC8之间的权重矩阵,它们的参数数量分别为1677.7万和409.6万。这些层之间的参数数量是非常巨大的,很容易造成模型的过拟合。值得注意的是,在VGG16中,最后的输出节点的数量是1000,这个值并不是固定的,它需要与分类任务的类别数保持一致。因为,每个神经元节点的值都代表着一个类别的分数值或者概率值。
说到这里大家可能会发现,除了最后一个用来做分类的全连接层是必不可少的,前面的全连接层似乎用处并不大,而且还会带来参数过多的问题。在相当长的时间里,我们都认为FC6和FC7并不是必须的。因此,像经典的GoogLeNet,ResNet都将FC6和FC7从模型中直接移除了。不过近年来的一些研究又发现全连接层还是有一些它独特的好处。首先,以四维张量形式存在的卷积特征图在拉成向量之后,空间信息被打破了。这似乎并不是太好的结果,但对于分类任务来说,我们只会关心样本中的目标是什么,并不会关心目标在图片中的位置。事实上,在样本的多样性不足时,全连接层的存在还有助于打破目标处于固定位置的偏向性。但是在目标检测、图像分割等需要依赖于目标定位信息的下游视觉任务来说,全连接层这种打破空间限制的特性就变得不能容忍了。从另外一个角度来看,在几乎所有和类别相关的任务中,包括分类、检测、识别、检索等,我们依然会保留一个全连接层作为输出层的前置层,这个层通常会与任务的类别数相同,被用来当作“分类器”使用。如果说卷积层、池化层和激活函数层是将原始数据映射到隐层特征空间的话,全连接层的作用就是将模型学到的分布式特征表达映射到样本类别空间。比如在ImageNet中,最后一个全连接层的神经元数量是1000,与ImageNet数据集的类别数相同;在基于Pascal VOC的目标检测模型中,分类分支的全连接层的神经元数量也等于VOC数据集的类别数20。不只是刚刚提到的VGG模型,包括在后面摒弃了全连接层,并以全卷积网络形态存在的ResNet和GoogLeNet系列模型也都是如此设置的。
此外,还有一些研究发现,全连接层可以在模型需要进行知识迁移的过程中充当“防火墙”的作用,这类应用我们称之为迁移学习。在深度学习中,最具代表性的迁移学习技术是微调训练。在各种深度学习的应用中,微调几乎成为标配的训练方法。有关迁移学习的技术,我们将在第 7.5 节中进行详细介绍。具体而言,当我们使用某模型在以目标为中心的ImageNet数据集上已经完成了学习,如果我们还想要使用该模型已有的知识去直接对风景照进行分类,那么在不含全连接层的网络中进行微调的结果往往要差于包含全连接层的网络。因此,全连接层可以被视作模型表示能力的防火墙。特别是在源域与目标域差异较大的情况下,全连接层可以保持源数据集较大的通用特征,从而保证模型底层表达能力的迁移。换句话说,全连接层冗余的参数并非一无是处的。
在实际应用中,为了减少参数的数量,全连接层是可以由一种特殊的卷积操作来实现的。这种卷积就是1×1卷积,在下一小节中我们将介绍有关1×1卷积的知识。
图像数据是一种由二维像素网格所构成数据,根据色彩空间(黑白或者彩色)的不同,它的每个像素可能会包含一个或多个数值。在本章中,我们引入了一种强大且专门为图像数据而设计的神经网络模型,这种模型就是卷积神经网络(Convolutional Neural Network,CNN)。这种模型比第5章所介绍的各种模型都要有效得多,它不需要将图像数据展平成一维向量,因此可以较好地保持图像中每个目标的空间结构信息,增强了像素之间的上下文关联性。到目前为止,卷积神经网络已经在计算机视觉领域中占据了主导地位,几乎所有的与图像识别、目标检测及语义分隔相关的学术竞赛和商业应用都以这种模型为基础。
现代卷积神经网络得益于神经生物学及一系列的补充实验,相比过去基于全连接网络的多层感知机,卷积神经网络的参数数量大幅减少,并且很容易利用GPU实现并行计算。因此卷积神经网络不仅仅能够通过高效地采样获得精确的模型,还能够实现高效的计算。各行各业的从业人员越来越多地开始使用卷积神经网络,即使通常使用循环神经网络的一维序列任务上,卷积神经网络也变得越来越受欢迎。在下一小节,我们就来仔细讨论一下卷积神经网络最关键的部件——卷积。
在卷积神经网络中,激活层的主要功能是()。
A. 增加模型的非线性特性,从而提高模型的拟合能力,
B. 提高模型的训练速度
C. 增强模型的泛化能力
D. 以上都正确
在卷积神经网络中,全连接层的主要作用是()。
A. 进一步减少参数的数量
B. 打破卷积特征的空间限制,从而减少位置固化对分类带来的定势思维的影响。
C. 提高模型对全局信息的获取能力,使所有的元素对最后的分类都具有贡献。
D. 加速模型的训练速度
在卷积神经网络中,通常在每个卷积层背后都会紧跟一个()。
A. 池化层
B. 全连连接层
C. 激活函数
D. Softmax分类层
以下哪个结构是卷积神经网络CNN的最主要的结构组合?
A. 全连接层-激活层-池化层
B. 卷积层-激活层-池化层
C. 池化层-激活层
D. 卷积层-激活层-全连接层
输入层作为神经网络的起点,通常使用()的形式进行输入。
A. 元组
B. 列表
C. 张量
D. 关系型数据