当前位置: 代码迷 >> 综合 >> CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks
  详细解决方案

CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks

热度:142   发布时间:2023-10-11 16:23:31.0

ImageNet Classification with Deep Convolutional Neural Networks

作者:Alex Krizhevsky; Ilya Sutskever; Geoffrey E. Hinton

1. 论文综述

1.背景

  • 一般我们想提升训练模型的性能时会想到使用大的数据集,现在很多大型数据集的出现解决了数据集较小的问题,但是要从数百万的图像中学习数千个类别需要具有强大学习能力的模型。而且物体识别的复杂性使得即使是使用像ImageNet这样大的数据集也不能解决,需要更多的先验知识来弥补数据集不足的问题。卷积神经网络的容量可以通过深度和宽度来控制,能够对图像的性质做出准确而全面的假设。
  • 虽然CNN模型的局部结构的效率较高,但将它们大规模应用于高分辨率图像时仍然显得非常昂贵,当前的GPU可以用于高度优化的二维卷积,能够加速CNN的训练,且最近数据集包含足够多的标记样本来训练此模型,不会出现严重的过度拟合。

2.模型方法
为了简化实验,没有使用任何无监督的预训练方法,在应用时可以使用。

  • 建立的卷积神经网络具有6000万个参数和650000个神经元,有五层卷积层,每个卷积层后跟着池化层,三个全连接层,最后有1000个softmax输出。模型在两块GTX 580 3GB GPU上花费5~6天来训练。
  • 为了加快训练使用了非饱和神经元和高效的GPU。
  • 为了解决全连接层中的过拟合使用dropout正则化方法。

3.模型效果

  • 将ImageNet LSVRC-2010的比赛中的120万张高分辨率图像分为1000个不同的类别,测试数据上取得了37.5%和17.0%的top-1和top-5的错误率。
  • 在ILSVRC-2012的比赛中使用这个模式的一个变种,取得了15.3%的top-5的测试失误率,26.2%top-1的错误率。
  • 编写了一个高度优化的二维卷积的GPU实现其他训练卷积神经网络固有的操作。
    (top-5错误率是测试图像的一部分,其中正确的标签不在模型认为最可能的五个标签中。)
  • 如果移除任何一个卷积层,网络的性能就会下降。例如,删除任何中间层的结果会导致网络性能的top-1错误率下降2%。

4.下一步计划
打算对视频序列使用非常大的深度卷积神经网络,其中时间结构提供了非常有用的信息,这些信息往往在静态图像中丢失了,或者说不太明显。

2. 实验方法

2.1 数据集

ImageNet中图像的分辨率是不一样的,但是模型需要输入固定的尺寸,采用下采样方法将输入尺寸变为了256*256。除了将每个像素减去训练集的像素平均值外,没有做其他处理。

2.2 模型结构

五个卷积层、三个全连接层。

2.2.1 Relu非线性函数

在论文中将sigmoid函数和tanh函数称为saturating nonlinearities,将relu称为non-saturating nonlinearity函数,文章提到使用saturating nonlinearities函数比使用non-saturating nonlinearity函数梯度下降速度要慢。Nair和Hinton将nonlinearity称为Rectified Linear Units(Relu)。
从图中可以看出使用relu激活函数比使用tanh激活函数要快6倍。
CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks

2.2.2 在多GPU上训练

文章提到本文训练的网络是放在两个GPU上运行的,一个GPU上放置一半的神经元,还有一个技巧是:使GPU只在特定的层中通信,比如第3层的内核从第2层的所有内核映射中获取输入。然而,第4层的内核只接受位于同一GPU上的第3层内核映射的输入。因此选择连接模式对于交叉验证比较重要。
这种方式将top-1和top-5的错误率分别减少了1.7%和1.2%。并在一定程度上减少了运行时间。

2.2.3 局部响应归一化 Local Response Normalization

虽然relu函数不需要对输入数据进行标准化操作,但是局部正规化方案有助于泛化。
计算公式:
bx,yi=ax,yi(k+a∑j=max(0,i?n/2)min(N?1,i+n/2)(ax,yj)2)βb_{x,y}^i = \frac{a_{x,y}^i}{(k + a\sum_{j=max(0,i-n/2)}^{min(N-1,i+n/2)}(a_{x,y}^j)^2)^{\beta}}bx,yi?=(k+aj=max(0,i?n/2)min(N?1,i+n/2)?(ax,yj?)2)βax,yi??
其中ax,yia_{x,y}^iax,yi?表示第iii个内核计算位置(x,y)(x,y)(x,y)处的Relu非线性单元的输出,bx,yib_{x,y}^ibx,yi?表示响应归一化后的输出值。
nnn表示同一位置下与该位置相邻的内核映射的数量。NNN表示这一层中内核的总数量。这种响应归一化实现了以一种模仿真是神经元的横向一致,从而在使用不同内核计算的神经元输出之间产生较大的竞争。常数k、n、a和βk、n、a和\betaknaβ都属于超参数,它们的值取决于使用的验证机;我们使用的设置是:k=2,n=5,a=10?4,β=0.75k=2,n=5,a=10^{-4},\beta = 0.75k=2,n=5,a=10?4,β=0.75。在某些层中应用Relu后再使用这种归一化方法。
文章提到因为没有减去均值,因此这个方法称为“亮度归一化”(brightness normalization)。
响应归一化将top-1和top-5的错误率降低了1.4%和1.2%。

