卷积神经网络CNN实战10

这是最后一节了,来梳理一下 CNN 网络结构的发展过程吧,前边都是理论,让很多无从下手,于是这篇文章按照卷积神经网络典型顺序,对卷积神经网络的典型大神网络里程碑做一次粗略的梳理,也算对之前的知识框架做一次梳理。写这篇博文肯定有所疏漏或者理解错误的地方,有些定义我也不能清楚的进行表达,请各位谅解。

卷积神经网络典型CNN

LeNet:最早用于数字识别的CNN
AlexNet:2012年ILSVRC比赛冠军,远超第二名的CNN,比LeNet更深,用多层
小卷积叠加来替换单个的大卷积
ZF Net:2013ILSVRC冠军
GoogleNet:2014ILSVRC冠军
VGGNet:2014ILSVRC比赛中算法模型,效果率低于GoogleNet
ResNet:2015ILSVRC冠军,结构修正以适应更深层次的CNN训练

LeNet:最早用于数字识别的CNN

以现在的眼光来看,LeNet 绝对是一个小网络,也没什么特点。但是,LeNet 是 CNN 网络结构的开山鼻祖,第一次定义了 CNN 网络结构。
LeNet 的特点如下所示:
定义了卷积神经网络(Convolutional Neural Network, CNN)的基本框架:卷积层 + 池化层(Pooling Layer) + 全连接层
定义了卷积层(Convolution Layer),与全连接层相比,卷积层的不同之处有两点:局部连接(引进“感受野”这一概念)、权值共享(减少参数数量)
利用池化层进行下采样(Downsampooling),从而减少计算量
用 Tanh 作为非线性激活函数(现在看到的都是改进过的 LeNet 了,用 ReLU 代替 Tanh。相较于 Sigmoid,Tanh 以原点对称(zero-centered),收敛速度会快。
卷积神经网络CNN实战10_第1张图片
关于全连接层,作者 Yann LeCun 曾在推特上指出:直接将特征图(Featuremap)展开输入到全连接层,会导致 CNN 仅适用于指定尺度的图像上。LeCun 认为 CNN 应该尽可能适用与各种尺度的图像上,这一点也得到许多人的认同。对于分类(Classification)问题,利用全局平均池化(Global Average Pooling, GAP)操作代替特征图的拉伸,这样 CNN 便可以处理各种尺度的图像了。

LeNet-5

卷积神经网络CNN实战10_第2张图片
C1层是一个卷积层
6个特征图,每个特征图中的每个神经元与输入中55的邻域相连,特征图大小为2828
每个卷积神经元的参数数目:55=25个weight参数和一个bias参数
链接数目:(5
5+1)6(2828)=122304个链接
参数共享:每个特征图内共享参数,因此参数总数:共(5
51)6=156个参

S2层是一个下采样层
6个14
14的特征图,每个图中的每个单元与C1特征图中的一个2
2邻域相连接,不重叠。
和max pooling和average pooling不一样,在S2层中每个单元的4个输入相加,乘以一个可训练参数w,再加上一个可训练偏置b,结果通过sigmoid函数
计算得到最终池化之后的值。
连接数:(22+1)114146=5880个
参数共享:每个特征图内共享参数,因此有2
6=12个可训练参数

C3层是一个卷积层
16个卷积核,得到16张特征图,特征图大小为1010
每个特征图中的每个神经元与S2中某几层的多个5
5的邻域相连;
例如:对于C3层第0张特征图,其每一个节点与S2层的第0~2张特征图,总共
3个5*5个节点相连接。
卷积神经网络CNN实战10_第3张图片

CNN-LeNet5解析

S4层是一个下采样层(和S2一样)
由16个55大小的特征图构成,特征图中的每个单元与C3中相应特征图的22邻域相连接。
连接数:(22+1)5516=2000个
参数共享:特征图内共享参数,每个特征图中的每个神经元需要1个因子和一
个偏置,因此有2*16个可训练参数。

C5层是一个卷积层
120个神经元,可以看作120个特征图,每张特征图的大小为11
每个单元与S4层的全部16个单元的5
5邻域相连(S4和C5之间的全连接)
连接数=可训练参数:(5516+1)*120=48120个

F6层是一个全连接层
有84个单元,与C5层全连接。
F6层计算输入向量和权重向量之间的点积,再加上一个偏置(wx+b),最后将加权值做一个sigmoid转换。
连接数=可训练参数:(120+1)84=10164
这里选择84作为神经元的数目从论文中可以认为是:ASCII字符标准的打印字符,是用7
12大小的位图,这里希望每一维特征分别体现标准7*12大小位图上每一个像素点的特性。

F7层是一个输出层
输出层是由欧式径向基函数(RBF)组成。每一个输出对应一个RBF函数,每一个RBF函数都有84维的输入向量,RBF的函数公式如下。每一个RBF函数都会有一个输出,最后输出层会输出一个10维的向量。

在这里插入图片描述

卷积神经网络典型CNN-AlexNet

2012 年,Krizhevsky 与 Hinton 推出了 AlexNet,并在当年的 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)中以超过第二名10.9个百分点的绝对优势一举夺冠,引起了许多学者对深度学习的研究,可以算是深度学习的热潮的起始标志吧。

