专栏名称: 计算机视觉深度学习和自动驾驶
讨论计算机视觉、深度学习和自动驾驶的技术发展和挑战
目录
相关文章推荐
厦门网  ·  《漂白》剧组女替身被车辆碾压?多方回应 ·  16 小时前  
桂林晚报  ·  刘诗诗、吴奇隆,突传消息! ·  2 天前  
天天向上学习平台  ·  刘诗诗、吴奇隆,突传新消息! ·  3 天前  
新黄河  ·  刘诗诗将所持股权转让给吴奇隆 ·  3 天前  
新黄河  ·  刘诗诗将所持股权转让给吴奇隆 ·  3 天前  
51好读  ›  专栏  ›  计算机视觉深度学习和自动驾驶

大规模深度学习模型的高效训练:综述(上)

计算机视觉深度学习和自动驾驶  · 公众号  ·  · 2024-05-24 01:09

正文




23年4月综述论文“On Efficient Training of Large-Scale Deep Learning Models: A Literature Review“,京东、悉尼大学和中科大的合作。

基于大量数据训练的大模型在实际应用中具有巨大的前景,然而极易受到训练过程不稳定和计算资源要求严格的影响。 这歌综述对加速训练的一般技术进行了详细的回顾。 考虑了基本更新公式,并将其基本组成部分分为五个主要视角: (1)“以数据为中心”: 包括数据集正则化、数据采样和以数据为核心的课程学习技术,这可以显著降低数据样本的计算复杂度; (2) “以模型为中心”,包括基础模块的加速、压缩训练、模型初始化和以模型为核心的课程学习技术,重点是减少参数的计算和更好的初始化,这样就加速训练; (3) “以优化为中心”,包括学习率的选择、大批次数的使用、有效目标的设计和模型平均技术,注重训练策略和提高大模型的通用性; (4) “有预算的训练”,包括在资源受约束情况下的一些独特加速方法,例如限制总迭代次数; (5) “以系统为中心”,包括一些高效的分布式框架和开源库,为上述加速算法的实现提供足够的硬件支持。 进一步对通用加速技术的发展进行了详细的分析和讨论,这可能会启发重新思考和设计新高效范式。

背景

最近许多工作回顾和总结了高效训练技术,主要包括高效预训练模型的介绍、新设计的加速组件、先进的优化方法、NLP或CV社区的高效训练,以及训练过程中的技巧。He[85]研究了大规模深度学习在泛化保证和优化效率方面的最新进展,其中包括新的优化器和策略,解决训练开销并减少计算设备中所需的内存。他们还详细阐述了对大批次量训练的探索。He[84]总结了一系列训练CNN模型的技巧。他们进行了系统的实验,总结了一些有效的数据增强技术和巧妙的学习率调度器设计。Treviso[254]总结了NLP的有效方法,并讨论了它们的效率和缺点。

自Vaswani[256]在2017年提出Transformer以来,已成为NLP中的主导模型,导致了大语言模型(LLM)和视觉Transformer(ViTs)的兴起。几个(预训练的)Transformer模型展示了高效训练的发展,包括模型结构的改进和高效训练技术的应用。对于NLP,自GPT(117M个参数)[196]以来,模型参数的数量有快速增长的趋势,GPT是第一个预训练的Transformer,它由Transformer解码器构建,并在BookCorpus[307]上无监督预训练。与GPT的结构不同,BERT(340M)[48]由多层双向Transformer编码器组成,可以捕捉位置之间的关系。GPT-2(1.5B)[197]的参数比GPT-1多得多,并且在更大的数据集上进行训练。用大规模网络去训练语言模型已被证明是一种非常有效的策略,数据集的增长、高效的模型结构以及硬件和软件的突破使其成为可能,激励了Turing-NLG(17.2B)[35]、GPT-3(175B)[18]等模型,Megatron-Turing NLG(530B)[229]和Switch Transformer (1.6T)[60],进一步增加参数数量。至于CV,ViT(ViT-Base有86M)[53]是Transformer在该领域应用的里程碑。最近,受Transformer驱动的大语言模型突破的启发,Dehghani[44]提出了一种高效稳定的训练方法,将ViT扩展到22B参数(ViT-22B)。在跨模态或多模态领域,CLIP[198]通过联合训练图像编码器和文本编码器,将分类任务转化为图像-文本匹配任务,其中ResNet-50[82]或ViT作为视觉主干,Transformer作为语言主干。它还与DALL-E[204]一起发布,这是GPT-3的12B参数版本,能够基于文本图像对的预训练从输入文本生成图像。上述大多数模型都是Bommasani[15]定义的基础模型之一或基于基础模型,即在广泛数据上训练的模型,通常使用规模化的自监督,并且可以适应(例如微调)广泛的下游任务。随着Wang[265]提出的通用大模型BEiT-3,他们指出,不同领域对大模型的研究正逐渐走向“大融合”:首先,Transformer已经成为一种常见的主干架构,其次,生成式预训练已经成为最重要的自监督学习方法,第三,扩大数据和模型大小进一步提高了大模型的性能。尽管模型多种多样,但即使是最庞大的模型也由线性、卷积和注意层的基本模块组成。

