常见的卷积神经网络

匿名 (未验证) 提交于 2019-12-03 00:27:02

1.LeNet


点击见详细描述
1994年由卷积网络之父提出
LeNet网络除去输入输出层总共有六层网络,卷积核都是5*5的,stride=1,池化都是平均池化:
conv->pool->conv->pool->conv(fc)->fc

2.AlexNet

2012年,Imagenet比赛冠军。是神经网络在低谷期的第一次发声,极大程度推动了深度学习的发展。

AlexNet的结构及参数如上图所示,是8层网络结构(忽略激活,池化,LRN,和dropout层),有5个卷积层和3个全连接层,第一卷积层使用大的卷积核,大小为11*11,步长为4,第二卷积层使用5*5的卷积核大小,步长为1,剩余卷积层都是3*3的大小,步长为1。激活函数使用ReLu(虽然不是他发明,但是他将其发扬光大),池化层使用重叠的最大池化,大小为3*3,步长为2。在全连接层增加了dropout,第一次将其实用化。

(1)relu激活函数在层数较深时效果比sigmoid好
(2)drop out 降低过拟合,效果好,这算是一个trick吧
(3)步长设置比池化核小,增加特征丰富性
(4)多个LRN就提高0.1%,真是可有可无,好像现在用的也比较少。
(5)由于当时显卡性能在现在看来十分辣鸡,不能满足神经网络训练要求,于是结构被分成两个并行部分
(6)数据集扩增,防止过拟合。

3.VGGNet

VGGNet是牛津大学计算机视觉组和Google DeepMind公司一起研发的深度卷积神经网络,并取得了2014年Imagenet比赛定位项目第一名和分类项目第二名。该网络主要是泛化性能很好,容易迁移到其他的图像识别项目上,可以下载VGGNet训练好的参数进行很好的初始化权重操作,很多卷积神经网络都是以该网络为基础,比如FCN,UNet,SegNet等。vgg版本很多,常用的是VGG16,VGG19网络。



VGGNet拥有5段卷积,VGG16的每一段内有2~3个卷积层(VGG19的后三段是4个卷积层),同时每段尾部会连接一个最大池化层用来缩小图片尺寸。每段内的卷积核数量一样,越靠后的段的卷积核数量越多(64-128-256-512-512)。最后再跟三个全连接层(最后的softmax不算一层)

4.GoogleNet(Google Inception Net)

同样是2014年首次提出,不过一直在升级。

Inception v1

2014年的是Inception v1,相比前面的Alexnet和VGG,Inception v1把占总参数量90%的全连接层去掉,改为1x1的全局平均池化层。V1有22层,层数比AlexNet和VGGNet更深,但是参数更少。



Inception module基本结构:

其中有4个分支,每个分支都用到了1*1卷积,这是因为1*1卷积性价比很高,用很小的计算量就能增加一层特征变换和非线性化。这个结构可以让网络的深度和宽度高效率地扩充,提高准确率且不致于过拟合。

Inception v2

15年提出的Inception V2学习了VGGNet,用两个3x3的卷积来代替5x5的大卷积(减少了参数,减轻了过拟合),在降低参数的同时建立了更多的非线性变换,使得 CNN 对特征的学习能力更强。另外文中还提出了著名的BN归一化算法。
BN是一种非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也得到大幅提升。 BN在用于神经网络某一层时(注: BN层放在激活函数之前,使Wx+b具有更加一致和非稀疏的分布。),会对每一个mini-batch的数据内部进行标准化,使输出规范化到N(0,1)正态分布。BN的论文指出,传统的神经网络在训练时,每一层的输入分布都在发生变化,导致训练困难,我们一般只能使用一个很小的学习率来解决这一问题。BN的使用可以时学习速率增加很多倍,能够减少训练时间。同时BN也具有正则化作用,所以可以取消Dropout层,简化了模型。
只是单纯的使用BN,分类提升效果还不是太明显,论文中使用了几个tricks:
(1)增大学习率,加快学习率衰减速度。
(2)去除Dropout层
(3)去除LRN层(局部归一化层,lrn层放在relu、maxpool层后面,作为单独一层)。

Inception v3




Inception v4

Inception V4 相比 V3 主要是结合了微软的 ResNet,将错误率进一步减少。

5.ResNet

ResNet最根本的动机就是所谓的“退化”问题,即当模型的层次加深时,错误率却提高了,但是模型的深度加深,学习能力增强,因此更深的模型不应当产生比它更浅的模型更高的错误率。而这个“退化”问题产生的原因归结于优化难题,当模型变复杂时,SGD的优化变得更加困难,导致了模型达不到好的学习效果。
针对这个问题,作者提出了一个Residual的结构:

即增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,而作者认为这两种表达的效果相同,但是优化的难度却并不相同,作者假设F(x)的优化 会比H(x)简单的多。这一想法也是源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。
这个Residual block通过shortcut connection实现,通过shortcut将这个block的输入和输出进行一个element-wise的加叠,这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度、提高训练效果,并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。
文章中提出了两种方式:

这两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),一般称整个结构为一个”building block“。其中右图又称为”bottleneck design”,目的一目了然,就是为了降低参数的数目,第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。
对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量(实用目的)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!