第3章卷积神经网络

卷积神经网络(ConvolutionalNeuralNetworks,CNN)是经典的深度学习神经网络模
型,本章将以CNN 的发展历程为切入点,介绍CNN 的基本结构,以及前馈运算与反馈运
算,在此基础上详细叙述CNN 中的各层网络及操作,并分析CNN 的经典结构。

3.卷积神经网络简介
1 

1.卷积神经网络的发展历程
3.1 

CNN 是一类独特的人工神经网络,也是神经网络中最受关注的类别之一,专门用于处
理具有网格结构的数据,特别是高维数据(如图像和视频)[1]。CNN 的结构与一般的神经网
络非常相似,它与其他神经网络最关键的区别在于是否有网络层使用卷积运算。使用卷积
运算的网络层被称为卷积层,卷积层中的每个卷积核都是一个滤波器,它与该层的输入进行
卷积运算,这有助于提取图像或视频等输入信息的特征,并且由于卷积核权值共享,因此可
以大大降低网络层中的参数的数量。CNN 是一种前馈神经网络,在多个应用领域发挥出了
重要的作用。

1959 年,神经科学家DavidH.Hubel和TorstenNilsWiese通过对猫的大脑研究,得
出在大脑的初级视觉皮层上,神经元是以层级结构的形式组织起来的,这些神经元先提取视
觉信息的局部特征,然后将局部特征组合起来,从而学习识别视觉信息模式,这是对大脑初
级视皮层的开创性研究,“感受野”(ReceptiveField)这一概念也是在此时首次被提出的[2]。
受此启发,日本学者福岛邦彦(KunihikoFukushima)提出一种最早的CNN 形式,它由多层
网络结构组成,包含了卷积层和池化层,可自动对模式识别任务进行分层特征提取[3]。在前
人研究的基础上,1998 年,YannLeCun等提出LeNet-5网络模型,将BP 算法首次应用到此
神经网络模型的训练中,并将此模型成功应用于手写数字识别中,这就形成了当代CNN 的
雏形[4]。但此时的CNN 效果并不太好,并且训练也非常困难,虽然在阅读支票、识别数字等
任务上很有效果,但由于在一般的实际任务中表现不如支持向量机(SupportVector 
Machine,SVM )、Boosting等算法好,因此,一直处于学术界边缘的地位。

直到2012 年,在著名的ILSVRC 竞赛中,Hinton团队的论文提出AlexNet模型,引入
了全新的深层网络结构和dropout方法,一次性将错误率从25% 以上降低至15%,力挫对手
一举取得该次竞赛冠军,颠覆了图像识别领域的传统认知[5]。虽然现在看来AlexNet模型
是一项非常简陋的模型,但是当时这让很多研究学者意识到原来福岛邦彦提出的CNN 形式


和YannLeCun等提出的LeNet-5网络模型,都有很大改进空间。受到AlexNet思想的启
发,2013年,LeCun团队提出Dropconnect操作,成功将错误率降低至11% 。而新加坡国立
大学的颜水成团队则提出NetworkinNetwork(NIN),NIN的思想是改变卷积神经网络原
来的结构,加入一层MLPConv(MultilayerPerceptronConvolution)。2014年,NIN模型也
在ILSVRC竞赛中获得冠军[6]。在此基础上,2014年又出现的Inception和VGG网络模型
将层数加深到20层左右,图像识别的错误率也大幅降低到6.而人类的错误率为5.
二者十分接近。
7%, 1%, 

CNN的基本结构与十几年前的差异并不大,但是在这数十年间,数据形式和硬件设备, 
尤其是图形处理器(GPU)的巨大发展,成为进一步推动CNN领域技术革新的主要动力,因
此,深度神经网络不再是纸上谈兵和象牙塔里的研究,它真正成为能够切实应用到实际的生
产和生活中的可行且好用的模型。

3.2 
卷积神经网络的基本结构
1.
CNN是一种层次模型(hierarchicalmodel),输入的是原始数据(rawdata),如RGB图
像、音频数据等。CNN的基本网络层结构如图3.CNN经过卷积(ovlto操作、

1所示,cnouin) 
池化(pooling)操作和非线性激活函数(non-linearactivationfunction)映射等一系列操作的
层层复合,将高层语义信息逐层由原始数据输入层中提取出来,这一过程是“前馈运算” 
fed-forwar

(d)。在网络中每单独的一次操作被称为“层”,卷积操作对应“卷积层”,池化操
作对应“池化层”,等等。最后,目标任务(分类、回归等)化为目标函数(objectivefunction)形
式作为CNN的最后一个输出层[7]。
图3.

1 
CNN 
的基本网络层结构

