学习目标
- 目标
- 知道LeNet-5网络结构
- 了解经典的分类网络结构
- 知道一些常见的卷机网络结构的优化
- 知道NIN中1x1卷积原理以及作用
- 知道Inception的作用
- 了解卷积神经网络学习过程内容
- 应用
- 无
下面我们主要以一些常见的网络结构去解析,并介绍大部分的网络的特点。这里看一下卷积的发展历史图。
3.3.1 LeNet-5解析
首先我们从一个稍微早一些的卷积网络结构LeNet-5(这里稍微改了下名字),开始的目的是用来识别数字的。从前往后介绍完整的结构组成,并计算相关输入和输出。
3.3.1.1 网络结构
- 激活层默认不画网络图当中,这个网络结构当时使用的是sigmoid和Tanh函数,还没有出现Relu函数
- 将卷积、激活、池化视作一层,即使池化没有参数
3.3.1.2 参数形状总结
shape | size | parameters | |
---|---|---|---|
Input | (32,32,3) | 3072 | 0 |
Conv1(f=5,s=1) | (28,28,6) | 4704 | 450 6 |
Pool1 | (14,14,6) | 1176 | 0 |
Conv2(f=5,s=1) | (10,10,16) | 1600 | 2400 16 |
Pool2 | (5,5,16) | 400 | 0 |
FC3 | (120,1) | 120 | 48000 120 |
FC4 | (84,1) | 84 | 10080 84 |
Ouput:softmax | (10,1) | 10 | 840 10 |
- 中间的特征大小变化不宜过快
事实上,在过去很多年,许多机构或者学者都发布了各种各样的网络,其实去了解设计网络最好的办法就是去研究现有的网络结构或者论文。大多数网络设计出来是为了Image Net的比赛(解决ImageNet中的1000类图像分类或定位问题),后来大家在各个业务上进行使用。
3.3.2 AlexNet
2012年,Alex Krizhevsky、Ilya Sutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构。
- 总参数量:60M=6000万,5层卷积 3层全连接
- 使用了非线性激活函数:ReLU
- 防止过拟合的方法:Dropout,数据扩充(Data augmentation)
- 批标准化层的使用
3.3.3 卷积网络结构的优化
3.3.3.1 常见结构特点
整个过程:AlexNet—NIN—(VGG—GoogLeNet)—ResNet
- NIN:引入1 * 1卷积
- VGG,斩获2014年分类第二(第一是GoogLeNet),定位任务第一。
- 参数量巨大,140M = 1.4亿
- 19layers
- VGG 版本
- VGG16
- VGG19
- GoogleNet,2014年比赛冠军的model,这个model证明了一件事:用更多的卷积,更深的层次可以得到更好的结构。(当然,它并没有证明浅的层次不能达到这样的效果)
- 500万的参数量
- 22layers
- 引入了Inception模块
- Inception V1
- Inception V2
- Inception V3
- Inception V4
- 下面我们将针对卷积网络架构常用的一些结构进行详细分析,来探究这些结构带来的好处
3.3.4 Inception 结构
首先我们要说一下在Network in Network中引入的1 x 1卷积结构的相关作用
3.3.4.1MLP卷积(1 x 1卷积)
- 目的:提出了一种新的深度网络结构,称为“网络中的网络”(NIN),增强接受域内局部贴片的模型判别能力。
- 做法
- 对于传统线性卷积核:采用线性滤波器,然后采用非线性激活。
- 提出MLP卷积取代传统线性卷积核
- 作用或优点:
- 1、多个1x1的卷积核级联加上配合激活函数,将feature map由多通道的线性组合变为非线性组合(信息整合),提高特征抽象能力(Multilayer Perceptron,缩写MLP,就是一个多层神经网络)
- 2、1x1的卷积核操作还可以实现卷积核通道数的降维和升维,实现参数的减小化
3.3.4.2 1 x 1卷积介绍
从图中,看到1 x 1卷积的过程,那么这里先假设只有3个1x1Filter,那么最终结果还是56x56x3。但是每一个FIlter的三个参数的作用
- 看作是对三个通道进行了线性组合。
我们甚至可以把这几个FIlter可以看成就是一个简单的神经元结构,每个神经元参数数量与前面的通道数量相等。
- 通常在卷积之后会加入非线性激活函数,在这里之后加入激活函数,就可以理解成一个简单的MLP网络了。
3.3.4.3 通道数变化
那么对于1x1网络对通道数的变化,其实并不是最重要的特点,因为毕竟3 x 3,5 x 5都可以带来通道数的变化,
而1x1卷积的参数并不多,我们拿下面的例子来看。
- 保持通道数不变
- 提升通道数
- 减少通道数
3.3.4.4 Inception层
这个结构其实还有名字叫盗梦空间结构。
- 目的:
- 代替人手工去确定到底使用1x1,3x3,5x5还是是否需要max_pooling层,由网络自动去寻找适合的结构。并且节省计算。
- 特点
- 是每一个卷积/池化最终结果的长、宽大小一致
- 特殊的池化层,需要增加padding,步长为1来使得输出大小一致,并且选择32的通道数
- 最终结果28 x 28 x 256
- 使用更少的参数,达到跟AlexNet或者VGG同样类似的输出结果
3.3.4.5 Inception改进
改进目的:减少计算,如5 x 5卷积那的运算量
- 上面的参数:5 x 5 x 32 x 192 =153600
- 下面的参数:192 x 16 5 x 5 x 16 x 32 = 3072 12800 = 15872
所以上面的结构会需要大量的计算,我们把这种改进的结构称之为网络的"瓶颈",网络缩小后扩大。
那么这样改变会影响网络的性能和效果吗?
GoogleNet就是如此,获得了非常好的效果。所以合理的设计网络当中的Inception结构能够减少计算,实现更好的效果。
3.3.4.6 GoogleNet结构(了解)
其中包含了多个Inception结构。
完整结构:
3.3.5 卷积神经网络学习特征可视化
我们肯定会有疑问真个深度的卷积网络到底在学习什么?可以将网络学习过程中产生的特征图可视化出来,并且对比原图来看看每一层都干了什么。
- 可视化案例使用的网络
- 可视化结果
- layer1,layer2学习到的特征基本是颜色、边缘等低层特征
- layer3学习到的特征,一些纹理特征,如网格纹理
- layer4学习到的特征会稍微复杂些,比如狗的头部形状
- layer5学习到的是完整一些的,比如关键性的区分特征
3.3.6 总结
- 掌握LeNet-5 结构计算
- 了解卷积常见网络结构
- 掌握1x1卷积结构作用
- 掌握Inception结构作用