CNN经典结构学习笔记

【模型顺序】:LeNet-5;AlexNet;ZFNet;VGGNet;Net In Net;GoogLeNet Inception V1-V4;ResNet;DenseNet;NasNet;SE-Net;MobileNetV1-V2

 

 

【LeNet-5】

1、出处:1998年;Yann LeCun;

2、贡献:非常高效的手写体字符识别卷积神经网络;是其他复杂CNN的基础;

3、网络结构:LeNet-5共有8层,包含输入层,每层都包含可训练参数;每个层有多个特征映射(Feature Map),每个特征映射通过一种卷积核(或者叫滤波器)提取输入的一种特征,然后每个特征映射有多个神经元。C层代表的是卷积层,通过卷积操作,可以使原信号特征增强,并且降低噪音。S层是一个降采样层,利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。(每一层输入大小、可训练参数量等信息参见《LeNet-5模型细节》)

CNN经典结构学习笔记_第1张图片

 

【AlexNet】

  1. 贡献:(2012年Krizhevsky),是一个现代的深度网络模型,使用了GPU进行并行训练,采用ReLU作为非线性的激活函数,使用Dropout防止过拟合,使用数据增强来提高模型的准确率。使得AlexNet赢得了2012年ImageNet图像分类竞赛的冠军(冠军top-5 84.6%,第二名 73.8%)。

网络结构:8层网络,参数大约有60 million,使用RELU函数,头两个全连接层使用了0.5的dropout。使用了LRN和重叠的池化,现在LRN都不用了,一般用BN作Normalization。当时使用了多GPU训练。

CNN经典结构学习笔记_第2张图片

  1. 预处理:先down-sample成最短边为256的图像,然后剪出中间的256x256图像,再减均值做归一化(over training set)。 训练时,做数据增强,对每张图像,随机提取出227x227以及水平镜像版本的图像。除了数据增强,还使用了PCA(△过程实现)对RGB像素降维的方式来缓和过拟合问题。
  2. 创新点

①首次使用RELU激活函数;

②利用多个(2个)GPU同时训练;

③提出LRN(Local Response Normalization)- 来源:生物神经元的“逆抑制”;

④数据增强(Data Augmentation)防止过拟合;

⑤利用Dropout算法防止过拟合(细节看《CNN经典结构》P11);

  1. 预测:对每张图像提取出5张(四个角落以及中间)以及水平镜像版本,总共10张,平均10个预测作为最终预测。
  2. 超参数设置:SGD,学习率0.01,batch size是128,momentum为0.9,weight decay为0.0005(论文有个权重更新公式)(优化方法总结(BGD,SGD,Momentum,AdaGrad,

RMSProp,Adam)),每当validation error不再下降时,学习率除以10。权重初始化用(0,0.01)的高斯分布,二四五卷积层和全连接层的bias初始化为1(给relu提供正值利于加速前期训练),其余bias初始化为0。

 

【ZFNet】

  1. 贡献:ILSVRC2013分类任务的冠军,使用反卷积对CNN的中间特征图进行可视化分析,通过分析特征行为找到提升模型的办法,微调Alexnet提升了表现。ZFNet的Z和F指的是Zeiler和Fergus,曾是hinton的学生,后在纽约大学读博的Zeiler,联手纽约大学研究神经网络的Fergus提出了ZFNet。

网络结构:ZFNet 网络有8层卷积的模型。输入为224X224大小的图片。在第一层中,使用96个大小为7X7的卷积核(过滤层),步长为2.(红色框)。得到110X110 的特征映射做如下操作:(1)嵌套线性激活函数(没显示)(2)使用3X3的步长为2的最大池化操作。(3)对比在特征映射中进行归一化,以提供96个不同的55X55元素的特征映射。第2、3、4、5层的操作与第1层相同。最后两层为全连接层,从网络浅层提取特征6X6X256 = 9216维。最后输出层为softmax层,类别数为C,所有的卷积核池化层都是正方形。

CNN经典结构学习笔记_第3张图片

创新点

①卷积运算和矩阵运算的转化;

