深度学习笔记 7 几种典型的卷积神经网络

目录

1. LeNet介绍

1.1 结构:LeNet-5 共包含 8 层

1.2 代码实现

2. Alext Net

2.1 Alex Net 结构

2.2 代码实现

3. VGG-Net

3.1 网络结构 

3.2 代码实现

4 Inception网络

4.1 为什么提出Inception

4.2 Inception-v1

4.3 Inception-v2  

4.4 Inception v3

4.5 Inception-v4

5 残差网络ResNet

5.1 ResNet解决的是什么问题?

5.2 如何解决退化问题

5.3 残差结构为什么有效?


1. LeNet介绍

LeNet-5虽然提出的时间比较早,但它是一个非常成功 的神经网络模型,LeNet-5的网络结构如图所示。

深度学习笔记 7 几种典型的卷积神经网络_第1张图片

1.1 结构:LeNet-5 共包含 8 层

整体上是:输入层>卷积层>池化层+激活函数>卷积层>池化层+激活函数>卷积层>全连接层>输出层

输入层:N 个 32x32 的训练样本

输入图像大小为 32x32,比 MNIST 数据库中的字母大,这样做的原因是希望潜在的明显特征,如笔画断点或角点能够出现在最高层特征监测子感受野的中心。

(1) C1层是卷积层,使用6个5×5的卷积核,得到6组大小为28×28 = 784 的特征映射。因此,C1 层的神经元数量为 6 × 784 = 4 704,可训练参数数量为 6 × 25 + 6 = 156,连接数为156 × 784 = 122 304(包括偏置在内,下同)。

(2) S2 层为汇聚层,采样窗口为 2 × 2,使用平均汇聚,并使用一个非线性函数。神经元个数为 6 × 14 × 14 = 1 176,可训练参数数量为 6 × (1 + 1) = 12,连接数为6 × 196 × (4 + 1) = 5 880。

(3) C3 层为卷积层,LeNet-5 中用一个连接表来定义输入和输出特征映 射之间的依赖关系。共使用 60 个 5 × 5 的卷积核,得到 16 组大 小为 10 × 10 的特征映射。 神经元数量为 16 × 100 = 1 600,可训练参数数量为 (60 × 25) + 16 = 1 516,连接数为100 × 1 516 = 151 600。

深度学习笔记 7 几种典型的卷积神经网络_第2张图片

 LeNet-5中C3层的连接表

深度学习笔记 7 几种典型的卷积神经网络_第3张图片(4) S4层是一个汇聚层,采样窗口为2 × 2,得到16个5 × 5大小的特征映 射,可训练参数数量为16 × 2 = 32,连接数为16 × 25 × (4 + 1) = 2 000。

(5) C5 层是一个卷积层,使用 120 × 16 = 1 920 个 5 × 5 的卷积核,得到 120 组大小为 1 × 1 的特征映射。C5 层的神经元数量为 120,可训练参数数量为 1 920 × 25 + 120 = 48 120,连接数为120 × (16 × 25 + 1) = 48 120。

(6) F6层是一个全连接层,有84个神经元,可训练参数数量为84 × (120 + 1) = 10 164.连接数和可训练参数个数相同,为10 164。

(7) 输出层:输出层由10个径向基函数(Radial Basis Function,RBF)组 成,输入图像大小:1x84,输出特征图数量:1x10

1.2 代码实现

PyTorch——LeNet实现(附完整代码)_cqu_shuai的博客-CSDN博客_lenet pytorchhttps://blog.csdn.net/beilizhang/article/details/114483822

2. Alext Net

AlexNet是第一个现代深度卷积网络模型,其首次 使用了很多现代深度卷积网络的技术方法,比如使用 GPU 进行并行训练,采用 了 ReLU 作为非线性激活函数,使用 Dropout 防止过拟合,使用数据增强来提高 模型准确率等。AlexNet赢得了2012年ImageNet图像分类竞赛的冠军。 

深度学习笔记 7 几种典型的卷积神经网络_第4张图片输入为224 × 224 × 3的图像,为后续处理方便,普遍改为227*227*3,输出为1 000个类别的条件概率。5个卷积层,3个池化层,3个全连接层

2.1 Alex Net 结构

 第一层

