【算法类】【算法介绍】deepCNNs之基于空间利用的模型:LeNet、AlexNet、VGG、GoogleNet(持续更新中)

本文介绍基于空间利用系列的CNN模型

1、LeNet

在这里插入图片描述
上图为LeNet的模型图,也是我们经常从CNN中看到的模型架构图,其主要包含3个卷积操作,2个池化操作,1个全连接操作

step1:卷积操作

输入层:32 * 32
卷积核:5 * 5
步长:1 * 1
filter_map个数:6个
输出大小:28 * 28 * 6

step2:池化操作

输入层:28 * 28 * 6
池化大小:2 * 2
步长:2 * 2
输出:14 * 14 * 6
解释:这里不是执行max_pooling操作,而是在2*2的窗口中,对每一个元素进行相加再乘以一个coefficient,得到的结果在加上一个bias,并输入到sigmoid激活函数中得到输出。output = sigmoid((s1 + s2 + s3 + s4) * coefficient + bias),si为一个池化窗口中的4个元素。

step3:卷积操作

输入层:14 * 14 * 6
卷积核:5 * 5
步长:1 * 1
filter_map个数:16个
输出大小:10 * 10 * 16

step4:池化操作

输入层:10 *10 * 16
池化大小:2 * 2
步长:2 * 2
输出:5 * 5 * 16

step5:卷积操作

输入层:5 * 5 * 16
卷积核:5 * 5
步长:1 * 1
filter_map个数:120个
输出大小:1 * 1 * 120

step6:全连接层

输入层:120。这里其实是把上一层输出向量进行一个平铺,如果是多维,可以将他们进行排列起来得到一维向量。
全连接节点个数:84
激活函数:sigmoid

step7:输出层:Gaussian连接

输入:84
输出节点:10(分类的个数)
gaussian连接的计算方式为:
在这里插入图片描述
对于每一个输出类别节点而言,其表示84个输入节点和其所对应的参数的欧式距离

2、AlexNet

先贴张图
在这里插入图片描述
这张图是AlexNet的整体架构,可以看到,该架构包含6个卷积层,2个标准化层,3个最大池化层,3个全连接层。那它跟LeNet相比有哪些提升的地方呢。

激活函数选用Relu激活函数

Relu激活函数相较于sigmoid和tanh激活函数有着以下优点

  • 使用sigmoid激活函数时,计算量大,因为从求导就可以看出,sigmoid涉及除法操作,f '( x) =f(x)(1 - f(x)) 。而Relu的导数在x小于0时为0,在大于0时为1,节省了很多运算步骤。
  • 在使用Relu作为激活函数时,由于部分导数为0,等同于加入了droupout,可以有效的减少过拟合的发生。
  • sigmoid函数由于两端饱和,即在x无穷大和无穷小的时候,y趋近于不变。

局部响应归一化

可以参考这篇博客深度学习的局部响应归一化LRN(Local Response Normalization)理解。以下是公式
局部相应归一化
这里写一下自己对局部相应归一化的解释:举个例子,对于[512,32,32,16]的输入,经过局部相应归一化后结果还是[512,32,32,16]的维度,所以很好理解,这个公式是对图像当中的每一个点进行处理后得到结果。公式中ai x,y表示图像中的某一个点,例如[5,4,4,7],N表示通道数,这里为16。k,n,alpha,beta均为自己设定。所以,这里的求和为在某一个通道上的n个点的相加的和,是通道方向上的求和。
那加入局部相应归一化有什么作用呢,引用一句话:对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

droupout

加入了droupout,即使相应比例的神经元不参与计算,起到了防止过拟合的作用。由于AlexNet最后加入了许多的全连接层,使得网络很容易过拟合。

重叠的最大池化

此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

3、VGG

3.1导读

VGGNet是2014年ILSVRC竞赛的第二名,没错你没听错它是第二名,第一名是GoogLeNet(也就是后续要介绍的GoogLeNet,之所以L要大写,是为了纪念LeNet).为什么先讲VGG,因为它这个模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。它的缺点在于,参数量有140M之多,需要更大的存储空间。但是这个模型很有研究价值。

3.2模型解读

借用博客VGGNet模型解读的模型图
在这里插入图片描述
这里共包括6个模型,其中后续模型均为在前一个模型基础上进行改进的模型,这些模型也均为在AlexNet模型的基础上进行改进的。

3.2.1模型概述

A模型:总共有11层

  • input:224 * 224 * 3的RGB图片
  • stage1:64个3 * 3的卷积层,接着是一个maxpool层
  • stage2:128个3 * 3的卷积层,接着是一个maxpool层
  • stage3:256个3 * 3的卷积层,256个3 * 3的卷积层,接着是一个maxpool层
  • stage4:512个3 * 3的卷积层,512个3 * 3的卷积层,接着是一个maxpool层
  • stage5:512个3 * 3的卷积层,512个3 * 3的卷积层,接着是一个maxpool层
  • stage6:三个全连接层和一个softmax层,三个全连接层的节点数为4096 * 4096 * 1000

