https://www.cnblogs.com/wanghui-garcia/p/13897169.html
这里的批量处理大小是指,单块GPU上的mini batch,还是指total batch size?梯度累积能解决这个问题吗
DeiT在建立Vision Transformer的训练策略时,强调重复增强是性能的关键:
[4] Maxim Berman, Herve J ´ egou, Andrea Vedaldi, Iasonas Kokkinos, and Matthijs ´Douze. Multigrain: a unified image embedding for classes and instances. arXiv preprint arXiv:1902.05509, 2019.
[25] Elad Hoffer, Tal Ben-Nun, Itay Hubara, Niv Giladi, Torsten Hoefler, and Daniel Soudry. Augment your batch: Improving generalization through instance repetition. In Conference on Computer Vision and Pattern Recognition, 2020.
MultiGrain: a unified image embedding for classes and instances
arXiv:1902.05509 [pdf, other]
Authors: Maxim Berman, Hervé Jégou, Andrea Vedaldi, Iasonas Kokkinos, Matthijs Douze
摘要:MultiGrain是一种网络架构,它可以生成紧凑的向量表示,既适合于图像分类,也适合于特定对象检索。它建立在标准的分类主干上。网络的顶部生成一个包含粗粒度和细粒度信息的嵌入,这样就可以根据对象类、特定对象或扭曲副本来识别图像。我们的联合训练很简单:我们最小化分类的交叉熵损失和排名损失,以确定两幅图像在数据增强之前是否相同,而不需要额外的标签。MultiGrain的一个关键组成部分是一个池化层,它利用高分辨率图像和以较低分辨率训练的网络。当反馈给线性分类器时,学习到的嵌入提供了最先进的分类精度。例如,我们使用在Imagenet上学习的ResNet-50获得79.4%的top-1精度,这比自动增强方法绝对提高了+1.8%。当与余弦相似性比较时,相同的嵌入在与中等分辨率的图像检索的状态下执行。
1.引言
图像识别是计算机视觉的核心,每年都有数十种新方法被提出,每种方法都针对问题的特定方面进行了优化。从粗略到精细,我们可以区分(a)类的识别,其中人们寻找特定类型的对象,而不考虑类内变化;(b)实例,其中人们寻找特定对象,尽管观察条件发生变化;(c)副本,其中人们寻找特定图像的副本,尽管编辑。虽然这些问题在许多方面相似,但标准做法是对每种情况使用专门的、因而不兼容的图像表示。
专业化表示可能是准确的,但在某些应用程序中会构成严重的瓶颈。例如,考虑图像检索,其目的是将查询图像匹配到其他图像的大型数据库。通常,人们希望通过按类、实例或副本匹配查询来搜索具有多粒度的同一数据库。图像检索系统的性能主要取决于它使用的图像嵌入。这些方法在数据库大小、匹配和索引速度以及检索精度之间进行了权衡。采用多个嵌入(针对每种查询类型进行了狭义优化)意味着增加资源使用率。
在本文中,我们提出了一种新的表示方法,即多粒度表示法,它可以同时完成这三项任务,而不考虑语义粒度的差异,见图1。我们通过为多个任务联合训练图像嵌入来学习多粒度。由此产生的表示是紧凑的,优于狭义训练的嵌入。
实例检索具有广泛的工业应用,包括检测受版权保护的图像和基于样本的不可见对象识别。在需要处理数以十亿计的图像的环境中,获得适合于多个识别任务的图像嵌入是很有意义的。例如,图像存储平台除了检测同一对象的副本或实例之外,还可能对输入图像执行一些分类。与所有这些任务相关的嵌入有利地减少了每个图像的计算时间和存储空间。
从这个角度来看,仅为分类而训练的卷积神经网络(CNN)已经朝着通用特征提取器迈进了一大步。事实上,我们可以学习图像嵌入,同时有利于分类和实例检索是令人惊讶的,但并不矛盾。事实上,任务之间存在逻辑依赖关系:根据定义,包含相同实例的图像也包含相同的类;复制的图像包含相同的实例(In fact, there is a logical dependence between the tasks:images that contain the same instance also contain, by definition, the same class; and copied images contain the same instance. )。这与多任务设置形成对比,在多任务设置中,任务处于竞争状态,因此难以组合。相反,类、实例和副本一致性都会导致嵌入,这些嵌入应该在特征空间中保持紧密。尽管如此,在不同的情况下,相似度是不同的,分类要求对外观变化具有更大的不变性,对小图像细节具有复制检测敏感性。
为了学习满足不同权衡的图像表示,我们从现有的图像分类网络开始。我们使用广义平均层,将空间激活映射转换为固定大小的向量。最重要的是,我们证明了这是学习一种能够在测试时适应不同分辨率并提供更高精度的架构的有效方法。这规避了学习网络以获得更大输入分辨率所需的大量工程和计算工作[18]
分类和实例识别目标的联合训练分别基于交叉熵和对比损失。值得注意的是,实例识别是免费学习的,而不使用特定于实例识别或图像检索的标签:我们只需使用图像的标识作为标签,并将数据增强作为生成每个图像的不同版本的一种方法。
总之,我们的主要贡献如下:
• 我们引入了多粒度架构,该架构输出包含不同粒度级别的图像嵌入。我们的双重分类+实例目标本身提高了分类精度。
• 我们表明,这一收益的一部分是由于批量处理策略,其中每个批量包含其图像的重复实例,这些实例使用不同的数据增强,以实现检索损失;(We show that part of this gain is due to the batching strategy, where each batch contains repeated instances of its images with different data augmentations for the purpose of the retrieval loss;)
• 我们结合了一个受图像检索启发的池化层。当提供高分辨率图像时,它可以显著提高分类精度。
总的来说,我们的架构在分类和图像检索方面都具有竞争性的性能。值得注意的是,我们报告说,在最先进的基础上,通过ResNet-50网络,Imagenet的精确度显著提高。
论文的结构如下。第二节介绍了相关工作。第3节介绍了我们的架构、训练过程,并解释了我们如何在测试时调整分辨率。第四节报告了主要实验。
2.相关工作
图像分类。
大多数设计用于广泛任务的计算机视觉架构都利用了最初设计用于分类的主干架构,如残差网络[17]。主干结构的改进最终转化为其他任务的更高精度[16],如LSVRC的15挑战的检测任务所示。虽然最近的架构[21,22,46]已经显示出一些额外的收益,但其他研究领域已经成功地进行了研究。例如,最近的一个趋势[30]是通过利用更大的弱注释数据训练集来训练高容量网络。据我们所知,Imagenet ILSVRC 2012基准上的最新技术仅适用于在Imagenet训练数据上从头开始学习的模型,目前由庞大的AmoebaNet-B架构[23](557M参数)持有,该架构采用480x480图像作为输入。
在本文中,我们选择了ResNet-50[17](25.6M参数),因为在图像分类和实例检索的许多工作中,文献中都采用了这种架构。
图像搜索:从局部特征到CNN。
“图像搜索”是一项通用检索任务,通常与更具体的问题相关,并对其进行评估,如地标识别[25,33]、特定对象识别[31]或复制检测[8],其目标是在大型图像采集中找到与查询最相似的图像。在本文中,“图像检索”将指实例级检索,其中对象实例尽可能广泛,即不限于架构物,如牛津/巴黎基准。有效的图像检索系统依赖于精确的图像描述符。通常,查询图像由嵌入向量描述,任务相当于在嵌入空间中搜索该向量的最近邻居。可能的改进包括细化步骤,如几何验证[33]、查询扩展[4,42]或数据库端预处理或增强[41,44]。
传统上,局部图像描述符聚合为全局图像描述符,适合在反向数据库中进行匹配,如原始的词袋模型[39]。在ImageNet上出现了用于大规模分类的卷积神经网络(CNN)[28,37]之后,很明显,在分类数据集上训练的CNN对于各种视觉任务(包括实例检索[1,9,35])来说是非常有竞争力的图像特征提取器。
特定对象检索的特定架构建立在常规分类主干上,并进行了修改,因此池化阶段提供了更多的空间局部性,以便处理小对象和杂波。例如,各种数据集上实例检索的竞争基线是R-MAC图像描述符[43]。它聚集了从CNN中提取的区域汇集的特征。作者表明,这种专门化的池化结合PCA白化[24]可以在图像区域之间进行有效的多对多比较,对图像检索非常有益。Gordo等人[10,11]表明,使用排名损失对外部图像检索数据集上的这些区域聚合表示进行端到端的微调可以显著改进实例检索。
Radenovic等人[34]表明,R-MAC池化被广义平均池化(见第3.1节)有利地取代,广义平均池化是指在整个图像上按指数p指数化的特征的空间池化。指数化将图像中感兴趣点上的特征定位,取代R-MAC中的区域聚集。
多任务训练是一个活跃的研究领域[27,47],其动机是观察到深层神经网络可用于广泛的视觉任务[35]。此外,经过训练的深层神经网络具有较高的可压缩性[15]。在某些情况下,通过共享参数在不同任务之间共享神经网络的能力,通过允许数据集和低级特征之间的互补训练,有助于学习。尽管在UberNet[27]等多任务视觉网络方面取得了一些成功,但多任务网络的设计和训练仍然涉及许多启发式方法。正在进行的工作包括为有效共享参数找到合适的架构[36],并为此类网络找到合适的优化参数,以摆脱单任务单数据集端到端梯度下降的传统设置,并有效地加权梯度,以便在所有任务中获得性能良好的网络[13]。
数据增强是大规模视觉应用训练的基石[28],它可以提高泛化能力并减少过度拟合。在随机梯度下降(SGD)优化设置中,我们表明在一个优化批量中包含同一图像的多个数据增强实例,而不是在该批量中只有不同的图像,显著增强了数据增强的效果,并提高了网络的泛化能力。Hoffer等人同时引入了一种相关的批量增强(BA)取样策略[19]。在对神经网络进行大规模分布式优化时,当增加批量的大小时,他们表明,使用批量中图像的数据增强副本填充这些较大的批量可以产生更好的泛化性能,并通过减少数据处理时间更有效地使用计算资源。如第3.3节所述,并在我们的分类结果(第4.4节)中强调,我们表明,使用相同的批量大小,即每批量具有较少数量的不同图像,可以获得此采样方案下的性能增益。我们认为这个方案的重复增强(RA)在批量处理中作为一种方式,以提高在优化过程中数据增强的效果。我们的结果表明,除了大规模分布式训练应用之外,RA是一种普遍感兴趣的技术,用于提高神经网络的泛化能力。(Data augmentation is a cornerstone of the training in largescale vision applications [28], which improves generalization and reduces over-fitting. In a stochastic gradient descent (SGD) optimization setting, we show that including multiple data-augmented instances of the same image in one optimization batch, rather than having only distinct images in the batch, significantly enhances the effect of data-augmentations and improve the generalization of the network. A related batch augmented (BA) sampling strategy was concurrently introduced by Hoffer et al. [19]. When augmenting the size of the batches in a large-scale distributed optimization of a neural network, they show that filling these bigger batches with data-augmented copies of the image in the batch yields better generalization performance, and uses computing resources more efficiently through reduced data processing time. As discussed in section 3.3 and highlighted in our classification results (section 4.4), we show that a gain in performance under this sampling scheme is obtained using the same batch size, i.e., with a lower number of distinct images per batch. We consider this scheme of repeated augmentations (RA) within the batch as a way to boost the effect of data augmentation over the course of the optimization. Our results indicate that RA is a technique of general interest, beyond large-scale distributed training applications, for improving the generalization of neural networks.)
3. 架构设计
我们的目标是开发一个卷积神经网络,既适用于图像分类和实例检索。在当前的最佳实践中,用于类别和实例识别的架构和训练过程在很大程度上有所不同。
本节描述了表1中总结的这些技术差异,以及我们解决这些差异的方法。这将我们引入一个统一的架构,如图2所示,我们以端到端的方式为这两个任务联合训练。
3.1. 空间池化运算符
本节讨论最后一个全局空间池化层。局部池化算子,通常是最大池化算子,可以在大多数卷积网络的各个层中找到,以实现对小平移的局部不变性。相比之下,全局空间池化将卷积主干产生的三维激活张量转换为向量。
分类
在早期模型中,如LeNet-5[29]或AlexNet[28],最终的空间池化只是激活图的线性化。因此,它对绝对位置非常敏感。最近的架构,如ResNet和DenseNet,采用了平均池化,这是置换不变性的,因此提供了更全局的平移不变性。
图像检索需要更多的局部几何信息:特定的对象或地标在视觉上更相似,但任务更容易受到混乱的影响,并且给定的查询图像没有专门用于它的特定训练数据。这就是池化操作符试图支持更多局部性的原因。接下来我们讨论广义平均池化算子。
让x∈ rc×W×H是卷积神经网络为给定图像计算的特征张量,其中C是特征通道数,H和W分别是地图的高度和宽度。我们用u表示∈ Ω = {1,…,H}×{1,…,W}是地图中的一个“像素”,由c表示通道,由xcu表示相应的张量元素:x=[xcu]c=1..c,u∈Ω. 广义平均池化(GeM)层计算张量中每个通道的广义平均值。形式上,GeM嵌入是由p>0作为参数给出的。将该指数设置为p>1会增加合并特征贴图的对比度,并聚焦于图像的显著特征[2,3,7]。GeM是分类网络中常用的平均池化(p=1)和空间最大池化层(p=1)的推广∞). 它在原始R-MAC中用作最大池化的近似值[7],但直到最近[34]才证明它在图像检索方面与R-MAC具有竞争力。
据我们所知,本文是第一个在图像分类设置中应用和评估GeM池化的论文。更重要的是,我们在本文后面展示了调整指数是在所有任务的训练时间和测试时间之间更改输入图像分辨率的有效方法,这解释了为什么图像检索从中受益考虑到这项任务使用的是更高分辨率的图像,om将不再需要它。
3.2.训练目标
为了将分类和检索任务结合起来,我们使用了一个由分类损失和实例检索损失组成的联合目标函数。两个分支结构如图2所示,下面将详细介绍。
分类损失。
对于分类,我们采用标准的交叉熵损失∈ rd是由深度网络计算的图像i,wc的嵌入∈ c类线性分类器的参数R d∈ {1,…,C},和yi是该图像的基本真理类
其中W=[wc]c=1..c。为了简单起见,我们省略了它,但通过向特征向量添加一个恒定通道,分类层的偏差被纳入其权重矩阵中。
检索损失。
对于图像检索,两个匹配图像(正对)的嵌入距离应小于非匹配图像(负对)的嵌入距离。这可以通过两种方式实现。对比损失[14]要求正对之间的距离小于阈值,负对之间的距离大于阈值。相反,三元组丢失要求图像更接近正同级而不是负同级[38],这是图像三元组的相对属性。这些损耗需要调整多个参数,包括对和三联体的采样方式。这些参数有时很难调整,特别是对于三重态损耗。
Wu等人[45]提出了解决这些困难的有效方法。给定一批量图像,他们将其嵌入重新规范化为单位球体,根据嵌入相似性对负对进行采样,并将这些对用于边缘损失,这是对比损失的一种变体,分享了三重损失的一些好处。
更详细地说,给定图像i,j∈ B与嵌入件ei、ej一批量∈ R d,margin损失表示为
其中D(ei,ej)=kei/keik− ej/kej kk是归一化嵌入之间的欧氏距离,如果两个图像匹配且−1否则,α>0表示边距(一个常量超参数),β>0表示参数(在训练期间与模型参数一起学习),控制嵌入向量占用的嵌入空间的体积。由于标准化,D(ei,ej)相当于余弦相似性,在白化(第3.4节)之前,余弦相似性也用于检索。
损失(3)在正负对(i,j)的子集上计算∈ B2通过采样[45]选择,其中为图像i选择负j的条件概率为p(j | i)∝ 最小{τ,q−1(D(ei,ej))}·1{yij=−1},
其中τ>0是一个参数,q(z)∝ z d−2 (1 − z 2/4)d−3.2是取决于嵌入维度d的PDF
距离加权采样和边际损失的使用非常适合我们的联合训练设置:该框架允许相对较小的批量大小(|B|∼ 80到120个实例),而只需要批量处理中每个实例的少量正片图像(3到5个),无需精心调整参数或离线采样。
共同损失与架构。
联合损失是由系数λ加权的分类和回收损失的组合∈ [0, 1]. 对于批量处理B的图像,联合损失写为
i、 例如,损失通过相应总和中的项目数进行标准化。
3.3. 重复增强的批量(RA)
在这里,我们提出只使用一个训练数据集进行图像分类,并通过数据增强来训练实例识别。其基本原理是数据增强生成另一个包含相同对象实例的图像。此方法除了标准分类数据集已有的标签外,不需要额外的标签。
我们引入了一种新的采样方案,用于训练SGD和数据增强,我们称之为重复增强RA。在RA中,我们通过从数据集中采样个不同的图像来形成一个图像批量,并通过一组数据增强将它们转换次以填充该批量。这样,如果图像和图像是来自同一训练图像的不同数据增强版本,实例级标签(编者注:该标签应该是用于检索任务而不是图像分类任务。)与SGD中的标准采样方案的关键区别在于,样本不是互相独立的,因为同一图像的增强版本是高度相关的。将RA方案与标准方案用相同的批量大小和学习率进行比较:当批量较小时,该策略会降低性能,但对于较大的批量,RA的性能优于标准i.i.d.方案(标准独立同分布方案)。这与[19 ]的观察不同,后者也考虑在一个批量中重复样本,但同时增加批量大小。(编者注:E. Hoffer, T. Ben-Nun, I. Hubara, N. Giladi, T. Hoefler, and D. Soudry. Augment your batch: better training with larger batches. arXiv e-prints, page arXiv:1901.09335, Jan. 2019)
我们推测,RA的样本相关采样的好处是有助于学习特征,这些特征对重复图像之间的唯一差异(增强)是不变的。相比之下,通过标准SGD采样,同一图像的两个版本只在不同的epoch出现。对理想化问题(idealized problem)的研究在补充材料A中说明了这一现象。
3.4. 白化PCA
为了将通过数据增强学习到的特征传输到标准检索数据集,我们采用了PCA白化步骤,这与之前在图像检索中的工作一致[11,24]。变换特征之间的欧氏距离相当于输入描述符之间的马氏距离。这是在训练网络后,使用未标记图像的外部数据集完成的。
PCA白化的效果可以在分类层的参数中消除,因此白化后的嵌入可以用于分类和实例检索。具体地说,假设e是一个图像嵌入向量,并且
wc类c的权重向量,使得hwc、ei是分类器的输出,如等式(2)所示。白化运算Φ可以写成[11]Φ(e)=S
埃克− µ
给定白化矩阵S和定心向量µ;因此
其中w0 c=S−1> wc和b 0 c=hwc,µi是c类的修正重量和偏差。我们观察到,通过损失[5]诱导去相关不足以确保特征能够很好地概括,这与之前的工作[11,34]一致。
3.5. 输入大小
图像分类的标准做法是调整输入图像的大小并将其居中裁剪到相对较低的分辨率,例如224×224像素[28]。这样做的好处是内存占用更小,推理速度更快,并且如果将输入裁剪为公共大小,则可以对其进行批量处理。另一方面,图像检索通常依赖于图像中更精细的细节,因为可以在各种尺度下看到实例,并且仅覆盖少量像素。因此,目前用于图像检索的性能最好的特征提取器通常在最大侧使用800[11]或1024[34]像素的输入大小,而不会将图像裁剪成正方形。这对于联合分类和检索网络的端到端训练是不切实际的。
相反,我们以标准的224×224分辨率训练我们的架构,并且仅在测试时使用更大的输入分辨率。这是可能的,因为我们的架构有一个关键优势:使用池化指数p和分辨率s训练的网络可以在更大的分辨率s下进行评估∗ > s使用更大的池化指数p∗ > p、 参见第4.4节中的验证。
用于交叉验证p的代理任务∗ .
为了选择指数p∗ , 适合于所有任务,我们在分类和检索之间创建了一个综合检索任务。我们从ImageNet的训练集中抽取了2000张图像,每类别2张,并使用前面描述的“完整”数据增强创建了每个图像的5个增强副本。
我们以类似于UKBench[31]的方式评估了8月份的检索准确度,准确度范围为0到5,具体取决于前5个增强中有多少个位于前5位。我们选择表现最好的p∗ ∈ {1,2,…,10}在8月,作为λ和s的函数提供以下选择∗ :
最优p∗ 8月获得的数据在检索和分类之间进行了权衡。在实验上,我们观察到其他选择适合设置该参数:微调参数p∗ 单独使用训练
通过交叉熵损失的反向传播在给定分辨率下的输入提供了类似的结果和p值∗ .
4. 实验与结果
在展示数据集之后,我们提供了一个参数研究以及我们在图像分类和检索方面的结果。
4.1. 实验装置
基础架构和训练设置。
卷积主干是ResNet-50[17]。SGD开始时的学习率为0.2,总共训练120个epoch,在30、60、90epoch,学习率降低了10倍(标准设置[32])。批量大小设置为512,epoch定义为T=5005次迭代的固定迭代次数。对于均匀批量采样,一个epoch对应于训练集上的数据过两遍(编者注:在纯分类任务中是过一遍);当使用RA和m=3时,一个epoch对应于训练集数据的大约2/3(编者注:在纯分类任务中应该是1/3)。所有分类基线都使用这一较长的时间表进行训练,以便进行公平比较。
数据增强。
我们使用standard flips, random resized crops [20], random lighting noise and a color jittering of brightness, contrast and saturation [28, 20]。我们将这组增强称为“完整”,详见补充C。如表2所示,在我们选择的计划和数据增强下,我们的网络达到76.2%的top-1验证误差,仅使用交叉熵和均匀批量采样进行训练。该数字是报告的ResNet-50网络[12,17]的高端精度,没有精心编制的正则化术语[48]或数据增强[6]。
池化指数。
在我们的网络的端到端训练期间,我们考虑在第3.1节的GEM层中的池化指数的两个设置:我们设置p=1或p=3。p=1对应于分类架构中使用的平均池化。相关文献[34]和我们在现成分类网络上的初步实验表明,p=3的值提高了标准基准上的检索性能。图3说明了这种选择。通过设置p=3,可高置信度检测车辆,且无虚假检测。Boureau等人[3]分析了稀疏特征的平均池化和最大池化。他们发现,当集合特征的数量增加时,使其更加稀疏是有益的,这与我们在这里所做的观察一致。
输入大小和裁剪。
如第3.5节所述,我们在224×224像素的裁剪上训练我们的网络。为了进行测试,我们在分辨率为s的情况下进行了多粒度嵌入计算的实验∗ = 224, 500, 800. 决议s∗ = 224,我们遵循经典的图像分类协议“分辨率224”:将图像的最小边调整为256,然后提取224×224中心裁剪。决议s∗ > 224,我们转而遵循图像检索中常见的协议,将图像的最大一侧调整为所需的像素数,并在矩形图像上评估网络,而不进行裁剪。
Margin loss和批量采样。
我们每批量使用m=3个数据增强重复。我们使用[45]的默认margin损失超参数(详情见补充B)。如[45]中所述,距离加权采样在用于训练的4个GPU中的每个GPU上独立执行。(编者注:[45] C.-Y. Wu, R. Manmatha, A. J. Smola, and P. Krahenb ¨ uhl. ¨Sampling matters in deep embedding learning. In Proc. ICCV, 2017. 4, 6)
数据集。
我们在ImageNet-2012训练集上训练我们的网络,该训练集包含120万张标记为1000个对象类别的图像[37]。在该数据集的50000张验证图像上报告了分类精度。对于图像检索,我们报告了假日数据集[25]的平均精度,并在必要时手动旋转图像,如先前对该数据集的评估[10]。我们还报告了UKB对象识别基准[31]的准确性,该基准包含4个不同视点下的2550个对象实例;每个图像作为一个查询,在嵌入空间中查找其4个最近邻;对所有图像的正确邻居数进行平均,得到最大分数4。我们还报告了我们的网络在拷贝检测设置中的性能,表明INRIA Copydays数据集“强”子集的平均精度[8]。我们添加了从YFCC100大规模未标记图像收集中随机抽取的10K干扰物图像[40]。我们称这种组合为C10k。
PCA白化变换是根据YFCC100的20K图像特征计算的,与C10k干扰物不同。
4.2. 用池化指数扩展分辨率
作为我们的参考方案,我们使用RA采样和池化指数p=3以224x224分辨率对网络进行训练。当对具有相同224x224分辨率的图像进行测试时,这在Imagenet上提供了76.9%的top-1验证精度,比非RA基线高0.7%,见表2。
现在,我们在测试时间喂养更大的图像,也就是说,我们考虑分辨率。∗ > 224并改变指数p∗ 试验时,6=p=3。图4a和4b显示了不同分辨率下ImageNet验证的分类精度和Holidays的检索精度,以及测试池化指数p的不同值∗ . 正如所料,在s∗ = 224,分类精度最高的合并指数是训练网络的指数,p∗ = 3.注意,在更大范围内进行测试需要指数p∗ > p、 用于分类和检索。在下文中,我们采用8月交叉验证获得的值,见第3.5节。
4.3. 折衷参数分析
现在我们分析折衷参数λ的影响。注意,该参数并不直接反映训练期间两个损失项的相对重要性,因为它们不是齐次的:λ=0.5并不意味着它们具有同等的重要性。图5通过测量在第0和120个时段通过网络传播的梯度反向平均范数,分析了分类和保证金损失项的实际相对重要性。可以看出,λ=0.5意味着分类在训练开始时的权重略大。分类术语在训练结束时占主导地位,这意味着网络已经学会取消数据增强。
就性能而言,λ=0.1导致分类精度差。有趣的是,中间λ=0.5时的分类性能更高(s时为77.4%)∗ = 224)比λ=1,见表2。因此,边际损失导致分类任务的性能提高。
我们在下面的实验中设置λ=0.5,因为它在实际分辨率s下提供了最佳分类精度∗ = 224和500像素。作为参考,我们还报告了一些λ=1的结果。
4.4. 分类结果
从现在起,我们的多粒度网络将以s=224的分辨率进行训练,指数p=1(标准平均池化)或GeM池化中的p=3。对于每一个评估决议∗ = 224500800,相同的指数p∗ 根据第3.5节选择,产生用于分类和检索的单个嵌入。表2列出了分类结果。从我们的基线Resnet-50(p=1,s=224),“完整”数据增强(76.2%top-1精度)到多粒度模型(p=3,λ=0.5,s=500)(78.6%top-1),分类性能有了很大改善。我们确定了这一改进的四个来源:
1.重复增强:添加RA批量取样(第3.3节)可产生+0.6%的改善(p=1)。
2.边际损失:检索损失有助于数据增强的推广效果:+0.2%(p=1)。
3.p=3合并:GeM at training(第3.1节)允许保证金损失产生更大的影响,这得益于功能的本地化程度提高:+0.4%。
4.扩展分辨率:在分辨率为500的情况下进行评估,可为p=3多粒度网络增加+1.2%,达到78.6 top-1精度。这是通过p=3训练实现的,该训练产生更稀疏的特征,在不同分辨率下更具普遍性,并且通过p=3训练实现∗ 池化自适应—如果没有它,此分辨率下的性能仅为78.0%。
p∗ 在更高分辨率下进行评估的选择有其局限性:在800像素时,由于特征提取器的训练和测试规模之间存在较大差异,准确率下降到77.2%(76.2%,无p∗ 适应)。
AutoAugment[6](AA)是一种使用强化学习技术学习数据增强的方法,以提高ImageNet上分类网络的准确性。我们直接集成算法[6]在其Resnet-50模型上训练得到的数据增强,该算法在数据集上使用270次的长调度,批量大小为4096。
我们观察到,这种长时间的训练对AA生成的增强有更大的影响。因此,我们使用一个较长的时间表,即每个epoch7508次迭代,将批量大小保持在| B |=512。
我们的方法受益于此数据增强:在分辨率224,p=3,λ=0.5时,多粒度达到78.2%的top-1精度。据我们所知,这是在该分辨率下进行训练和评估时报告的Resnet-50的最佳top-1精度,显著高于单独使用AutoAugment[6]报告的77.6%或混合[48]报告的76.7%。在测试时使用更高的分辨率进一步提高了精度:我们在分辨率为500时获得79.4%的top-1精度。我们调整池化指数以适应更大分辨率的策略仍然有效,并且显著优于在ImageNet上以训练分辨率224学习的ResNet-50的最新性能。
4.5. 检索结果
我们在表3中给出了检索结果,在补充材料(D)中给出了消融研究和拷贝检测结果。我们的多粒度网络提高了与Resnet-50基线相关的所有数据集的精度,以获得可比分辨率。重复增强(RA)也是这方面的一个关键因素。
我们比较了没有使用带注释的检索数据集的基线。[10,11]通过R-MAC池化提供现成的网络精确度。MultiGrain在可比分辨率下与他们的结果进行了比较∗ =800). 在Holidays,它们的精度达到93%以上,但这需要分辨率s≥ 1000像素。
同样值得注意的是,我们在分辨率为s时达到了合理的检索性能∗ = 500,这是一个有趣的操作点,相对于传统的推理分辨率s=800–1000进行检索。事实上,在16个处理器内核上向前传递Resnet-50时,分辨率为500时需要3.80秒,而分辨率为1024时需要18.9秒(慢5倍)。由于时间的二次增加,以及由多粒度计算的单个嵌入,我们的解决方案特别适合于大规模或低资源的视觉应用。
为了进行比较,我们还报告了UKB和C10k数据集上的一些较旧的相关结果,这些结果与MultiGrain不具有竞争力。神经编码[1]是最早研究深度特征检索的著作之一。Fisher向量[26]是一种使用局部SIFT描述符的组合方法。
在分辨率为500时,我们可以看到,有裕度损失(λ=0.5)的结果略低于没有裕度损失(λ=1)的结果。这部分是由于从8月份的任务到检索数据集中观察到的变化的转移有限。
5.结论
在这项工作中,我们引入了多粒度,一种用于图像分类和实例检索的统一嵌入。MultiGrain依赖于一个经典的卷积神经网络主干,在训练时有一个顶部有两个头的GeM层。我们发现,通过调整此池化层,我们能够在推理时提高图像的分辨率,同时在训练时保持较小的分辨率。我们已经证明,多粒度嵌入可以很好地进行分类和检索。有趣的是,与使用相同卷积主干获得的所有结果相比,“多粒度”还为纯分类设置了新的技术状态。总的来说,我们的结果表明检索和分类任务可以相互受益。
我们方法的一个实现是开源的:https://github.com/facebookresearch/multigrain
致谢。我们感谢何恺明提供了有用的反馈和参考。Maxim Berman是由研究基金会佛兰德(FWO)通过项目编号G0A27 16N支持。PSI–ESAT承认公平合作计划捐赠的GPU服务器。
补充材料
我们报告了一些不适合主要论文的额外实验和结果。第A节显示了训练简单玩具模型时数据增强批量(data-augmented batches)的效果。B和C部分列出了我们的方法中使用的一些超参数的值。D部分给出了检索设置中的一些更详细的烧蚀结果。最后,第E节说明了如何使用MultiGrain的成分来提高现成预训练ConvNet的准确性,而几乎不需要额外的训练成本。它在imagenet-2012上获得了具有公共可用权重的convnet的最佳报告分类结果。
A.数据增强批量:玩具模型(Data-augmented batches: toy model)
我们在第3.3节和第4.3节中观察到,尽管图像多样性有所降低,但使用数据增强批量对我们的架构(ResNet-50主干)进行训练,相对于普通均匀采样方案而言,效果有所改善。
即使在没有排名三重损失( ranking triplet loss)的情况下,这一观察结果仍然成立,否则所有情况都是相同的:每个epoch的迭代次数、epoch数、学习速率计划和批量大小相同。作为一个例子,图A.1显示了我们的网络在交叉熵下训练的验证精度的演变,使用我们的训练计划和p=1池化,批量大小为512,使用第4.1节介绍了数据增强,分别使用均匀批量与批量采样(uniform batches vs. with batch sampling.)。虽然与均匀采样变量相比,初始阶段的批量多样性减少,但从长远来看,数据增强的强化效应弥补了这一点,并使批量增强达到更高的最终精度。
由于我们观察到,即使对于纯图像分类任务,这种性能也会更好,因此一个有趣的问题是,这种优势是特定于我们的架构和训练方法(batch-norm等),还是更普遍适用?此后,我们分析了一个线性模型和综合分类任务,似乎与第二个假设一致。
我们考虑一个理想化的模型,使用标准随机梯度下降,在同一批量中包含同一图像的不同数据增强实例。我们创建了合成训练集D,其如图A.2中的点所示,其中N=100个正训练点和N=100个负训练点是通过二维高斯分布采样:
其中是真值标签。我们以这种方式采样一个测试集。
我们考虑用SGD训练一个SVM:
使用Hinge损失:
我们考虑沿x轴的对称:
这是因为标签不变的数据增强适合我们的合成数据集。我们使用一次通过大小为4N的数据增强数据集,使用大小为2的批量训练SVM(A.2)。(We train the SVM (A.2) using one pass through the data-augmented dataset D¯ of size 4N, using batches of size 2.)
这两个优化计划之间的唯一区别是批量处理样本并提交给优化器的顺序。我们考虑两个批量采样策略(The only difference between the two optimization schedules is the order in which the samples are batched and presented to the optimizer. We consider two batch sampling strategies):
• 均匀采样:我们从D′中随机采样该批量的元素,无需更换;
• 配对采样:我们通过配对D'中的一个随机元素及其数据增强来生成批量,从D'中删除这两个元素。
图A.3显示了对这两种情况下的迭代精度的评估,在100次运行中取平均值。很明显,在一批量中配对数据增强对加速了该模型的收敛。
这个理想化的实验表明,在某些情况下,重复增强方案提供了优化和泛化提升,并增强了数据增强的效果。
B. Margin损失超参数
表B.1给出了我们的模型训练期间使用的边际损失的超参数值
C.数据增强超参数
表C.1给出了我们实验(第4.1节)中使用的完整数据增强中的转换及其参数。
D.检索中多颗粒的附加结果和烧蚀研究
表D.1报告了多颗粒结构的其他结果,以及分析每个组件影响的烧蚀研究。
正如主要论文中已经报道的,对于某些数据集,不使用三重态损失(λ=1)的选择与我们的一般选择(λ=0.5)一样好或更好。当然,嵌入不再是多用途的。总的来说,我们的架构中采用的不同元素(RA和多粒度特定的层)仍然比简单地使用激活提供了显著的改进,并且在相同的分辨率/复杂性方面与最新技术具有竞争力。
注意,自动增强数据增强不能很好地转移到检索任务。这可以用它们对Imagenet分类的特异性来解释。这表明,如果需要对分类和检索数据集进行单一嵌入,则数据增强的特定选择存在局限性。学习专门用于检索任务的AutoAugment肯定会有所帮助,但也可能会导致不太通用的嵌入。因此,数据增强是多用途嵌入的一个限制因素:改进一个任务(如分类)会影响其他任务的性能。
E.以更高分辨率评估现成分类器
在本节中,我们将使用标准平均池化(p=1)训练的现成预训练分类网络提供一些额外的分类结果。
如第3.5节和第4.2节所述,我们的贡献之一是评估分类器网络的策略,该分类器网络在标度s下使用GeM池化训练,在更高分辨率s下使用指数p训练∗ 和适应指数p∗ . 它也可用于预训练网络。
评估量表s∗ , 我们使用第3.5节中描述的替代策略来选择p∗ : 我们微调参数p∗ 通过随机梯度下降,对来自imagenet的训练图像上的交叉熵损失进行反向传播,重新缩放到所需的输入分辨率。与此输入分辨率下的完全微调相比,此策略具有有限的内存占用,因为在到达池化层之前,反向传播只需在最终分类层上进行,从而可以有效地计算p的梯度∗ . 在实验中,我们还发现该过程收敛于数千个训练样本,而分类层的微调需要在整个训练集上进行多个数据增强的epoch。
使用SGD对批量的| B |=4(非裁剪)图像进行微调,动量为0.9,初始学习率lr(0)=0.005,在多项式学习率衰减下衰减
使用imax时,为总迭代次数。
我们从训练集中选择50000张图像(每个类别50张)进行微调,并在这个简化的数据集上进行一次传递。我们使用Cadene/pretrained-models.pytorch GitHub repository1中现成的预训练ConvNet。表E.1概述了结果验证精度。我们看到每个网络都有一个规模和p的选择∗ 这比标准评估更好。
这些网络没有使用p>1的GeM池化进行训练;正如我们的分类结果(表2)所示,我们发现这是确保更高尺度不敏感度和更高分辨率下更好性能的另一个关键因素。正如我们在使用ResNet-50主干网的多粒度架构的主要实验中所做的那样,当使用p>1池化从零开始训练时,这些网络可能会达到更高的值,并添加重复的增强和边际损失。然而,在这些大型网络上运行训练实验的成本要高得多。因此,我们将此留给今后的工作。
下一篇论文
[25] Elad Hoffer, Tal Ben-Nun, Itay Hubara, Niv Giladi, Torsten Hoefler, and Daniel Soudry. Augment your batch: Improving generalization through instance repetition. In Conference on Computer Vision and Pattern Recognition, 2020.
增强批量处理:通过实例重复改进泛化
大批量SGD对于深度神经网络的规模化训练具有重要意义。然而,如果没有微调超参数计划,模型的泛化可能会受到阻碍(without fifine-tuning hyper parameter schedules, the generalization of the model may be hampered.)。我们建议使用批量增强:使用不同的数据增强在同一批量中复制样本实例。批量处理增强充当正则化器和加速器,提高了优化步骤固定预算的泛化和性能扩展(Batch augmentation acts as a regularizer and an accelerator, increasing both generalization and performance scaling for a fifixed budget of optimization steps)。我们分析了批量增加对梯度方差的影响,并表明它在经验上改善了各种网络和数据集的收敛性。我们的结果表明,批量增强减少了必要的SGD更新次数,以达到与最新技术相同的精度。总的来说,这种简单而有效的方法允许同时使用更多的计算资源,从而实现更快的训练和更好的泛化。
1.引言
深度神经网络训练是一个计算密集的问题,其性能内在地受到随机梯度下降(SGD)算法顺序性的限制。在该算法的一个常见变体中,在每一步使用一个批量的样本,进行梯度计算,累积结果以计算下降方向。批量计算支持数据并行[2],这是将训练扩展到大量处理元素所必需的。
ML和系统界正在积极研究在增加批量大小的同时减少精度下降[8、19、13、23、25、40]。[29]全面研究批量大小和收敛性之间的关系,而其他工作侧重于提高特定设置或硬件的并行性。使用这些技术,可以将在ImageNet[5]数据集上成功训练ResNet-50[9]的时间减少到132秒[40],直至性能瓶颈被报告为输入数据处理(I/O)时间。
支持大批量训练的关键通常包括微调基本学习率(LR)、per-layer LR[41]、LR schedules[8,41]或 optimization step [15,10,25]。这些方法通常使用较高的LRs来解释大批量更新中较低的梯度方差。然而,如果不进行微调,大批量训练往往会导致泛化性能下降。有人提出[14],这是由于这种低方差更新趋向于收敛到“急剧极小值”所致。(These methods typically use higher LRs to account for the lower gradient variance in large batch updates. However, without fifine-tuning, large batch training often results in degraded generalization. It was suggested [14] that this is caused by a tendency of such low variance updates to converge to “sharp minima” .)
在这项工作中,我们提出了批量增强(BA),它能够在增加批量大小的同时控制梯度方差。使用更大的增强批量,我们可以更好地利用计算资源,而不需要额外的I/O成本。事实上,在采用现有的标准LR schedules时,甚至可以实现更好的泛化精度。
我们的主要贡献是:
• 介绍BA及其可能的用途。
• BA属性、资源利用率和梯度方差的经验结果。
• 多GPU节点和5704 GPU Cray超级计算机上的收敛结果。
1.1. 神经网络的大批量训练
[10]、[8]、[41]和其他人的最新方法表明,通过调整优化机制(即超参数调度),大批量训练可以实现与小批量训练同样好(有时甚至更好)的泛化。
[10] 认为优化模型的质量来源于SGD迭代次数,而不是训练数据通过的轮数(epoch),并增加相对于批量大小的步骤数。然后,他们使用额外的epoch对ImageNet进行训练,不降低精度,调整LR降低的点(区域适应),并在称为重影批量标准化(Ghost Batch Normalization,GBN)的过程中对批量子集进行标准化。
[8] 使用8192的批量,并采用“逐步预热”方案,在该方案中,LR在5个epoch后线性增加至基础LR,之后该状态恢复正常。[41]通过使用分层自适应速率缩放(LAR)以及预热后的多项式LR衰减,将批量大小增加到32768,但精确度有所降低。[40]采用分布式批量标准化和梯度累积,以保持ImageNet上的验证精度,每批量32768张图像和1024台TPU设备。[13] 使用16位浮点(“半精度”)并进一步调整超参数(例如,权重衰减),以减少通信量,并支持批量为65536的训练。
其他大批量方法在训练期间利用二阶信息。Neumann优化器[15]使用Neumann级数使用逆Hessian的一阶近似值,并且能够在不降低精度的情况下训练多达32000个批量,尽管使用1600个批量时收敛速度最快。Kronecker因子分解(K-FAC)二阶近似也被用于加速深度神经网络训练的收敛[25],在45个时期后,在ImageNet上实现74.9%的验证精度,1024个节点上的批量大小为32768。
相比之下,[21]认为小批量更新可能仍然比大批量更新有好处,在多个任务中显示出更好的结果,对超参数选择具有更高的鲁棒性。然而,这种情况下的训练过程是连续的,不能分布在多个处理单元上。[28]进行的广泛调查表明,扩展到大型minibatch的能力在很大程度上取决于所使用的模型。还有人指出,训练的最佳值并不始终遵循与批量大小的任何简单关系。具体而言,研究表明,通用学习率启发式方法并不适用于所有任务和批量大小。
批量增强实现了大批量训练的所有好处,同时保持输入样本的数量不变,并最小化超参数的数量。此外,它还提高了通用性和硬件利用率。我们现在继续讨论稍后将用于批量增强的现有数据增强技术。
1.2. 数据增强入门
训练现代神经网络的一种常见做法是使用数据增强——对每个输入样本应用不同的变换。例如,在图像分类任务中,对于任何输入图像,都会对其应用不同大小和比例的随机裁剪,可能还会出现旋转、镜像甚至颜色抖动[17]。人们反复发现,即使在半监督环境下,数据增强也能提供有效且有用的正则化[39],通常占最终泛化性能的很大一部分[42,6]。
有几项工作试图学习如何生成良好的数据增强。例如,基于训练集分布的贝叶斯方法[34],基于GANs的生成方法[1,31]和搜索方法旨在找到最佳的数据增强策略[4]。我们的方法与这些方法是正交的,将它们结合起来可以得到更好的结果。
其他正则化方法,如drop out[32]或ZoneOut[18],尽管未明确视为数据增强技术,但可以通过将其视为中间层输入上的随机变换来考虑。这些方法也被证明在各种任务中有利于模型的拟合。[43]介绍了另一种称为“Mixup”的相关正则化技术。Mixup使用来自不同类的两个单独样本的混合输入,标签也做相应的混合。
2. 批量增强
在这项工作中,我们建议通过在同一批量中使用一个样本的多个实例,以利用数据增强和大批量训练的优点。
我们考虑一个具有损失函数的模型,其中是数据集,包含N对数据-标签。令,令表示应用于每个样本的一些数据增强变换,例如,对图像的随机裁剪。
每个批量的通用训练程序包括以下更新规则(为了简单起见,这里使用学习率和批量大小为的 vanilla SGD):
其中从,是批量的样本集,为简单起见,我们假设N能被B整除。
我们建议通过应用变换(这里用下标强调这些数据增强彼此不同)将同一个输入创建个不同的数据增强实例。我们现在使用稍微修改的学习规则:
有效地使用了的批量,其包含个样本、个不同的数据增强变换。
我们注意到,这个更新的规则可以通过计算整个M·B批量或梯度累积(累积M次)来计算。使用大批量更新作为批量增强的一部分不会改变每个epoch执行的SGD迭代次数。
批量处理增强(BA)也可用于在中间层上进行转换,而不仅仅是输入。例如,我们可以使用通用的drop out正则化方法[32]在给定层中生成同一样本的多个实例,每个实例都有自己的drop out掩码。
通过参考PyTorch和TensorFlow实现,批量处理增强可以在任何框架中轻松实现(注1: https://github.com/eladhoffer/convNet.pytorch)。为了进一步强调合并这些想法的易用性,我们注意到BA可以通过修改输入管道添加到任何训练代码中——augmentingeach batch that is fed to the model.
2.1. 利用数据增强解决大批量问题
标准批量SGD对不同样本的梯度进行平均,而BA对相同样本的几个转化实例T(xn)的梯度进行额外平均。扩展实例描述相同的样本,通常只有很小的变化,并在批量中生成相关梯度。BA可以实现显著低于1/B减少的方差减少,这可能发生在B样本的不相关总和上。
为了实现这种减少的方差减少,我们必须假设T上的某些必要条件。具体而言,数据增强的设计应能产生预期的梯度,该梯度与原始样本的相关性比输入数据集中的其他样本更高。更正式地说,
对于∇(西九龙),∇Wℓ (w,xn,yn)。稍后,在第3节中,我们测量了实际中使用的数据增强的效果,并表明对于标准图像分类数据集,此属性是保持不变的。因此,BA减少了方差,因为它向梯度平均值添加了额外的高度相关样本。
正如我们接下来解释的,这种减少方差的方法可能有助于解决大批量训练问题。先前的研究[14,24,38]表明,大批量训练问题可能是由于SGD训练过程中的隐性偏差造成的:对于大批量,SGD选择不同的(“新”)最小值,其泛化性比小批量训练选择的原始最小值差。通过将学习率提高到特定值[10,8],可以部分缓解此问题,这将使这些新的极小值再次不可访问,同时保持原始极小值可访问。然而,[28]观察到,没有关于如何随批量大小改变学习率的一般有效规则,因为其随批量大小的最佳比例可能随模型、数据集或其他超参数而改变。此外,仅仅改变学习率可能不足以适应非常大的批量,因为最终SGD可能无法区分新的和原始的最小值。在附录(A部分)中,我们对这些问题进行了正式处理,并解释了为什么BA的方差减少特性降低可能有助于解决这些问题。因此,与标准的大批量训练相比,批量增强使模型能够在较少修改优化动态的同时进行更多的增强训练。
3. 批量增强的特征
我们继续实证研究批量增强的不同方面,包括梯度相关性和方差的测量,以及增强批量的性能和利用率分析。
数据增强
为了分析BA的方差减少,我们实证表明,数据增加不能满足它们在预期中产生相关梯度的假设。表1列出了Cifar10数据集上ResNet-44梯度之间的验证精度和中位数相关性(100个样本),在初始化时,在5个阶段后,以及在93个阶段收敛后。在表中,可以清楚地看到,增强生成的渐变比不同类中甚至同一类中的图像的相关性要大得多。此外,CutOut增强略微减小了同一类的增强图像和不同图像之间的差距。至于网络状态,当使用随机权重时,有趣的是,同一类的所有梯度都相互关联。
结果再次证明,增强产生的梯度比不同类别的图像,甚至同一类别内的图像的相关性要大得多。此外,结果表明,首先,无论实际样本如何,为了学习对某类图像进行分类,存在一个特定的预期下降方向。随着训练的进行,相关性随之降低。
方差缩减
为了从经验上评估BA方差减少的效果,我们在第4.1节所述的整个训练过程中测量了权重梯度的L2范数。我们使用L2范数作为方差减少的代理,因为每个梯度都可以看作是一个随机变量。正如预期的那样,方差减少反映在范数值中,如图1所示。表1:Cifar10上的ResNet-44梯度相关性。我们测量随机图像和其增强版本ρ(x,T(x))之间的皮尔逊相关系数ρ,以及相同类别ρ(x,y)和不同类别ρ(z,w)的随机图像之间的皮尔逊相关系数ρ。增强类型:RC=随机裁剪,F=翻转,CO=CutOut
性能
对并行算法性能的理论理解可以从操作总数和它们之间的最长依赖路径中得出,这是从根本上限制计算时间的顺序部分的度量(即工作深度模型[3])。在BA和标准大批量训练中,操作(工作)的总数量与总批量大小成比例增加,即M·B。然而,由于BA中LR进度更快,或标准大批量训练中的时间更短,与SGD迭代次数成比例的顺序部分(深度)减少。从本质上讲,可以以牺牲更多工作为代价来减少序列化,从而提高平均并行性。
考虑到I/O和通信,BA也比标准的大批量训练更具优势。BA减少了对外部数据的依赖,因为在每次迭代中,每个处理器都可以读取输入并解码一次,在本地应用增强。这增加了最先进实现的可伸缩性,其中输入处理管道是当前的瓶颈[40]。另一方面,每次迭代的通信取决于参与处理元素的数量,其中的成本仍然相当于标准的大批量训练。
我们的经验结果(如图4)表明,在BA中,迭代次数确实可能随着M的增加而减少。这表明完成时间可以保持不变,具有更好的泛化特性。因此,BA与大批量的结合,在神经网络训练的工作和深度之间打开了一个有趣的折衷空间。
4.收敛性分析
为了评估批量增强(BA)的影响,我们使用了几种常见的数据集和基于神经网络的模型。对于每一个模型,除非明确说明,否则我们使用其作者所描述的原始训练机制和数据增强来测试我们的方法。为了支持我们的说法,我们既不改变BA的学习率,也不改变BA的训练步骤数。对于每个结果,我们将BA与两个单独的基线进行比较——一个具有相同数量的训练迭代,另一个具有相同数量的可见样本(通过扩大使用的批量大小实现)。对于大批量的情况,我们在测量中也使用了替代学习率,如之前的工作[8,28]中所建议的那样。
4.1. Cifar10/100
我们首先使用了[16]介绍的流行图像分类数据集Cifar10/100。对于这两个数据集,通用数据增强技术如[9]所述。在该方法中,输入图像在每侧、顶部和底部填充4个零值像素。然后裁剪填充图像的随机32×32部分,并以0.5的概率水平翻转。这种增广方法有一个相当小的可能变换空间(9·9·2=162),因此它很快就被M耗尽了≈ 10秒的同步实例。
因此,我们推测,当使用批量增强时,使用更积极的增强技术,具有更大的选择空间,将产生更明显的差异。我们选择使用最近引入的“CutOut”[6]方法,该方法显著提高了各种数据集上模型的泛化能力。“CutOut”在图像中使用随机定位的零值正方形,从而将可能的变换数量增加×302。
我们在Cifar10数据集[16]上使用ResNet44[9]和CutOut增强[6]测试了批量增强。我们在[9]中使用了原始制度,并使用了一批量B=64。然后,我们将学习曲线与使用批量处理增强和M∈ {2,4,8,16,32}批量中每个样本的不同变换,有效地创建了一个64·M的批量。
图2显示了改进的验证收敛速度(以epoch为单位),显著减少了最终验证分类错误(图2b)。随着M的增加,这一趋势在很大程度上继续改善,与我们的预期一致。我们使用各种模型[30,9,42,20,26,12]验证了这些结果,并使用了不同的M值,这取决于我们在计算预算中拟合M·B的能力。结果列于表2。我们的最佳结果是使用AmoebaNet最终Cifar10模型[26]获得的。
在我们的所有实验中,我们观察到最终验证精度有了显著提高,并且在每个epoch的精度方面收敛速度更快。此外,通过批量增加,我们能够更快地实现高验证精度。我们在Cifar10上训练了一个带有CutOut的ResNet44,用于基线所需迭代的一半,使用批量增强、更大的学习率和更快的学习率衰减计划。对于ResNet44,我们仅在23个时间段内实现了94.15%的准确率,而基线在迭代次数(100个时间段)超过4倍的情况下达到了93.07%。当基线使用相同的缩短模式进行训练时,精确度会显著降低。这不仅表明了精度的提高,而且表明了给定硬件的潜在运行时改进。我们注意到,对于M=12的AmoebaNet,在14个时期后,在不修改LR计划的情况下,我们达到94.46%的验证准确率。
此外,我们还想验证,使用BA获得的改进并不是简单地在训练期间查看更多样本实例造成的。为了明确这一区别,我们将其与保证固定数量的已知样本的训练制度进行比较。在该方法中,增加了epoch的数量,以便在使用更大批量时,迭代的数量是固定的(以相同的M系数)。就训练过程中每个样本的实例数量而言,该备选基线与BA相当。使用相同的设置(ResNet44,Cifar10),我们发现在使用固定数量的样本基线获得93.07%的结果的基础上,精确度提高了0.5%。图3显示了这些结果,其他比较结果见表2(固定样本数的基线)。
对于大批量模式(固定样本)下的模型,我们试图验证,即使在修改学习率的情况下,BA的差距仍然存在。我们将原始学习率乘以一个因子α,并在4个附加值α的对数尺度后使用网格搜索∈ {M0.25,M0.5,M,M2}其中M是批量比例因子。做出此选择是为了反映[8]和[10]分别建议的线性和sqrt学习率规则。这些实验没有改善基线结果,证实了BA在固定步长预算下的强大结果。
4.2. ImageNet
作为更大规模的评估,我们使用了ImageNet数据集[5],其中包含120多万张图像和1000个不同的类别。我们评估了三种模型——AlexNet[17]、MobileNet[11]和ResNet50[9]。有关训练和超参数的详细信息,请参见附录(第B节)。
为了适应我们的时间和计算预算限制,我们对ResNet和MobileNet使用了温和的M=4批量增加因子,对AlexNet使用了M=8。我们再次观察到所有模型在其最终验证精度方面的改进(表2)。使用[8,28]建议的学习率线性标度也不能提高大批量训练的基线测量精度。
AlexNet模型具有最显著的改进,与我们的基线相比,绝对验证准确度提高了4%以上,比之前公布的最佳结果提高了2%以上[41]。
我们还强调了模型更快达到高验证精度的事实。例如,未经修改的ResNet50模型在第35纪元时达到75.7%——仅比基线模型在第90纪元时达到的最终精度低0.6%(图4)。第30个epoch之间验证错误的增加−60表明,学习率或体重衰减值应该改变,正如[42]所讨论的,他们目睹了类似的影响。这使我们相信,通过仔细调整训练制度的超参数,我们可以缩短达到预期精度所需的epoch次数,甚至可以进一步改进。
通过调整训练机制以改进BA的收敛特性,我们能够减少达到所需精度所需的迭代次数。使用相同的基础LR(0.1),并在第30和35个纪元后减少因子0.1,使我们仅在40个纪元后达到76.86%的相同提高精度。如果在第15、20和22个阶段LR降低,则更快的进度计划将在第23个阶段产生之前的75.7%。
4.3. drop out作为中间层增强
我们还测试了批量增强的能力,以改善在没有对输入数据执行显式增强的任务中的结果。这类任务的一个例子是序列建模,其中输入以确定性方式馈送,噪声以drop out[32]、DropConnect[37]或其他形式的正则化[18,22]的形式引入中间层。
我们在WMT16 en de任务中使用了[35]的基本变压器模型,以及原始超参数。我们使用了自己的实现,并对模型进行了100K次迭代的训练。在没有检查点平均值和宽度为4的波束搜索的情况下进行评估。我们使用M=4的BA和4096个令牌的批量大小。批量处理中使用多个样本实例导致使用不同的随机退出掩码计算每个实例。使用M=4的BA和4096个令牌的批量大小,我们发现BLEU分数提高了0.36(见表2)。
我们还测试了[22]中描述的语言模型以及宾夕法尼亚树库(PTB)数据集上LSTM单词级语言模型的建议设置。我们使用了一个宽度为1150、嵌入大小为400的三层LSTM,在输入(p=0.4)和隐藏状态(p=0.25)上都进行了衰减正则化,没有微调。我们使用M=10,将有效批量从20增加到200。我们再次观察到积极的效果,但与之前的实验相比更加温和,与基线相比,最终测试困惑度提高了0.2。
4.4. 正则化对BA的影响
我们有兴趣看到使用BA获得的结果与最近的正则化方法(如标签平滑[33]、混合[43]和manifoldmixup[36])之间的相互作用。我们使用混搭测试了BA,发现批量增强训练在准确性方面的优势仍然存在,并且可以与正则化一起使用,以进一步提高泛化能力(表3)。
我们还观察到,使用测试时间增强(TTA),在使用BA训练的模型中产生更好的相对改善(表4)。我们推测这是由于BA对每个输入的几个变换进行了优化,这更适合于TTA方案,其中分类是在同一样本的多个实例上进行的。
4.5. 分布式批量增强(重点)
为了支持大规模集群,我们在TensorFlow和Horovod上实现了分布式BA[27]。我们在Cray XC50超级计算机CSCS Piz Daint上测试我们的实现。每个XC50计算节点都包含一个支持超线程的12核Intel Xeon E5-2690 CPU,带有64 GiB RAM,以及一个NVIDIA Tesla P100 GPU。节点使用Cray-Aries互连进行通信。在表5中,我们使用一个NVIDIA P100 GPU和克雷超级计算机的并行文件系统,在所有可行的批量大小(受设备内存限制)上对ResNet-50上的ImageNet数据集进行训练。我们列出了每秒处理200次图像实验的中值以及标准偏差。正如预期的那样,增加批量处理大小从几乎线性扩展开始(1.8×每个批量处理1到2个图像),但随着我们达到设备容量,扩展速度会减慢,在64到128个批量处理大小之间,利用率仅增加5.7%。这表明,在训练中使用数据并行时,应尽可能增加本地批量处理大小,以最大限度地提高设备利用率。
该实现使用分散(即,无参数服务器)同步SGD,并使用Cray优化消息传递接口(MPI)v7.7.2执行通信。我们使用每个节点每批量的最大图像数,因为它提供了最佳利用率(见表5)。
在图5中,我们用ResNet-50在ImageNet上绘制了40个时代的两个实验的训练运行时间。我们使用B=256 M=4(16个节点)和M=10(40个节点)进行测试,其中每个节点处理一批量64个图像。图中显示,M=4和M=10的运行时间差异可以忽略不计,其中较大的增强批量始终会提高验证精度。训练过程使用32幅图像的重影批量标准化[10]和一个标准但较短的区域(即,不添加渐进预热)。
在分配计算时,如果我们在每个节点上天真地复制一小批量M次,我们将通过对一小批量图像进行多次增强来规范化,从而使批量规范化过程退化。相反,我们的实现确保每M个节点将加载同一批量,因此不同的图像将一起规范化。我们通过在每M个节点中同步数据集采样器的随机种子(而不是数据增强种子)来实现这一效果。这还允许系统从并行文件系统加载相同的文件一次,然后进行广播。
补充材料中的结果表明,BA在更多节点上产生一致的更高验证精度,在40个节点上成功地扩展到2560的有效批量大小,而无需将LR进度调整为[8],并且由于I/O优化而降低了通信成本。当使用B=8192的大批量LR调度[8]时,在128个节点上运行的精度为75.86%,而M=4和512个节点的精度为76.51%。
5.结论
在这项工作中,我们引入了“批量增强”(BA),这是一种简单而有效的方法,通过对每个样本进行多个变换组成的大批量训练来提高深度网络的泛化性能。我们已经展示了各种数据集和模型的显著改进,每个epoch的收敛速度更快,以及更好的最终验证精度。
我们提出了一个理论分析来解释BA相对于传统大批量方法的优势。我们还表明,BA在整个训练过程中导致梯度方差减小,这反映在梯度的ℓ每个优化步骤中有2个范数。这可能在将来用于搜索和调整更合适的训练超参数,从而实现更快的收敛和更好的性能。
最近的硬件开发允许社区使用更大的批量,而无需通过使用数据并行或利用更先进的硬件来增加挂钟时间。然而,有几篇论文声称,使用大批量产品会导致精度下降[21,7]。在这里,我们认为通过使用同一样本的多个实例,我们可以利用更大的批量处理能力来提高准确性。这些发现为我们提供了另一个理由,让我们更倾向于使用比过去更大批量的训练设置。