卷积层1 为:11*11*3,有96个5*5卷积核,stride = 4,卷积层后跟ReLU,因此输出的尺寸为 (227-11)/4+1=55,因此其输出的每个特征图 为 55*55*96,同时后面经过LRN层处理,尺寸不变;

最大池化层1,池化核大小为3*3,stride = 2,Feature Map=(55-3)/2+1=27,因此特征图的大小为:27*27*96。

由于双gpu处理,故每组数据有27*27*48个特征图,共两组数据,分别在两个gpu中进行运算。

第二层

卷积层2,输入为上层输出:27*27*96,256个5*5卷积核,pad = 2, stride = 1; Feature Map= (27+2*2-5)/1+1=27,同时后面经过LRN层处理,尺寸不变;

最大池化层2,池化核大小为3*3,stride = 2,Feature Map=(27-3)/2+1=13,输出特征图13*13*256,双GPU,每组13*13*128。

第三层

 卷积层3, 输入为第二层的输出13*13*128,384 个3*3卷积, padding = 1,stride=1,Feature Map= (13+2*1-3)/1+1=13 ,输出特征图13*13*384,每组13*13*192。

第四层

卷积层4  ,输入为第三层的输出13*13*192,384个3*3卷积核, padding = 1,stride=1,Feature Map= (13+2*1-3)/1+1=13 ,输出特征图13*13*384,每组13*13*192。

第五层

卷积层 5, 输入为第四层的输出13*13*192,256个3*3卷积核,padding = 1,stride = 1,Feature Map= (13+2*1-3)/1+1=13

最大池化3,然池化核大小为3*3,stride = 2,Feature Map=(13-3)/2+1=6,输出特征图6*6*256,每组6*6*128。

第六层 全连接层,4096 个神经元+ ReLU

第七层 全连接层,4096 个神经元+ ReLU

第八层 全连接层,1000个神经元

2.2 代码实现

PyTorch——AlexNet实现(附完整代码)_cqu_shuai的博客-CSDN博客_alexnet代码pytorch实现https://blog.csdn.net/beilizhang/article/details/114807194

3. VGG-Net

3.1 网络结构 

VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,VGGNet 探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠 3x3 的小型卷积核和 2x2 的最大池化层,VGGNet 成功地构筑了 16~19 层深的卷积神经网络,主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分。

VGG16包含了16个隐藏层(13个卷积层+3个全连接层),如图中的D列所示

VGG19包含了19个隐藏层(16个卷积层+3个全连接层),如图中的E列所示

深度学习笔记 7 几种典型的卷积神经网络_第5张图片

  1.   输入尺寸为 224 x 224 x 3 的图片,用64个3x3的卷积核作两次卷积和ReLU,卷积后的尺寸变为 224 x 224 x 64。
  2.  池化层,使用最大池化,池化单元大小为2x2,池化后尺寸变为112 x 112 x 64。
  3.  输入尺寸为112 x 112 x 64,使用128个3x3的卷积核作两次卷积和ReLU,尺寸改变为112 x 112 x 128。
  4. 池化层,使用最大池化,池化单元大小为2x2,池化后尺寸变为56 x 56 x 128。
  5. 输入尺寸为56 x 56 x 128,使用256个的卷积核作三次卷积和ReLU,尺寸改变为 56 x 56 x 256。
  6. 池化层,使用最大池化,池化单元大小为2x2,池化后尺寸变为28 x 28 x 256。
  7. 输入尺寸为28 x 28 x 256,使用512个的3x3卷积核作三次卷积和ReLU,尺寸改变为28 x 28 x 512。
  8. 池化层,使用最大池化,池化单元大小为2x2,池化后尺寸变为14 x 14 x 512。
  9. 输入尺寸为14 x 14 x 512,使用512个的3x3卷积核作三次卷积和ReLU,尺寸改变为14 x 14 x 512。
  10. 池化层,使用最大池化,池化单元大小为2x2,池化后尺寸变为7 x 7x 512
  11. 与两层1x1x4096,一层1x1x1000进行全连接+ReLU(共三层)。
  12. 通过softmax输出1000个预测结果。  

 改进点:

1.使用3x3小卷积核。为什么要采用三个3x3卷积,而不直接使用一个7x7卷积呢?主要有两个好处:

1)三个卷积可以进行三次非线性变换,而这种非线性变换能有效提升不同信息的判别性(差异);2)减小网络参数量。