2.2.4 重叠池化 Overlapping Pooling

传统方法中相邻单元之间互不重叠。池化层被认为是由一些间隔为s个像素的池化单元组成的网络,,每个都表示一个以池化单元位置为中心的大小为z?zz*zz?z的区域。

  • s<zs<zs<z时,得到的是重叠池化。
  • s=zs=zs=z时,得到的是传统池化层。
    文章中模型使用的是重叠池化(s=2,z=3s=2,z=3s=2,z=3),将错误率top-1和top-5分别减小了0.4%和0.3%。
    文章提出,在训练模型时观察到使用重叠池模型会降低过拟合的概率。

2.2.5 整体结构

CNN整体机架构图:
CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks
该网络包含8个带权重的值,前5个是卷积的,其余三个是完全连接的。最后一个全连接层的输出被反馈到一个softmax层,产生超过1000中分类标签。
文章提到其网络最大化了多项式逻辑回归目标,这相当于最大化了预测分布下正确标签的对数概率的训练情形的平均值。(我理解的是使用了最大池化层,最后得到的预测结果会大一些。)
第二层、第四层和第五层卷积层的内核只连接到上一层驻留在同一GPU上的内核映射(见图2),第三层卷积层的内核连接到第二层的所有内核映射。全连接层的神经元与前一层的所有神经元相连。响应规范化层在第一和第二卷积层之后。
第一个卷积层的输入为224×224×3的图像,对其使用96个大小为11×11×3、步长为4(步长表示内核映射中相邻神经元感受野中心之间的距离)的内核来处理输入图像。第二个卷积层将第一个卷积层的输出(响应归一化以及池化)作为输入,并使用256个内核处理图像,每个内核大小为5×5×48。第三个、第四个和第五个卷积层彼此连接而中间没有任何池化或归一化层。第三个卷积层有384个内核,每个的大小为3×3×256,其输入为第二个卷积层的输出。第四个卷积层有384个内核,每个内核大小为3×3×192。第五个卷积层有256个内核,每个内核大小为3×3×192。全连接层各有4096个神经元。

2.3 减少过拟合

2.3.1 扩增数据 Data Augmentation

文章提到其使用的两种数据扩充方法都使用很小的计算代价就可以使原始图像生成转换后的图像,转换后的图像不需要存在磁盘上,因为可以一边使用python在CPU上转换,一边在GPU上对图像进行训练。

  • 形式一:图像平移和水平翻转:尽管这样产生的训练数据使高度相关的,但是在很大程度上解决了严重的过拟合问题。
  • 形式二:第二种形式的数据增强改变训练图像中RGB通道的强度,就是在整个ImageNet训练集的图像的RGB像素值上使用PCA。对于每个训练图像,我们将找到的主成分的倍数相加,与相应的特征值成比例的模量乘以一个随机变量,该随机变量来自一个均值为0、标准差为0.1的高斯分布。对于每个RGB图像像素[IxyR,IxyG,IxyB]T[I_{xy}^R,I_{xy}^G,I_{xy}^B]^T[IxyR?,IxyG?,IxyB?]T,我们添加下面等式的值:
    [p1,p2,p3][a1λ1,a2λ2,a3λ3][p_1,p_2,p_3][a_1\lambda_1,a_2\lambda_2,a_3\lambda_3][p1?,p2?,p3?][a1?λ1?,a2?λ2?,a3?λ3?]
    pip_ipi?λi\lambda_iλi?分别是3x3的RGB协方差矩阵的第iii个特征向量和第iii个的特征值,而aia_iai?是前面所说的随机值。对于一张特定图像中的所有像素,每个aia_iai?只会被抽取一次,知道这张图片再次用于训练时,才会重新提取随机变量。这个方案近似地捕捉原始图像的一些重要属性,对象的身份不受光照的强度和颜色变化影响。 这个方案将top-1错误率降低了1%以上。

2.3.2 Dropout

将每个神经元丢弃的概率设置为0.5,以这种方式丢弃的神经元不参与正向传递,也不参与反向传播。每次有输入时神经网络都会有不同的结构,但是这些结构都权重共享。在测试时使用所有神经元并将它们的输出都乘以0.5.。(我记得是在训练时将激活值除以0.5,这句话意思是不是和这个一样,还是我的记忆有误)

2.4 学习细节