数据为中心的高效训练

从以下角度回顾和研究技术:

  • 数据正则化。数据正则化是通过一系列变换来增强原始数据样本多样性的预处理技术。它等效地改进了训练样本在特征空间中的表示,而不需要额外的标记信息。高效的数据正则化已被广泛应用于训练过程中,并显著提高了大模型的泛化性能。

  • 数据采样。数据采样是从大批次量中选择样本子集以执行更新的有效方法。采用小批次量训练有利于忽略当前批次中那些不重要或不好的样本。通常,采样数据更重要,产生的性能与整个批次的训练相当。每次迭代的概率随着训练过程而逐渐调整,以确保无偏采样。

  • 以数据为中心的课程学习。课程学习研究训练过程中不同阶段的渐进训练设置,以降低总计算成本。一开始,使用低质量数据集进行训练就足以学习低级特征。然后,采用高质量的数据集(更多的扩充和复杂的预处理方法)逐渐有助于学习复杂的特征,并实现与整个训练相同的精度。

数据正则化的目的是减少过拟合,使模型更容易适应,并在不太影响训练过程的情况下提高模型的泛化能力。然而,它通常会引入额外的计算成本,有时会成为训练过程中的瓶颈。为了进行有效的训练,从一系列技术中进行选择和测试并决定使用哪种技术至关重要。

数据增强(DA)是高效训练的另一个重要的正则化策略。通过更好地利用原始数据集,如变换后的图像,人为有效地增加训练数据,提高模型的泛化能力。甚至一些反直觉的数据增强方法也能有效地提高模型的性能。

重要性抽样(IS)是一种蒙特卡罗方法,它涉及从不同的分布中进行抽样,帮助评估某个分布的特性并减少方差。在随机梯度下降中,重要性采样集中在对模型参数影响最显著的样本上,这降低了梯度估计的方差。当它是固定的或当批次量增加时,这种方法有助于降低计算成本。重要的是选择一个适当的重要性抽样分布,准确地表示原始数据分布,避免引入偏差。

课程学习(CL)[9,57]基于从简单任务开始学习并逐步增加任务复杂性的直觉。该方法也以各种方式应用于预训练,并在许多工作中表现出良好的加速性能。

这个部分关注的是数据集正则化的数据效率,包括增强和预处理以增强其多样性,从大批次量(或整个数据集)中采样有效子集以提高训练效率,以及课程学习方法以减轻训练早期的昂贵消耗。

数据正则化是在不添加标签的情况下扩展数据样本多样性的有效方法。由于数据集的变换复杂且随机性,因此数据集相当于被多次扩展,这有助于训练具有更好泛化性能的大模型。然而,过度使用数据正则化会带来巨大的偏差,导致质量低下。随着越来越多的正则化方法可用,选择有效的组合是很重要的。

在数据采样方面,它可以通过小批次量训练获得相同甚至更好的性能。通过精心设计的算法进行数据采样可以有效地增加训练模型的容量。通常,在训练过程开始时,模型从性能较差的样本中获益更多。忽略好的样本有助于加快学习不同标记样本特征的平衡。

课程学习为处理数据集提供了一个渐进的流水线。它允许以较少的增强馈送低分辨率数据提取粗粒度特征,并逐渐提高数据质量以捕获细粒度特征。在保持高性能的同时实现了实际的加速。

未来,有前景的研究包括:

  • 高效的正则化实施。更具体的数据正则化方法值得研究。基于先验知识设计新的数据正则化方法可以进一步提高大型网络的广义性能。同时,采用数据正则化的并行处理也可以大大加快训练过程。

  • 高效的数据采样。新的采样方法有望联合考虑训练加速和泛化保证[167]。

模型为中心的高效训练