2. 增加网络深度。增加网络深度的好处就是能够增加网络的非线性映射次数,使得网络能够提取具有更好的判决信息的特征,从而提升网络性能。因为使用了3x3卷积,使得网络参数量并不会随着网络的深度增加而急剧上升。除此之外,VGGNet还使用了1x1卷积,目的也是增加非线性映射次数 。

3.2 代码实现

使用pytorch实现VGG16模型(小白学习,详细注释)_一个小猴子`的博客-CSDN博客_torch实现vgg16icon-default.png?t=M85Bhttps://blog.csdn.net/m0_50127633/article/details/117045008

4 Inception网络

4.1 为什么提出Inception

提高网络最简单粗暴的方法就是提高网络的深度和宽度,即增加隐层和以及各层神经元数目。但这种简单粗暴的方法存在一些问题:

  • 会导致更大的参数空间,更容易过拟合
  • 需要更多的计算资源
  • 网络越深,梯度容易消失,优化困难(这时还没有提出BN时,网络的优化极其困难)

Inception系列模型提出的初衷主要为了解决CNN分类模型的两个问题,其一是如何使得网络深度增加的同时能使得模型的分类性能随着增加,而非像简单的VGG网络那样达到一定深度后就陷入了性能饱和的困境(Resnet针对的也是此一问题);其二则是如何在保证分类网络分类准确率提升或保持不降的同时使得模型的计算开销与内存开销充分地降低

4.2 Inception-v1

深度学习笔记 7 几种典型的卷积神经网络_第6张图片

结构a有四个通道,有1*1、3*3、5*5卷积核,首先通过1x1卷积来降低通道数把信息聚集一下,再进行不同尺度的特征提取以及池化,得到多个尺度的信息,最后将特征进行叠加输出。采用大小不同的卷积核,意味着感受野的大小不同,就可以得到不同尺度的特征;采用比较大的卷积核即5*5,因为有些相关性可能隔的比较远,用大的卷积核才能学到此特征。

深度学习笔记 7 几种典型的卷积神经网络_第7张图片

a 结构有个缺点,5*5的卷积核的计算量太大。作者想到了b结构,用1*1的卷积核进行降维。

这个1*1的卷积核,它的作用就是:降低维度,减少计算瓶颈;增加网络层数,提高网络的表达能力。

 在Inception结构中,大量采用了1x1的矩阵作用:

1)对数据进行降维;2)引入更多的非线性,提高泛化能力,因为卷积后要经过ReLU激活函数。

4.3 Inception-v2  

这篇论文主要思想在于提出了Batch Normalization,其次就是稍微改进了一下Inception。

1. 提出 Batch Normalization

对于一个神经网络,第n层的输入就是第n-1层的输出,在训练过程中,每训练一轮参数就会发生变化,对于一个网络相同的输入,但n-1层的输出却不一样,这就导致第n层的输入也不一样,为了解决这个问题提出的BN

BN层的计算流程是:计算样本均;计算样本方差;样本数据标准化处理;进行平移和缩放处理。

作用:加速网络训练;防止梯度消失,网络具有更好的泛化能力。

2. Inception V2 网络训练的技巧有:

使用更高的学习率;删除dropout层、LRN 层;减小L2 正则化的系数;

更快的衰减学习率;减少图片的形变。

4.4 Inception v3

1. 分解卷积核尺寸:分解为对称的小的卷积核;分解为不对称的卷积核

深度学习笔记 7 几种典型的卷积神经网络_第8张图片

深度学习笔记 7 几种典型的卷积神经网络_第9张图片

 

不对称分解方法有几个优点:

节约了大量的参数;增加一层非线性,提高模型的表达能力;可以处理更丰富的空间特征,增加特征的多样性

深度学习笔记 7 几种典型的卷积神经网络_第10张图片

 

深度学习笔记 7 几种典型的卷积神经网络_第11张图片

2. 使用辅助分类器优势:

Inception v1引进辅助的分类器去提高非常深的网络的收敛。引进辅助分类器的原始动机是加大梯度向更前层的流动(缓解梯度vanishing),从而加速训练过程中的收敛

把梯度有效的传递回去,不会有梯度消失问题,加快了训练;中间层的特征也有意义,空间位置特征比较丰富,有利于提成模型的判别力。

3.改变降低特征图尺寸的方式

传统的卷积神经网络,当有pooling时(pooling层会大量的损失信息),会在之前增加特征图的厚度(就是双倍增加滤波器的个数),来保持网络的表达能力,但是计算量会大大增加。

作者改进成两个通道,一个是卷积层,一个是pooling层,两个通道生成的特征图大小一样,concat在一起即可。

深度学习笔记 7 几种典型的卷积神经网络_第12张图片

4.5 Inception-v4

Stem中使用了Inception V3中使用的并行结构、不对称卷积核结构,可以在保证信息损失足够小的情况下,使得计算量降低。结构中1*1的卷积核也用来降维,并且也增加了非线性。

深度学习笔记 7 几种典型的卷积神经网络_第13张图片

 Inception-A/B/C模块

三种Inception block的个数分别为4、7、3个,而V3中为3、5、2个,因此新的Inception层次更深、结构更复杂,feature map的channel更多,为了降低计算量,在Inception-A和Inception-B后面分别添加了Reduction-A和Reduction-B的结构,用来降低计算量。

深度学习笔记 7 几种典型的卷积神经网络_第14张图片

redution-A/B模块

这两种结构中,卷积的步长(stride)为2,并且都是用了valid padding,来降低feature map的尺寸。结构中同样是用并行、不对称卷积和1*1的卷积来降低计算量

残差网络ResNet

残差网络(Residual Network,ResNet)  通过给非线性的卷积层增加直连边 (Shortcut Connection)(也称为残差连接(Residual Connection))的方式来 提高信息的传播效率.

5.1 ResNet解决的是什么问题?

ResNets要解决的是深度神经网络的“退化”问题。

随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。

残差网络通过给非线性的卷积层增加直连边(Shortcut Connection)(也称为残差连接)的方式来提高信息的传播效率

梯度消失和梯度爆炸都有一定的缓解方法,比如换成使用ReLU函数作为激活函数,或者是在每层输入之后添加正则化层。但是即使用了正则化等手段,随着层数加深,但神经网络在训练集的准确度仍然会发生饱和甚至精度下降的问题。这个问题无法解释为过拟合,因为过拟合是在训练集上的准确率很高,在测试集上要低。而现在是神经网络在训练集上的准确率都下降了。研究者把这种现象称之为网络退化。

5.2 如何解决退化问题

残差块:残差单元可以以跳层连接的形式实现,即将单元的输入直接与单元输出加在一起,然后再激活。因此残差网络可以轻松地用主流的自动微分深度学习框架实现,直接使用BP算法更新参数

假设在一个深度网络中,我们期望一个非线性单元(可以为一层或多层的卷积层)(; ) 去逼近一个目标函数为 ℎ().如果将目标函数拆分成两部分:恒等函数(Identity Function) 和残差函数(Residue Function)ℎ() – 。

目标函数为:ℎ() = + (ℎ() − )

深度学习笔记 7 几种典型的卷积神经网络_第15张图片

 

第一条直接向下传递的网络:试图从 x 中直接学习残差 F(x)

第二条捷径网络:输入 x

整合:将残差和x相加,即 H(x)=F(x)+x,也就是所要求的映射 H(x)

好处:只有一条通路的反向传播,会做连乘导致梯度消失,但现在有两条路,会变成求和的形式,避免梯度消失。后面的层可以看见输入,不至于因为信息损失而失去学习能力。

如果连乘的方式会造成梯度消失的话,那么连加。传统的网络每次学习会学习 x->f(x) 的完整映射,那么 ResNet 只学习残差的映射。

5.3 残差结构为什么有效?

自适应深度:网络退化问题就体现了多层网络难以拟合恒等映射这种情况,但使用了残差结构之后,拟合恒等映射变得很容易,直接把网络参数全学习到为0,只留下那个恒等映射的跨层连接即可。

“差分放大器”:假设最优H(x)更接近恒等映射,那么网络更容易发现除恒等映射之外微小的波动

模型集成:整个ResNet类似于多个网络的集成,原因是删除ResNet的部分网络结点不影响整个网络的性能

缓解梯度消失:针对一个残差结构对输入x求导就可以知道,由于跨层连接的存在,总梯度在F(x)对x的导数基础上还会加1。

深度学习笔记 7 几种典型的卷积神经网络_第16张图片


 

你可能感兴趣的:(深度学习笔记(理论),深度学习,cnn,机器学习)