深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读

本文详细回顾了卷积神经网络的发展历程,从LeCun在1989年提出的首个卷积网络开始,到AlexNet、GoogleNet、VGG、残差网络等里程碑式的进展。卷积网络通过不断优化结构和引入新机制,如ReLU激活、批量归一化、深度残差连接等,解决了梯度消失问题,提升了模型性能,成为深度学习领域的重要组成部分。
摘要由CSDN通过智能技术生成

 
 

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

导言从1989年LeCun提出第一个真正意义上的卷积神经网络到今天为止,它已经走过了29个年头。自2012年AlexNet网络出现之后,最近6年以来,卷积神经网络得到了急速发展,在很多问题上取得了当前最好的结果,是各种深度学习技术中用途最广泛的一种。在本文中SIGAI将为大家回顾和总结卷积神经网络的整个发展过程。

 

早期成果

卷积神经网络是各种深度神经网络中应用最广泛的一种,在机器视觉的很多问题上都取得了当前最好的效果,另外它在自然语言处理,计算机图形学等领域也有成功的应用。

第一个真正意义上的卷积神经网络由LeCun在1989年提出[1],后来进行了改进,它被用于手写字符的识别,是当前各种深度卷积神经网络的鼻祖。接下来我们介绍LeCun在早期提出的3种卷积网络结构。

 

文献[1]的网络由卷积层和全连接层构成,网络的输入是16x16的归一化图像,输出为0-9这10个类,中间是3个隐含层。这个网络的结构如下图所示:

 

 

这篇文章提出了权重共享(weight sharing)和特征图像(feature map)的概念,这些概念被沿用至今,就是卷积层的原型。网络有1个输入层,1个输出层,3个隐含层构成,其中隐含层H1和H2是卷积层,H3是全连接层。网络的激活函数选用了tanh(双曲正切)函数,损失函数选用了均方误差(mean squared error)函数,即欧氏距离的均值。网络的权重用均匀分布的随机数进行初始化,训练时参数梯度值的计算采用了反向传播算法,梯度值的更新采用了在线(online)的随机梯度下降法。

 

文献[2]的网络结构和文献[1]类似,用于邮政编码的识别,在9%拒识率的条件下错误率为1%。网络的输入为28x28的图像,输出为0-9这10个类。整个网络有4个隐含层,其中H1为4个5x5的卷积核,输出为4张24x24的特征图像。H2为下采样层,对H1的输出结果进行2x2的下采样,得到4张12x12的图像。H3有12个5x5的卷积核,输出为12张8x8的图像,这里输出图像每个通道的多通道卷积只作用于前一层输出图像的部分通道上,为什么采用这样方式?有两个原因:1.减少参数,2.这种不对称的组合连接的方式有利于提取多种组合特征。H2和H3的连接关系如下图所示:

H4为下采样层,对H3的输出图像进行2x2的下采样,得到12张4x4的特征图像。最后为输出层,接收H4特特征图像,输出10个类别的概率。

 

文献[3]的网络即为大家熟知的LeNet-5网络,这是第一个被广为流传的卷积网络,奠定了现代卷积神经网络的基础。整个网络的结构如下图所示:

 

下面是基于LeNet-5的手写体数字识别案例:

这个网络的输入为32x32的图像,整个网络有2个卷层,2个池化层,2个全连接层,一个输出层,输出层有10个神经元,代表10个数字类。卷积层C1有6个5x5的卷积核,作用于灰度图像,产生6张28x28的输出图像。池化层S2作用于C1的输出图像,执行2x2的池化,产生6张14x14的输出图像。卷积层C3有16个5x5的卷积核,每个卷积核作用于前一层输出图像的部分通道上,产生16张10x10的输出图像。C3和S2的连接关系如下图所示:

池化层S4对C3的输出图像进行2x2的池化,得到16张5x5的输出图像。全连接层C5有120个节点,全连接层F6有64个节点。

网络的激活函数选用tanh函数,损失函数采用均方误差函数,训练时采用随机梯度下降法和反向传播算法。

 

早期的卷积网络被用于人脸检测[4][5],人脸识别[6],字符识别[7]等各种问题。但并没有成为主流的方法,其原因在SIGAI公众号之前的文章“卷积神经网络为什么能称霸计算机视觉领域?”中已经分析过了,主要是梯度消失问题、训练样本数的限制、计算能力的限制3方面因素。梯度消失的问题在之前就已经被发现,对于深层神经网络难以训练的问题,文献[8]进行了分析,但给出的解决方法没有成为主流。

 

 

