深度学习之典型卷积神经网络

一. LeNet-5 -最早用于数字识别的CNN,是针对灰度图像进行训练的,图片的大小只有32*32*1,使用sigmoid函数

深度学习之典型卷积神经网络_第1张图片

1. C1层是一个卷积层(通过卷积运算,可以使原信号特征增强,并且降低噪音

2. S2层是一个下采样层(平均池化层)(利用图像局部相关性的原理对图像进行子抽样,可以1.减少数据处理量同时保留有用信息,2.降低网络训练参数及模型的过拟合程度

3、C3层是一个卷积层

4、S4层是一个下采样层(平均池化层)

5、F5层是一个全连接层

6、F6层是一个全连接层

7、Output输出层

总结:

随着网络越来越深,图像的宽度和高度都在缩小,信道数量一直在增加。目前,一个或多个卷积层后边跟一个池化层,再接上一个全连接层的排列方式很常用。


深度学习之典型卷积神经网络_第2张图片

输入尺寸:32*32

卷积层:2个

降采样层(池化层):2个--平均池化

全连接层:2个

输出层:1个。10个类别(数字0-9的概率)

深度学习之典型卷积神经网络_第3张图片

二、AlexNet网络

AlexNet网络共有:卷积层 5个,池化层 3个,全连接层:3个(其中包含输出层)。

深度学习之典型卷积神经网络_第4张图片

AlexNet总结:

输入尺寸:227*227*3

卷积层:5个

降采样层(池化层):3个

全连接层:2个

输出层:1个。1000个类别

深度学习之典型卷积神经网络_第5张图片

三、VGG-16网络--一种只需要专注于构建卷积层的网络

深度学习之典型卷积神经网络_第6张图片

总结:

(1)VGG-16网络中的16代表的含义为:含有参数(即卷积层和全连接层)的有16个层,共包含参数约为1.38亿。

(2)VGG-16网络结构很规整,没有那么多的超参数,专注于构建简单的网络,都是几个卷积层后面跟一个可以压缩图像大小的池化层。即:全部使用3*3的小型卷积核和2*2的最大池化层。

卷积层:CONV=3*3 filters, s = 1, padding = same convolution。(这里的same是指,使前后图像大小像素相同)

池化层:MAX_POOL = 2*2 , s = 2。

(3)优点:简化了卷积神经网络的结构;缺点:训练的特征数量非常大。

(4)随着网络加深,图像的宽度和高度都在以一定的规律不断减小,

每次池化后刚好缩小一半,信道数目不断增加一倍。

四. ResNets-残差网络

深度学习网络的深度对最后的分类和识别的效果有着很大的影响,所以正常想法就是能把网络设计的越深越好,但是事实上却不是这样,常规的网络的堆叠(plain network)在网络很深的时候,效果却越来越差了。其中原因之一即是网络越深,梯度消失的现象就越来越明显,网络的训练效果也不会很好。 但是现在浅层的网络(shallower network)又无法明显提升网络的识别效果了,所以现在要解决的问题就是怎样在加深网络的情况下又解决梯度消失的问题。

跳远连接(捷径):-可以解决梯度下降过程中的梯度消失问题

即可以从某一网络层获取激活单元,然后迅速反馈给另外一层甚至是神经网络的更深层。

残差网络是由残差块构建的。

残差块:

通过在一个浅层网络基础上叠加 y=x 的层(称identity mappings,恒等映射),可以让网络随深度增加而不退化。这反映了多层非线性网络无法逼近恒等映射网络。但是,不退化不是我们的目的,我们希望有更好性能的网络。 resnet学习的是残差函数F(x) = H(x) - x, 这里如果F(x) = 0, 那么就是上面提到的恒等映射。事实上,resnet是“shortcut connections”的在connections是在恒等映射下的特殊情况,它没有引入额外的参数和计算复杂度。假如优化目标函数是逼近一个恒等映射, 而不是0映射, 那么学习找到对恒等映射的扰动会比重新学习一个映射函数要容易。残差函数一般会有较小的响应波动,表明恒等映射是一个合理的预处理。

深度学习之典型卷积神经网络_第7张图片

上图为残差神经网络的基本模块(专业术语叫残差学习单元),输入为x,输出为F(x)+x,F(x)代表网络中数据的一系列乘、加操作,假设神经网络最优的拟合结果输出为H(x)=F(x)+x,那么神经网络最优的F(x)即为H(x)与x的残差,通过拟合残差来提升网络效果。为什么转变为拟合残差就比传统卷积网络要好呢?因为训练的时候至少可以保证残差为0,保证增加残差学习单元不会降低网络性能,假设一个浅层网络达到了饱和的准确率,后面再加上这个残差学习单元,起码误差不会增加。

深度学习之典型卷积神经网络_第8张图片

a[l+2] 加上了 a[l]的残差块,即:残差网络中,直接将a[l]向后拷贝到神经网络的更深层,在ReLU非线性激活前面加上a[l],a[l]的信息直接达到网络深层。使用残差块能够训练更深层的网络,构建一个ResNet网络就是通过将很多这样的残差块堆积在一起,形成一个深度神经网络。

深度学习之典型卷积神经网络_第9张图片

上图中是用5个残差块连接在一起构成的残差网络,用梯度下降算法训练一个神经网络,若没有残差,会发现随着网络加深,训练误差先减少后增加,理论上训练误差越来越小比较好。而对于残差网络来讲,随着层数增加,训练误差越来越减小,这种方式能够到达网络更深层,有助于解决梯度消失和梯度爆炸的问题,让我们训练更深网络同时又能保证良好的性能。

残差网络有很好表现的原因举例:

假设有一个很大的神经网络,输入矩阵为X,输出激活值为a[l],加入给这个网络额外增加两层,最终输出结果为a[l+2],可以把这两层看做一个残差模块,在整个网络中使用ReLU激活函数,所有的激活值都大于等于0。

深度学习之典型卷积神经网络_第10张图片

对于大型的网络,无论把残差块添加到神经网络的中间还是末端,都不会影响网络的表现


下图为一个34层的ResNets:

深度学习之典型卷积神经网络_第11张图片

五. Inception网络架构—gooleNet

(一)综述

获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),

但是这里一般设计思路的情况下会出现如下的缺陷:

1.参数太多,若训练数据集有限,容易过拟合;

2.网络越大计算复杂度越大,难以应用;

3.网络越深,梯度越往后穿越容易消失,难以优化模型。 

解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。为了打破网络对称性和提高

学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,

所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。现在的问题是有没有一种方法,

既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。

(二)Inception模块介绍

Inception架构的主要思想是找出如何用密集成分来近似最优的局部稀疏结。

深度学习之典型卷积神经网络_第12张图片

对上图做以下说明: 

1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合; 

2 . 之所以卷积核大小采用1*1、3*3和5*5,主要是为了方便对齐。设定卷积步长stride=1之后,

只要分别设定padding =0、1、2,采用same卷积可以得到相同维度的特征,然后这些特征直接拼接在一起; 

3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了pooling。 

4 . 网络越到后面特征越抽象,且每个特征涉及的感受野也更大,随着层数的增加,3x3和5x5卷积的比例也要增加。


Inception的作用:代替人工确定卷积层中的过滤器类型或者确定是否需要创建卷积层和池化层,即:不需要人为的

决定使用哪个过滤器,是否需要池化层等,由网络自行决定这些参数,可以给网络添加所有可能值,将输出连接

起来,网络自己学习它需要什么样的参数。

naive版本的Inception网络的缺陷:计算成本。使用5x5的卷积核仍然会带来巨大的计算量,约需要1.2亿次的计算量。

深度学习之典型卷积神经网络_第13张图片

为减少计算成本,采用1x1卷积核来进行降维。 示意图如下:

深度学习之典型卷积神经网络_第14张图片

在3x3和5x5的过滤器前面,max pooling后分别加上了1x1的卷积核,最后将它们全部以通道/厚度为轴拼接起来,

最终输出大小为28*28*256,卷积的参数数量比原来减少了4倍,得到最终版本的Inception模块:


深度学习之典型卷积神经网络_第15张图片

(三)googLeNet介绍

1、googLeNet——Inception V1结构

googlenet的主要思想就是围绕这两个思路去做的:

(1).深度,层数更深,文章采用了22层,为了避免上述提到的梯度消失问题,

googlenet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。

(2).宽度,增加了多种核 1x1,3x3,5x5,还有直接max pooling的,

但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,

所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,

max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。

深度学习之典型卷积神经网络_第16张图片

对上图做如下说明:

(1)显然GoogLeNet采用了Inception模块化(9个)的结构,共22层,方便增添和修改;

(2)网络最后采用了average pooling来代替全连接层,想法来自NIN,参数量仅为AlexNet的1/12,性能优于AlexNet,

事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便finetune; 

(3)虽然移除了全连接,但是网络中依然使用了Dropout ; 

(4)为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。

文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。

此外,实际测试的时候,这两个额外的softmax会被去掉。

(5)上述的GoogLeNet的版本成它使用的Inception V1结构。

你可能感兴趣的:(深度学习之典型卷积神经网络)