通过计算预测值与真实值之间的误差(或者称为损失),使用BP算法将误差由最后一层
逐层向前反馈,以此更新每一层的参数,进行多轮的误差反馈和参数更新操作,直至网络参
数和误差收敛或达到预定训练轮数[8]。

本质上,CNN就是不断进行函数复合的过程,将卷积操作等作为一个个函数依次作用
在原始数据上,逐层复合,最后计算损失函数将其作为最后一个函数复合,一般情况下,每层
数据都可以表示为
H 
×W 
×D 
的张量(r)。例如,在目标检测等图像识别领域的应用

tenso
中,CNN的数据输入通常为RGB图像,有
H 
行、
W 
列和R、G、B3个通道,将输入数据记为
x1,x1 经过一次操作可得x2,对应第一个操作层中的参数为w1;第二个操作层中的参数为
w2,以x2 作为第二层的输入,可得x3,这样直到第L-1层,此时网络输出为xL 
,在整个过
程中,每层操作一般是单独一个卷积操作、池化操作、激活函数或其他操作,也可以是不同形
式操作的组合。最后,整个网络以损失值的计算结束。若
y 
是输入x1 对应的真实标记,则

26


第3 章 卷积神经网络
可将损失函数表示为
z =f(xL ,y) (3-1) 
式中,函数f()中的参数为wL 。
对于层中的某些特定操作,其参数wL 可以为空,如池化操作、无参数的激活函数以及
无参数的损失函数等。在实际应用中,对于不同的目标需求,损失函数的形式也不相同。以
回归问题为例,常用的.2 损失函数即可作为卷积网络的目标函数,此时有
z =f(xL ,y)=12
‖xL -y‖2 (3-2) 
在分类问题中,网络的目标函数常采用交叉熵(crossentropy)损失函数,于是有
z =f(xL ,y)=-Σi 
yilog(pi) (3-3) 
式(3-3)中,有
pi = exp(xL 
i ) 
Σc 
j=1exp(xL
j )
(i=1,2,…,C) (3-4) 
式中,C 为分类任务类别数。
无论是回归问题还是分类问题,在计算损失函数z 之前,均需要通过合适的操作得到与
y 同维度的xL ,方可正确计算样本预测的损失值。
3.1.3 前馈运算与反馈运算
与第2章介绍的BP神经网络模型类似,CNN 包括前馈运算与反馈运算[9]。实际上,无
论是训练模型时计算误差还是模型训练完毕后获得样本预测,CNN 中的前馈运算都较直
观。图3.2是前馈神经网络示意图,如以图像分类任务为例,假设网络已训练完毕,参数已
收敛到某最优解,此时可用此网络进行图像类别预测,预测过程实际就是一次网络的前馈运
算,即将测试集图像作为网络的数据输入,记为x1,再将输出传入隐含层,各隐含层输出记
为xi,依此下去,直至输出xL ∈RC ,利用交叉熵损失函数训练后,xL 的每一维可表示样本
分别属于C 个类别的后验概率,如此可得xL 数值最大的那一维维数为输入图像对应的预
测标记。
图3.2 前馈神经网络示意图
神经网络具有的高容错性、鲁棒性及自组织性,是传统信息处理技术无法比拟的。因
此,神经网络技术在语音识别、指纹识别、人脸识别、遥感图像识别和工业故障检测等方面都
27

得到了广泛的应用。在半个多世纪的研究和发展过程中,神经网络已经与众多学科和技术

紧密结合,并且在众多领域都得到了广泛的应用和推广。下面简单阐述模式识别、信号处

理、拟合逼近、优化选择、工程技术、博弈游戏等领域的应用。

和其他的许多机器学习模型一样,CNN(包括其他所有深度学习模型)也是将最小化损
失函数值作为模型参数的训练目标,即最小化式(3-1)中的z。从凸优化理论看,神经网络模
型不仅是非凸(non-convex)函数,而且非常复杂,这使得优化求解变得十分困难,鉴于此原
因,CNN 采用反馈运算中的随机梯度下降法进行模型参数更新迭代[10]。

在CNN 求解时,特别是针对大规模应用问题,往往采用批处理的随机梯度下降法。批
处理的随机梯度下降法在训练模型时随机选取
n 
个样本作为一批样本,先通过前馈运算得
到预测值并计算其对应的损失值,再使用梯度下降法进行参数更新,梯度从后往前逐层反
馈,直至将网络的第一层参数更新完毕,这样的一次参数更新过程称为一次批处理过程。在
处理不同批次时,按照不放回抽样原则遍历所有训练集样本,遍历一次训练样本称为一轮
(epoch)。其中,处理样本的大小(batchsize)不宜过小,过小时(如batchsize为1或者2 
等), 由于样本采样的随机性,按照该样本上的误差更新模型参数不一定在全局上最优(此时
仅为局部最优更新), 会使得训练过程产生振荡,也会导致训练批次大大增加,从而降低训练
效率。而批处理大小的上限则主要取决于硬件资源的性能,最主要的就是GPU 显存大小, 
如果批处理大小过大,很容易产生显存溢出的问题,通常批处理大小根据训练时显存占用率
设为2的幂次方(如32,64 或256 )。

