本文将为大家带来经典神经网络AlexNet, 它是2012年发表的。它由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton共同提出,并在2012年的ImageNet大规模视觉识别挑战赛(ILSVRC 2012)中取得了显著的成功。论文标题为"ImageNet Classification with Deep Convolutional Neural Networks",发表在2012年的NIPS(现称为NeurIPS)会议上。
AlexNet的成功标志着深度学习在计算机视觉领域的广泛应用,它极大地推动了卷积神经网络(CNN)的发展,并引发了后续一系列深度网络的研究与突破。
论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
B站讲解:经典神经网络超详细(三)Alex网络 论文详解+代码复现_哔哩哔哩_bilibili
文章目录
- 深度学习图像分类篇(三): AlexNet网络(论文精读+网络详解+代码实战)
一. 摘要部分
翻译
我们训练了一个庞大的深层卷积神经网络,将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不同的类别。在测试数据上,我们取得了37.5%和17.0%的前1和前5的错误率,这比以前的先进水平要好得多。具有6000万个参数和650,000个神经元的神经网络由五个卷积层组成,其中一些随后是最大池化层,三个全连接层以及最后的1000个softmax输出。为了加快训练速度,我们使用非饱和神经元和能高效进行卷积运算的GPU实现。为了减少全连接层中的过拟合,我们采用了最近开发的称为“dropout”的正则化方法,该方法证明是非常有效的。我们还在ILSVRC-2012比赛中使用了这种模式的一个变种,取得了15.3%的前五名测试失误率,而第二名的成绩是26.2%。
精讲
1. 计算效率慢,训练时间长
- 问题描述:训练深度神经网络时,计算效率慢是一个主要问题,尤其是当模型非常大(有6000万参数和65万个神经元)时,训练会消耗大量时间。
- 解决方法:为了加速训练,作者使用了非饱和神经元和GPU优化的卷积操作
- 非饱和神经元:选择了ReLU(Rectified Linear Unit)激活函数,它相比传统的sigmoid和tanh激活函数,计算更加简单且不会出现梯度消失问题,使得训练速度更快。
- GPU优化:利用GPU的并行计算能力,使得大规模计算变得更加高效,显著加速了训练过程。
2. 过拟合(Overfitting)
- 问题描述:当神经网络的参数量非常大时(如60 million参数),模型容易在训练数据上表现很好,但在测试数据上效果差,导致过拟合问题。尤其是在完全连接的层(fully connected layers)中,过拟合尤为明显。
- 解决方法:采用了dropout正则化方法,来减少过拟合。
- dropout:在训练过程中,随机丢弃一些神经元,以防止网络对某些神经元的过度依赖。这种方法有助于提高模型的泛化能力,减少在测试集上的过拟合。
3. 传统方法精度低,不能有效分类
- 问题描述:在ImageNet LSVRC-2010竞赛之前,使用传统方法(如浅层网络和手工设计特征)的精度较低。深度卷积神经网络(CNN)相比浅层模型能够提取更复杂的特征,从而提高分类精度。
- 解决方法:使用**深度卷积神经网络(CNN)**来分类1000个类别的图像。
- 该网络包含五个卷积层,每个卷积层后面可能跟着一个最大池化层(max-pooling layer),以及三个全连接层。最后使用1000个类的softmax层输出分类结果。
- 卷积层提取图像的不同层次特征,池化层减少计算量,最终全连接层进行高层次决策。
4. 问题:与传统方法的精度差距较大
- 问题描述:在ImageNet竞赛中,传统方法在测试数据上的精度较低,AlexNet的目标是提高准确性。
- 解决方法:在ILSVRC-2012竞赛中,改进后的AlexNet取得了优异的成绩。
- 测试结果:AlexNet在测试数据上的Top-1错误率为37.5%,Top-5错误率为17.0%,这比当时的其他最先进方法有了显著提升。而在ILSVRC-2012竞赛中,AlexNet进一步取得了**15.3%**的Top-5错误率,领先第二名(26.2%)大约10个百分点,表现出色。
5. 总结:
作者遇到了几个关键问题并通过创新的方法解决了:
- 计算效率问题:通过使用ReLU激活函数和GPU加速,提高了训练效率。
- 过拟合问题:通过使用dropout正则化方法有效减少了过拟合,提升了模型在测试集上的表现。
- 精度问题:采用了深度CNN模型,取得了比当时其他方法更好的分类精度,且在ILSVRC-2012中赢得了冠军。
二. 前言
翻译
当前的目标识别方法核心依赖于机器学习技术。为了提升模型性能,可以通过收集更大规模的数据集、设计更强大的模型,以及采用更好的防过拟合技术来实现。然而,在过去,标注图像的数据集规模相对较小——通常只有数万张图片(例如,NORB [16],Caltech-101/256 [8, 9] 和 CIFAR-10/100 [12])。对于简单的识别任务,这些规模的数据集在结合标签保持不变的数据增强方法后,已经可以取得较好的效果。例如,当前在MNIST数字识别任务上的最佳错误率(<0.3%)已接近人类的识别水平 [4]。
然而,在真实场景中,物体表现出相当大的多样性,因此为了学习如何识别它们,需要使用更大规模的训练集。事实上,小规模图像数据集的局限性早已被广泛认知(例如,Pinto 等人 [21]),但直到最近,收集包含数百万图像的标注数据集才成为可能。这些新型大规模数据集包括 LabelMe [23],其包含数十万张完全分割的图像,以及 ImageNet [6],其涵盖超过1500万张高分辨率标注图像,分布在超过22,000个类别中。
为了从数百万张图像中学习成千上万种物体的特征,我们需要一个具有较大学习容量的模型。然而,目标识别任务的巨大复杂性意味着,即使是像ImageNet这样的大型数据集也无法完全定义这个问题,因此模型还需要大量的先验知识来弥补数据的不足。卷积神经网络(Convolutional Neural Networks, CNNs)是一类满足这一需求的模型 [16, 11, 13, 18, 15, 22, 26]。通过调整其深度和宽度,可以有效控制CNN的容量。此外,CNN还能够对图像的统计性质(例如统计特性平稳性和像素依赖性的局部性)做出强有力且通常是正确的假设。因此,与同样层大小的标准前馈神经网络相比,CNN的连接数和参数显著减少,从而更容易训练,同时其理论最佳性能仅略有下降。
尽管CNN具有诸多吸引人的特性,且其局部架构相对高效,但在大规模高分辨率图像上的应用仍然代价高昂。幸运的是,当前的GPU结合高度优化的2D卷积实现,已足够强大,可以支持训练规模较大的CNN模型。此外,诸如ImageNet等新型数据集也提供了足够多的标注样本,从而避免了严重的过拟合问题。
精讲
我们在ILSVRC-2010和ILSVRC-2012竞赛 [2] 使用的ImageNet子集上,训练了当时最大规模的卷积神经网络之一,并取得了迄今为止在这些数据集上的最佳性能。
我们编写了高度优化的GPU实现,用于2D卷积及训练CNN所需的所有其他操作,并公开了这项实现。
我们的网络具有若干新的和不寻常的特性,这些特性提升了模型性能并缩短了训练时间,详见第3节。
由于网络规模较大,即使有120万标注训练样本,过拟合问题仍然显著,因此我们采用了多种有效的防过拟合技术,详见第4节。
最终网络包含五个卷积层和三个全连接层,这种深度结构至关重要:我们发现移除任何一个卷积层(每层的参数量不超过模型总参数量的1%)都会导致性能下降。网络规模主要受限于当前GPU的可用显存量和可接受的训练时间。我们使用两块GTX 580 3GB GPU训练模型,耗时约五到六天。所有实验结果表明,随着更快的GPU和更大规模数据集的出现,模型性能还有进一步提升的潜力。
主要贡献
- 训练了当时最大规模的CNN:在ImageNet数据集的ILSVRC-2010和ILSVRC-2012子集上,取得了迄今为止在这些数据集上的最佳性能。
- 开发了高度优化的GPU实现:包括2D卷积和训练CNN所需的所有其他操作,并公开了这些实现。
- 设计了新颖的网络特性:通过多个创新设计提升了模型性能并减少了训练时间,具体内容详见论文第3节。
- 解决了过拟合问题:尽管有120万标注样本,网络规模导致过拟合问题显著。为此采用了多种有效的防过拟合技术,详见论文第4节。
- 提出了深层网络结构的必要性:网络包含5个卷积层和3个全连接层。实验表明,移除任意卷积层都会导致性能下降,这表明深度结构对于模型至关重要。
此外,模型训练时间主要受限于GPU显存和计算能力。本网络在两块GTX 580 3GB GPU上训练耗时约5-6天。未来,随着更快的GPU和更大规模数据集的出现,模型性能还有进一步提升的空间。
三. the dataset-数据集
翻译
ImageNet 是一个包含超过 1500 万张标注高分辨率图像的数据集,涵盖大约 22,000 个类别。这些图像是从互联网上收集的,并通过 Amazon 的 Mechanical Turk 众包工具由人工标注完成的。从 2010 年起,作为 Pascal 视觉目标挑战赛的一部分,每年都会举办一个名为 ImageNet 大规模视觉识别挑战赛(ILSVRC)的年度竞赛。ILSVRC 使用了 ImageNet 的一个子集,每个类别大约包含 1000 张图像,共有 1000 个类别。总的来说,ILSVRC 包含大约 120 万张训练图像、5 万张验证图像以及 15 万张测试图像。
ILSVRC-2010 是唯一一个其测试集标签可用的版本,因此我们的大部分实验都在这个版本上进行。同时,由于我们也参与了 ILSVRC-2012 竞赛,在论文的第 6 节中,我们也报告了在该版本数据集上的实验结果,不过 ILSVRC-2012 的测试集标签不可用。
在 ImageNet 数据集上,通常会报告两种错误率:top-1 错误率和top-5 错误率。其中,top-5 错误率是指测试集中那些正确标签不在模型预测的前五个最可能标签中的图像比例。
ImageNet 数据集包含分辨率各异的图像,而我们的系统需要固定的输入维度。因此,我们将图像下采样至固定的分辨率 256 × 256。对于一个矩形图像,我们首先将其缩放,使得较短的一边长度为 256,然后从缩放后的图像中裁剪出中心 256 × 256 的区域。除了从每个像素中减去训练集的平均值外,我们没有对图像进行其他预处理。因此,我们的网络直接在像素的(经过中心化的)原始 RGB 值上进行训练。
内容总结
- ImageNet 数据集概况:
- 包含超过 1500 万张高分辨率标注图像,约覆盖 22,000 个类别。
- 图像来源于互联网,并通过 Amazon 的 Mechanical Turk 众包工具由人工完成标注。
- ILSVRC 竞赛:
- 从 2010 年起,每年举办 ImageNet 大规模视觉识别挑战赛(ILSVRC)。
- 使用了 ImageNet 的一个子集,包括 1000 个类别,每个类别约 1000 张图像。
- 数据集划分:约 120 万张训练图像、5 万张验证图像和 15 万张测试图像。
- 实验数据和错误率评估:
- ILSVRC-2010 是唯一一个测试集标签公开的版本,大部分实验基于此版本完成。
- ILSVRC-2012 的测试集标签不可用,但模型也参加了该竞赛,并在论文中报告了相关结果。
- 在 ImageNet 数据集中,通常使用两种错误率评估模型性能:
- Top-1 错误率:预测中最高概率的类别与真实标签不匹配的比例。
- Top-5 错误率:正确标签未包含在模型预测的前五个最可能类别中的比例。
- 图像预处理:
- 由于 ImageNet 图像分辨率不统一,为了适配网络输入,需将图像下采样至 256 × 256 的固定分辨率。
- 首先缩放图像使短边为 256,再裁剪出中心 256 × 256 的区域。
- 预处理仅包括从每个像素中减去训练集的平均值,未进行其他复杂操作。
- 网络直接在像素的中心化 RGB 值上进行训练。
四. The Architecture-网络结构
我们网络的架构包含 8 个学习层,其中包括 5 个卷积层和 3 个全连接层。以下将描述网络架构中一些新颖或不常见的特性。
3.1 ReLU Nonlinearity- 非线性激活函数
翻译
内容强调了使用**修正线性单元(ReLUs)**代替传统的饱和型非线性函数的优势。相比传统激活函数,ReLUs 加速了深度卷积神经网络的训练,使其在大型数据集和大规模模型上的学习更高效。此外,与其他替代激活函数相比,ReLUs 更突出在加速训练上的效果,而不仅仅是防止过拟合。ReLUs 的这种快速学习特性为大规模神经网络的实验提供了可能性,显著提升了训练效率和性能表现。
使用 ReLU 激活函数的四层卷积神经网络在 CIFAR-10 数据集上达到 25% 训练误差率的速度是使用 tanh 激活函数的等效网络的六倍。为了使训练尽可能快速,每个网络的学习率是独立选择的,且没有使用任何正则化方法。尽管这种加速效果会随着网络架构的不同而变化,但普遍情况下,使用 ReLU 激活函数的网络训练速度要比使用饱和型激活函数(如 tanh)的网络快几倍。
精讲
-
什么是饱和函数和非饱和函数
-
使用ReLU激活函数
前人也在使用ReLU是为了减少过拟合,但是这里AlexNet的目的是为了加速训练并提高大规模数据集上的学习效率。
3.2 Training on Multiple GPUs-用多个GPU训练
翻译
一块 GTX 580 GPU 只有 3GB 的内存,这限制了可以在其上训练的网络的最大尺寸。事实证明,120 万个训练样本足够训练出无法在单个 GPU 上适配的网络。因此,我们将网络分布在两个 GPU 上。当前的 GPU 特别适合跨 GPU 并行化,因为它们能够直接从彼此的内存中读取和写入数据,而无需通过主机内存。我们采用的并行化方案基本上是将一半的卷积核(或神经元)放在每个 GPU 上,还有一个额外的技巧:GPU 只在某些层之间进行通信。例如,第 3 层的卷积核从第 2 层的所有卷积核图中获取输入,而第 4 层的卷积核仅从第 3 层位于同一 GPU 上的卷积核图中获取输入。选择连接模式是一个跨验证问题,但这允许我们精确调整通信量,直到它成为可接受的计算量的一部分。最终的架构与 Ciresan 等人[5]使用的“柱状”卷积神经网络有些相似,只是我们的柱状结构不是独立的。与一个 GPU 上训练、每个卷积层中卷积核数量减半的网络相比,这种方案将我们的 top-1 和 top-5 错误率分别降低了 1.7% 和 1.2%。两个 GPU 的网络训练时间比单个 GPU 的网络稍短。
精讲
主要改进措施:
跨 GPU 并行化:将网络的卷积核分布在两个 GPU 上,使得可以训练更大的网络。
局部通信:GPU 只在某些层之间进行通信,减少了不必要的跨 GPU 数据传输,提高了计算效率。
精细调节通信量:通过精确调整层与层之间的通信量,使其成为计算量的可接受部分,优化了整体性能。
网络架构优化:该方案与 Ciresan 等人的 “柱状” CNN 有相似之处,但不同的是我们的柱状结构不是独立的。
性能提升:与单 GPU 上的网络相比,使用两个 GPU 训练的网络在 top-1 错误率上减少了 1.7%,top-5 错误率上减少了 1.2%。此外,两个 GPU 的网络训练时间比单个 GPU 更短。
3.3 Local Response Normalization-LRN
翻译
ReLU 激活函数的局部归一化方案,该方案旨在提高神经网络的泛化能力。ReLUs 不需要输入归一化来防止饱和,只要一些训练样本产生正输入,神经元就会有学习。然而,为了进一步提高性能,引入了响应归一化方法。该方法通过对神经元的输出进行规范化,结合不同卷积核的输出,实施了一种类似于真实神经元的侧抑制机制,鼓励神经元间的竞争。
具体的归一化公式如下,其中涉及对邻近卷积核的活动值进行加权求和,并调整超参数(如 k、n、α 和 β)。这项技术被称为“亮度归一化”,而不是“局部对比度归一化”,因为它不进行均值减法。
通过应用这种响应归一化,网络的 top-1 错误率减少了 1.4%,top-5 错误率减少了 1.2%。此外,在 CIFAR-10 数据集上的验证结果也证明了这一方法的有效性,使用归一化的网络比没有归一化的网络错误率更低。
精讲
- 大白话说明什么是 LRN(局部归一化)
LRN 就是让每个神经元的输出值,受到它周围神经元输出的影响。具体操作是:在一个神经网络的层里,对于每个神经元的输出,去看它附近的一些其他神经元的输出,然后进行一定的归一化处理。通过这种方式,某个神经元的输出如果太大,或者某些神经元的输出太强,就会被“压制”或者调整,以避免过度依赖个别神经元的激活。
这种方法有点像生物神经元的行为:当某些神经元的活动过于强烈时,其他神经元会通过“抑制”来进行平衡,使得网络的学习更加稳定。
简单理解为就是古代的削藩均田思想,不能让地方诸侯发展过大!!!
- LRN真的有效果吗???
随着深度学习技术的发展,现代的卷积神经网络(如ResNet、VGG等)在实践中已经很少使用LRN,原因有以下几点:
Batch Normalization(BN) 的崛起:BN作为一种更为通用且有效的归一化方法,已经取代了LRN。BN在处理梯度消失、加速训练等方面表现更好,并且可以应用于整个网络的训练中,而不局限于局部区域。因此,在现代深度网络中,BN已经成为了标准的做法,而LRN逐渐被淘汰。
效果不如BN显著:尽管LRN在AlexNet中有帮助,但相较于BN,它的效果并不是显著。BN能够在整个网络层面上进行归一化,减少了内部协变量偏移(internal covariate shift),并且在训练过程中对梯度的流动有更好的促进作用。
综上所述,LRN在AlexNet中确实有一定的作用,但在现代的深度学习框架中,由于BN的优势,LRN已经不再被广泛使用。在现在的实践中,BN被认为是更有效的选择。
3.4 Overlapping Pooling-重叠池化
翻译
在卷积神经网络(CNN)中,池化层对相邻的神经元组的输出进行汇总。传统上,相邻池化单元所汇总的邻域并不重叠。更准确地说,池化层可以被看作是一个池化单元的网格,池化单元之间相距s个像素,每个池化单元汇总一个大小为z × z的邻域,邻域的中心是池化单元的位置。如果我们设置s = z,就得到了传统的局部池化,这在CNN中常见。如果我们设置s < z,就得到了重叠池化。这是我们在整个网络中使用的方案,其中s = 2,z = 3。与非重叠池化方案s = 2,z = 2(输出维度相同)相比,这种方案减少了0.4%的top-1误差率和0.3%的top-5误差率。我们在训练过程中通常观察到,使用重叠池化的模型更不容易发生过拟合。
精讲
- 传统池化与重叠池化:
- 池化层在卷积神经网络(CNN)中用于总结同一卷积核图中的相邻神经元的输出。
- 传统的池化方法中,相邻的池化单元之间的区域不重叠(例如,3×3的池化区域,且池化单元之间没有重叠)。
- 在重叠池化中,池化单元之间有重叠。具体来说,当池化单元的间隔(s)小于池化区域的大小(z)时,便形成了重叠池化。
- 重叠池化的实现:
- 在该网络中,使用了重叠池化,设置了间隔为2个像素(s = 2)和池化区域大小为3×3(z = 3)。
- 性能提升:
- 与传统的非重叠池化(设置为s = 2, z = 2)相比,重叠池化将top-1和top-5错误率分别降低了0.4%和0.3%。
- 过拟合问题:
- 在训练过程中,使用重叠池化的模型相比非重叠池化的模型,更难发生过拟合现象。
3.5 Overall Architecture-整体网络架构
现在我们准备描述我们CNN的整体架构。该网络包含8层带有权重的层,前五层是卷积层,剩下的三层是全连接层。最后一个全连接层的输出被送入一个1000类的softmax层,该层输出一个关于1000个类别标签的概率分布。我们的网络最大化多项式逻辑回归目标,等价于最大化训练样本中正确标签在预测分布下的对数概率的平均值。
第二、第四和第五卷积层的卷积核只与上一层中位于同一GPU上的卷积核图相连接。第三卷积层的卷积核与第二层中的所有卷积核图相连接。全连接层中的神经元与上一层中的所有神经元相连接。响应归一化层位于第一和第二卷积层之后。最大池化层位于每个响应归一化层和第五卷积层之后。ReLU非线性函数应用于每个卷积层和全连接层的输出。
第一卷积层使用96个大小为11×11×3的卷积核对224×224×3的输入图像进行滤波,步幅为4个像素(即相邻神经元之间感受野中心的距离)。第二卷积层将第一卷积层的(经过响应归一化和池化后的)输出作为输入,使用256个大小为5×5×48的卷积核进行滤波。第三、第四和第五卷积层相互连接,中间没有池化或归一化层。第三卷积层有384个大小为3×3×256的卷积核,连接到第二卷积层的(归一化、池化后的)输出。第四卷积层有384个大小为3×3×192的卷积核,第五卷积层有256个大小为3×3×192的卷积核。全连接层每层有4096个神经元。
精讲
网络结构
总层数:网络包含8层带权重的层,其中前五层是卷积层,后三层是全连接层。最终输出通过1000类的softmax层生成类分布。
目标:该网络优化多项式逻辑回归目标,最大化训练案例中正确标签的对数概率的平均值。
卷积层设计
第1层卷积:输入为224×224×3的图像,使用96个11×11×3的卷积核,步幅为4像素。该层输出特征图后,进行响应归一化和池化。
第2层卷积:输入是经过第一层卷积、响应归一化和池化的输出,使用256个5×5×48的卷积核进行处理。
第3层卷积:使用384个3×3×256的卷积核,连接到第二层卷积的输出,并且没有中间的池化或归一化层
第4层卷积:使用384个3×3×192的卷积核,接入第3层的输出。
第5层卷积:使用256个3×3×192的卷积核,接入第4层的输出,之后跟随池化层。
卷积层的连接策略
层间连接:第二、第四、第五层的卷积核仅连接到前一层的同一GPU上的核映射。第三层的卷积核连接到第二层的所有核映射。
全连接层设计
全连接层:包含3层,每层有4096个神经元。每一层的神经元都与上一层的所有神经元相连。
非线性与归一化
ReLU激活函数:对每个卷积层和全连接层的输出应用ReLU非线性激活。
响应归一化:应用于第1层和第2层卷积之后。
最大池化:应用于第1、2层卷积之后的响应归一化层,以及第5层卷积之后。
输出层
Softmax层:最后一层通过1000类的softmax层进行分类输出,生成一个关于1000个类标签的概率分布。
核心设计特点
多层卷积:网络通过多层卷积层提取逐步复杂的特征。
分层连接:卷积层间的连接方式不同,确保资源的高效使用,部分层间连接基于GPU映射。
全连接层:深层的全连接层提供强大的分类能力。
归一化与池化:对响应进行归一化处理,随后进行池化操作,确保网络稳定性和信息抽象能力。
问题: 为什么池化层不能被列为单独的一层呢???
池化层(Max-pooling)虽然是网络中的一部分,但它并没有被单独列为“层”。这通常是因为池化层的主要作用是降低卷积层输出的空间尺寸,同时保留最重要的信息,它不包含学习的参数或权重。池化层更多地被视为一种操作,而不是一种具有可训练权重的“层”。
五. Reducing Overfitting-减少过拟合
我们的神经网络架构有 6000 万个参数。尽管 ILSVRC 的 1000 个类使每个训练示例对从图像到标签的映射施加了 10 位的约束,但事实证明,这不足以在不发生大量过拟合的情况下学习如此多的参数。下面,我们描述了对抗 overfitment 的两种主要方法。
4.1 Data Augmentation-数据增强
翻译
最简单和最常见的减少图像数据过拟合的方法是通过使用保持标签不变的变换来人工扩展数据集。我们采用了两种不同形式的数据增强,这两种方法都可以通过非常少的计算从原始图像生成变换图像,因此这些变换图像无需存储在磁盘上。在我们的实现中,变换图像是通过Python代码在CPU上生成的,而GPU则在训练前一个批次的图像。因此,这些数据增强方案实际上是计算上免费的。
第一种数据增强形式包括生成图像平移和水平反射。我们通过从256×256的图像中随机提取224×224的补丁(及其水平反射)来实现这一点,并在这些提取的补丁上训练网络。这使得我们的训练集大小增加了2048倍,尽管这些训练样本之间高度相关。如果没有这种方案,我们的网络会遭遇严重的过拟合,这将迫使我们使用更小的网络。在测试时,网络通过提取五个224×224的补丁(四个角补丁和中心补丁)以及它们的水平反射(因此总共十个补丁),并对这十个补丁在网络softmax层上做出预测,然后对预测结果进行平均。
第二种数据增强形式是改变训练图像中的RGB通道强度。具体来说,我们对ImageNet训练集中的RGB像素值进行主成分分析(PCA)。对于每一张训练图像,我们向其中添加主成分的倍数,大小与相应的特征值成比例,并乘以从高斯分布中抽取的一个随机变量,均值为零,标准差为0.1。这种方案大致捕捉了自然图像的一个重要特性,即物体的身份对光照强度和颜色的变化是不变的。此方案将top-1错误率降低了超过1%。
精讲
数据增强目的
通过数据增强减少图像数据的过拟合,避免使用过小的网络。
数据增强形式:
-
第一种形式
:图像平移和水平反射
- 从256×256图像中随机提取224×224的补丁及其水平反射,扩展训练集大小。
- 训练时,使用2048倍扩展的数据集,但生成的训练样本高度相关。
- 测试时,从图像中提取5个224×224的补丁(4个角补丁和1个中心补丁)及其水平反射,共10个补丁,平均softmax预测结果。
-
第二种形式
:RGB通道强度调整
- 对ImageNet训练集中的RGB像素进行主成分分析(PCA)。
- 向每张训练图像中添加主成分的倍数,大小与特征值成比例,且与高斯随机变量成比例。
- 每次训练时,RGB图像的强度调整只会随机一次,直到下次该图像再次用于训练。
- 这种方法模拟自然图像中的光照强度和颜色变化,减少top-1错误率超过1%。
数据增强的实现:
- 数据增强是通过Python代码在CPU上进行的,GPU在训练当前批次时不需要存储变换图像,计算成本几乎为零。
效果:
- 这两种数据增强方式有效地减少了过拟合,显著提高了网络的性能,尤其是在防止过拟合和降低错误率方面。
问题: 什么是PCA(主成分分析)
大白话讲就是: 首先数据有很多的维度,那么我要把这些数据降维到我想要的维度去分析,比如文章的图像有很多的维度,我只要分析这个图像的RGB这个维度
问题: 为什么只是水平翻转,没有上下翻转
你想想一下,一张大象的图片,上下翻转后我们还能认为他是大象吗
4.2 Dropout-随机失活
翻译
将多个不同模型的预测结果结合起来是减少测试误差的一个非常成功的方法[1, 3],但对于已经需要数天训练的大型神经网络来说,这种方法似乎成本太高。然而,最近提出了一种非常高效的模型结合方法,它只在训练过程中增加大约两倍的计算成本。这种新技术被称为“dropout”(丢弃法)[10],其核心思想是在每个隐藏神经元的输出上,以0.5的概率将其置为零。被“丢弃”的神经元不会参与前向传播,也不会参与反向传播。因此,每次输入时,神经网络都会随机采样不同的架构,但所有这些架构共享相同的权重。该技术减少了神经元之间复杂的共同适应,因为神经元不能依赖于特定的其他神经元的存在。因此,神经元被迫学习更为健壮的特征,这些特征在与其他神经元的许多不同随机子集一起使用时仍然有效。在测试时,我们使用所有的神经元,但将它们的输出乘以0.5,这是一种合理的近似方法,类似于对由许多dropout网络产生的预测分布取几何平均值。
我们在图2的前两层全连接层中使用了dropout。如果不使用dropout,我们的网络会表现出严重的过拟合。使用dropout大约需要双倍的迭代次数才能收敛。
精讲
模型组合的效果:
- 结合多个不同模型的预测结果可以有效减少测试误差,但对大型神经网络来说成本过高。
Dropout技术:
- 定义:Dropout是通过以0.5的概率将每个隐藏神经元的输出置为零。这些“丢弃”的神经元不参与前向传播和反向传播。
- 原理:每次输入时,网络会随机选择不同的架构,但所有架构共享相同的权重。
- 效果:减少了神经元之间的复杂共同适应,迫使神经元学习更鲁棒的特征,这些特征能够在不同随机子集的神经元中表现良好。
训练和测试时的行为:
- 训练时:Dropout增加了计算量,但提高了网络的泛化能力,减少了过拟合。
- 测试时:使用所有神经元,并将它们的输出乘以0.5,这是对多个Dropout网络预测分布几何平均值的合理近似。
效果与性能:
- Dropout应用于前两层全连接层,显著减少了网络的过拟合问题。
- 使用Dropout后,训练所需的迭代次数大约增加了一倍。
怎么理解 随机失活
这里借鉴了生物学理念的有性繁殖, 在全连接层,神经元之间之间的连接是无性繁殖,但是现在随机失活,导致的结果就是神经元与神经元之间是随机组合的,这里我们就看成有性繁殖,可以大大增强训练效果
不要问我是怎么知道的, 因为AlexNet的三作是Hinton,他之前是学过生物学的,并且随机失活是他创造的
六. Details of learning-训练细节
翻译
我们使用随机梯度下降(SGD)训练模型,批次大小为128个样本,动量为0.9,权重衰减为0.0005。我们发现,这么小的权重衰减对于模型的学习非常重要。换句话说,权重衰减不仅仅是一个正则化项,它还减少了模型的训练误差。
我们在每一层的权重初始化时,采用了均值为0、标准差为0.01的高斯分布。对于第二、第四和第五卷积层以及全连接隐藏层中的神经元偏置,我们将其初始化为常数1。这种初始化通过为ReLU提供正输入,加速了学习的初期阶段。其余层的神经元偏置初始化为常数0。
我们对所有层使用相同的学习率,并在整个训练过程中手动调整。我们遵循的启发式规则是,当验证错误率在当前学习率下停止改进时,将学习率除以10。学习率初始值为0.01,并在训练过程中调整了三次。
我们用大约90轮训练,遍历120万张图像的训练集,训练过程大约需要五到六天,使用了两块NVIDIA GTX 580 3GB的GPU。
精讲
训练方法:
- 使用随机梯度下降(SGD)进行训练。
- 批次大小:128个样本。
- 动量:0.9。
- 权重衰减:0.0005,用于减少模型的训练误差而非仅仅作为正则化项。
权重初始化:
- 每层权重从均值为0、标准差为0.01的高斯分布中初始化。
- 第二、第四和第五卷积层及全连接隐藏层的神经元偏置初始化为常数1,以加速学习初期阶段。
- 其余层的神经元偏置初始化为常数0。
学习率调整:
- 所有层使用相同的学习率,并在训练过程中手动调整。
- 启发式规则:当验证错误率停止改进时,将学习率除以10,但是现在我们已经不用在这样做了,我们使用比较平滑的函数去做,比如cos函数
- 初始学习率为0.01,并在训练过程中减少三次。
训练过程:
- 使用约90轮训练,遍历120万张图像的训练集。
- 训练过程大约需要五到六天,使用两块NVIDIA GTX 580 3GB的GPU。
七. Results-结果
翻译
我们在ILSVRC-2010上的结果总结如表1所示。我们的网络在测试集上的top-1和top-5错误率分别为37.5%和17.0%。在ILSVRC-2010比赛中,最佳的表现是通过一种方法获得的,该方法对六个不同特征上训练的稀疏编码模型的预测结果进行平均,错误率为47.1%和28.2%;此后,最佳的公开结果是45.7%和25.7%,该方法通过对两种密集采样特征计算的Fisher向量(FVs)进行训练的两个分类器的预测结果进行平均得出[24]。
我们还将我们的模型提交到了ILSVRC-2012比赛,并在表2中报告了我们的结果。由于ILSVRC-2012的测试集标签没有公开,我们无法报告所有尝试模型的测试错误率。在本段剩余部分,我们将验证和测试错误率互换使用,因为根据我们的经验,它们的差异不超过0.1%(见表2)。本文描述的CNN在ILSVRC-2012上的top-5错误率为18.2%。将五个相似的CNN的预测结果进行平均,得到的错误率为16.4%。我们训练了一个CNN,增加了一个位于最后池化层上的第六个卷积层,用于对整个ImageNet Fall 2011发布数据集(包含1500万张图像,22000个类别)进行分类,然后在ILSVRC-2012上进行“微调”,得到的错误率为16.6%。将两个在整个Fall 2011发布数据集上预训练的CNN的预测结果与上述五个CNN的预测结果进行平均,得到的错误率为15.3%。比赛中的第二好成绩是通过对多个在不同类型的密集采样特征上训练的分类器的预测结果进行平均得到的,错误率为26.2%[7]。
最后,我们还报告了在包含10,184个类别和890万张图像的ImageNet Fall 2009版本上的错误率。在这个数据集上,我们遵循文献中的惯例,使用一半图像用于训练,另一半用于测试。由于没有建立的测试集,我们的划分与之前作者使用的划分有所不同,但这对结果几乎没有影响。我们在该数据集上的top-1和top-5错误率分别为67.4%和40.9%,这些结果是通过上述网络得到的,但增加了一个位于最后池化层上的第六个卷积层。该数据集上的最佳公开结果为78.1%和60.9%[19]。
精讲
- ILSVRC-2010:
- 本网络的top-1和top-5错误率分别为37.5%和17.0%。
- 最佳已发布结果分别为45.7%和25.7%。
- ILSVRC-2012:
- 本网络top-5错误率为18.2%,五个CNN预测平均值为16.4%。
- 最佳结果为15.3%。
- ImageNet Fall 2009:
- 本网络的top-1和top-5错误率分别为67.4%和40.9%。
- 最佳已发布结果为78.1%和60.9%。
整体来说,本文网络在ILSVRC-2010和2012竞赛中表现优秀,但在ImageNet Fall 2009数据集上稍逊色。
6.1 Qualitative Evaluations-定性分析
- 卷积核:
- 网络学习了多种频率和方向选择性的卷积核,以及不同的颜色斑块。
- 两块GPU的专门化现象:GPU 1的卷积核主要是颜色无关的,而GPU 2的卷积核则主要是颜色特定的。
- 定性评估:
- 网络在测试图像上的前五个预测大多是合理的,即使是图像中的物体偏离中心,网络仍然能够识别。
- 对于某些图像(如格栅、樱桃),网络对于图像的关注焦点存在一定的歧义。
- 特征激活:
- 通过计算最后一层4096维隐藏层的特征激活,可以衡量图像之间的相似度。
- 相似的图像在激活向量的欧几里得距离上较小,但视觉上检索到的图像通常在姿势或细节上有所不同。
- 图像检索:
- 为了提高检索效率,建议使用自编码器将特征向量压缩为短的二进制代码,这样可以提高图像检索的效率,优于直接对原始像素应用自编码器的方法。
左侧图:八张ILSVRC-2010测试图像和我们的模型认为最可能的五个标签。正确的标签写在每张图片下面,分配给正确标签的概率也用红色条显示(如果恰好位于前5位)。
右侧图:第一列中有五幅ILSVRC-2010测试图像。剩下的列显示了在最后一个隐藏层中生成特征向量的六个训练图像,这些特征向量与测试图像的特征向量之间的欧氏距离最小(简单来说可以理解为倒数第二层提取出的特征向量最相似的几个图像,也就是说我们的神经网络在最后第二层输出的特征,在语义空间里面表现的非常好)。
八 Discussion—讨论
总结如下:
- 深度卷积神经网络的表现:研究表明,使用纯监督学习的大型深度卷积神经网络在一个具有挑战性的数据库上取得了突破性的结果。
- 卷积层的作用:网络性能在去除任何一个卷积层后都会下降,尤其是去除中间层时,网络的top-1表现会下降约2%。这表明网络的深度对于取得这些结果至关重要。
- 无监督预训练的潜力:尽管实验中没有使用无监督预训练,但研究者认为无监督预训练有助于提升网络表现,尤其是在计算能力足够的情况下,能够增加网络规模而不增加标注数据的需求。
- 未来方向:尽管当前实验结果随着网络规模和训练时间的增加而有所提高,但仍有许多进步空间,目标是接近人类视觉系统的推理时间路径。最终,研究者希望能在视频序列上使用非常大且深的卷积网络,利用时间结构来提供缺失或不明显的信息。