ImageNet Classification with Deep Convolutional Neural Networks(AlexNet)
目前机器学习是物体检测方法的有效方法。为了提高他们的性能,我们可以收集更大的数据集,学习更强大的模型,使用更先进的技术来防止过拟合。直到最近,标记好的图像数据集是相对小的,大约数万个图像(例如,NORB,Caltech-101/256和CIFAR-10/100)。简单的识别任务使用这样大小的数据集是被解决相当好的。特别是使用标签保留变换进行数据扩充时效果更好。例如,在MNIST数字识别任务的当前最
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
我们训练了一个大型深度卷积神经网络,将ImageNet LSVRC-2010比赛中的120万个高分辨率图像分类为1000个不同的类别。在测试数据上,我们实现了37.5%和17%的top-1和top-5的错误率,这比之前的最新技术水平要好的多。具有6000万个参数和650,000个神经网络由五个卷积层组成,卷积后面是池化层,三个全连接层具有最终的1000路softmax。为了加快训练速度,我们使用了非饱和神经元和一种非常有效的GPU来实现卷积运算。为了减少全连接层的过拟合现象,我们采用了最近开发的称为“dropout”的正则化方法,这被证明是非常有效的。我们还在ILSVRC-2012竞赛中输入了该模型的变体,并获得了15.3的top-5测试错误率。而第二好的参赛者则达到了26.2%。
1. Introduction(介绍)
目前机器学习是物体检测方法的有效方法。为了提高他们的性能,我们可以收集更大的数据集,学习更强大的模型,使用更先进的技术来防止过拟合。直到最近,标记好的图像数据集是相对小的,大约数万个图像(例如,NORB,Caltech-101/256和CIFAR-10/100)。简单的识别任务使用这样大小的数据集是被解决相当好的。特别是使用标签保留变换进行数据扩充时效果更好。例如,在MNIST数字识别任务的当前最好的错误率接近人类的水平(<0.3%)。但是物体在现实设置中表现出相当大的可变性,因此要学会识别它们,有必要使用更大的训练集。事实上,小图像数据集的缺点已被广泛指出(例如,Pinto等人),但是最近才有可能收集具有数百万图像的标记数据集。新的更大的数据集包括LabelMe和ImageNet,后者由数万个完全分割的图像组成,ImageNet包含超过150万个标记的高分辨率图像,超过22,000个类别。
要学习数百万图像中的数千个对象,我们需要一个具有大量学习能力的模型。然而,对象识别任务的巨大复杂性意味着即使是像ImageNet这样大的数据集也无法指定这个问题,因此我们的模型也应该有许多先验知识来补偿我们没有的所有数据。卷积神经网络构成了一类这样的模型。他们的能力可以通过改变他们的深度和宽度来控制,并且他们还对图像的性质(即统计的平稳性和像素依赖性的局部性)做出强有力且大多数正确的评估。因此,与具有类似大小的层的标准前馈神经网络相比,CNN具有更少的连接和参数,因此它们更容易训练,而它们的理论上最佳性能仅仅略微更差。
尽管CNN具有吸引人的特性,并且尽管它们的本地架构相对有效,但是它们在大规模应用于高分辨率图像方面仍然有相当的大的代价。幸运的是,当前的GPU与高度优化的2D卷积实现相结合,足以促进有趣的大型CNN的训练,而最新的数据集如ImageNet包含足够的标记示例来训练此类模型而不会出现严重的过度拟合。
本文的具体贡献如下:我们迄今为止在ILSVRC-2010和ILSVRC-2012竞赛中使用的ImageNet子集训练了要给最大的卷积神经网络并在这个数据集过去报道的结果中是最好的结果。我们编写了一个高度优化的2D卷积GPU实现和训练卷积神经网络中固有的其他操作,我们公开提供(http://code.google.com/p/cuda-convnet/)。我们的网络包含许多新的和不寻常的功能,可以改善其性能并缩短训练时间,详见第三节。我们的网络过大产生过拟合是一个很严重的问题,即使有120万个标记的训练样本也是如此,因此,我们使用集中有效的技术来防止过度拟合,如第4节所述。我们最终网络包含5个卷积层和3个全连接层,这个深度似乎很重要:我们发现删除任何卷积层(每个卷积层不超过模型参数的1%)导致性能下降。
最后,网络的大小主要受当前GPU可用内存量以及我们愿意容忍的训练时间所限制。我们的网络在两台GTX 580 3GB GPU上进行训练需要五到六天的时间。我们所有的实验都表明,只需等待更快的GPU和更大的数据集可用,我们的结果就可以得到改善。
2. The Dataset(数据集)
ImageNet具有超过1500万个标记的高分辨率图像的数据集,并且具有22,000个类别。这些图像是从网上收集的,并由人类使用亚马逊的Mechanical Turk众包工具手工进行标记。从2010年开始,作为Pascal视觉对象挑战赛的一部分,举办了名为ImageNet大规模视觉识别挑战赛(ILSVRC)的年度比赛。ILSVRC使用Image net的一个子集,在1000个类别中分别拥有大约1000个图像。总计,大约有120万个训练图像,50,000个验证图像和150,000个测试图像。
ILSVRC-2010是唯一可以获得测试集标签的ILSVRC版本,因此这是我们执行大部分实验的版本。由于我们也在ILSVRC-2012竞赛中输入了我们的模型,因此我们在第六节中报告了此版本数据集的结果,其中测试集标签不可用。在ImageNet上,习惯上报告两个错误率:top-1和top-5,其中前5个错误率是测试图像的分数,正确的标签不属于模型认为最可能的5个标签之中。
ImageNet由可变分辨率图像组成,而我们的系统需要恒定的输入维度。因此,我们将图像下采样到256x256的固定分辨率。给定矩形图像,我们首先重新缩放图像,使得较短边的长度为256,然后从结果图像中裁剪出中央256x256的图像。我们没有以任何其他方式预处理图像,除了从每个像素减去训练集上的平均活动。因此,我们在像素的(居中)原始RGB值上训练我们的网络。
3. The Architecture(结构)
我们网络的体系结构如图2所示。它包含8个学习层-5个卷积层和3个全连接层。下面,我们将介绍我们网络架构的一些新颖或不寻常的功能。第3.1-3.4节根据我们对其重要性的估计进行排序,其中最重要的是第一部分。
3.1 ReLU Nonlinearity(ReLU 非线性)
将神经元的输出f建模为输入x的函数的标准方法是或
。就使用梯度下降的训练时间而言,这些饱和非线性函数比非饱和非线性函数
要慢得多。继Nair和Hinton之后,我们将具有这种非线性的神经元称为整流线行单元(ReLUs)。具有ReLU的深度卷积神经网络比具有tanh单元相同的网络快几倍。图1展示了这一点,图1显示了特定四层卷积神经网络在CIFAR-10数据集上达到25%训练误差所需的迭代次数。该图表明,如果我们使用传统的饱和神经元模型,我们就无法用这种大型神经网络进行实验。
图1:具有ReLU(实现)的四层卷积神经网络在CIFAR-10上达到25%的训练错误率,比具有tanh神经元的等效网络(虚线)快六倍。每个网络工作的学习率都是独立选择的,以便尽快进行训练。没有采用任何形式的正则化。此处演示的效果的大小因网络架构而异,但具有ReLU的网络始终比具有饱和神经元的等效网络快几倍。
我们不是第一个考虑CNN中传统神经元模型替代品的人。例如,Jarrett等人声称非线性使用对比归一化类型随后跟着平均池化在Caltech-10数据集上工作相当好的。但是,在此数据集上,主要关注的是防止过度拟合,因此它们观察到的效果与我们在使用ReLU时报告的训练集的加速能力不同。更快的学习对在大型数据集上训练的大型模型的性能有很大影响。
3.2 Training on Multiple GPUs(在多个GPU上训练)
单个GTX 580 GPU只有3GB内存,这限制了可以在其上训练的网络的最大尺寸。事实证明,120万个训练样本足以训练网络,但是网络太大以至于不能放在GPU上训练。因此,我们将网络分布在两个GPU上。当前的GPU特别适合跨GPU并行化,因为它们能够直接读取和写入彼此的内存,而无需通过主机内存。我们采用的并行化方案基本上将一半内核(或神经元)放在每个GPU上,还有一些额外的技巧:GPU仅在某些层中进行通信。这意味着,例如,第三层的内核从第二层的所有内核映射获取输入。然而,第4层中的内核仅从位于同一GPU上的第三层中的那些内核映射获取输入。选择联通模式是交叉验证的一个问题,但这使我们能够精确调整通信量,直到它是计算量的可接受部分。
由此产生的结构有点类似于Cire,san等人采用的"柱状"CNN,除了我们的列不是独立的(见图2)。与在一个GPU上训练的每个卷积层中具有一半内核的网络相比,该方案将我们的top-1和top-5错误率分别降低了1.7%和1.2%。与单GPU网络相比,双GPU网络的训练时间略短。
(在最终的卷积层中,单GPU网络实际上具有与双GPU网络相同数量的内核。这是因为大多数网络参数都在第一个完全连接的层中,他将最后一个卷积层作为输入。因此,为了使两个网具有大致相同数量的参数,我们没有将最终卷积层的大小减半(也不是随后的全连接层)。因此,这种比较偏向于单GPU网络,因为它大于双GPU网络的”一半大小“。)
3.3 Local Response Normalization(局部响应归一化)
ReLU具有理想的属性,它们不需要输入归一化来防止它们饱和。如果至少一些训练样本对ReLU产生积极的输入,那么将在该神经元中进行学习。但是,我们仍然发现以下局部归一化方案有助于推广。表示一个神经元应用在位置(x,y)的第i个内核并且应用ReLU非线性计算的激活值,响应的归一化激活
表达式为:
其中总和在相同空间位置的n个”相邻“内核映射上运行,N是层中内核的总数。内核映射的顺序当然是任意的,并且在训练开始之前确定。这种响应归一化实现了一种横向抑制形式,其受到真实神经元的启发。从而在使用不同内核计算的神经元输出之间产生大的活跃的竞争。常数是超参数,它们的值使用验证集决定;我们使用
。我们在某些层中应用这个归一化在应用ReLU非线性激活之后。
该方案与Jarrett等人的局部对比度归一化方案有一些相似之处,但我们更正确地称为”亮度归一化“,因为我们不减去平均激活值。响应归一化将我们的top-1和top-5错误率分别降低了1.4%和1.2%。我们还验证了该方案对CIFAR-10数据集的有效性:四层CNN在没有归一化的情况下实现了13%的测试错误率,在归一化方面实现了11%。(由于空间限制,我们无法详细描述此网络,但它有此处提供的代码和参数文件精确指定:http://code.google.com/p/cuda-convnet/)
3.4 Overlapping Pooling(搭建池化层)
在CNN中池化层总结了相同内核映射中相邻神经元组的输出。传统上,由相邻池化单元汇总的邻域不重叠。更确切的说,池化层可以被认为是由间隔s个像素的合并单元的网格组成,每个合并单元总结了以合并单元的位置为中心的大小为的邻域。如果我们设置s=z,我们获得CNN中常用的传统局部池化。如果我们设置s<z,我们获得重叠的池化。这是我们在整个网络中使用的,s=2和z=3。与非重叠方案s=2,z=2相比,该方案分别将top-1和top-5错误率分别降低0.4%和0.3%,从而产生等效维度的输出。我们通常在训练期间观察到具有重叠池的模型发现这样出现过拟合现象更难一些。
3.5 Overall Architecture(全部结构)
现在我们准备描述CNN的整体架构。如图2所示,网络包含具有权重的八层,前五层是卷积层,剩下的三层是全连接层。最后一个全连接层的输出被送到1000路的softmax中,产生1000个类别标签上的分布。我们的网络最大化多项逻辑回归目标,这相当于在预测分布下最大化训练案例中正确标签的对数概率的平均值。
图2:我们的CNN架构的例证,明确显示两个GPU之间的任务划分。一个GPU在图的顶部运行图层部分,而另一个GPU在底部运行图层部分。GPU仅在某些层进行通信。网络的输入是150,528维,网络剩余层中的神经元数量由253,440-186,624-64,896-64,896-43,264-4096-4096-1000.
第二,第四和第五卷积层的内核仅连接到位于同一GPU上的前一层中的那些内核映射上(参见图2)。第三卷积层的内核连接到第二层中的所有内核映射。全连接层中的神经元连接到前一层的所有的神经元。响应归一化层跟着第一和第二卷积层。3.4节中描述的最大池化层跟在响应归一化层和第五卷积层。ReLU非线性激活应用于每个卷积和全连接层的输出。第一个卷积层用96个大小为的内核过滤
输入图像,步长为4个像素(这是内核图中相邻神经元的感受野中心之间的距离)。第二个卷积层将第一个卷积层的(响应归一化和池化)输出作为输入,并用256个大小为
的内核对其进行过滤。第三,第四和第五卷积层彼此连接而没有任何中间池化层或归一化层。第三卷积层具有384个大小为
的内核,其连接到第二卷积层(归一化,池化)输出。第四卷积层具有384个大小为
的内核,第五卷积层具有256个大小为
的内核。全连接层各有4096个神经元。
4. Reducing Overfitting(减少过拟合)
我们的神经网络架构有6000万个参数。尽管ILSVRC的1000个类别使得每个训练样本对从图像到标签的映射施加了10位约束,但是不足以证明学习如此多的参数而没有相当大的过度拟合。下面,我们描述了我们对抗过度拟合的两种主要方式:
4.1 Data Augmentation(数据增强)
减少图像数据过度拟合的最简单和最常用的方法是使用标签保留变换人工放大数据集。我们采用两种不同形式的数据增强,这两种形式都允许以非常小的计算从原始图像生成变换图像,因此转换后的图像不需要存储在磁盘上。在我们的实现中,转换的图像实在CPU上的Python代码中生成的,而GPU正在训练前一匹图像。
第一种形式的数据增强包括生成图像平移和水平反射。我们通过从图像中提取随机
补丁(及其水平反射)并在这些提取的补丁上训练我们的图像来实现这一点(这是为什么输入图像的大小是
维的原因)。这使我们的训练集的大小增加了2048倍,尽管由此产生的训练样本当然是高度相互依赖的。如果没有这种方案,我们的网络就会遭受严重的过度拟合,这将迫使我们使用更小的网络。在测试时,网络通过通过提取五个
补丁(四个角的补丁和中心补丁)以及它们的水平反射(因此总共十个补丁)进行预测,并在十个补丁上对网络的softmax层进行预测求平均值。
第二种形式的数据增强包括改变训练图像中RGB通道的强度。具体来说,我们在整个ImageNet训练集中对RGB像素值执行PCA。对于每个训练图像,我们添加多个找到的主成分,其幅度与响应的特征值成正比乘以从高斯绘制的随机变量,其中平均值为零,标准差为0.1。因此对于每个TRGB图像像素我们添加以下数量
。其中,
和
分别是RGB像素值的
协方差矩阵的第i个特征向量和特征值,
是上述的随机变量。对于特定训练图像的所有像素,每个
仅被绘制一次,直到该图像再次被用于训练,此时它被重新绘制。该方案近似的捕获自然图像的重要特性,即对象身份对于照明的强度和颜色的变化是不变的。该方案将top-1错误率降低了1%以上。
4.2 Dropout(随机失活)
结合许多不同模型的预测是减少测试误差的一种非常成功的方法,但对于已经需要训练数天的大型神经网络来着这种方法的代价太大了。然而,有一种非常有效的模型组合版本,在训练期间仅花费大约两倍的时间。最近引入的技术称为“dropout”,包括将每个隐藏神经元的输出设置为零,概率为0.5.以这种方式“删除”的神经元对前向传播没有贡献,并且不参加反向传播。因此,每次输入时,神经网络都会采样不同的架构,但所有这些架构都会共享权重。该技术减少了神经元的复杂共同适应,因为神经元不能依赖于特定其他神经元的存在。因此,它被迫学习更强大的特征,这些特征与其他神经元的许多不同随机子集一起使用时很有用的。在测试时,我们使用所有神经元但是将它们的输出乘以0.5,这是采用多指数dropout网络产生的预测分布的几何平均值的合理近似值。
我们在图2中的前两个全连接层中使用了“dropout”。没有“dropout”,我们的网络出现了严重的过拟合现象。“dropout”使收敛所需的迭代次数加倍。
5. Details of learning(学习的细节)
我们使用随机梯度下降训练我们的模型,批量大小为128个样本,动量为0.9,权重衰减为0.0005.我们发现,这种少量的重量衰减对于模型学习很重要。换句话说,这里的权重衰减不仅仅是一个正则化器:它减少了模型的训练错误。权重的更新规则是
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)