如果某批处理前馈运算后得到的一批共
n 
个样本上的误差和为z,为便于理解,假设最

后一层的损失函数取为.2 损失函数,则可以得出

.
z 
(

.wL 
=03-5) 

.
z 
xL 
(

.xL=-
y 
3-6) 

通过式(3-5)和式(3-6)可以看出,对每一层的操作都可以求出两种偏导数:一种是损
失函数值对第
i 
层网络的参数wi 
的偏导数;另一种是损失函数值对该层输入xi 
的偏导数, 
则第
i 
层参数的更新公式为

η.wi 

-中,
wi 
←wi-.
z 
(3-7) 
式(37) 
η 
是每次随机梯度下降的步长,可令其随训练轮数的增加而减小。而损失值对
该层输入的偏导数则是梯度下降算法的关键,其实质就是最终的损失值最后一层
L 
传递到
第
i 
层的误差信号。

不失一般性,当误差反向传播至第
i 
层时,使用第i+1 层的误差信号即可求得第
i 
层参
数更新时所需的参数导数和传至i-1层的误差,根据多元复合函数求导的链式法则,可以
得到

.
z 
.
z 
.vec(xi+1)

.(vec(wi)T)
= 
.(vec(xi+1)T)·.(vec(wi)T) (3-8) 

.
z 
.
z 
.vec(xi+1)

.(vec(xi)T)
= 
.(vec(xi+1)T)·.(vec(xi)T) (3-9) 

28


第
3 
章卷积神经网络


式中,vec标记的作用是将张量转化为向量,从而便于计算和表示。向量求导的知识可以从
矩阵论相关书籍中获得。通过式(3-7)、式(3-8)和式(3-9)可以实现
i 
层参数的更新,并且
将误差信号反向传递到前层,不断进行每一层导数的计算,直到更新到第一层就完成了一批
次数据的参数更新训练。

3.卷积神经网络中的各层网络及操作
2 

本节将对CNN 中各个不同的网络层及操作进行详细介绍,通过这些网络的层层堆叠使
得CNN 可以直接从原始数据中学习其特征表示并完成最终任务。

3.1 
卷积层
2.
卷积运算在不同领域的定义有很多不同之处,本节只对CNN 中的卷积运算进行讲解, 
卷积操作中的一个重要概念就是卷积核,其相当于一个滤波器[11]。卷积层中的每个卷积核
都是一个由单独数字组成的网格。图3.每

3所示是2×2 的卷积核示例, 
个卷积核的权重(网格中的数字)是在CNN 的训练过程中学习到的。而
一般情况下,初始的权值都是在训练最初进行随机初始化的,然后每进行


1.3 
2×2 
的卷
一次批处理,就使用3.3节中提到的随机梯度下降法对权值进行调整,图3.
不断调整之后能得到最终的卷积核。积核示例
在卷积层中,卷积操作是在卷积核和该层的输入之间进行的,图3.

4 

是二维输入和二维卷积核的卷积操作示例,即给定一个3×3 矩阵大小的二维输入特征图和

一个2×2 矩阵大小的卷积核,每次用此2×2 大小的卷积核与输入特征图中的灰色区域(大

小也为2×2)进行对应数字的相乘得到积后再将积相加,从而生成输出特征图中的一个值。

卷积核沿着输入特征图的水平位置或垂直位置移动,直到不能再进一步移动为止,卷积核每

次移动的距离被称为卷积操作的步长,视需要可以将步长设置为不同的值,这里选取的移动

步长是1。

从图3.4可以看出,输出特征图的尺寸比输入特征图小,如果输入特征图的大小为h× 
w,卷积核的大小为f×f,卷积操作的步长为s,则输出特征图的长h'和宽w'为
h-f+
s 

w 
-
f 
+s

h'
= 

,w'
= 

(3-10)

s 

s 

式中, 

代表向下取整操作。

在实际应用中,如在图像去噪和图像分割等应用中,我们希望在卷积操作后能够保持特
征图的大小不变(甚至更大), 从而在网络设计中提供更大的灵活性,这可以通过在输入特征
图周围使用零填充来实现。如果
p 
表示沿每个维度的填充尺寸,那么可以将输出特征图的
尺寸表示为

h-f+s+
p 

w 
-
f 
+s+p

