深度学习基础模型之AlexNet

这个只是了解图像相关知识的时候码一下,方便自己查看。并不是论文翻译。

论文ImageNet Classification with Deep Convolutional Neural Networks

卷积和池化的计算

图像为L×L×C,有K个大小为A×A×C的卷积核,pad:B,stride:S。那么得到的特征图为
[(L-A + 2 × B)/S + 1,(L-A + 2 × B)/S + 1,K]
图像为L×L×C,有大小为A×A的池化层,pad:B,stride:C,那么得到的特征图为
[(L-A + 2 × B)/S + 1,(L-A + 2 × B)/S + 1,C]
也就是说,卷积核的厚度C要和输入的厚度C对应(卷积的计算)。特征图的厚度就是有多少个卷积核。
池化层改变特征图大小但是不改变厚度。

前言

第一个典型的CNN是LeNet5结构,例如GoogLeNet之所以L大写似乎就是为了致敬。但是大家最熟知的,或者说魔改最多的还是AlexNet,当时在2012年的ImageNet竞赛中的冠军模型,后来发表了论文ImageNet Classification with Deep Convolutional Neural Networks。论文一作是Alex,是大神Hinton的学生。
事实上AlexNet的结构和LeNet非常相似,也就是目前通用的卷积神经网络的结构,就是通过前面的卷积层进行特征提取,最后通过全连接建立映射作为输出。但是AlexNet更为复杂。

数据集介绍

ImageNet数据集包含1,500万标注好的高像素照片,分为大约22,000个组别。使用Amazon’s
Mechanical Turk crowd-sourcing tool在互联网上收集图片并进行人工标注。ILSVRC比赛自2010年开始,使用的数据集是ImageNet的子集,大约包含120万张训练集和50,000张验证集,150,000张测试集图片共1000个类别。
因为ImageNet包含的是多种尺寸的高像素的图片,但是AlexNet需要一个固定尺寸的输入,所以通过降采样的方式得到256×256大小的图片。首先对输入的图片进行放缩使短边变为256,然后再对得到的图像裁剪最中间的256×256的像素。(其实蛮粗暴的,但是事实证明也比较有效了,这是对特定数据集的做法。)

结构

AlexNet包括八个可学习的层——五个卷积层和三个全连接层。下面介绍一些相对之前模型来说比较新颖的点。
一、ReLU激活函数
之前常用的激活函数使tanh或者sigmoid,但是都有这样那样的问题(为什么?)所以这里应用了ReLU激活函数来避免梯度爆炸/消失等问题。(现在更多还有leaky-ReLU等)
二、多CPU训练
文章显示这里使用了两个CPU进行并行训练,现在来说其实蛮普遍了。其实不了解的人可以了解一下并行训练到底是怎么实现并行和参数更新的。
三、局部响应归一化(Local Response Normalization)
就是一个归一化的方法,ReLU不需要输入的归一化来防止激活函数饱和,但是应用LRN能更使模型更有效。

局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),然后根据论文有公式如下
在这里插入图片描述

可以参考这篇博客深度学习的局部响应归一化LRN(Local Response Normalization)理解
四、重叠最大池化
池化在CNN中早就是有应用的。池化一般跟在卷积层之后,用于减少卷积得到的特征,有防止过拟合的效果,有时候也被叫做降采样层
。一般来说,一个窗口大小为z×z的池化窗口,每次的步长s也为z,也就是说窗口没有重叠。AlexNet设置z=3,s=2。这就有了重叠的池化。没有理论的基础,但是效果确实有提升。(可能降采样损失了很多信息,但是重叠后能减少信息损失。)
五、Dropout层
Dropout层在AlexNet中设置在最初的两层全连接之间。可以简单的认为Dropout就是通过按照一定比例随机抑制神经元输出来得到稀疏特征,来应对过拟合问题。
Dropout层在训练的时候是直接抑制了一部分输出,但是预测的时候并没有,所以在预测输出的时候会按照比例对权重矩阵进行缩小。细节可以参考论文Dropout: a simple way to prevent neural networks from overfitting.
六、结构总览
在这里插入图片描述
论文里的图就是一半的不好看的样子,但是因为是双GPU并行,所以看一半就可以了。很容易可以看到这个主要是将图片分成两部分进行处理,最后再合为一个1000维的向量。
第一层卷积:224×224×3经过96个卷积核11×11×3得到55×55×96特征图(224会被预处理为227,步长为4,而且是双GPU所以是55×55×48)
第一层池化:55×55×96经过大小为3步长为2的最大池化,变为27×27×96(双GPU)
第二层卷积:再经过256个5×5×48的卷积核得到27×27×256特征图(步长为1,pad为2)
第二层池化:27×27×256经过大小为3步长为2的最大池化,变为13×13×256
第三层卷积:再通过384个3×3×256的卷积核(这里两个GPU的联系起来了),经过归一化和池化得到13×13×384特征图(pad:1,步长为1)
第四层卷积:再通过384个3×3×192的卷积核,得到13×13×384特征图
第五层卷积:再通过256个3×3×192的卷积核,得到13×13×256特征图
第五层池化:再通过大小为3,步长为2的池化得到6×6×256
第六层全连接:通过4096个6×6×256滤波器(卷积核)得到4096维特征向量
第七层全连接:通过全连接得到4096维特征向量
第八层全连接:全连接得到1000维输出,计算概率得到分类结果。

AlexNet 中60M参数

AlexNet只有8层,但是它需要学习的参数有60000000个,相比如他的层数,这是一个很可怕的数字了,我们来计算下这些参数都是怎么来的:
C1:96×11×11×3(卷积核个数/宽/高/厚度) 34848个
C2:256×5×5×48(卷积核个数/宽/高/厚度) 307200个
C3:384×3×3×256(卷积核个数/宽/高/厚度) 884736个
C4:384×3×3×192(卷积核个数/宽/高/厚度) 663552个
C5:256×3×3×192(卷积核个数/宽/高/厚度) 442368个
R1:4096×6×6×256(卷积核个数/宽/高/厚度) 37748736个
R2:4096×4096 16777216个
R3:4096×1000 4096000个

在R1中卷积核尺寸是6×6×2566\times6\times2566×6×256而不是13×13×25613\times13\times25613×13×256是因为经过了最大池化。可以看到,全连接层(尤其是第一层)参数数量占了绝大部分。

减少过拟合

一、数据扩增
1、生成图像:通过随机抽取的方式从256×256的图像抽取出来224×224
2、改变训练集中图片RGB三个通道的权重。对图片应用PCA。每个像素点都有三个通道,我们通过引入随机量对像素点进行重建。通过这样的方式引入了均值为0方差为0.1的高斯随机噪声
在这里插入图片描述
二、Dropout
这个前面讲过了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值