【深度学习论文阅读】AlexNet:ILSVRC-2012冠军

AlexNet:
AlexNet结构

先说两个计算公式:
卷积后的大小:(input-kernel_size+2*padding)/stride+1
卷积层参数计算:kernel_depth x( [卷积核]+1)
连接数:参数个数x图大小
拿到的时候看不太懂,每一层的结构并不是那么明确。

layerinputkernel_sizestridepaddingoutput参数量
Input227x227x3----227x227x3
Conv1227x227x311x11x964x4-55x55x96(11x11x3+1)x96=34944
MaxPool155x55x963x32-27x27x96-
Conv227x27x965x5x2561227x27x256(5x5x96+1)x256=614656
MaxPool227x27x2563x32-13x13x256-
Conv313x13x2563x3x3841113x13x384(3x3x256+1)x384=885120
Conv413x13x3843x3x3841113x13x384(3x3x384+1)x384=1327488
Conv513x13x3843x3x2561 113x13x256(3x3x384+1)x256=884992
MaxPool513x13x2563x32-6x6x256-
FC66x6x256---40966x6x256x4096+1=37748737
FC74096---40964096x4096+1=16777217
FC84096---10004096x1000+1=4096001

模型构造

第1、2、5层卷积时会经过池化层(使用最大池化层),第3、4层卷积不经池化层;第6、7全连接层采用dropout,第8层全连接不适用dropout。

  1. 第一层卷积时,有如下两步:
    • kernel_size =11*11,kernel_number=96,stride=4*4,所以有(227-11)/4+1=55
    • kernel_size= 3*3,stride=2*2,所以有(55-3)/2+1=27
      所以第一层卷积的结果为27*27*96,参数量为:(11x11x3+1)x96=34944
  2. 第二层卷积:
    • kernel_size = 5*5,kernel_number=256,stride=1*1,pad=2,所以有(27-5+2*2)/1+1=27
    • kernel_size=3*3,kernel_number=2*2,所以有(27-3)/2+1=13
      所以第二层卷积的结果为13*13*256,参数量为(5x5x96+1)x256=614656
  3. 第三层卷积:
    • kernel_size=3*3,kernel_number=384,stride=1*1,pad=1,所以有(13-3+1*2)/1+1=13
      所以第三层卷积后的结果为13*13*384,参数量为:(3x3x256+1)x384=885120
  4. 第四层卷积:
    • kernel_size=3*3,kernel_number=384,stride=1*1,pad=1,所以有(13-3+1*2)/1+1=13
      所以第四层卷积的结果为13*13*384,参数量为:(3x3x384+1)x384=1327488
  5. 第五层卷积:
    • kernel_size=3*3,kernel_number = 256,srride=1*1,pad=1,所以有(13-3+1*2)/1+1=13
    • kernel_size=3*3,stride=2*2,所以有(13-3)/2+1=6
      所以第五层卷积的输出为6*6*256,参数量为:(3x3x384+1)x256=884992
  6. 第六层全连接:
    • 由于将原始的6x6x256堆叠形成一个4096大小的一维向量,所以计算得到参数为6x6x256x4096+1
  7. 第七层全连接:
    • 由于将原始的4096转化为4096大小的一维向量,所以计算得到参数为4096x4096+!
  8. 第八层全连接:
    • 输出最后的1000分类,参数量为1000x4096+1

尽管卷积层的计算量很大,但是其参数量很小,它通过较小的参数量提取有效的特征。
任何一个卷积层的去除都会使得网络的分类性能大幅下降。

AlexNet的创新点:

  1. 使用ReLU作为CNN的激活函数,加速学习过程。解决了sigmoid函数以及tanh(x)的梯度消失问题。指出非线性非饱和函数比非线性饱和函数的训练速度快。

饱和函数:当输入达到一定值之后,输出就不再变化了。

  1. dropout:在训练时使用dropout随机忽略一部分神经元(删除神经元置0)[不参与反向传播],避免模型过拟合,用于第6、7全连接层。
  2. overlapping pooling:以往的CNN使用一般池化,AlexNet中有因为Stride<kernel_size,导致重叠池化,避免平均池化的模糊化效果。使得池化层的输出有重叠和覆盖,提升了特征的丰富性。将池化层的输出扩充为多级较小特征,采用稀疏编码进行多级特征融合,降低池化层输出的特征维度。
  3. Local Response Normalization,LRN,局部响应值归一化:对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得更大,并抑制其它反馈较小的神经元,提高了模型的泛化能力。利用临近数据做归一化
    公式如下,
    LRN

这个公式中,a表示卷积层的输出结果,它是一个四维数组[batch,height,width,channel]
batch表示批次数,每一张图片就是一个批次
height表示图片高度
width表示图片宽度
channel反映图片经卷积过后的深度
还是不太理解LRN…
5. GPU加速计算
6. 数据增强:随机从256x256的原始图像中截取224x224大小的区域(以及水平翻转的镜像),相当于增强了(256-224)x(256-224)x 2=2048倍的数据量。使用了数据增强后,减轻过拟合,提升泛化能力。避免因为原始数据量的大小使得参数众多的CNN陷入过拟合中。

卷积神经网络和人工神经网络的差别在于,卷积神经网络的输入为n*m*3的RGB图像,而人工神经网络的输入是n*1的矢量。

  • 滤波器必须具有与输入图像相同的数量的通道
  • 网络越深,使用的滤波器就越多;拥有的滤波器越多,获得的边缘和特征检测就越多;

池化层:在卷积神经网络上减小特征空间维度,但不减少深度。


参考文章:
1.AlexNet原理解析及实现
2.深度学习的局部响应归一化LRN(Local Response Normalization)理解
3.卷积神经网络的参数计算

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值