h'
= 

,w'
= 

(3-11)

s 

s 

卷积操作是一种作用于输入特征图局部的操作,其有选择性地获取输入的各处局部特
征,再将特征拼接到一起, 为了体现卷积操作的效果,5

因此卷积核也可以称为滤波器, 图3.

29


图3.4 卷积操作示例
先给出大小都为3×3的3种卷积核,分别是整体边缘滤波器Ke、横向边缘滤波器Kh 和纵
向边缘滤波器Kv 。图3.6是3种滤波器分别作用于原图后得到的输出效果对比图。
Ke = 
0 -4 0 
-4 16 -4 
0 -4 0 
é
.
êêêê 
ù
.
úúúú 
Kh = 
1 2 0 
0 0 0 
-1 -2 -1 
é
.
êêêê 
ù
.
úúúú 
Kv = 
1 0 -1 
2 0 -2 
1 0 -1 
é
.
êêêê 
ù
.
úúúú 
图3.5 大小为3×3的3种卷积核
从图3.5和图3.6可以看出,这3种滤波器可分别保留原图像整体、横向和纵向的边缘
信息,这也是卷积操作的实际意义和功能。
为进一步体现卷积核的作用,图3.7是一个由两层卷积层组成的CNN,其中第一层的输
入是RGB图像,有6个尺寸为7×7×3的卷积核,第二层有一个尺寸为5×5×6的卷积核。
由于输入图像有3个通道,因此,第一层卷积核的通道数都应为3。对第一层的输入图像,每
用一个卷积核进行一次卷积操作,都将产生一个单通道图像,因此第一层卷积层的输出是一
个6通道的图像,从而第二层卷积核的通道数为6,由于在第二层卷积层中只有一个卷积核, 
因此该层的输出将为一个单通道图像。在本实例中,第一卷积层和第二卷积层的卷积核是
随机生成的,在第一层卷积层的输出,有两个卷积核起到了低通滤波器(即平滑滤波器)的作
用,而另外4个卷积核起到了高通滤波器(即边缘滤波器)的作用,将第二层的输出图像与第
30

第 
3 
章卷积神经网络


图3.

63 
种滤波器作用结果对比图

一层的输出图像进行比较,可以看到第二层强化了猫的眼睛和鼻子四周轮廓明显的边缘,但
是猫毛轮廓不够明显的边缘被减弱了,尽管猫毛在第一层网络输出时被加强。


图3.随机卷积核作用示例图

7 

通过以上分析可以得出,由于卷积操作是权值共享的局部操作,每层卷积层的参数数量
只取决于卷积核的大小,相比全连接网络,网络中的参数大大减少,因此,网络的复杂度大大
降低,从而降低了训练网络所需要的硬件资源和时间,如使用随机梯度下降法调整参数时, 
所需要计算的导数大大减少。另外,卷积操作的作用体现在卷积核的滤波器效果,从图3.

7 
可以看出,即使是随机选取的卷积核,仍然能够起到低通滤波器或者高通滤波器的作用,因
此,经过在训练过程中不断调整参数,卷积核能成为适应需求的滤波器,能尽量显现所需要
的信息,排除不重要的信息。

31


3.2 
池化层
2.
在CNN 中,通常会将池化层夹杂在卷积层中间,池化层对输入特征图的某区域进行操
作,此操作由一个池化函数定义。常用的池化操作有平均池化和最大池化,平均池化操作取
区域中数值的平均数作为此区域的对应输出,最大池化则选取此区域中最大的数作为输出。
与卷积操作类似,池化操作也需要选择池化核的大小和操作步长,并且和卷积核有着相同的
移动方法,图3.其中池化核的尺寸为2×2,

8是最大池化操作示例图, 池化步长为1。


图3.最大池化操作示例图

8 

如果输入特征图的尺寸为h×w,池化核的尺寸为f×f,池化操作步长为s,则池化层
输出的特征图尺寸可表示为

h-f+
s 

w 
-
f 
+s

h'
= 

,w'
= 

(3-12) 

假设将一幅190×190的图像输入到(s) 一层包含50 个尺(s) 寸为7×7 卷积核的卷积层中,则
此卷积层将输出50 张尺寸为184×184 的特征图,将它们组合起来就是一张有50 个通道的
图像。从另一个角度看,就可以发现输出图像实质是一个184×184×50=1692800 维的向
量。显然,这个向量的维数特别高,而池化层的主要目的是降低特征图的维数,因此,池化操
作也被称为降采样[12]。假设有一个12 维的向量X=[1,10,8,2,3,6,7,0,5,4,9,2]作为特

32


