我根据北邮鲁鹏老师的计算机视觉与深度学习课程,做了一些课后总结.不叹,鲁鹏老师的课程很棒!
参数量:
Alexnet=6.1×10e7
VGG16=1.38×10e8
Googlenet=1.3×10e7
Resnet18=1.1×10e7
Resnet50=2.5×10e7
Resnet101=4.45×10e7
Resnet152=6.02×10e7
AlexNet验证了深度卷积神经网络的高效性,使得DNN得以再次蓬勃发展
1:提出了一种卷积层加全连接层的卷积神经网络结构.
(卷积层提取特征,全连接层进行分类)
2:首次使用ReLU函数做为神经网络的激活函数.
(使用Relu激活函数主要进行非线性操作,以降低分类误差)
3:首次提出Dropout正则化来控制过拟合.
(在利用前层特征的时候就不能只利用某几个,可以分散利用前层特征,使网络学到更多的东西)
4:使用加入动量的小批量梯度下降算法加速了训练过程的收敛.
(动量可以使震荡方向减少,运动较慢的方向加快)
5:使用数据增强策略极大地抑制了训练过程的过拟合.
(增加了样本的数量)
6:利用GPU的并行计算能力,加速了网络的训练与推断.
(也救活了老黄)
CONV1 : 96×11×11,stride=4,padding=0 |
---|
MAX POOL1 : 1×3×3,步长为2,有重叠,以对抗过拟合 |
NORM1 : 局部响应归一化层,现在已不用 |
CONV2 : 256×5×5,stride=1,padding=2 |
MAX POOL2 : 1×3×3,步长为2 |
NORM2 : 局部响应归一化层 |
CONV3 : 384×3×3,stride=1,padding=1 |
CONV4 : 384×3×3,stride=1,padding=1 |
CONV5 : 256×3×3,stride=1,padding=1 |
MAX POOL2 : 输出 256×6×6 |
FC6 |
FC7 |
FC8 |
AlexNet共八层,5个卷积层,3个全连接层.
Question1:
输入227×227×3大小的图像至第一层,输出特征图个数及尺寸?
Answer1:
(227-11+2×0)/4+1=55
输出特征图的个数为第一层卷积核的个数96,尺寸为55×55.首层进行了较大幅度的特征浓缩.
Question2:
第一层有多少个参数?
Answer2:
(11×11×3+1)×96=35k左右,
加一是在每一个卷积核后面都会有一个偏置,在一个batch计算过程中,第一层的这35k个参数不变,因此有参数共享这一说头.
Question3:
输入96个55×55大小的图像至第二层最大池化层,输出特征图个数及尺寸?
Answer3:
(55-3+2×0)/2+1=27
输出特征图的个数为第二层池化层卷积的个数256,尺寸为27×27.池化层的强行降采样.
Question4:
输入96个27×27大小的图像至第二层卷积层,输出特征图个数及尺寸?
Answer4:
(27-5+2×2)/1+1=27
输出特征图的个数为第二层卷积层卷积核的个数256,尺寸为27×27.
输出尺寸不变,卷积核的个数增多,增加了基元的描述能力,能记住的东西更多,能描述出更多的细粒度的东西.
Question5:
全连接层是如何展开的?
Answer5:
FC6的输入为9216维向量.256×6×6的图像通过flatten层拉平.
FC8的输出为图像类别概率
Question6:
如何确定CNN的卷积核通道数和卷积输出的通道数?
Answer6:
CNN卷积核的通道数=卷积输入层的通道数
CNN的卷积层输出通道数=卷积核的个数
重要说明:
1:用于提取图像特征的卷积层已经用于分类的全连接层是同时学习的;不论是卷积层还是全连接层,梯度都是可以回传的,由最后一层全连接层的输出计算的loss通过梯度回传,影响卷积层以及全连接层的参数.
2:卷积层与全连接层在学习过程中会相互影响,相互促进.
技巧
1:Dropout策略防止过拟合;
2:使用加入动量的随机梯度下降算法,加速收敛;
3:验证集损失不下降时,手动降低10倍学习率;
4:采用样本增强策略增加训练样本数量,防止过拟合;
5:集成多个模型,进一步提高精度:训练多个少分类项目的模型,然后将对应的参数进行平均.
6:卷积神经网络是放在GPU上进行:
那么,到底,卷积核在做什么?
卷积层将一副输入的图片学习成一些列带有语义结构的特征相应图组.
首先,ZFnet与AlexNet网络结构基本一致,他的出现让人们真正的懂得了卷积神经网络到底在做什么.也提高了4.7%的精度.
ZFnet的主要改进:
1:将第一个卷积层的卷积核大小改为了7×7.原来是11×11;
改小了之后可以检测更加细粒度的信息,以免一上来就丢掉细节信息.
2:将第二,第三各卷积层的卷积步长都设置为2;
这个地方鲁鹏老师的解释有些问题,我再查一查
3:增加第三,第四层卷积核的个数.
通过反向可视化发现第三层与第四层开始已经提取出来细节特征.
3.1:VGGnet的主要改进:
1:使用尺寸更小的3×3卷积核串联来获得更大的感受野;
2:放弃使用11×11核5×5这样的大尺寸卷积核;
3:深度更深,非线性更强,网络的参数也更少;
小的卷积核拥有更小的计算量.
4:去掉了AlexNet中的局部相应归一化层(LRN);
LRN:统计所有图像,得到一个均值向量,该均值向量的每个元素分别是所有图片中同一像素点的均值
BN : 先选出一个batch,将该batch中图片以batch_size为一组,以每一通道为一个单位进行减均值,除标准差.
使用BN层的优点:
(1)、可以使梯度传递更加顺畅,不容易导致梯度消失或梯度爆炸。
(2)、可以使学习率设置的更大一点。
(3)、对于初始值的依赖减小。
3.2:VGG16的结构特点:
1:13个卷积层与3个全连接层,13个卷积层分为5组,与AlexNet,ZFnet卷积组数相同,就是拿两个3×3的卷积层替换了一个5×5的卷积层,拿两个5×5的卷积层替换了一个7×7的卷积层.
2:分为5段,每一段中卷积层的卷积核个数均相同
3:所有卷积层均采用3×3的卷积核及Relu激活函数
4:池化层均采用最大池化,其窗口函数大小为2×2,步长为2
5:经过一次池化操作,其后卷积层的卷积核个数就增加一倍,直至512,后层包括更多的语义信息,且输出尺寸更小,计算量更小,所以增多厚层的卷积核个数.
前层语义信息少,且增加前层卷积核个数会增大更多的计算量,所以减少前层卷积核的个数.
VGG19比VGG16在第三,第四和第五个卷积层组处又增加了一个3×3的卷积层,增加了三个非线性操作.与VGG16相比,VGG19网络精度略有提高,但占用的计算资源增加了更多.
3.4:小卷积核的优势:感受野相同,计算量更少
多个小尺寸卷积核串联可以得到与大尺寸卷积核相同的感受野
计算量上的优势:
三个3×3卷积核的参数量为(3×3×Inputsize)×Inputsize×3=27×Inputsize×Outputsize
两个7×7卷积核的参数量为(7×7×Inputsize)×Inputsize=49×Inputsize×Outputsize
3.5:为什么VGG网络前四段中,每经过一次池化操作,卷积核个数就要增加一倍?
1:池化操作可以减少特征图尺寸,降低现存占用.
2:增加卷积核个数有助于学习更多的结构特征,但会增加网络参数数量以及内存消耗.
3:一减(池化)一增(增加下个卷积层卷积核个数)的设计平衡了识别精度与存储,计算开销
final:提升了网络的性能.
3.6:为什么最后一层卷积层将卷积核个数增加到512后就不再增加了?
1:第一个全连接层含102M参数,占总参数个数的74%,VGG全部参数为150M左右.102M=卷积核尺寸×卷积核个数×全连接层神经元个数.
7×7×512×4096=102760448
2:这一层的参数个数是特征图的尺寸与个数的乘积.
3:参数多容易过拟合,且不容易被训练
GoogLeNet与VGG属于同年出来的网络,但是GoogLeNet比VGG更加厉害,用22层网络跑出来了6.7%的错误率.VGG证明了用小的卷积核串联能够模仿大的网络,VGG也证明了LRN的作用步明显,所以就去点了换成了BN层.
4.1:GoogLeNet的创新点
1:提出了一种Inception结构,它能保留输入信号中的更多特征信息;
2:去掉了AlexNet的前两个全连接层,并采用了平均池化层,这一设计使得GoogLeNet只有500万参数,比AlexNet少12倍.
3:GoogLeNet将最后个卷积层的7×7的输出做了平均,每个卷积核输出一个数接到了全连接层上,这样使参数量减少了很多.
4:在网络中引入了辅助分类器,克服了训练过程中的梯度消失问题.
4.2:串联结构的问题
VGG等后面的卷积层只能处理前层输出的特征图;前层因某些原因(比如感受野限制)丢失重要信息,后层无法找回.GoogLeNet使用Inception块,使每一层尽量多的保留输入信号中的信息.
4.3:Inception块解决了串联结构的问题
GoogleNet不仅使网络做到了更深,而且使网络做到了更宽,同一个卷积组可以融合更多的不同尺寸卷积核提取出来的信息,而且与VGG相比,计算量还得到了减少(1×1卷积核的使用)
GoogleNet总结:
1:使用了九个Inception模块.
2:输入使用了减去均值后224×224的彩色三通道图像.
3:输出使用AveragePool平均池化,每个特征图只取一个平均值.将特征图个数个平均值与全连接层相连.
4:GoogleNet使用平均池化操作,使参数量较AlexNet相比下降了12倍,GoogleNet的总参数量不到500万.GoogleNet无需使用Dropout策略.
65:GoogleNet有两个辅助分类器,使位于网络中部的梯度也可以回传到输入.
虽然ReLU单元能够一定程度解决梯度消失问题,但是并不能完全解决深层网络难以训练的问题.离输出层远的层不如靠近输出层训练的好.
加入辅助分类器能够让低层的卷积层学习到的特征也有很好的区分能力,从而让网络更好地被训练,而且低层的卷积层学到了好的特征也能加速整个网络的收敛.
残差网络的作用:持续像一个"基础"的卷积神经网络上面叠加更深的层数会发生什么?
发明残差网络的原因:随着网络的加深,层数深的网络训练集和测试集的误差大于层数浅的网络训练集和测试集的误差.测试集误差更大的原因是网络层数加深引起过拟合导致错误率上升,但是训练集上的误差更大,这一点是人们万万没有想到的.
网络深度更深的网络训练集误差更大的原因:训练过程中的正,反向信息流动不顺畅,导致网络没有被充分训练.
ResNet的贡献:
1:提出了一种残差模块,通过堆叠残差模块可以构建任意深度的神经网络,而不会出现"退化"现象.
2:提出了批归一化(BN层)方法来对抗梯度消失,该方法降低了网络训练过程对权重初始化的依赖.
3:提出了一种针对ReLU激活函数的初始化方法.
研究者考虑了这样一个问题:
浅层网络学习到了有效的分类模式后,如何向上堆积新层来建立更深的网络,使其满足即使不能提升前层网络的性能,深层网络也不应降低性能,输出依旧为X,网络性能不会更差.
假设卷积层学习的变换为F(X),残差结构的输出是H(X),则有:
H(X)=F(X)+X
从图像锐化的角度来形容:F(X)表示细节图,X表示原图.
从梯度下降的角度来说:
就算是F(X)的梯度很小,但是最差X的梯度为1,最少也有一个1传回去,不会导致梯度消失.
残差(F(X))=输出(H(X))-输入(X)
残差结构的优点:
1:残差结构能够避免普通的卷积层堆叠存在信息丢失问题,保证前向信息流的顺畅.
2:残差结构能够对应梯度反传过程中的梯度消失问题,保证反向梯度流的通顺.
为什么残差网络性能这么好?
一种典型的解释:残差网络可以看作是一种集成模型!
下图中左侧结构等于右侧结构.残差网络可以看作是许多子网络的集合.
1:介绍了5种经典的卷积神经网络AlexNet,ZFNet,VGG,GoogLeNet,Resnet
2:残差网络和Inception v4是公认的推广性能最好的两个分类模型
3:特殊应用环境下的模型:面向有限存储资源SqueezeNet以及面向有限计算资源的MobiliNet和ShuffleNet.
4:Mini-Batch的大小优选为2的幂,是为了符合CPU、GPU的内存要求,利于并行化处理。此外Mini-Batch为偶数时,梯度下降算法训练的更快。