卷积神经网络(二)-AlexNet

前言:

AlexNet是2012年ImageNet竞赛冠军(以领先第二名10%的准确率夺得冠军)获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%(优于第二名的16.4%),明显优于之前的方法,证明了深度卷积神经网络在图像识别任务上的强大能力,后续各种优秀的更深的神经网络被提出。

论文:

https://proceedings.neurips.cc/paper_files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

论文翻译文档:

https://download.csdn.net/download/p731heminyang/89551903

跟Lenet距离约10年,在CNN的基础上面碰到了一些问题,比如说CNN的过拟合(就是训练的数据精度特高,真实数据精度差)、激活函数的效率问题以往的tanhsigmoid、GPU内存太小无法训练、以前池化都采用平均池化造成特征采集模糊化、数据量太小等。

AlexNet解析

今天我们来看看AlexNet,首先就是网络图

我们来分析下网络图,整个网络图共分为8层,这里的架构用了双GPU架构,所以采用了两层架构,主要是受限于当前的硬件限制,当个GPU的显存有限(当时使用的GTX 580 GPU只有3GB的内存),在训练的时候没有显示不够用,所以用双GPU的方式替代,所以相应的结构也需要调整,调整为上下两层,现在GPU能力足够不需要通过这种上下层的方式了。

这里采用的是RGB三色

第一层(卷积层)C1:

输入大小:3x224x224  ,相比与LeNet这里采用的彩色图RGB,所以是3,为啥是224了,论文里面也介绍了,它采用数据增强,是从256x256图片里面 随机选取或者反转224x224的图片去做训练,这样数据量大,但是也会容易过拟合,这里采用了其他的方式防止。

卷积核:96个11x11x3的卷积核,卷积核的步长是4;这是个三维卷积核对应的图片的RGB,96个卷积核分为两部分对应两个GPU,每一组GPU对应一个48个11x11x3的卷积核。

输出大小:96x55x55,通过公式得出W=(224-11)/4 +1   得出目标的长宽54.5  ,一般为了尽可能保留特征选择向上取整,输出为55,由于卷积核为96个,所以输出的图形也有96个,只不过由于双GPU原因分为了两组分别为48个55x55的图。

参数大小:34,944个,学习参数,需要存储的,共96组wx+b ,其中w为3x11x11 ,b就是常数,所以为1,96x(3x11x11+1)=34944

激活函数:ReLU

通过卷积核把整张图3x224x224分别过滤到两个GPU上面,每个GPU包含48张55x55的图,为后面的双GPU进行执行,当然现在已经没有这么采用了,基本GPU的显存也比较大,而且GPU的算力也比之前大多了。

第二层(池化层)P1:

这里是最大池化层,就是在区域内选取最大值

输入大小:96x55x55  ,这里是前面一层的输入,当然这里也分为了两层,两个GPU分别选择前面对应卷积的48x55x55进行池化

滤波器3×3 ,步长为2 最大池化

输出大小:96x27x27 ,按照计算得出(55-3)/2 +1 =27

参数大小:0,池化层一般没有学习参数,有些特殊的池化层也可以系数可以学习,但是标准的没有。

这里选取的池化是最大池化,因为平均池化容易让特征混淆,所以后续的网络里面池化大多都是选取的最大池化层。而且论文提出了一个观点就是重叠池,就是步长需要小于滤波器核,这样可以多选取一些重叠的特征进行特征增强会是模型减少过拟合。

第三层(卷积层)C2:

输入参数:96x27x27,上一层输入,相同的GPU池化之后进入卷积,每个GPU都得到48个27x27的图进行计算。

卷积核:256个5x5,步长为1,填充为2,分为两组128个5x5的卷积核当为2个GPU进行运算

输出参数:256x27x27,宽高度计算,通过公式:(27-5+2x2)/1 + 1 =27,通道等于卷积核个数256个。

参数大小:6,656,计算公式256个wx+b,w为5x5  b为1 ,所以256x(5x5+1)=6656

激活函数:ReLU

第四层(池化层)P2:

输入参数:256x27x27,上一层输出,交叉计算到了两个GPU,每组128x27x27。

滤波器:3x3,步长为2。最大池化层

输出参数:256x13x13,宽高度计算,(27-3)/2 + 1= 13

参数大小:0,没有带权重

第五层(卷积层)C3:

输入参数:256x13x13,上一层输出

卷积核:384个3×3x256,步长1,填充1 ,这里做了GPU的交叉计算,这里计算的时候卷积核会把一张图256x13x13进行覆盖,所以卷积核通道是256

输出参数:384x13x13,宽高计算,(13-3+1x2)/1+1= 13,宽高没有变化

参数大小:885,120,公式:384x(3x3x256+1)=885120

激活函数:ReLU

第六层(卷积层)C4:

输入参数:384x13x13,上一层输出