第3 章 卷积神经网络
征输入,使用步长s=2的简单降采样,即每次选取区域中的第一个元素作为降采样输出,则
经过此操作之后能得到特征输出向量[1,8,3,7,5,9],显然,此向量的维数为6,确实达到了
降采样的效果,但是使用这种降采样方法降低X 的维数时,会忽略区域中不同像素之间的
数值关系,若有X1=[1,10,8,2,3,6,7,0,5,4,9,2]和X2=[1,100,8,20,3,60,7,0,5,40, 
9,20],降采样步长为2,则输入其中任意一个都是向量[1,8,3,7,5,9]作为输出。然而,X1 
和X2 代表两种完全不同的输入,因此,使用此降采样方法可能丢失重要的信息。
为了尽量减少信息的丢失,池化操作会考虑每个区域中数值之间的相互关系,假设对
X1=[1,10,8,2,3,6,7,0,5,4,9,2]和X2=[1,100,8,20,3,60,7,0,5,40,9,20]进行最大池
化操作,输入X1 和X2 将分别产生输出向量[10,8,6,7,5,9]和[100,20,60,7,40,20]。可
以看出,与简单降采样不同的是,最大池化操作不会忽略任何元素,相反,它在降低特征图维
数的同时还能保证重要信息不丢失。池化操作的步长通常设置为2,池化核的尺寸通常为
2×2或者3×3,因此操作作用的区域可能会相互重叠。在实际应用中,平均池化操作很少
用于中间的网络层,因此通常CNN 的池化层都使用最大池化层进行保持特征不变性的下采
样操作。
3.2.3 激活函数层
在CNN 的权重层(如卷积层和全连接层)之后通常会复合一个非线性激活函数(或分段
线性函数),大多数激活函数是将大范围的输入值压缩到一个很小的范围内,通常是区间[0,1] 
或者[-1,1]。在权重层后复合一个非线性激活函数是非常重要的,因为非线性因素会使得
CNN 在训练过程中能够很好地拟合非线性映射,在没有非线性激活函数的情况下,多个权
重层叠加形成的网络只能等价于一个从输入空间到输出空间的线性映射。一个非线性激活
函数也可以被认为是一种开关或选择机制,它决定神经元是否减小或者舍弃得到的输入值。
本节主要讲述两种重要的激活函数,即Sigmoid激活函数和ReLU 激活函数[13]。
Sigmoid激活函数能够模拟生物神经元的兴奋或抑制状态,因此其在神经网络发展历史
中曾经有着举足轻重的地位,其表达式为
f(x)= 1 
1+exp(-x) (3-13) 
图3.9是Sigmoid激活函数及梯度图,在经过Sigmoid激活函数的作用之后,输出的值
域被压缩到[0,1]区间,而0对应生物神经元的“抑制状态”,1则对应“兴奋状态”。还可以看
到,在Sigmoid激活函数两端,对于大于5或者小于-5的值,无论多大或者多小,都会压缩
到1或者0,这便带来一个非常严重的问题,即梯度“饱和效应”,在大于5或者小于-5的区
间内梯度接近0,这会导致在误差反向传播过程中导数处于该区域的误差将很难甚至根本无
法传递至前层,进而导致整个网络无法继续训练(导数为0将无法更新网络参数)。因此,在
参数初始化的时候还须特别注意避免初始化参数直接将前层输出的值域带入这一区域,即
当初始化参数过大时,将直接引发梯度饱和效应而无法训练。
为避免梯度饱和效应发生,引入了ReLU 激活函数。ReLU 激活函数是目前CNN 中最
为常用的激活函数之一[14],它实际是一个分段函数,其定义为
f(x)= 
x x ≥0 
0 x <0 { (3-14) 
33

图3.eLU激活函数及梯度图,Re反之为0。

10是RLU激活函数的梯度在x≥0时为1, 
在x≥0区间内完全消除了梯度饱和效应。同时,相比Sigmoid激活函数,ReLU函数有助
于加快随机梯度下降方法收敛,收敛速度约快6倍左右。正是由于ReLU激活函数的这些
优越性质,目前其已成为CNN以及其他深度学习模型(如RNN等)激活函数的首选。


图3.gd激活函数及梯度图

9 
Simoi


图3.10 
ReLU 
激活函数及梯度图

3.4 
全连接层
2.
在CNN结构中,多个卷积层和池化层之后,通常都会连接一个或者多个全连接层
(FulyConnectedLayer,FC),全连接层基本上可以看成一个卷积核大小为输入特征图尺
寸,卷积核数量为输出维数的卷积层。全连接层中的每个输出单元都与输入的所有单元完
全相连。在一般的CNN中,全连接层放置在网络的末端,但是有的研究学者也发现在CNN 
的中间层使用全连接层也能构造出效果很好的网络。全连接层可以表示为矩阵的乘法,如
果在全连接层之后添加一个激活函数f,则全连接层可以表示为

34


第
3 
章卷积神经网络


Y 
=f(WX 
+
Wb) 
为神经元之间连接的权值矩阵,
(3-15) 

式中,
X 
和
Y 
分别为输入激活和输出激活的向量,
b 
为偏
移向量。

全连接层与多层感知器中的权重层基本相同,其存在是为了将卷积层或者池化层中具
有类别区分性的局部信息(特征信息)进行整合。因此,全连接层在整个CNN中起到“分类
器”的作用[15]。

2.损失函数
3.5 

CNN中的最后一层使用一个损失函数(LosFunction),也被称为目标函数,用以评估
网络对训练数据的预测质量,其中真实的标签是已知的。损失函数量化了模型的估计输出
(预测)和正确输出(真实标签)之间的差距,网络训练的目的就是找到使损失函数最小化的
网络参数。在CNN中使用的损失函数类型取决于对预测目的需求。常用的损失函数有.2 
损失函数和交叉熵损失函数,它们二者的详细叙述已经在3.2节中给出,这里不再

1.
赘述[16]。

3.卷积神经网络经典结构
3 

CNN的经典模型包括LeNet模型、AlexNet模型、Network-In-Network模型、VGG-
Net模型以及GoogLeNet模型。通过分析这些经典CNN模型,读者可以充分体会每一种
CNN模型在不同领域的应用,实际应用中,需要读者根据具体的情景需求选择恰当的模型。

3.3.1 
LeNet模型
1989年,LeCun等提出权值共享策略,并由此设计出卷积层和池化层,接着在1998年, 
他们又设计了一个被命名为LeNet-5的卷积神经网络,其中数字5表示它拥有5层权重层, 
该卷积神经网络的网络结构如图3.

11所示。


图3.5模型结构图(见彩插)

11 
LeNet

设计LeNet-5的初衷是用于识别手写数字,网络的输入是一幅单通道的32×32图像, 
第一层卷积层包含6个尺寸为5×5的卷积核,用这些卷积核对一幅尺寸为32×32的图像
进行卷积操作,将生成6幅尺寸为28×28的特征图。第一层卷积层之后是池化层,其操作
的步长为2,因此第一层池化层的输出是6幅尺寸为14×14的特征图,它们共同组成一幅6 
通道的输入特征图。接着在第二层的卷积层中对此6通道图像应用16个尺寸为5×5的6 
通道卷积核,因此其实质尺寸为5×5×6,此卷积层的输出为16幅尺寸为10×10的特征图, 

35


合在一起是一幅16 通道的特征图。接下来,第二层池化层应用步长2的池化操作,生成16 
幅尺寸为5×5 的特征图,这些图像输入一层有84 个神经元的全连接层,经过处理后再输入
最后一层的全连接层中,全连接层实质上起到一个分类器的作用,由于LeNet-5模型的目的
是识别手写数字,因此有10 个输出神经元。需要特别提出的是,LeNet-5模型中的池化操作
并不是常用的最大池化操作或平均池化操作,它将池化核对应的4个数字相加,将它们除以
a 
再加上偏差b,并将结果作为输出,其中
a 
和
b 
都是训练得到的。此外,LeNet-5模型使用
Sigmoid激活函数,并且只在池化层之后应用激活函数,而在卷积层之后则不存在激活函数。
由于LeNet-5模型是早期的CNN 模型,因此结构比较简单,只有60000 个需要训练的参数, 
难以处理较复杂的问题。

3.2 
Alxet模型
3.eN

AlexNet模型是第一个引起计算机视觉中深度神经网络复兴的大型CNN 模型,该模型
在2012 年以巨大的优势赢得ILSVRC 竞赛的冠军。Alet模型结构图如图3.

xNe12 所示。


图3.t模型结构图(见彩插)

12 
AlexNe

AlexNet模型架构与其前身之间的主要区别是网络深度的增加,这导致网络参数显著
增加,并且使用正则化方法(如dropout和数据增强)。它总共包含8个权重层,其中前5 
个是卷积层,后3个是全连接层。最后的全连接层(即输出层)是将输入图像分类为
ImageNet数据集的1000 类数据中的一种,因此有1000 个神经元。dropout应用于
AlexNet模型中的前两个全连接层,这缓解了过拟合现象,使模型拥有更好的泛化性能。
AlexNet模型的另一个创新是在每层卷积层和全连接层后使用ReLU 激活函数,这样可以
大大提高训练效率。

AlexNet模型在首次训练网络时,利用两块GPU 进行训练,因为3GB 显存的单个
NVIDIAGTX580 显卡不能容纳包含约6200 万个参数的完整网络,ImageNet训练数据集
包含属于1000 种不同对象的1200 万幅图像,因此在完整的It数据集上训练该网络
大约花了6天的时间。
mageNe

36


第
3 
章卷积神经网络


3.3 
NtokI-ewrk模型
3.ewr-nNto

Network-In-Network模型是一个简单而轻量级的CNN模型,它在小规模数据集上通
常表现得非常好。图3.twork-In-Network模型结构图。

13是Ne


图3.13 
Network-In-Network模型结构图(见彩插) 

在此网络中提出两个CNN设计中的新想法。首先,在卷积层之间加入全连接层有助于
网络训练。因此,该示例模型的3个卷积层分别位于权重层中的第1层、第4层和第7层, 
其卷积核的尺寸分别为5×5 、5×5和3×3 。每层卷积层后面都紧跟着一层全连接层和一层
最大池化层。其次,该模型在网络的末尾使用一层平均池化层进行正则化操作。值得注意
的是,在前两个最大池化层之后使用dropout正则化方法,也有助于在给定的数据集上实现
更低的测试错误率。

3.4 
VGGNt模型
3.-e

VGG-Net模型是自2014年以来最受欢迎的CNN模型之一,其在2014年的ILSVRC 
竞赛分类项目中取得第二名,并且在定位项目中荣获第一名。它受欢迎的原因是其模型的
简单性和其使用了小型的卷积核,但这也导致网络的层次非常深。常见的VGG-Net模型有
两种,分别是VGG16与VGG19[17]。

VGG-Net模型中的卷积核尺寸都为3×3,多层卷积层和夹杂其中的池化层用于特征
提取,最后3层全连接层用于分类。在VGG-Net模型中,每层卷积层之后都有一个ReLU 
激活函数,并且使用尺寸较小的卷积核,使网络参数数量相对减少,从而可以进行更有效
的训练和测试。此外,通过使用一系列尺寸为3×3的卷积核,增大了感受野的范围。最
重要的是,使用更小的卷积核,就可以堆叠更多的层,从而产生更深层的网络,这使得
VGG-Net模型在计算机视觉领域上有更好的表现。因此,VGG-Net模型设计的中心思想
就是使用更深层次的网络改进特征学习。图3.14是VGG-Net中性能最好的模型
(VGG16模型)结构图。

VGG16模型有1.与AlxNet模型类似,它也在前两个全连接层后应用

38亿个参数,edropout操作避免过拟合。

3.5 
Geet模型
3.
ogLN

CNN经典模型中的LeNet模型、AlexNet模型、Network-In-Network模型和VGG-Net 
模型都是只有一条路径的顺序结构。在这条路径上,不同类型的层,如卷积层、池化层、

37


图3.见彩插)