②反卷积和反池化 - 卷积运算结果可能图像大小变大的!

  1. 实现过程:特征可视化;训练过程的特征演化;帮助提升模型;遮挡敏感性;(效果见paper)

5、疑问:反卷积运算时是乘以卷积核特征图矩阵的转置?参考博客

 

【VGGNet】

  1. 贡献:ILSVRC2014定位任务的冠军(Winner),分类任务的亚军(runner-up)。该网络的特点在于结构规整,通过反复堆叠3x3的卷积,卷积核数量逐渐加倍来加深网络,后续的很多CNN结构都采用了这种3x3卷积思想,这是一个很大的影响。ZFNet和OverFeat都使用了更小的卷积核,更小的步长来提升AlexNet的表现,相比之下,VGG则是探索CNN的深度,通过固定其它参数,然后稳定地叠加深度。
  2. 网络结构:为了在公平的原则下探究网络深度对模型精确度的影响,所有卷积层有相同的配置,即卷积核大小为3x3,步长为1,填充为1;共有5个最大池化层,大小都为2x2,步长为2;共有三个全连接层,前两层都有4096通道,第三层共1000通道及代表1000个标签类别;最后一层为SoftMax层;所有隐藏层后都带有ReLU非线性激活函数;经过实验证明,AlexNet中提出的局部响应归一化(LRN)对性能提升并没有什么帮助,而且还浪费了内存的计算的损耗

使用小卷积核3x3可以捕捉左右上下的信息,而且利于堆叠深度(保证参数不要过大)。步长为1。same卷积。

CNN经典结构学习笔记_第4张图片

两个3x3卷积可以和5x5卷积达到一样的感受野。三个3x3卷积可以和7x7卷积达到一样的感受野。使用三个3x3的好处在于使用了3个非线性变换,同时后减小了参数,假设输入输出通道数一样,那么有

 3(32C2)=27C2 < 72C2=49C2(△)(如下图)

CNN经典结构学习笔记_第5张图片

 

和AlexNet一样,头两个全连接层后面加0.5的dropout。

  1. 超参数设置:和AlexNet基本一致。batch size是256。初始化也是用(0,0.01)的高斯分布,只不过VGG先训练一个浅层的网络,然后把浅层网络的部分参数来初始化深层网络部分参数,其它参数还是用高斯分布。值得注意的是论文提交后VGG发现使用glorot的初始化方法可以不用预训练。
  2. 预处理:和AlexNet不同,在下采样的时候不是变成256,变成一个S,S有两种方法来设定。第一个方法是固定的S(single-scale),固定为256或384。为了加速384的网络,用256预训练的模型进行权重初始化。另外学习率调小为0.001。第二个方法从[256, 512]中随机采样S(multi-scale,注意这里的是multi-scale training,和overfeat中的multi-scale test含义不一样),这可以看成用尺寸抖动(scale jittering)对训练集进行增强。为了加速,使用384预训练的模型进行权重初始化。
  3. 集成:实验的最后融合了多个模型(集成),最好的模型是融合了VGG-16和VGG-19,训练使用multi-scale training,测试使用multi-crop和dense评估相结合。在AlexNet,ZFNet和OverFeat最后的实验都会使用集成,最好的模型一般都是集成的结果。
  4. 泛化:和ZFNet一样,VGG也做了迁移学习,用ILSVRC的数据预训练,然后迁移到其它数据集VOC-2007,VOC-2012,Caltech-101,Caltech-256。
  5. 特点:特征图的空间分辨率单调递减,特征图的通道数单调递增。

对于卷积神经网络而言,输入图像的维度是HxWx3(彩色图)或者是HxWx1(灰度图),而最后的全连接层的输出是一个1x1xC的向量,C等于分类的类别数(例如ImageNet中的1000类)。如何从一个HxWx3或HxWx1的图像转换到1x1xC的向量呢?特征图的空间分辨率单调递减,特征图的通道数单调递增,使得输入图像在维度上流畅地转换到分类向量。用于相同ImageNet图像分类任务的AlexNet的通道数无此规律,VGGNet后续的GoogLeNet和Resnet均遵循此维度变化的规律。

