深度学习13(经典卷积网络结构+卷积网络结构优化)
简单看一下卷积网络发展历史
LeNet-5解析
激活层默认不画网络图当中,这个网络结构当时使用的是sigmoid和Tanh函数,还没有出现Relu函数。将卷积、激活、池化视作一层,即使池化没有参数。
下面从计算角度分析一下
输入层input | 输入32 * 32 * 3 32 × 32:图像的高度和宽度 3:RGB三个颜色通道 |
卷积层Conv1 | 输入(接收):32 * 32 * 3 参数: 卷积核大小:5*5 卷积核数量:6 步长:1 输出:28 * 28 * 6 |
池化层Pool1 | 输入(接收):28 * 28 * 6 参数: 卷积核大小:2 * 2 步长:1 输出:14 * 14 * 6 |
卷积层Conv2 | 输入(接收):14 * 14 * 6 参数: 卷积核大小:5*5 卷积核数量:16 步长:1 输出:10 * 10 * 16 |
池化层Pool2 | 输入(接收):10 * 10 * 16 参数: 卷积核大小:2 * 2 步长:2 输出:5 * 5 * 16 |
全连接层FC3 | 神经元个数:120 |
全连接层FC4 | 神经元个数:84 |
输出层output | 使用softmax激活函数 |
AlexNet介绍
2012年,Alex Krizhevsky、llya Sutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNetLSVRC的冠军,且准确率远超第二名(其错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构。
总参数量:60M=6000万,5层卷积+3层全连接
使用了非线性激活函数:ReLU
防止过拟合的方法:Dropout,数据扩充(Dataaugmentation)
批标准化层的使用
GoogleNet简单了解
GoogleNet,2014年比赛冠军的model,这个model证明了一件事:用更多的卷积,更深的层次可以得到更好的结构。(当然,它并没有证明浅的层次不能达到这样的效果)。
其使用了多层Inception结构,使得参数较少,当时面对500万的参数量计算也能较快。
结构优化:Inception 结构
首先我们要说一下在Networkin Network中引入的1x1卷积结构的相关作用
1x1卷积
从图中,看到1x1卷积的过程,那么这里先假设只有3个1x1Fiter,那么最终结果还56x56x3。但是每一个Flter的三个参数的作用。看作是对三个通道进行了线性组合,我们甚至可以把这几个Fllter可以看成就是一个简单的神经元结构,每个神经元参数数量与前面的通道数量相等。
特点
1、多个1x1的卷积核级联加上配合激活函数,将feature map由多通道的线性组合变为非线性组合。(信息整合),提高特征抽象能力(MultilayerPerceptron,缩写MLR,就是一个多层神经网络)
2、1x1的卷积核操作还可以实现卷积核通道数的降维和升维,实现参数的减小化
Inception层
目的:由于数据量太大,减少计算开销。可以代替人手工去确定到底使用1x1,3x3,5x5还是是否需要max_pooling层,由网络自动去寻找适合的结构,节省计算。
这里从28x28x192 --->28x28x256,没有选择使用256个1x1的卷积核一步到位,而是使用多种卷积核合并计算。
特点:使用多种卷积核进行运算合并结果
1、使每一个卷积/池化最终结果的长、宽大小一致
2、特殊的池化层,需要增加padding,步长为1来使得输出大小一致,并且选择32的通道数
3、最终结果28x28x256,使用更少的参数,达到跟AlexNet或者VGG同样类似的输出结果
还有一个更直观的例子:
上面的参数:5x5x32x192=153600
下面的参数:192x16+5x5x16x32=3072+12800=15872
所以上面的结构会需要大量的计算,我们把这种改进的结构称之为网络的“瓶颈",网络缩小后扩大。
结尾
事实上,在过去很多年,许多机构或者学者都发布了各种各样的网络,其实去了解设计网络最好的办法就是去研究现有的网络结构或者论文。大多数网络设计出来是为了Image Net的比赛(解决ImageNet中的1000类图像分类或定位问题),后来大家在各个业务上进行使用。
而对于神经网络的优化目的最重要的一点是:参数数量变少减少计算量。