目录
前言
常用卷积神经网络
1.AlexNet
2.VGGNet
3.GoogLeNet
4.ResNet
总览
PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。
深度学习的内容不是那么好掌握的,包含大量的数学理论知识以及大量的计算公式原理需要推理。且如果不进行实际操作很难够理解我们写的代码究极在神经网络计算框架中代表什么作用。不过我会尽可能将知识简化,转换为我们比较熟悉的内容,我将尽力让大家了解并熟悉神经网络框架,保证能够理解通畅以及推演顺利的条件之下,尽量不使用过多的数学公式和专业理论知识。以一篇文章快速了解并实现该算法,以效率最高的方式熟练这些知识。
博主专注数据建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型、机器学习和深度学习以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码。希望有需求的小伙伴不要错过笔者精心打造的专栏:
一文速学-数学建模常用模型https://blog.csdn.net/master_hunter/category_10967944.html
上篇文章我十分详细讲述了卷积神经网络的特点以及运算和结构搭建。强烈推荐读者多看几遍,以后搭建论文神经网络或者是面试卷积神经网络细节部分都能够有所联想记忆。那么根据上篇文章的学习,我们已经拥有了搭建卷积神经网络的能力,也就是拥有了造车的能力,可以根据数据和图片搭建自己想要的卷积神经网络,但是想要搭建一些已经验证能力的卷积神经网络还是有一定差距的。本篇文章主要带大家再次熟悉一下卷积神经网络的搭建过程,想靠一篇文章来学会卷积神经网络显然是异想天开的,我们需要更多的实践去使用才能掌握。
文章分为两部分,第一部分主要对常用的卷积神经网络简述介绍,第二部分将参考论文详细搭建每个卷积神经网络并且完成数据集的分类。
AlexNet是一个经典的卷积神经网络,它在2012年的ImageNet图像分类挑战中取得了第一名。ImageNet是自2010年以来,每年举办一次的全球性图片分类比赛。自从该竞赛举办开始,业界便视其为深度学习标准数据集。后续很多优秀的神经网络模型都是由此比赛诞生。
AlexNet出现后打破了原来众多学者的认知,它首次证明了学习到的特征可以超越手工设计的特征,从而越来越多的人开始重新审视深度学习算法并加入到研究的浪潮中。
有兴趣的可以阅读论文:
《ImageNet Classification with Deep Convolutional Neural Networks》http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
AlexNet是一个相对较深的神经网络,相比于以前的网络结构,它引入了更多的卷积层和全连接层。这使得网络可以学习更加复杂、抽象的特征,从而提升了图像分类的性能。
AlexNet的网络结构:
从上图看,在网络设计上其实并非如上图所示,上图包含了GPU通信的部分。这是由当时GPU内存的限制引起的,作者使用两块GPU进行计算,因此分为了上下两部分。但是,以目前GPU的处理能力,单GPU足够了,因此其结构图可以如下所示:
VGGNet(Visual Geometry Group Network)是由牛津大学视觉几何组(Visual Geometry Group)提出的深度卷积神经网络架构,它在2014年的ImageNet图像分类挑战中取得了优异的成绩。VGGNet之所以著名,一方面是因为其简洁而高效的网络结构,另一方面是因为它通过深度堆叠的方式展示了深度卷积神经网络的强大能力。
VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。
我们来看看VGGNet的网络结构:
VGGNet包含两种结构,分别为16层和19层。VGGNet结构中,所有卷积层的kernel都只有3*3。VGGNet中连续使用3组3*3kernel的原因是它与使用1个7*7kernel产生的效果相同,然而更深的网络结构还会学习到更复杂的非线性关系,从而使得模型的效果更好。该操作带来的另一个好处是参数数量的减少,因为对于一个包含了C个kernel的卷积层来说,原来的参数个数为7*7*C,而新的参数个数为3*(3*3*C)。
VGG16Net网络结构:
内存消耗主要来自早期的卷积,而参数量的激增则发生在后期的全连接层。
VGGNet的优点:
简单明了的结构: VGGNet的结构非常简单直观,由连续的卷积层和池化层组成,使得网络结构易于理解。
便于迁移学习: VGGNet的结构可以很容易地应用于其他任务,也使得它成为了迁移学习的一个良好基础。
较少的超参数: 相对于GoogLeNet,VGGNet的超参数较少,因此更容易调整和训练。
VGGNet的缺点:
较大的参数数量: 由于采用了大量的卷积层,导致VGGNet的参数数量较大,训练和推理过程需要更多的计算资源。
容易出现过拟合: 由于参数量较大,需要更多的数据来避免过拟合问题。
GoogLeNet,也被称为Inception V1,是谷歌团队在2014年提出的一个深度卷积神经网络架构,它在当年的ImageNet图像分类挑战中取得了领先地位。GoogLeNet的主要特点是采用了一种称为“Inception模块”的网络结构,通过多层次的特征抽取和组合,使得网络可以同时在不同尺度上提取特征,从而获得了非常强大的分类性能。
GoogLeNet最初的想法很简单,就是若想要得到更好的预测效果,就要增加网络的复杂度,即从两个角度出发:网络深度和网络宽度。但是二者都需要付出一定的代价,首先更复杂的网络意味着更多的参数,就算是ILSVRC这种包含了1000类标签的数据也很容易过拟合。
再者是更复杂的网络会带来更大的计算资源的消耗,而且当kernel个数设计不合理时导致kernel中的参数没有被完全利用(多数权重都趋近于0)时,会导致大量计算资源的浪费。
GoogLeNet引入了inception结构来解决这个问题,其中涉及了大量的数学推导和原理,感兴趣的推荐阅读:Going Deeper with Convolutionshttps://arxiv.org/abs/1409.4842这里不作详解,不然都得另开篇文章,内容太多了。除了inception结构,GoogLetNet的另外一个特点是主干网络部分全部使用卷积网络,仅仅在最终分类部分使用全连接层。
GoogLeNet和VGGNet是两种非常成功的深度卷积神经网络架构,它们各自有着不同的优缺点:
GoogLeNet的优点:
更高的效率: GoogLeNet相比于VGGNet在同等性能下,拥有更少的参数量。这使得它在相同计算资源下,可以处理更大规模的任务。
更深的网络结构: GoogLeNet通过巧妙的Inception模块设计,使得可以构建非常深的网络,而不容易出现梯度消失或爆炸的问题。
多尺度特征提取: Inception模块可以同时在不同尺度上提取特征,使得网络能够捕获到丰富的图像信息。
全局平均池化: 使用全局平均池化代替全连接层,可以大幅减少参数数量,降低过拟合的风险。
GoogLeNet的缺点:
相对复杂的网络结构: 由于Inception模块的设计相对复杂,导致GoogLeNet的网络结构不太容易理解。
训练时间较长: 由于网络深度较大,训练GoogLeNet需要相对更长的时间。
难以可视化和解释: 由于网络结构的复杂性,GoogLeNet的内部工作原理相对难以可视化和解释,使得难以理解网络的决策过程。
GoogLeNet相对于VGGNet在网络结构设计上更加灵活和高效,适用于大规模任务。而VGGNet在结构上更为简单直观,容易理解和调整,适用于中小规模的任务,也便于迁移学习。选择合适的网络取决于任务的具体需求、计算资源和数据规模等因素。
在ResNet提出之前,所有的神经网络都是通过卷积层和池化层的叠加组成的。
人们认为卷积层和池化层的层数越多,获取到的图片特征信息越全,学习效果也就越好。但是在实际的试验中发现,随着卷积层和池化层的叠加,不但没有出现学习效果越来越好的情况,反而两种问题:
因此ResNet网络的主要特点和设计思想:
ResNet的设计思想在于引入了残差学习,通过跳跃连接解决了深度网络训练过程中的梯度问题。ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果并没有变差,而是变的更好了。
除了残差结果以外,ResNet还沿用了前人的一些可以提升网络性能的效果和设计,如堆叠式残差结构,每个残差模块又由多个小尺度kernel组成,整个ResNet除最后用于分类的全连接层以外都是全卷积的,这大大提升了计算速度。ResNet网络深度有34、50、101、152等多种,50层以上的ResNet也借鉴了类似GoogLeNet的思想,在细节上使用了bottleneck的设计方式。普通卷积层与残差卷基层:
ResNet网络结构缩略图:
至此我们已经介绍了4种基础的网络结构和设计网络时涉及的主要思想。在ResNet之后,还有很多新的网络结构不断出现,但主要思想大体上都是基于以上4种类型做的一些改进,入Inception-v4的主要思想便是ResNet+Inception。
我们再来看看不同网络结构可以达到的算法精度以及其内存消耗情况:
如与其他模型相比,VGGNet占用最多的计算量并且消耗最大的内存,GoogLeNet是刚刚介绍的四个模型中计算量和内存消耗最小的模型,然而AlexNet虽然计算量不高,但也会占用较大内存且精度不高,而不同大小的ResNet模型性能差异也较大,具体情况需要根据应用场景选择合适的模型。