当时的算力不如现在这样强劲,AlexNet 用的 GTX 580 也只有 3GB 的显存(这也导致其设计出双 GPU 框架,现在的许多深度学习框架都有这样的能力,不过当时只能通过手动编写底层代码,工作量可想而知),却完成了在 ImageNet 上的巨大突破,这在当时是非常轰动的,变相证明了深度学习的能力。

由于算力的不断进步,AlexNet 在许多任务显得太"小"了,很少见到它的身影。所以我认为相较于 AlexNet 的框架,作者所做的一些其他改进更有值得研究的地方。
卷积神经网络CNN实战10_第4张图片
卷积神经网络CNN实战10_第5张图片
在AlexNet引入了一种特殊的网络层次,即:Local Response
Normalization(LRN, 局部响应归一化),主要是对ReLU激活函数的输出进行局部归一化操作,公式如下:
卷积神经网络CNN实战10_第6张图片
在这里插入图片描述
AlexNet结构优化
非线性激活函数:ReLU
使用Max Pooling,并且提出池化核和步长,使池化核之间存在重叠,提升了特征的丰富性。
防止过拟合的方法:Dropout,Data augmentation(数据增强)
大数据训练:百万级ImageNet图像数据
GPU实现:在每个GPU中放置一半核(或神经元),还有一个额外的技巧:GPU间的通讯只在某些层进行。
LRN归一化:对局部神经元的活动创建了竞争机制,使得其中响应比较大的值变得相对更大,并抑制其它反馈较小的神经元,增强了模型的泛化能力。本质上,LRN是仿造生物学上活跃的神经元对于相邻神经元的抑制现象(侧抑制)。

卷积神经网络典型CNN-ZF Net

ZF Net
基于AlexNet进行微调
修改窗口大小和步长
使用稠密单GPU的网络结构替换AlexNet的稀疏双GPU结构
Top5错误率11.2%
使用ReLU激活函数和交叉熵损失函数
卷积神经网络CNN实战10_第7张图片

卷积神经网络典型CNN-GoogleNet

卷积神经网络CNN实战10_第8张图片
Top5错误率6.7%;使用9个inception模块,改变CNN原串行结构,并行,共22层;使用平均池化替代FC层;参数量仅为AlexNet的1/12;使用softmax获取平均结果;网络结构的更新,性能比AlexNet要好;2014年ILSVRC冠军。

GoogLeNet借鉴了NIN的特性,在原先的卷积过程中附加了11的卷积核加上ReLU激活。
这不仅仅提升了网络的深度,提高了representation power,而且文中还通过1
1的卷积来进行降维,减少了更新参数量。

NIN模型

在这里插入图片描述
Network-in-Network主要思想是,用全连接的多层感知机去代替传统的卷积过程,以获取特征更加全面的表达,同时,因为前面已经做了提升特征表达的过程,传统CNN最后的全连接层也被替换为一个全局平均池化层,因为作者认为此时的map已经具备分类足够的可信度了,它可以直接通过softmax来计算loss了。

Inception结构

2014 年,Google 提出了 Inception 网络结构,并以此构建了 GoogLeNet(之所以这样命名,是为了向LeNet致敬;此外,GoogLeNet 也经常被称为 Inception Net V1,而该论文经常被称为 Inception V1),从而在同年的 ImageNet Challenge 的分类与检测(Detection)任务上夺得第一名。

与 VGG 不同,Inception 结构虽然也倾向于加“深”网络结构,从而提高模型的表达能力,但是作者充分考虑到现实中计算资源的限制,所以对模型中局部结构进行了精心设计,并且抛弃全连接层(虽然 GoogLeNet 最后加了一层全连接层,但这是作者为了其他人能更方便的利用模型进行微调(Finetune))。
作者在文中指出,提高模型表达能力的最直接的办法就是增加模型的“大小”,而这又会导致两个问题的产生:模型越大,其网络参数也就越大,就越容易产生过拟合现象,所以就需要更大的数据集,然而大型数据集的构建成本是很高昂的;模型越大,对于计算资源的需求就越大,这在现实任务中是难以接受的。而作者认为解决这两个问题的基本方法是将全连接层,甚至是卷积层改为稀疏的网络结构。(作者还在文中指出,GoogLeNet 的参数仅有 AlexNet 的 1/12,而 AlexNet 的全连接层的参数量甚至占到了自身参数量的 90% 以上)

