我根据北邮鲁鹏老师的计算机视觉与深度学习课程,做了一些课后总结.不禁感叹,鲁鹏老师的课程很棒!
- AlexNet 在解决了过拟合问题(增加了数据规模)及显卡算力问题后,从12年的AlexNet开始,人们转头重新研究深度神经网络.
- ZFNet
- VGG
- GoogLeNet
- Resnet
一:AlexNet
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: (11113+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的输出为图像类别概率
重要说明: 1:用于提取图像特征的卷积层已经用于分类的全连接层是同时学习的;不论是卷积层还是全连接层,梯度都是可以回传的,由最后一层全连接层的输出计算的loss通过梯度回传,影响卷积层以及全连接层的参数. 2:卷积层与全连接层在学习过程中会相互影响,相互促进.
技巧 1:Dropout策略防止过拟合; 2:使用加入动量的随机梯度下降算法,加速收敛; 3:验证集损失不下降时,手动降低10倍学习率; 4:采用样本增强策略增加训练样本数量,防止过拟合; 5:集成多个模型,进一步提高精度:训练多个少分类项目的模型,然后将对应的参数进行平均. 6:卷积神经网络是放在GPU上进行:
那么,到底,卷积核在做什么? 卷积层将一副输入的图片学习成一些列带有语义结构的特征相应图组.
二:ZFnet
首先,ZFnet与AlexNet网络结构基本一致,他的出现让人们真正的懂得了卷积神经网络到底在做什么.也提高了4.7%的精度. ZFnet的主要改进: 1:将第一个卷积层的卷积核大小改为了7×7.原来是11×11; 改小了之后可以检测更加细粒度的信息,以免一上来就丢掉细节信息. 2:将第二,第三各卷积层的卷积步长都设置为2; 这个地方鲁鹏老师的解释有些问题,我再查一查 3:增加第三,第四层卷积核的个数. 通过反向可视化发现第三层与第四层开始已经提取出来细节特征.
三: VGG
3.1:VGGnet的主要改进:
1:使用尺寸更小的3×3卷积核串联来获得更大的感受野; 2:放弃使用11×11核5×5这样的大尺寸卷积核; 3:深度更深,非线性更强,网络的参数也更少; 小的卷积核拥有更小的计算量. 4:去掉了AlexNet中的局部相应归一化层(LRN); LRN:统计所有图像,得到一个均值向量,该均值向量的每个元素分别是所有图片中同一像素点的均值 BN : 先选出一个batch,将该batch中图片以batch为单位进行减均值,除标准差.
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,后层包括更多的语义信息,且输出尺寸更小,计算量更小,所以增多厚层的卷积核个数. 前层语义信息少,且增加前层卷积核个数会增大更多的计算量,所以减少前层卷积核的个数.
3.3:VGG19网络与VGG16网络的对比
VGG19比VGG16在第三,第四和第五个卷积层组处又增加了一个3×3的卷积层,增加了三个非线性操作.与VGG16相比,VGG19网络精度略有提高,但占用的计算资源增加了更多.
3.4:小卷积核的优势:感受野相同,计算量更少
多个小尺寸卷积核串联可以得到与大尺寸卷积核相同的感受野 计算量上的优势: 三个3×3卷积核的计算量为(3×3×Inputsize)×Inputsize×3=27×Inputsize×Inputsize 两个7×7卷积核的计算量为(7×7×Inputsize)×Inputsize=49×Inputsize×Inputsize
3.5:为什么VGG网络前四段中,每经过一次池化操作,卷积核个数就要增加一倍?
1:池化操作可以减少特征图尺寸,降低现存占用. 2:增加卷积核个数有助于学习更多的结构特征,但会增加网络参数数量以及内存消耗. 3:一减(池化)一增(增加下个卷积层卷积核个数)的设计平衡了识别精度与存储,计算开销 final:提升了网络的性能. 3.6:为什么最后一层卷积层将卷积核个数增加到512后就不再增加了? 1:第一个全连接层含102M参数,占总参数个数的74%,VGG全部参数为150M左右.102M=卷积核尺寸×卷积核个数×全连接层神经元个数. 7×7×512×4096=102760448 2:这一层的参数个数是特征图的尺寸与个数的乘积. 3:参数多容易过拟合,且不容易被训练
四:GoogLeNet
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单元能够一定程度解决梯度消失问题,但是并不能完全解决深层网络难以训练的问题.离输出层远的层不如靠近输出层训练的好. 加入辅助分类器能够让低层的卷积层学习到的特征也有很好的区分能力,从而让网络更好地被训练,而且低层的卷积层学到了好的特征也能加速整个网络的收敛.
|