最近再从事深度学习方面的工作,感觉还有很多东西不是很了解,各种网络模型的结构的由来还不是很清晰,在我看来所有的网络都是一层层的卷积像搭积木一样打起来的,由于还没实际跑所以还没很深刻感受到几种网络类型的区别,在此我想梳理一下几种常见的网络结构,加深一下理解。
本文转自此文https://www.cnblogs.com/houkai/p/6553221.html,此文条理清晰,总结较为到位。
目前常见的网络结构:AlexNet、ZF、GoogLeNet、VGG、ResNet等等都可谓曾一战成名,它们都具有自身的特性,它们都提出了创新点。
LeNet
是由Yann LeCun完成的具有开拓性的卷积神经网络,是大量网络结构的起点。网络给出了卷积网络的基本特性:
1.局部感知。人对外界的认知是从局部到全局的,相邻局部的像素联系较为紧密。每个神经元没必要对全局图像进行感知,只需要对局部进行感知,然后更高层将局部的信息综合起来得到全局的信息。
2.多层卷积。层数越高,学到的特征越全局化。
3.参数共享。每个卷积都是一种提取特征的方式,大大降低了参数的数目。
4.多卷积核。提取多类特征,更为丰富。
5.池化。降低向量维度,并避免过拟合。
特性1自然引出了特性2,特性3自然引出了特性4。
网络用于mnist手写体识别任务,网络结构用 http://ethereon.github.io/netscope/#editor 查看,常见网络:http://ethereon.github.io/netscope/quickstart.html
AlexNet
2012年,深度学习崛起的元年,Alex Krizhevsky 发表了Alexet,它是比LeNet更深更宽的版本,并以显著优势赢得了ImageNet竞赛。贡献有:
1.使用RELU作为激活单元。
2.使用Dropout选择性忽略单个神经元,避免过拟合。
3.选择最大池化,避免平均池化的平均化效果。
AlexNet是目前应用极为广泛的网络,结构讲解见:http://blog.csdn.net/sunbaigui/article/details/39938097。
网络整体上给我们带来了三个结构模块:
1、单层卷积的结构:conv-relu-LRN-pool。前面的卷积步长大,快速降低featureMap的大小(较少后面的计算量),后面深层卷积保持featureMap大小不变。LRN的功能放在今天来看是无关痛痒的,并不是很强。
2、多层卷积的结构,网络更深,特征更抽象。
3、全连接的结构,drop避免过拟合。
ZFNet
由 Matthew D Zeiler和Rob Fergus于2013年在“Visualizing and Understanding Convolutional Networks”论文中提出,属于AlexNet网络的变体。论文具有重要意义,阐述了卷积网络为什么有效,ZF网络是他们顺带提出来的。ZF在faster rcnn等应用中做为特征提取模块被广泛应用,一般来讲比AlexNet略优。
主要的改动是:减少第一层卷积的size和stride(11->7、4->2),提取更多的底层特征,增加第二层卷积的步长stride(1->2)。从而取得到了和AlexNei基本相同的感知野,featureMap的大小相同,后面的卷积计算量也保持不变。
VGG
VGG-16又称为OxfordNet,是由牛津视觉几何组(Visual Geometry Group)开发的卷积神经网络结构。该网络赢得了ILSVR(ImageNet)2014的冠军。时至今日,VGG仍然被认为是一个杰出的视觉模型——尽管它的性能实际上已经被后来的Inception和ResNet超过了。
网络结构:http://ethereon.github.io/netscope/#/preset/vgg-16
我们就看D(VGG16)和E(VGG19)好了。因为前面的网络效果没有D和E的效果好,而且比起D和E来讲不够简洁。
VGG是把网络分为5组(模仿AlexNet的五层),然而它使用了3*3的过滤器,并把它们组合起来作为一个卷积序列进行处理。特征:
1.网络更深DCNN,channel数目更大。
2.采用多个3*3的卷积,模仿出更大的感受野的效果。这些思想也被用在了后续的网络架构中,如 Inception 与 ResNet。
GoogLeNet
Christian Szegedy开始追求减少深度神经网络的计算开销,并于2014年设计出 GoogLeNet——第一个 Inception 架构。
“Going Deeper with Convolutions”中google提出了Inception模块:
受NIN的启发,Inception的思路是减少每一层的特征过滤器的数目,从而减少运算量。用 1*1的卷积块在昂贵的并行模块之前减少特征的数量,比 AlexNet 与 VGG 的分类器的运算数量少得多。这种做法一般称为瓶颈层(Bottleneck)。
而且,尽管我们做了更好的运算,我们在此层也没有损失其通用性(generality)。事实证明瓶颈层在 ImageNet 这样的数据集上已经表现出了顶尖水平,而且它也被用于接下来介绍的 ResNet 这样的架构中。
它之所以成功是因为输入特征是相关联的,因此可通过将它们与 1×1 卷积适当结合来减少冗余。然后,在小数量的特征进行卷积之后,它们能在下一层被再次扩展成有意义的结合。
ResNet
2015 年 12 月又出现了新的变革,这和 Inception V3 出现的时间一样。ResNet 有着简单的思路:供给两个连续卷积层的输出,并分流(bypassing)输入进入下一层(论文:Deep Residual Learning for Image Recognition),在imagenet2015夺得冠军。
计算机视觉领域,特征随着网络加深而愈加抽象,而且深层网络也会带来梯度弥散/爆炸等问题。而且在实践中,深层网络(很深)的性能会劣于浅层网络,这反映了一个事实:非线性网络无法逼近恒等映射网络(y=x)。所以我们转而去学习恒等映射的扰动。
ResNet要学习的便是残差函数:,残差块的结构是:
这是第一次网络层数超过一百,甚至还能训练出 1000 层的网络。实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1。
通过首先是由带有更小输出(通常是输入的 1/4)的 1×1 卷积较少特征的数量,然后使用一个 3×3 的层,再使用 1×1 的层处理更大量的特征。类似于 Inception 模块,这样做能保证计算量低,同时提供丰富的特征结合。