卷积神经网络CNN实战10_第9张图片
Inception架构的主要思想是找出如何让已有的稠密组件接近与覆盖卷积视觉网络中的最佳局部稀疏结构。
为了避免patch校准问题,现在的滤波器大小限制在1x1,3x3和5x5,主要是为了方便,不是必要的。
另外,在pooling层添加一个额外的并行pooling路径用于提高效率。

架构的第二个主要思想:在计算要求增加很多的地方应用维度缩减和预测。即,在3x3和5x5的卷积前用一个1x1的卷积用于减少计算,还用于修正线性激活。如下图所示,左边是加入维度缩减之前的,右边是加入维度缩减之后的。
卷积神经网络CNN实战10_第10张图片
受到 Network In Network 以及 HeHebbian Principle 的启发,作者通过增加网络的宽度,从而提高网络的表达能力,并尝试找到卷积神经网络中的最优局部稀疏结构,即 Inception Module(如上图所示)。

作者所设计的 Inception Module 与常见的网络结构不同,打破了常规的卷积层串联的设计思路,选择将卷积核大小为 1 × 1,3 × 3,5 × 5 的卷积层和池化核大小为 3 × 3 的池化层进行并联,并将各自所得到的特征图进行 Concatenate 操作合并在一起,作为后续的输入。

之所以 Inception Module 由上图左侧发展被改进为上图右侧,是因为:作者希望希望模型中深层的 Inception Module 可以捕捉到 Higher Abstraction,所以作者认为深层的 Inception Module中的卷积层的空间集中度应该逐渐降低,以此捕捉更大面积的特征。故,作者令越深层的 Inception Module 中,卷积核大小为 3 × 3 和 5 × 5 这两个卷积层的输出通道数占比越多。但这又将导致计算量增加,所以为了解决这个问题,作者在原有 Inception Module 的基础上,利用卷积核大小为 1 × 1 的卷积层进行降维操作,从而减小计算量(这建立在一个假设之上:即使是低维的映射也可能包含关于相关图像区域的大量信息)。
卷积神经网络CNN实战10_第11张图片
卷积神经网络CNN实战10_第12张图片

卷积神经网络典型CNN-ResNet

卷积神经网络CNN实战10_第13张图片
使用了一种连接方式叫做“shortcut connection”,顾名思义,
shortcut就是“抄近道”的意思。
卷积神经网络CNN实战10_第14张图片
真正在使用的ResNet模块并不是这么单一,文章中就提出了两种方式。
卷积神经网络CNN实战10_第15张图片两种Shortcut Connection方式

实线的的Connection部分(“第一个粉色矩形和第三个粉色矩形”)都是3x3x64的特征图,他们的
channel个数一致,所以采用计算方式:y=F(x)+x
虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3x3x64和3x3x128的特征图,他们的channel个数不同(64和128),所以采用计算方式:y=F(x)+Wx
其中W是卷积操作,用来调整x的channel维度的。

卷积神经网络CNN实战10_第16张图片
Shortcut Connection
卷积神经网络CNN实战10_第17张图片

ResNet结构
2015 年,Kaiming He 提出了 ResNet(拿到了 2016 年 CVPR Best Paper Award),不仅解决了神经网络中的退化问题(Degrade Problem,即相较于浅层神经网络,深层神经网络的深度到达一定深度后,拟合能力反而更差,训练/测试误差更高),还在同年的 ILSVRC 和 COCO 竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。(个人觉得,ResNet真的属于现象级论文,所提出的残差结构大幅提高了神经网络的拟合能力)

网络结构:

简单来说,Kaiming 在文中提出了残差结构(Residual Block,如上图左侧所示),使得原本所要拟合的函数 [公式] ,改为 [公式] ,其中, [公式] 。虽然在“多个非线性层可以拟合任意函数”这一假设下二者并无区别,但是 Kaiming 假设模型学习后者,将更容易进行优化与收敛。(在残差结构中,模型利用 Shortcut 进行 Identity Mapping,这样也解决了梯度消失现象)

由于 Residual Block 并不需要额外的参数以及计算量,Kaiming 在文中以此做了多组对照实验,证明该网络结构的有效性(所用的两个 ResNet 为 ResNet-18 和 ResNet-34)。但是,若要将模型的深度继续不断增加,需要对其进行改进:将原先的 Residual Block(上图右侧所示,也被称作 Basic Block) 改进为 Bottleneck Block,减少模型的参数与计算量。

其他细节:

对训练数据进行数据增强:从 [256,480] 随机采样,作为图像最短边长度,进行宽高等比缩放;随机裁剪 224 * 224,并进行随机镜像翻转;并对所有训练图像的每个像素值进行统计,并减去该平均值。
对测试数据使用 10-crop 测试方法。
ResNet 在非线性层后,激活函数前使用 Batch Normalization。

卷积神经网络CNN实战10_第18张图片

你可能感兴趣的:(深度学习,CNN,人工智能,深度学习,神经网络,CNN)