深度卷积神经网络

在深入分析比较当前主流深度卷积神经网络的特点之前,我们从各网络在ImageNet 2012测试数据集的准确率以及网络的参数量和计算复杂度三个维度进行分析,希望读者对当前的主流网络结构有一个整体的认知。如下图所示:

深度卷积网络的大发展起步于2012年的AlexNet网络,在这之后各种改进的网络被不断的提出,接下来我们会介绍各种典型的网络结构。

 

 

AlexNet网络

现代意义上的深度卷积神经网络起源于AlexNet网络[9],它是深度卷积神经网络的鼻祖。这个网络相比之前的卷积网络最显著的特点是层次加深,参数规模变大。网络结构如下图所示:

这个网络有5个卷积层,它们中的一部分后面接着max-pooling层进行下采样;最后跟3个全连接层。最后一层是softmax输出层,共有1000个节点,对应ImageNet图集中 1000个图像分类。网络中部分卷基层分成2个group进行独立计算,有利于GPU并行化以及降低计算量。

这个网络有两个主要的创新点:1. 新的激活函数ReLU,2. dropout机制[10]。dropout的做法是在训练时随机的选择一部分神经元进行休眠,另外一些神经元参与网络的优化,起到了正则化的作用以减轻过拟合。

网络的输入图像为的彩色三通道图像。第1个卷积层有96组11x11大小的卷积核,卷积操作的步长为4。这里的卷积核不是2维而是3维的,每个通道对应有3个卷积核(所以是一组卷积核),具体实现时是用3个2维的卷积核分别作用在RGB通道上,然后将三张结果图像相加。下图为输入为3通道,卷积层参数为2组每组3个卷积核,输出结果为2通道的动态卷积过程

第2个卷积层有256组5x5大小的卷积核,分为两个group,即每个group通道数为128组,每组有48个卷积核。第3个卷积层有384组3x3大小的卷积核,每组有256个卷积核。第4个卷积层有384组3x3大小的卷积核,分为两个group,即每个group通道数为192组,每组有192个卷积核。第5个卷积层有256组,3x3大小的卷积核,分为两个group,即每个group为128组,每组有192个卷积核。

这个网络没有使用传统的sigmoid或tanh函数作为激活函数,而是使用了新型的ReLU函数[11]:

其导数为符号函数sgn。ReLU函数和它的导数计算简单,在正向传播和反向传播时都减少了计算量。由于在时函数的导数值为1,可以在一定程度上解决梯度消失问题,训练时有更快的收敛速度。当时函数值为0,这使一些神经元的输出值为0,从而让网络变得更稀疏,起到了类似L1正则化的作用,也可以在一定程度上缓解过拟合。在SIGAI公众号上一篇文章“理解神经网络的激活函数”中我们已经对激活函数做了全面深入的介绍。

 

ZFNet网络

文献[12]提出通过反卷积(转置卷积)进行卷积网络可视化的方法,以此分析卷积网络的效果,并指导网络的改进,在AlexNet网络的基础上得到了效果更好的ZFNet网络。

该论文是在AlexNet基础上进行了一些细节的改动,网络结构上并没有太大的突破。该论文最大的贡献在于通过使用可视化技术揭示了神经网络各层到底在干什么,起到了什么作用。如果不知道神经网络为什么取得了如此好的效果,那么只能靠不停的实验来寻找更好的模型。使用一个多层的反卷积网络来可视化训练过程中特征的演化及发现潜在的问题;同时根据遮挡图像局部对分类结果的影响来探讨对分类任务而言到底那部分输入信息更重要。下图为典型反卷积网络示意图:

ZFNet网络结构如下图所示:

ZFNet在保留AlexNet的基本结构的同时利用反卷积网络可视化的技术对特定卷积层的卷积核尺寸进行了调整,第一层的卷积核从11*11减小到7*7,将stride从4减小到2,Top5的错误率比AlexNet比降低了1.7%。

 

GoogLeNet网络

