AlexNet论文(ImageNet Classification with Deep Convolutional Neural Networks)学习笔记

ImageNet Classification with Deep Convolutional Neural Networks学习笔记

第一个典型的CNN是LeNet5网络结构,但是第一个引起大家注意的网络却是本论文所提出的AlexNet。这篇文章的AlexNet网络是在2012年的ImageNet竞赛中取得冠军的一个模型整理后发表的文章。作者是多伦多大学的Alex Krizhevsky等人。Alex Krizhevsky其实是Hinton的学生,这个团队领导者是Hinton。

这个笔记是对论文《ImageNet Classification with Deep Convolutional Neural Networks》综述论文的一些笔记。笔记严格文章的结构来做的。

论文地址: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

同时提供一个中英对应翻译的链接: https://www.jianshu.com/p/ea922866e3be

  • 引言
  1. 论述了大规模的、真实的、高质量的图像数据集对物体识别的重要性。处理物体识别的解决方法: 更大规模的数据集 + 更强大的模型 + 更好的避免过拟合的技术。
  2. 现在已经有了大规模的数据集了, 如ImageNet、LabelMe等,而更强大的模型的话,可以使用神经网络,它有足够大的学习容量去carry这样规模的数据集。
  3. 但即便是ImageNet这样的数据集, 其实对于复杂的物体识别问题而言,都是不够的。因此, 一种方法是, 根据对问题的理解,将先验知识揉合进模型中,如本文所使用的CNN网络就是这样。CNN相比于全连接网络,它有更少的连接, 更少的参数, 更容易训练,并且理论上效果与全连接网络相当。
  4. 虽然CNN有各种各样的优点,但训练仍然是一件困难的事情。当前的GPU,使得在ImageNet这样大规模的数据集上部署CNN模型成为可能。
  5. 论文的主要贡献:

    1) 在ILSVRC-2012数据(ImageNet的一个子集)上取得了最好的成绩.

    2) 设计了AlexNet的神经网络,实现了高度优化的GPU并行部署的方案来训练,同时还使用了RELU, LRN, 重叠的Pooling技术细节

    3) 使用了数据增强、Dropout等技术方法来避免过拟合

  • 数据集
  1. ImageNet包含有1500万带人工标注的高清图片, 大概有22000类别
  2. ILSVRC每年举办一次比赛,使用的数据集为: 从ImageNet中, 抽取1000个类别,每个类别大概1000张的图片所构成的总数给为120万图片。
  3. 比赛使用的评价指标为: Top-1错误率 及 Top5错误率。
  4. 论文中对数据的处理: 原始数据集的大小不一, 通过缩放使每张图片短边的长度为256, 再对长边截取它最中心256长度的部分, 从而得到256x256的图片。
  5. 对每张图片的RGB通道进行白化处理,将每个RGB的像素值转化成零均值处理,避免过度曝光或低曝光的图片的影响.
  • 神经网络架构
  1. ReLU非线性**函数

    1) 传统的饱和的**函数(如tanh, sigmoid函数)训练时间过长, 根据实验, 使用ReLU的方法可以极大的压缩训练的过程

    2) 论文不是第1个考虑使用非饱和**函数的方法,如Jarrett就提出了非饱和的**函数f(x)=|tanh(x)|,但这两种**函数的侧重点不同,Jarrett它主要是为了避免过拟合,而ReLU主要是为了提速,以便于缩短大规模神经网络的训练时间.

    2.多卡并行训练

   1) 作者使用2块GTX-580的GPU并行计算,并让两块GPU仅在特定的层发生交互. 例如: 第3个卷积层每个filter使用了第2个卷积层的所有feature map, 而在第4层卷积层中只使用第3层卷积层上在同块GPU上面的feature map.

   2) 使用多卡并行训练会造成交叉验证比较困难, 但我们可以调整交互量,以达到在可接受的运行时间内完成训练。

   3) 与单卡训练较小规模的网络的方式相比,多卡训练更大规模的网络可以在Top1和Top5上,降低1.7%和1.2%的错误率。

   3. 局部响应归一化(Local Response normalization)

    1) 局部响应的动机: 在神经生物学中, 有一个概念叫做侧抑制,指被**的神经元抑制相邻神经元的表达。

公式看起来很复杂,但其实解释起来很简单, 就是把与当前位置相邻的,且处于同一位置上不同的值, 进行归一化处理。思想就是,取出一些临近的神经元, 做归一化, 然后,不同神经元的相对大小的差距变得更大了(有些类似于softmax函数一样),从而达到"侧抑制"的效果。

     2) 在AlexNet中, 只在第1层卷积层和第2个卷积层中使用, 具体的, 是在经过ReLU**函数之后使用.

     3) 经过后期的不断测试,研究人员(VGG网络)发现,这个LRN在其它网络中其实效果并不怎么好,LRN并非CNN中必须包含的层,甚至有些网络加入LRN后效果反而降低,所以现在用LRN比较少了。

     4) 卷积核矩阵的排序是随机任意,并且在训练之前就已经决定好顺序。这种LPN形成了一种横向抑制机制。

    4. 重叠的Pooling方法

   1) 传统的池化层的方法是不重叠的,有些类似于网格一样, 把每个特征层划分成z*z大小网络, 然后对网络内的元素进行处理.

   2) 本文首先使用了重叠的Pooling方法, 将Top1和Top5错误率分别降低了0.4%和0.3%.

   3) 相比于传统的不重叠的Pooling, 使用重叠的Pooling方法, 更加不容易发生过拟合.

    5. 完整的网络结构

AlexNet论文(ImageNet Classification with Deep Convolutional Neural Networks)学习笔记

上图引自https://zhuanlan.zhihu.com/p/47391705, 同时,对网络的结构也有具体的描述,对此,不再进行赘述.

  • 减少过拟合
  1. 数据增强(保持标签不变, 人工加大数据集)

    1)  第1种数据增强方式包括产生图像变换和水平翻转。从256×256图像上通过随机提取224 × 224的图像块然后在这些提取的图像块上进行训练。这样子训练集就增大了2048(2*(256-224)*(256-224)),虽然最终的训练样本是高度相关的。而在测试阶段, 对每张图片通过选取上下左右4个边角位置以及最中间的位置得到5张图片, 再对这5张图片进行水平翻转, 就得到10张测试集了。

    2) 第2种数据增强的方式, 是通过改变训练图像的RGB通道的强度论文通过求得每个像素点的协方差矩阵(3*3),从而求得特征值和特征向量,然后在对特征值进行一部分的波动,求出一个新的协方差矩阵,在加到原本的像素上,从而实现一种滤镜的效果。这种方法同样也可以产生大量的新样本。论文中解释到该操作能够获取自然图像的重要信息,具有亮度和光照不变性,能够提高超过1%的识别率。

     2. Dropout

   1) 对神经网络做集成是代价非常高的操作。Dropout方法也可以看作是一种集成, 但Only costs about a factor of two during training.

   2) 它会以0.5的概率对每个隐含层的神经元的输出设为0, 这些失活的的神经元将不再进行前向传播并且不参与反向传播。

   3) Dropout减少了复杂的神经元互适应,因为一个神经元不能依赖特定的其它神经元的存在。因此,神经元被强迫学习更鲁棒的特征,它在与许多不同的其它神经元的随机子集结合时是有用的。

   4) 在测试时,使用所有的神经元但它们的输出乘以0.5,对指数级的许多失活网络的预测分布进行几何平均,这是一种合理的近似。

后面省略…