A-LRN模型:总共有11层
区别:在stage2中保留AlexNet中的LRN

B模型:总共有13层
区别:在A的基础上,在stage1中加入了64个3 * 3的卷积层,在stage2中加入了128个3 * 3的卷积层。

C模型:总共有13层
区别:在B的基础上,在stage3上加入了256个1 * 1的卷积层,在stage4上加入了512个1 * 1 的卷积层,在stage5上加入了512个1 * 1的卷积层。

D模型:总共有13层
区别:在B的基础上,在stage3上加入了256个3 * 3的卷积层,在stage4上加入了512个3 * 3 的卷积层,在stage5上加入了512个3 * 3的卷积层。

E模型:总共有13层
区别:在D的基础上,在stage3上加入了256个3 * 3的卷积层,在stage4上加入了512个3 * 3 的卷积层,在stage5上加入了512个3 * 3的卷积层。

3.2.2 模型对比

  • A与A-LRN比较:A-LRN结果没有A好,说明LRN作用不大。
  • A与B, C, D, E比较,A是这当中layer最少的,相比之下A效果不如B,C,D,E,说明Layer越深越好;
  • ·B与C比较:增加1x1filter,增加了额外的非线性提升效果;
  • C与D比较:3x3 的filter(结构D)比1x1(结构C)的效果好

3.3 VGG模型在AlexNet模型的改进之处

  • 使用层层的更小filter尺寸和间隔。
    引入cs231n上面一段话:
    几个小滤波器卷积层的组合比一个大滤波器卷积层好:
    假设你一层一层地重叠了3个3x3的卷积层(层与层之间有非线性激活函数)。在这个排列下,第一个卷积层中的每个神经元都对输入数据体有一个3x3的视野。
    第二个卷积层上的神经元对第一个卷积层有一个3x3的视野,也就是对输入数据体有5x5的视野。同样,在第三个卷积层上的神经元对第二个卷积层有3x3的视野,
    也就是对输入数据体有7x7的视野。假设不采用这3个3x3的卷积层,二是使用一个单独的有7x7的感受野的卷积层,那么所有神经元的感受野也是7x7,但是就有一些缺点。
    首先,多个卷积层与非线性的激活层交替的结构,比单一卷积层的结构更能提取出深层的更好的特征。其次,假设所有的数据有C个通道,那么单独的7x7卷积层将会包含
    77C=49C2个参数,而3个3x3的卷积层的组合仅有个3*(33C)=27C2个参数。直观说来,最好选择带有小滤波器的卷积层组合,而不是用一个带有大的滤波器的卷积层。前者可以表达出输入数据中更多个强力特征
    使用的参数也更少。唯一的不足是,在进行反向传播时,中间的卷积层可能会导致占用更多的内存
  • 在整个图片和multi-scale上训练和测试图片。

3.4 个人理解

VGG模型更像是为了获得比赛名次而进行的调参方法,通过引入更多的层数,每层用更小的filter组合,可以提取深层的更好的特征。

4、GoogLeNet

下面我们来介绍2014年ILSVRC竞赛的第一名,先上个模型图来大致的看下。(巨长无比)
在这里插入图片描述
巨长无比是不是,但是没关系,我们发现其中一些结构都是相似的。
相似的结构可以归纳为下图(如b所示),我们称之为Inception
在这里插入图片描述
其实结构没有什么可说的,可以看到,模型在深度上要比VGG和AlexNet都要深,同时在宽度上有所增加。总结一下他的改进之处如下:

  • 采用模型化Inception。采用模块化Inception的好处就是可以方便的插入删除。通过多个卷积核提取图像不同尺度的特征,并进行融合,可以得到更好的特征表示
  • average_pool代替全连接层。可以使精确率提高0.6%
  • 网络采用了两个辅助softmax。作用有两点,一是为了避免梯度消失,用于向前传导梯度。反向传播时如果有一层求导为0,链式求导结果则为0。二是将中间某一层输出用作分类,起到模型融合作用。最后的loss=loss_2 + 0.3 * loss_1 + 0.3 * loss_0。实际测试时,这两个辅助softmax分支会被去掉。

Inception后续

Inception V2:提出BN算法,这是一种标注化的算法,即将输出数据进行相应处理,使得其加速收敛。
Inception V3:将卷积进行拆分,可以更好的提取特征,例如将7*7的卷积拆分成两个1 * 7 和 7 * 1的卷积。

参考

LeNet详解
VGGNet模型解读
深度网络VGG理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章