一、AlexNet
论文地址:https://arxiv.org/abs/1404.5997
1. 发展历史
在图像分类领域不得不提的就是ImageNet大规模视觉挑战赛(ILSVRC),它被称为深度学习在图像分类任务研究方面进展的标杆。
AlexNet网络参加了ILSVRC2012年大赛,以高出第二名10%的性能优势取得了冠军,由传统的70%多的准确率提升到80%多。AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的,也是在那年之后,更多的更深的神经网络被提出,他掀起了一波深度学习的浪潮,一个里程碑意义的网络。
2. 比赛成绩
当时参加比赛的前五的情况:
不同版本的AlexNet参赛的成绩表
1CNN :训练一个AlexNet
5CNNs :训练五个AlexNet取平均值
1CNN*:在最后一个池化层后,额外添加第六个卷积层,并使用ImageNet 2011(秋) 数据集预训练
7CNNs*:两个预训练微调,与5CNNs取平均值
3. 模型结构
一共8层, 5个卷积层,3个全连接层(池化和Normal不作为层看待)
4. 网络创新
多GPU训练,ReLU激活函数,LRN归一化,Dropout,重叠池化,数据增强等。
4.1 首发GPU训练网络
在AlexNet中使用了CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。
AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。
除了将模型的神经元进行了并行,还使得通信被限制在了某些网络层。第三层卷积要使用第二层所有的特征图,但是第四层却只需要同一块GPU中的第三层的特征图。
与只使用一个GPU,将top-1和top-5 错误率减少1.7%和1.2%
4.2 使用Relu激活函数
全称为:Rectified Linear Unit,是一种人工神经网络中常用的激活函数,通常意义下,其指代数学中的斜坡函数,公式为:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x)=max(0,x)
f(x)=max(0,x)
对应的函数图像如下所示:
4.3 使用LRN局部响应归一化
LRN 首先是在 AlexNet 中首先,被定义,它的目的在于卷积(即 Relu 激活函数出来之后的)值进行局部的归一化。
在神经生物学中,有一个概念叫做侧抑制(lateral inhibitio),指的是被激活的神经元会抑制它周围的神经元,而归一化(normalization)的目的就是“抑制”,两者不谋而合,这就是局部归一化的动机,它就是借鉴“侧抑制”的思想来实现局部抑制,当我们使用Relu激活函数的时候,这种局部抑制显得很有效果。
LRN的主要思想是在神经元输出的局部范围内进行归一化操作,使得激活值较大的神经元对后续神经元的影响降低,从而减少梯度消失和梯度爆炸的问题。具体来说,对于每个神经元,LRN会将其输出按照局部范围进行加权平均,然后将加权平均值除以一个尺度因子(通常为2),最后将结果取平方根并减去均值,得到归一化后的输出。
作用于ReLU层之后,抑制反馈较小的神经元,放大反馈较大的 神经元,增强模型泛化能力。
后续提出了更加有说服能力的批量归一化(Batch Normalization)的概念,所以现在归一化几乎都用batchNorm的方法实现归一化。
4.4 全连接层加入Dropout
正则化方法,提高模型泛化能力。
4.5 数据增强
4.6 重叠池化
相邻池化区域的窗口有重叠,可提高模型泛化能力。
4.7 测试时数据增强
将原始图片进行水平翻转、垂直翻转、对角线翻转、旋转角度等数据增强操作,得到多张图,分别进行推理,再融合得到最终输出结果。
提取图片四个角加中间五个位置并进行左右翻转得到十幅图片, 各自推理求取平均值。