CNN经典结构学习笔记_第6张图片

 

 

【Network in Network】

  1. 贡献:(2013年 Min Lin)图像分类任务
  2. 创新点:①采用 mlpcon 的结构来代替 traditional 卷积层;②remove 卷积神经网络最后的全连接层,采用 global average pooling 层代替;

网络结构

CNN经典结构学习笔记_第7张图片

  1. mlpcon结构:conventional 的卷积层 可以认为是linear model , 为什么呢,因为 局部接收域上的每每一个tile 与 卷积核进行加权求和,然后接一个激活函数;它的 abstraction 的能力不够, 对处理线性可分的的 concept 也许是可以的,但是更复杂的 concepts 它有能力有点不够了,所以呢,需要引入 more potent 的非线性函数;

基于此,提出了 mlpcon 结构,它用多层的感知器(其实就是多层的全连接层)来替代单纯的卷积神经网络中的 加 权求和; mlpcon 指的是: multilayer perceptron + convolution;

CNN经典结构学习笔记_第8张图片

说明:在mlpconv中的每一层的后面都跟着一个 ReLU激活函数;用于加入更多的nonlinearity;

  1. global average pooling结构:假设分类的任务有100 classes,  所以设置网络的最后的 feature maps 的个数为 100, 把每一个feature map 看作成 对应每一类的 概率的相关值 ,然后对每一个 feature map 求平均值(即 global average pooling), 得到了 100维的向量, 把它直接给 softmax层,进行分类;(其实100个数中最大值对应的类别即为预测值, 之所以再送给 softmax层是为了求 loss,用于训练时求梯度)
  2. 数据集和结果:CIFAR-10, CIFAR-100, SVHN and MNISTCNN经典结构学习笔记_第9张图片

 

 

【GooleNet-Inception V1】

  1. 贡献:2015年,Christian Szegedy。ILSVRC2014分类任务的冠军。该网络设计了Inception块代替人工来选择卷积类型,然后堆叠Inception块(增加深度)形成Inception网络。去除了全连接层(占据了网络的大部分参数),使用了全局均值池化(思想来自Network in Network),大大减小了参数量。这两个思想在GoogleNet后面的一些论文中都有体现,一个是Inception块的自动选择网络结构(Google后面发表了一些自动选择网络超参,网络优化器,网络激活函数的论文),另一个是减小模型参数和计算资源(Google的mobileNet,类似工作还有face++的shuffleNet)。
  2. 想法来源
  1. 提高模型性能的最直接方式:1.加深(增加层)2.加宽(增加单层的神经元个数)
  2. 带来的两个弊端:1.大规模的参数易导致过拟合且需要更多的训练集 2.更多的计算资源消耗
  3. 解决基本思想是在fc层甚至conv层使用稀疏连接结构,原因是①生物中神经网络是稀疏的.②Arora的实验说明了,优化大规模的稀疏神经网络时,可以通过分析激活值的统计特性和聚类相关性高的神经元来逐层构建一个最优网络。(block设计的来源)。③Hebbian 原理:neurons that fire together,wire together(说明神经元相关性)
  4. 思考:有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵(卷积)的高计算性能。而相关文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能
  5. CNN经典结构学习笔记_第10张图片
  6. CNN经典结构学习笔记_第11张图片
  7. CNN经典结构学习笔记_第12张图片CNN经典结构学习笔记_第13张图片

 

CNN经典结构学习笔记_第14张图片

CNN经典结构学习笔记_第15张图片

CNN经典结构学习笔记_第16张图片

CNN经典结构学习笔记_第17张图片

 

 

 

CNN经典结构学习笔记_第18张图片

CNN经典结构学习笔记_第19张图片

CNN经典结构学习笔记_第20张图片

CNN经典结构学习笔记_第21张图片

 

 

CNN经典结构学习笔记_第22张图片

CNN经典结构学习笔记_第23张图片


未完待续~

详情参见《CNN经典结构学习笔记》Word

你可能感兴趣的:(深度学习)