从以下几个角度研究了高效的技术:

  • 架构效率。随着深度模型中参数的快速增加,它也引入了巨大的计算消耗。因此,实现一种有效的替代方案来近似原始架构成为一个热门话题。这种替代不仅是数值计算的近似,还包括深层模型中的结构简化和融合。

  • 压缩训练效率。压缩一直是计算加速的研究方向之一,它在数字信号处理(多媒体计算/图像处理)中起着关键作用。传统的压缩由两个主要分支组成:量化和稀疏性。

  • 初始化效率。在现有的理论分析和实际场景中,模型参数的初始化都是一个非常重要的因素。糟糕的初始状态甚至会导致整个训练在早期训练阶段崩溃和停滞,而良好的初始状态有助于在平稳的损失环境中加快整个收敛。

  • 以模式为中心的课程学习。从以模型为中心的角度来看,课程学习通常开始在大规模模型中训练一个小模型或部分参数,并逐渐将其恢复到整个架构中。它显示了在没有显著负面影响的情况下加速训练过程的有利能力。

架构效率

线性层 是传统模型中的基本模块,在MLP中也称为全连接层。它是底层的矩阵乘法,因此对乘法的许多基本优化产生了节省资源和加速计算的好处。此外,在深度训练中,大量的工作研究了它的近似,这可以在实践中降低参数和计算复杂度。线性加速侧重于低秩和稀疏矩阵乘法,保持可比的性能。在当前的大模型中,它在时间消耗方面并不占主导地位,并且与其他模块相比,计算相对简单。基础工作可以激励设计更有效的加速训练结构。

卷积 一直是为下游任务提取高级特征的有效技术,尤其是在一些计算机视觉任务中。它保持了图像的平移不变性和旋转不变性,可以有效地捕捉细节特征。卷积计算是非常重复的,其中大量的矩阵复用使它们非常耗时。因此,卷积加速,一直是深度网络中的一个重要研究课题。

激活函数 是一个人工制作的函数,用于按元素放缩输入,帮助深度模型学习复杂的模式和高级特征。类似于大脑中基于神经元的机制,它最终决定了下一个神经元会受到什么样的刺激。激活函数为深度网络创建非线性映射,有效地提高了在场景中拟合复杂目标函数的潜力。

自从提出ReLU[78123]用于模拟仿生学以来,使得深度神经网络在许多领域取得了长足的进步。它可以防止梯度从一层回流到另一层,而不会消散或爆炸。还应用了一系列相关的优化激活函数,如LReLU、ALReLU和LeLeLU。随着大模型逐步设计来解决大型任务,更高效的激活函数出现了。

ELU激活函数可以被认为是具有双侧饱和的Tanh。它带来指数乘法支配的负输出,解决消失梯度和停滞状态问题,从而加速训练过程。GeLU,通过其特定值而不是符号来加权输入。它有助于提高各种大模型的平坦度。训练早期阶段的平稳性有效地减少了训练时期的数量,从而加快了训练速度。为了进一步提高网络中数据流的稳定性,结合数据规范化的技术,提出了SeLU激活,以便能够使输出在所有层上呈正态分布。输出的一致性有助于在反向传播中保持有效和有效的梯度,并更快地学习。

具备在零值附近移动均值的好处,使ISRLU能节省零值左侧指数函数的高计算成本。多项式复杂度的替换比指数函数复杂度低得多,并且在MLP网络中实现了有效的训练。在作为Transformer重要部件的FFN模块中,SwiGLU激活体现了效率。微调系数可以提高输出在不同层之间的分布相似性。在预训练任务中,它往往需要较低的训练时期。

激活函数的计算通常是逐元素的,并由并行计算单元加速。在实际的正向和反向传播中,这些层的时间成本通常很少(低于10%)。适当的激活函数可以在不同阶段为网络提供更高的平滑度,从而在训练过程中更快地过渡到损失值较小的区域。

注意 已经成功开发了Transformer模型,并在多项任务中取得了SOTA成果。目前的一般注意模块是多头注意(MHA),它用许多自注意分支来关注不同的特征。在引入Transformer架构之前,注意机制是具有O(n)复杂性和顺序操作的基于RNN编码器-解码器模块来实现的。Transformer模型[256]研究了替代尺度点积模块,解放递归计算,并达到了类似的效果。计算问题在小任务中不那么重要[68]。当数据的维度显著增加时,自注意模块将发挥关键作用,并承担训练Transformer模型的主要成本。因此,围绕如何有效地计算注意模块展开了一系列工作。

归一化 (Normalization)是模型中协方差偏移衰减的一种重要技术。当初始状态不好时,训练的初始阶段会受到不平衡特征的显著影响,从而导致梯度的不稳定性。因此,引入归一化来正则化特征的均值和方差。卷积神经网络(CNN)和Transformer都得益于统一的动力学。传统的归一化方法采用BN(batch normalization)来避免反向传播中梯度的减小,并且在一些CV任务中取得了很大的进展。它可以平衡一批样本的均值和方差,并在训练中保持稳定性。由于NLP任务中的批次量变得较小,因此采用了LN(层归一化)。在目前的SOTA变压器模型中,它仍然继承了这一技术。除此之外,还有IN(实例归一化)和GN(组归一化)。它们的不同之处在于规范化数据样本的维度。