我们使用随机梯度下降训练我们的模型,批量大小为128个样本,动量为0.9,重量衰减为0.0005。我们发现这一小部分的重量衰减对模型的学习很重要。换句话说,这里的重量衰减不仅仅是一个正则化器:它减少了模型的训练误差。权值w的更新规则是:
vi+1:=0.9?vi?0.0005???wi???(αLαw)Div_{i+1} := 0.9 \cdot v_i - 0.0005\cdot\epsilon\cdot w_i - \epsilon\cdot(\frac{\alpha L}{\alpha w})_{D_i}vi+1?:=0.9?vi??0.0005???wi????(αwαL?)Di??wi+1:=wi+vi+1w_{i+1}:=w_i + v_{i+1}wi+1?:=wi?+vi+1?
其中iii表示当前迭代次数,vvv表示动量(momentum),?\epsilon?表示学习率,(αLαw)Di(\frac{\alpha L}{\alpha w})_{D_i}(αwαL?)Di??表示第iii批次DiD_iDi?的目标函数关于www的导数的平均值。

初始化每一层权值,初始化后的全职为零均值高斯分布,标准差为0.01。第二层、第四层和第五层卷积层以及全连通隐藏层中初始化神经元偏差为常数1,用常数0初始化剩余层中的神经元偏差。对所有层使用相同的学习率,并在整个培训过程中手动调整。采用的启发式方法是,当验证错误率不再随着当前的学习率提高时,将学习率除以10。初始化学习率为0.01,终止前降低3次。实验者在两台NVIDIA GTX 580 3GB gpu上用了5到6天的时间,通过120万张图像的训练集,对网络进行了大约90个周期的训练。

2.5 结果

CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks
2.
CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks
文章描述的CNN的top-5错误率达到了18.2%。
对五个相似CNN的预测结果计算均值,得到的错误率为16.4%。
表格第四行,对单独的一个CNN,在最后一个池化层之后,额外添加第六个卷积层,对整个ImageNet Fall 2011 release(15M images, 22K categories)进行分类,然后在ILSVRC-2012上“微调”(fine-tuning)网络,得到的错误率为16.6%。
对整个ImageNet Fall 2011版本的数据集下预训练的两个CNN,求他们输出的预测值与前面提到的5个不同的CNN输出的预测值的均值,得到的错误率为15.3%。
比赛的第二名达到了26.2%的top-5错误率,他们的方法是:对几个在特征取样密度不同的Fisher向量上训练的分类器的预测结果取平均的方法

2.5.1 定性评估 Qualitative Evaluations

CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks
图3显示了由网络的两个数据连接层学习得到的卷积内核。该网络已经学习到许多频率和方向提取的内核,以及各种色块。请注意两个GPU所展现的不同特性,这也上面介绍的限制互连的结果。GPU1上的内核在很大程度上与颜色无关,然而GPU2上的内核在很大程度上都于颜色有关。这种特异性在每次迭代期间都会发生,并且独立于任何特定的随机权重初始化过程(以GPU的重新编号为模)。
CNN-经典论文阅读(2012-AlexNet)ImageNet Classification with Deep Convolutional Neural Networks
在图4的左侧面板中,通过计算8张测试图像的top-5预测来定性评估网络的训练结果。请注意,即使是偏离中心的对象,如左上角的螨虫,也可以被网络识别。前5名中的大多数似乎都是合理的。例如,只有其他类型的猫被认为是豹的合理标签。在某些情况下图片中有多个物体,比如樱桃和狗,使得图片焦点不明确,会导致预测错误。

另一种探索网络视觉知识的方法是考虑最后一个4096维隐层图像的特征激活。如果两幅图像产生的特征激活向量具有小的欧氏分离,我们可以说神经网络的高层认为它们是相似的。
图4右侧显示了来自测试集的5张图像(第一列),以及来自训练集的列图像,根据这个度量,它们是最相似的。注意,在像素级别,在像素层次上,待检测的训练图像通常不会与第一列中的查询图像有较小的L2距离。例如,检索到的狗和大象以各种姿势出现。我们在补充材料中展示了更多测试图像的结果。通过使用欧式距离来计算两个4096维实值向量的相似性,效率不高,但是通过训练自编码器可以将这些向量压缩为较短的二进制码,能够使其更高效。与应用自编码器到原始像素相比,这应该是更好的图像检索方法。它不使用图像标签,因此更倾向于检索具有相似图案边缘的图像,不管它们的图像语义是否相似。

知识点

1.大型数据集LabelMe,包含数十万个完全分割的图像,ImageNet包含超过15000万个超过22000个类别的高分辨率的图像。
2.ImageNet总共含有120张训练图像,其中50000张验证图像,150,000张测试图像。
3.使用relu不需要为了防止输入数据饱和而对输入进行标准化。

有的地方论文写的很好,担心自己表述有误就直接翻译了。