14 
VGG16 
模型结构图( 

ReLU 激活函数、dropout方法和全连接层相互堆叠,以创建所需的模型。GoogLeNet模型
是首个使用具有几个网络分支的复杂架构的流行模型,2014 年它在ILSVRC 竞赛中以

7% 的分类错误率获得前五名。

GoogLeNet模型总共有22 层权重层,其设计的基础是Inception模块,因此GoogLeNet 
模型也被称为Inception网络。Inception模块中网络层的运算是并行的,这与模型的顺序运
算相反[18]。Inceptio15 所示。

6.
n模块示意图如图3.

其核心思想是将所有基本网络层并行放置,并将输出的特征进行结合后再输出。这种
设计的好处是多个Inception模块可以堆叠在一起,从而组成一个巨型网络,而不需要考虑
每个单独网络层的设计。然而,如果通过增加通道数的方式将各个网络层的输出特征进行
结合,将产生一个维数非常高的特征输出结果。为了解决这个问题,完整的Inception模块
在将特征输入卷积层之前进行降维操作,这种降维方法是通过添加一层卷积核尺寸为1×1 
的卷积层实现的。假设此卷积层有d0 个卷积核,输入图像尺寸为h×w×d 
且d0<d,该层
的输出将降低维数至h×w×d0,通过使用这样的一层卷积层可以在降维的同时组合来自
多个特征通道的信息,从而提高Inception模块的性能。

尽管GoogLeNet模型架构看起来比较复杂,但它包含的参数数量明显少得多(600 万), 
因此,GoogLeNet模型对显存的需求更小,相比于其他网络模型拥有更高的训练效率和精
度,也是最直观的CNN 模型之一,这充分说明了良好的网络模型设计的重要性。

38


第
3 
章卷积神经网络


图3.nepton模块示意图(见彩插)

15Ici

3.本章小结
4 

本章首先对CNN进行了叙述,内容包括CNN的发展历程、基本结构、前馈预算及反馈
运算,其次对CNN中的各层网络及操作进行详细叙述,内容包括卷积层、池化层、激活函数
层、全连接层和损失函数,最后对CNN经典结构中的LeNet模型、AlexNet模型、Network-
In-Network模型、VGG-Net模型以及GoogleNet模型进行叙述。通过本章内容的学习,读
者可以全面了解CNN模型。

3.章节习题
5 

1.查阅相关资料,并结合本书总结卷积层有哪些基本参数。
2.卷积核是否越大越好? 
3.编程实现一个卷积神经网络模型和一个全连接神经网络模型,在MINIST手写数字
数据集(数据集见h//ynlcn.om/xit上进行实验测试,
tp:an.eucedb/mns/) 并对比二者的
结果。

参考文献

[1] 郭丽丽,丁世飞.深度学习研究进展[J].计算机科学,2015,42(5):28-33. 
[2] HUBELDH,WIESELTN.Receptiefields,bilrittindfunctionalarchitectureinthe 
t..ilctx[J].TheJournaliolo60154.ofPhys(v) gy,1(n) 9(o) 6(c) 2,1(a) (u) (1)(a) :(c) 106-(na) (o) [3]FU(c) KUS(sv) (a) H(s) I(u) MA(o) (a) F(e) K.Neocognitron:Aself-organizingneuralnetworkmodelforamechanismof 
pareontonfetdbysitioiin[.ilgclCybreis,1980,4):193202.
tenrcgiinuacehfnpstoJ]Booiaentc36(

[4]LECUNY,BOTTOUL,BENGIOY,tal.Gadient-basedlearningappliedtodocumentrecognition 
[J].ProcedingsoftheIEEE,19981):2278-2324.,86(1(e) 
[5]KRIZHEVSKYA,SUTSKEVERI,GEOFFREYE.Hinton.Imagenetclasificationwithdep 
39


convolutionalneuralnetworks[J].Advancesinneuralinformationprocesingsystems,2012,25: 
1097-1105. 

[6]LINM,CHENQ,YANS.Networkinnetwork[J].arXivpreprintarXiv,2013:1312-4400. 
[7] 邱锡鹏.神经网络与深度学习[M].北京:机械工业出版社,2020. 
[8]RUMELHARTDE,HINTONGE,WILLIAMSRJ.Learningrepresentationsbyback-propagating 
s[J].Nate,1986,323(6088):533-536. [9]孙(e) 志(ro) 军(r) ,薛磊,许(u) 阳明,等.(r) 深度学习研究综述[J].计算机应用研究,2012,29(8):2806-2810. 
[10] 袁梅宇.机器学习基础:原理、算法与实践[M].北京:清华大学出版社,2018. 
[11]WUJ.Introductiontoconvolutionalneuralnetworks[J].NationalKeyLabforNovelSoftware 
Thlgy,2017,5(23):495. [12]GO(e) O(c) D(n) F(o) E(o) LLOWIJ,POUGET-ABADIEJ,MIRZAM,etal.Generativeadversarialnets[C]//
IttilCfcnNlIftinPsigSytems,2014:2672-2680. [13]刘玉(n) 良(r) .(o) (a) (n) (e) 深度(n) 学习(o) [M](n) (e) (r) (e) (n) (a) .西安(eo) :西(e) 安(r) 电子(n) (a) 科技(rma) 大(o) 学出(r) 版(c) 社,(n) 2020.(s) (e) (o) (u) 
[14]NAIRV,HINTONGE.Rectifiedlinenitsimptictedboltzmannmachines[C]// 
tig((ru) (a) :8(er) 
ItilCfnMaheLeiICML),20(r) 1(o) 0(v) 0(o) 7814. 

[15]王汉(n) 生(r) .(o) (a) (n) (e) 深度(n) 学习(o) :(e) 从(r) 入(n) 门(eo) 到精通(c) [M](n) (e) (n) (a) .北(a) 京(n) :(n) 人民邮电出版社,2021.(r) 
[16]ZHANGCL,ZHANGH,WEIXS,etal.Depbidlrgresionforapparentpersonalityanalysis 
[C]//EuropeanConferenceonComputerVisio324.n,2016:(mo) 311-(e) (a) 
[17]SIMONYANK,ZISSERMANA.Vrydepconvolutionalnetworksforlarge-scaleimagerecognition 
[J].arXivpreprintarX1556.iv,2014:1409-(e) 
[18]SZEGEDYC,LIUW,JIAY,etal.Goingdeperwithcltis[C]//ProcedingsoftheIEEE 
ConferenceonComputerVisionandPaternRecognition9.(CV(o) P(n) R(v) ),(u) 20(o) 1(n) 5:1-(o) 
40