GhostNorm(鬼影批次归一化),一种BN技术,将批次划分为较小的批,并并行独立归一化。这种技术减少了每次通信所需的pin内存,并充分利用了缓冲缓存。SeqNorm(序列归一化)归一化输入特征图的二维输入。它巧妙地结合了GhostNorm和BatchNorm,在分类任务上优于其他方法。LN扩展到RMSNorm(均方根层归一化),RMSNorm假设LN中的重置中心(centering)不变性是可有可无的,并通过其均方根对求和输入进行正则化。它在计算上比普通LN更简单、更高效。在分布式系统中使用时,均值和方差计算实际上是reducing运算,这受到设备存储器和寄存器之间通信瓶颈的限制。

为了节省有限的计算资源,FusedLN将几个reduce操作合并到一个函数中,可以分配较少内存充分提高GPU的利用率。一种FWN(逐特征归一化)方法,实现产生最佳性能的快速实现。它受益于集体回复(collective reply),将输入特征规范化为一个单独的单元,选择一个可以优化的更好组合。CoN(协作归一化)可消除域差异,并加速无监督域自适应任务的训练过程。它测量来自不同域的特征差异,并学习具体的统计数据来挖掘相似的知识和表示。它提高了泛化精度,并且很容易插入到深度模型中,不需要额外的消耗。

压缩训练效率

从整个训练过程的时间消耗来看,大部分时间都花在了推理(约30%)和反向传播(约60%)上。提高计算效率可以显著加快整个训练过程。一种有效的方法是量化。减少原始数据占用的bits数可以节省计算设备上的推理时间。另一种方法是稀疏训练。大量研究表明,大型神经网络在训练过程中存在参数冗余和梯度冗余,这意味着可以适当降低几个参数的更新频率。

目前,常用的算法默认使用标准的FP32浮点类型进行参数的推理和反向传播。这种数据类型可以满足当前深度训练中的高精度要求,尤其是在大数据集和庞大模型上。相应地,半精度数据类型FP16保持5位指数和10位分数,并且在当前训练中成为FP32的替代品。在一些评估中,它甚至可以在不到常规训练时间一半的时间内接近单精度计算的结果。然而,有限的精度经常面临梯度溢出,特别是在训练的早期阶段,这导致了NaN的存储器清除(core dump)。而且,低精度的计算对训练过程的后期阶段有更大的影响。为了平衡效率和准确性,AMP(自动混合精度)在深度训练中广泛使用。它利用经验主义,对一些不重要的参数使用FP16,对其他参数使用FP32,获得最佳性能,这是目前最有效的加速技术之一。

稀疏加速训练的主要方法集中在以下几个方面:

  • 稀疏梯度。梯度确定每次迭代中参数的偏移。对于更新中梯度值较小的参数,其偏移量也较小。与其他参数相比,暂停它们的更新不会影响训练性能。因此,通过更新稀疏梯度来减少反向传播的计算可以有效地加速训练。

  • 稀疏参数。参数冗余是深度模型中非常常见的问题之一。许多研究指出,在不同的数据样本上,选择性更新往往更为普遍。因此,在训练中冻结部分参数的基于剪枝和重构的技术可以极大地节省前向和后向过程的时间和内存成本。

  • 稀疏输入。输入样本中存在大量冗余。通常,在一个小批次量数据中,不同类别的样本被训练到不同程度。批次量维度的降维可以通过一些独特的采样方法来实现,例如重要性采样。这允许支持更大的批次量,可加速整个训练。

  • 稀疏特征。特征是中间层中输入样本的函数映射,它们占用了大量的计算和内存消耗。功能上也有很大的冗余。通过聚集或额外注意机制来聚合中间层的特征,可以有效地加速深度网络上的训练。

对模型初始化的研究表明,任意初始化策略可能会导致训练开始时收敛缓慢,甚至完全停滞[169],尤其是在大模型上。因此,适当的初始化可以用更少的有效训练做更多的事情。先前的几项研究从不同的角度揭示了初始化和训练之间的关系,并提出了一系列有效的方法来更好地初始化模型。预训练技术的最新进展也表明,更好的初始状态可以帮助理解无任务的一般知识,并提高下游任务的性能。







请到「今天看啥」查看全文