目录
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 残差结构为什么有效?
LeNet-5虽然提出的时间比较早,但它是一个非常成功 的神经网络模型,LeNet-5的网络结构如图所示。
整体上是:输入层>卷积层>池化层+激活函数>卷积层>池化层+激活函数>卷积层>全连接层>输出层
输入层: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。
LeNet-5中C3层的连接表
(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
PyTorch——LeNet实现(附完整代码)_cqu_shuai的博客-CSDN博客_lenet pytorchhttps://blog.csdn.net/beilizhang/article/details/114483822
AlexNet是第一个现代深度卷积网络模型,其首次 使用了很多现代深度卷积网络的技术方法,比如使用 GPU 进行并行训练,采用 了 ReLU 作为非线性激活函数,使用 Dropout 防止过拟合,使用数据增强来提高 模型准确率等。AlexNet赢得了2012年ImageNet图像分类竞赛的冠军。
输入为224 × 224 × 3的图像,为后续处理方便,普遍改为227*227*3,输出为1 000个类别的条件概率。5个卷积层,3个池化层,3个全连接层
第一层
卷积层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个神经元
PyTorch——AlexNet实现(附完整代码)_cqu_shuai的博客-CSDN博客_alexnet代码pytorch实现https://blog.csdn.net/beilizhang/article/details/114807194
VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,VGGNet 探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠 3x3 的小型卷积核和 2x2 的最大池化层,VGGNet 成功地构筑了 16~19 层深的卷积神经网络,主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分。
VGG16包含了16个隐藏层(13个卷积层+3个全连接层),如图中的D列所示
VGG19包含了19个隐藏层(16个卷积层+3个全连接层),如图中的E列所示
改进点:
1.使用3x3小卷积核。为什么要采用三个3x3卷积,而不直接使用一个7x7卷积呢?主要有两个好处:
1)三个卷积可以进行三次非线性变换,而这种非线性变换能有效提升不同信息的判别性(差异);2)减小网络参数量。
2. 增加网络深度。增加网络深度的好处就是能够增加网络的非线性映射次数,使得网络能够提取具有更好的判决信息的特征,从而提升网络性能。因为使用了3x3卷积,使得网络参数量并不会随着网络的深度增加而急剧上升。除此之外,VGGNet还使用了1x1卷积,目的也是增加非线性映射次数 。
使用pytorch实现VGG16模型(小白学习,详细注释)_一个小猴子`的博客-CSDN博客_torch实现vgg16https://blog.csdn.net/m0_50127633/article/details/117045008
提高网络最简单粗暴的方法就是提高网络的深度和宽度,即增加隐层和以及各层神经元数目。但这种简单粗暴的方法存在一些问题:
Inception系列模型提出的初衷主要为了解决CNN分类模型的两个问题,其一是如何使得网络深度增加的同时能使得模型的分类性能随着增加,而非像简单的VGG网络那样达到一定深度后就陷入了性能饱和的困境(Resnet针对的也是此一问题);其二则是如何在保证分类网络分类准确率提升或保持不降的同时使得模型的计算开销与内存开销充分地降低。
结构a有四个通道,有1*1、3*3、5*5卷积核,首先通过1x1卷积来降低通道数把信息聚集一下,再进行不同尺度的特征提取以及池化,得到多个尺度的信息,最后将特征进行叠加输出。采用大小不同的卷积核,意味着感受野的大小不同,就可以得到不同尺度的特征;采用比较大的卷积核即5*5,因为有些相关性可能隔的比较远,用大的卷积核才能学到此特征。
a 结构有个缺点,5*5的卷积核的计算量太大。作者想到了b结构,用1*1的卷积核进行降维。
这个1*1的卷积核,它的作用就是:降低维度,减少计算瓶颈;增加网络层数,提高网络的表达能力。
在Inception结构中,大量采用了1x1的矩阵作用:
1)对数据进行降维;2)引入更多的非线性,提高泛化能力,因为卷积后要经过ReLU激活函数。
这篇论文主要思想在于提出了Batch Normalization,其次就是稍微改进了一下Inception。
1. 提出 Batch Normalization
对于一个神经网络,第n层的输入就是第n-1层的输出,在训练过程中,每训练一轮参数就会发生变化,对于一个网络相同的输入,但n-1层的输出却不一样,这就导致第n层的输入也不一样,为了解决这个问题提出的BN
BN层的计算流程是:计算样本均;计算样本方差;样本数据标准化处理;进行平移和缩放处理。
作用:加速网络训练;防止梯度消失,网络具有更好的泛化能力。
2. Inception V2 网络训练的技巧有:
使用更高的学习率;删除dropout层、LRN 层;减小L2 正则化的系数;
更快的衰减学习率;减少图片的形变。
1. 分解卷积核尺寸:分解为对称的小的卷积核;分解为不对称的卷积核。
不对称分解方法有几个优点:
节约了大量的参数;增加一层非线性,提高模型的表达能力;可以处理更丰富的空间特征,增加特征的多样性
2. 使用辅助分类器优势:
Inception v1引进辅助的分类器去提高非常深的网络的收敛。引进辅助分类器的原始动机是加大梯度向更前层的流动(缓解梯度vanishing),从而加速训练过程中的收敛
把梯度有效的传递回去,不会有梯度消失问题,加快了训练;中间层的特征也有意义,空间位置特征比较丰富,有利于提成模型的判别力。
3.改变降低特征图尺寸的方式
传统的卷积神经网络,当有pooling时(pooling层会大量的损失信息),会在之前增加特征图的厚度(就是双倍增加滤波器的个数),来保持网络的表达能力,但是计算量会大大增加。
作者改进成两个通道,一个是卷积层,一个是pooling层,两个通道生成的特征图大小一样,concat在一起即可。
Stem中使用了Inception V3中使用的并行结构、不对称卷积核结构,可以在保证信息损失足够小的情况下,使得计算量降低。结构中1*1的卷积核也用来降维,并且也增加了非线性。
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的结构,用来降低计算量。
redution-A/B模块
这两种结构中,卷积的步长(stride)为2,并且都是用了valid padding,来降低feature map的尺寸。结构中同样是用并行、不对称卷积和1*1的卷积来降低计算量
残差网络(Residual Network,ResNet) 通过给非线性的卷积层增加直连边 (Shortcut Connection)(也称为残差连接(Residual Connection))的方式来 提高信息的传播效率.
ResNets要解决的是深度神经网络的“退化”问题。
随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。
残差网络通过给非线性的卷积层增加直连边(Shortcut Connection)(也称为残差连接)的方式来提高信息的传播效率。
梯度消失和梯度爆炸都有一定的缓解方法,比如换成使用ReLU函数作为激活函数,或者是在每层输入之后添加正则化层。但是即使用了正则化等手段,随着层数加深,但神经网络在训练集的准确度仍然会发生饱和甚至精度下降的问题。这个问题无法解释为过拟合,因为过拟合是在训练集上的准确率很高,在测试集上要低。而现在是神经网络在训练集上的准确率都下降了。研究者把这种现象称之为网络退化。
残差块:残差单元可以以跳层连接的形式实现,即将单元的输入直接与单元输出加在一起,然后再激活。因此残差网络可以轻松地用主流的自动微分深度学习框架实现,直接使用BP算法更新参数
假设在一个深度网络中,我们期望一个非线性单元(可以为一层或多层的卷积层)(; ) 去逼近一个目标函数为 ℎ().如果将目标函数拆分成两部分:恒等函数(Identity Function) 和残差函数(Residue Function)ℎ() – 。
目标函数为:ℎ() = + (ℎ() − )
第一条直接向下传递的网络:试图从 x 中直接学习残差 F(x)
第二条捷径网络:输入 x
整合:将残差和x相加,即 H(x)=F(x)+x,也就是所要求的映射 H(x)
好处:只有一条通路的反向传播,会做连乘导致梯度消失,但现在有两条路,会变成求和的形式,避免梯度消失。后面的层可以看见输入,不至于因为信息损失而失去学习能力。
如果连乘的方式会造成梯度消失的话,那么连加。传统的网络每次学习会学习 x->f(x) 的完整映射,那么 ResNet 只学习残差的映射。
自适应深度:网络退化问题就体现了多层网络难以拟合恒等映射这种情况,但使用了残差结构之后,拟合恒等映射变得很容易,直接把网络参数全学习到为0,只留下那个恒等映射的跨层连接即可。
“差分放大器”:假设最优H(x)更接近恒等映射,那么网络更容易发现除恒等映射之外微小的波动
模型集成:整个ResNet类似于多个网络的集成,原因是删除ResNet的部分网络结点不影响整个网络的性能
缓解梯度消失:针对一个残差结构对输入x求导就可以知道,由于跨层连接的存在,总梯度在F(x)对x的导数基础上还会加1。