文献[13]提出了一种称为GoogLeNet网络的结构(Inception-V1)。在AlexNet出现之后,针对图像类任务出现了大量改进的网络结构,总体来说改进的思路主要是增大网络的规模,包括深度和宽度。但是直接增加网络的规模将面临两个问题,首先,网络参数增加之后更容易出现过拟合,在训练样本有限的情况下这一问题更为突出。另一个问题是计算量的增加。GoogLeNet致力于解决上面两个问题。

GoogLeNet由Google在2014年提出,其主要创新是Inception机制,即对图像进行多尺度处理。这种机制带来的一个好处是大幅度减少了模型的参数数量,其做法是将多个不同尺度的卷积核,池化层进行整合,形成一个Inception模块。典型的Inception模块结构如下图所示:

上图的模块由3组卷积核以及一个池化单元组成,它们共同接受来自前一层的输入图像,有三种尺寸的卷积核,以及一个max pooling操作,它们并行的对输入图像进行处理,然后将输出结果按照通道拼接起来。因为卷积操作接受的输入图像大小相等,而且卷积进行了padding操作,因此输出图像的大小也相同,可以直接按照通道进行拼接。

从理论上看,Inception模块的目标是用尺寸更小的矩阵来替代大尺寸的稀疏矩阵。即用一系列小的卷积核来替代大的卷积核,而保证二者有近似的性能。

上图的卷积操作中,如果输入图像的通道数太多,则运算量太大,而且卷积核的参数太多,因此有必要进行数据降维。所有的卷积和池化操作都使用了1x1卷积进行降维,即降低图像的通道数。因为1x1卷积不会改变图像的高度和宽度,只会改变通道数。

GoogleNet网络结构如下图所示:

GoogleNet在ILSVRC 2014的比赛中取得分类任务的第一名,top-5错误率6.67%。相较于之前的AlexNet-like网络,GoogleNet的网络深度达到了22层,参数量减少到AlexNet的1/12,可以说是非常优秀且非常实用的模型。

为了降低网络参数作者做了2点尝试,一是去除了最后的全连接层,用全局平均池化替代。全连接层几乎占据了AlexNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合。用全局平均池化层取代全连接层的做法借鉴了Network In Network(以下简称NIN)论文[16]。二是GoogleNet中精心设计的Inception模块提高了参数的利用效率,这一部分也借鉴了NIN的思想,形象的解释就是Inception模块本身如同大网络中的一个小网络,其结构可以反复堆叠在一起形成大网络。不过GoogleNet比NIN更进一步的是增加了分支网络。

 

VGG网络

VGG网络由著名的牛津大学视觉组(Visual Geometry Group)2014年提出[14],并取得了ILSVRC 2014比赛分类任务的第2名(GoogleNet第一名)和定位任务的第1名。同时VGGNet的拓展性很强,迁移到其他图片数据上的泛化性非常好。VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和池化尺寸(2x2)。到目前为止,VGGNet依然经常被用来提取图像特征,被广泛应用于视觉领域的各类任务。

VGG网络的主要创新是采用了小尺寸的卷积核。所有卷积层都使用3x3卷积核,并且卷积的步长为1。为了保证卷积后的图像大小不变,对图像进行了填充,四周各填充1个像素。所有池化层都采用2x2的核,步长为2。全连接层有3层,分别包括4096,4096,1000个节点。除了最后一个全连接层之外,所有层都采用了ReLU激活函数。下图为VGG16的结构:

VGG与Alexnet相比,做了以下改进:

1.去掉了LRN层,作者实验中发现深度卷积网络中LRN的作用并不明显。

2.采用更小的连续3x3卷积核来模拟更大尺寸的卷积核,例如2层连续的3x3卷积层可以达到一层5x5卷积层的感受野,但是所需的参数量会更少,两个3x3卷积核有18个参数(不考虑偏置项),而一个5x5卷积核有25个参数。后续的残差网络等都延续了这一特点。

 

残差网络

残差网络(Residual Network)[15]用跨层连接(Shortcut Connections)拟合残差项(Residual Representations)的手段来解决深层网络难以训练的问题,将网络的层数推广到了前所未有的规模,作者在ImageNet数据集上使用了一个152层的残差网络,深度是VGG网络的8倍但复杂度却更低,在ImageNet测试集上达到3.57%的top-5错误率,这个结果赢得了ILSVRC2015分类任务的第一名,另外作者还在CIFAR-10数据集上对100层和1000层的残差网络进行了分析。VGG19网络和ResNet34-plain及ResNet34-redisual网络对比如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值