卷积核:384个3×3×192,步长1,填充1 ,这里没有对整张图进行交叉计算了,分开两个GPU得出的数据192x13x13来进行计算了

输出参数:384x13x13,宽高计算,(13-3+1x2)/1+1= 13,宽高没有变化

参数大小:663,936,公式:384x(3x3x192+1)=663936

激活函数:ReLU

第七层(卷积层)C5:

输入参数:384x13x13,上一层输出

卷积核:256个3×3×192,步长1,填充1

输出参数:256x13x13,宽高计算,(13-3+1x2)/1+1= 13,宽高没有变化

参数大小:442,624,公式:256x(3x3x192+1)=442624

激活函数:ReLU

第八层(池化层)P3:

输入参数:256x13x13,上一层输出

滤波器:3x3,步长为2。最大池化层

输出参数:256x6x6,宽高度计算,(13-3)/2 + 1= 6

参数大小:0,没有带权重

第九层(全连接层)F1:

输入参数:256x6x6

输出参数:4096 ,正常的全连接是不可能得到4096的,而是得到256x6x6=9216的,这里全连接层自己做了特殊处理,某些参数进行合并了才得到4096,非标准全连接。

参数大小:37,605,376, 计算,4096个wx+b,w为256x6x6,4096x(255x6x6+1)=37605376

注意后面跟着Dropout,在轮文中提到了在两个全连接层中包含Dropout,但是图上没有写,这里就

第十层(Dropout)D1:

输入参数:4096

丢弃率:0.5  随机失活50%的节点,就是把输出置为0

输出参数:4096

参数个数:0

Dropout在训练中体现,推理中不起作用,这里图也没有显示,主要用于随机失活一些数据,就是把一些输出数据赋值为0,这样的话可以起到防止过拟合,提高泛化率。

第十一层(全连接层)F2:

多几层全连接层进行特征整合,方便后续的分类。

输入参数:4096

输出参数:4096

参数大小:16,781,312, 参数为4096个wx+b ,w为4096,那么为4096x(4096+1) =16781312

第十二层(Dropout)D2:

输入参数:4096

丢弃率:0.5  随机失活50%的节点,就是把输出置为0

输出参数:4096

参数个数:0

第十三层(全连接层)F3:

最后一层,进行分类处理,这里显示类型的概率

输入参数:4096

输出参数:1000

参数大小:4,097,000,1000个wx+b,w为4096,那么为1000x(4096+1)=4097000

激活参数:Softmax  此激活函数是为了分类使用,进行归一化,把所有数据化为0~1之间的小数,所有数的累加和为1,这样排序下选择得分最高的就是哪个对象了,把1000进行类别分类,这个在训练的时候标记数据需要准备。

比如1 动物牛 2是动物羊 ... 1000 动物老虎 ,如果下标2 为0.99 分数最高,那么就能够得出这张图片对象为动物羊了。

总结:

  AlexNet 针对之前的CNN做出来改进,把网络模型增加了(之前训练的5层到8层),并且带权重的网络增加到了8层,识别种类可以达到1000种,在当时是非常不错了,参数60,516,968个(大约6000w个权重参数,和论文里面的60million对上了)。里面包含的可训练的网络层只有8层(C1、C2、C3、C4、C5、F1、F2、F3)相当于现在的网络层级来说层数太浅了无法支持更复杂的特征。

    AlexNet提出的改进点有:

  1.         重叠池:提出步长小于滤波器的边数,这样获取值的时候能够对有效特征进行重复提取,可以提高识别精度。例子:比如滤波器为5x5,那么步长为1~4,就会形成重叠池了,就是重复采集;而且这里使用了最大池化作为有效特征,避免之前的平均池化带来的模糊化特征的情况,后续神经网络基本也是采取的最大池化。
  2.         ReLU:函数(𝑓(𝑥)=max⁡(0,𝑥))把relu激活函数发扬光大了,之前一直使用的是tanhsigmoid,比起他们速率提高了(只取0和最大值)、提高稀疏性(只取大于0的数据,去除其他部分减少依赖)、避免了梯度消失问题(在正数区域,梯度恒为1)
  3.         Dropout:引入Dropout随机失活一部分神经网络的值,避免整个神经网络过拟合,这里后面的全连接用到了此技术,就是计算之后随机把结果赋值为0。
  4.         GPU加速:引用了GPU加速网络升级的训练和推理,这里由于当时的GPU显存低,还用到了双GPU架构,后续GPU提升显存,后面的框架基本没有采用此种架构了。
  5.         数据增强:受限于之前的数据量大小,这里提出了数据增强的功能,比如从256x256 选取224x224的区域,这里是从四个角和中间选取224x224,并且水平翻转增加数据量,从而减少过拟合的风险。

代码:

        这里由于当前框架都不太兼容双GPU架构,这里不提供代码展示了(学习学习思想)。

        

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值