。。。继续介绍综述论文“On Efficient Training of Large-Scale Deep Learning Models: A Literature Review“,京东、悉尼大学和中科大的合作。
优化为中心的高效训练
从优化的角度将当前加速训练的思路总结为以下几个方面:
-
学习率。学习率是非凸优化的一个重要超参数,也是当前深度网络训练的关键。像Adam及其变型这样的自适应方法在深度模型方面取得了卓越的进展。一些基于高阶梯度调整学习率的策略也有效地实现了加速训练。学习率衰减的实施也会影响训练过程中的表现。
-
大批次量。采用大批次量将有效地提高训练效率。它直接减少了完成一个epoch训练所需的迭代次数。同时,由于其额外的内存利用率和通信瓶颈,处理一个大批次比处理具有相同样本总量的几个小批次要花费更少的成本。
-
有效的目标(objective)。原始ERM在最小化问题中发挥着关键作用,这使得许多任务能够被实际应用。随着对大型网络的深入研究,一些工作更加关注优化和泛化之间的差距,并提出了减少测试误差的有效目标。他们从不同的角度解释了泛化的重要性,并在训练中对其进行了联合优化,显著提高了测试的准确性。
-
平均权重。加权平均是一种实用的技术,可以增强模型的泛化性。它考虑了具有一组冻结或可学习系数历史状态的加权平均值,这显著加快了训练过程。
学习率
学习率是控制训练中更新的最重要的超参数之一。它应该通过联合考虑优化器和批次量来精心选择。从适应策略的实施角度,将其分为三种类型,即缩放的系数、逐单元自适应和基于矩阵的预条件器。它们分别采用单个值来衰减学习延迟,采用向量来平衡梯度,采用矩阵来搜索最优。
一般的学习率调度器采用单一的衰减系数,逐渐降低学习率来学习训练数据集的细粒度知识。
自适应学习率侧重于梯度所有维度的元素自适应。它认为梯度的每一个元素都与重要性不同的目标有关,并且应该被视为局部标量。它有助于更精确地控制学习率,并可用于多个大型任务。已经设计了各种基于自适应性的优化器,以从不同角度提高其效率。
自适应优化器在大模型训练方面取得了重大进展。之前几项工作都是基于Hadamard乘积采用逐元素标量。它有效地稳定了大批次量的训练过程,并且通常比基于一般梯度的方法收敛得更快。在未来,将逐阶段和逐层与冻结技术相结合,为优化器的设计提供了新见解。
预条件器通过矩阵来微调学习率。除了一阶梯度方法的优势之外,预条件器还涉及高阶导数,主要包括hessian和Fisher矩阵(FIM)。经典的牛顿方法采用hessian算法实现最优收敛,有效地加快了训练速度。目前,虽然这种方法在大模型训练中还不是主流,但其中一些技术和见解值得利用。
预条件器看作上实现最优收敛的学习率矩阵投影。由于计算的复杂性,它还没有在大模型上有效地工作。设计一个具有一阶计算复杂度的预条件矩阵来加速大型模型的训练,是未来的一个重要目标。并且,平衡优化和泛化的目标可能会提供更多新见解。
大批次量训练
适当地采用大批次量训练可以减少时间消耗,提高存储的利用率,生成平滑的梯度,并保持稳定的训练过程。然而,过大批次量的训练会适得其反,这可能会极大地损害训练的稳定性,甚至导致分歧,尤其是在大模型上。
为了实现大批次量训练,避免泛化性能差,现有的一些解决方案侧重于联合微调学习率和批次量,包括随批次量的扩大让学习率的线性缩放,在初始阶段采用学习率的预热,和逐渐增加训练批次量。此外,对数据的额外增强和所提出的高效优化器也可以支持大批次量训练,这提高了泛化性能并加快了训练过程。
对于高效的分布式系统,使用类似于梯度累积的思想,通过在多台机器之间并行划分梯度计算来减少训练时间,并且需要解决学习率、优化器和通信等问题,从而在跨设备训练中实现高效的并行性。
效率目标
目标始终是优化中最重要的因素之一,这是想要针对任务进行优化的原则。优化目标直接决定了最终目标和训练效率。
经验风险最小化(ERM)是统计学习理论中的一个原则,它定义了一系列学习算法,并用于提供其性能的理论界限。在解决最小化的机器学习任务中,各种优化方法已经得到了显著的发展。然而,它在平衡优化效率和泛化误差方面并不占上风。由于优化目标和期望目标在实践中存在偏差,ERM的紧张度较低,在泛化性表示上缺乏准确性。因此,联合考虑效率和稳定性,一系列修正目标提出来作为全局目标[216]。除了广泛使用的优化器,如SGD、Adam等,
分层自适应速率缩放(LARS)
也是一种通用的方法,旨在使用大型微批次进行训练。它允许不同的模块或层采用自适应学习率,而不是固定的学习率。细粒度的调整有效地缓解了大型微批次的局部过拟合。
目标改进考虑了普通ERM中更多的见解和实际问题。如何表示泛化的差距和错误正成为未来值得研究的研究课题。结合经验评估方法,在合理的搜索空间内,使用大规模搜索来找到最优优化器,显示出显著的效率。
模型平均
模型平均是通过几个历史状态生成泛化有效模型的重要技术。生成的模型通常显示出比训练模型更高的测试精度。平均模型不需要训练,仅用于测试,这不会在计算和内存利用率方面带来额外成本。
模型平均值来自Anderson加速[1258],在随机非凸优化方面取得了良好的进展。模型平均有助于在训练过程中接近一组更好的广义状态。尽管这些方法没有直接参与优化更新,但它们在泛化方面的显著改进有助于提前停止参数可比的训练。它大大减少了所需的训练时间。在高效训练领域,其实际应用是一项很有前途的研究。
学习率选择方面的最新进展表明,自适应是以可接受的额外计算成本保持高效率的正确方法,这得益于梯度不同维度上的逐元素标量。需要注意的一个主要问题是,平方动量的标量可能会导致学习率急剧下降,从而导致收敛速度减慢。预条件器的应用是引入曲率校正的一种很有前途方法,这可能会造成快速收敛。然而,在实际训练中,尤其是在大模型上,更新预条件器的成本高昂。同时,不准确的曲率方向可能会将优化误导到局部最小值。大批次量训练显示出对超参选择的强烈依赖性。高效大批次训练的解决方案,通常调整其他超参或设计新目标。这两条路线侧重于加速优化过程,这有助于实现更好的收敛。
另一种场景更注重提高泛化效率。以前的许多工作都研究了优化和泛化之间的差距,并提出在平坦损失面上搜索合适的状态。基于有效的平坦度测量策略,已经提出几个目标,增强大模型的泛化性并取得巨大成功。尽管不能忽视一些额外的计算消耗,但这种基于目标的改进仍然非常有效。与目标设计相比,模型平均是一种简单有效的提高泛化性的方法。它可以在不引入任何额外计算成本的情况下实现有效加速,并在训练的中期显示出巨大的潜力。随着训练的完成,它的改进最终消失。
总之,未来优化为中心的发展包括以下方向:
-
精细的自适应学习率。在训练大模型时,进一步平衡由不稳定梯度引起的偏差有助于实现更高的效率。考虑曲率信息来构造用于细粒度调整的低成本预条件矩阵是值得探索的,这可能有助于在训练中适应更大的批次量。
-
对训练模型的泛化性进行有效测量。采用几种测量方法来评估局部稳定性和平坦性,例如hessian的顶部特征值、梯度范数、邻域中的最差状态,并在训练加速度方面取得了很大的效率。探索低成本的表示有助于改进具有高泛化性的训练过程。同时,利用合理的奖励和策略来寻找更新公式的最佳组合,显示出提高训练效率的巨大潜力[28]。
-
平均模型的训练参与度。具有良好泛化性能的平均模型可以被认为是下一次迭代的更好初始状态。设计更好的优化算法来充分利用这种聚合状态,将是一个很有前途的方向。
有预算的高效训练
最近,一些工作专注于用更少的资源训练深度学习模型,但尽可能实现更高的准确性。这类问题被定义为有预算训练,即在给定预算下进行训练(对可衡量成本的限制),实现最高的模型性能[134183]。为了系统地考虑硬件支持以更接近真实情况,我们将有预算训练定义为给定使用设备和有限时间进行训练,例如,在单个低端深度学习服务器上训练一天[68104],获得具有最佳性能的模型。对有预算训练的研究可以揭示如何为有预算训练制定训练诀窍,包括决定模型大小、模型结构、学习率时间表的配置和其他影响绩效的几个可调因素,以及结合符合可用有预算的高效训练技术。
数据
从数据的角度来看,有预算训练侧重于数据集的预算分配和与数据相关的算法。Kaplan[110]表明,模型性能与以下三个因素之间存在幂律关系:非嵌入模型参数的数量N、token中的训练数据集大小D和非嵌入计算量C。然而,对于相同数量的计算C,在N和D之间存在权衡,例如,较大的模型每单位计算处理较少的数据。Kaplan[110]提出,在模型大小和训练中处理的数据量之间存在最优预算分配。他们证明,在固定的计算预算(术语“计算预算”指的是计算总量)内,通过训练非常大的模型并在收敛前提前停止,可以获得最佳模型性能。Hoffmann[93]显示了不同的结果,并提出在给定计算预算的情况下,训练中处理的数据tokens的数量应与模型的大小相等,而不是像以前的工作那样只缩放模型,但保持训练数据量不变。他们表明,经过充分训练的较小模型可能会在训练不足的大模型中表现出色,他们通过训练语言模型Chinchilla(70B参数,4倍多的数据)来检验这一假设,该模型比具有相同计算预算的另一个大语言模型Gopher(280B参数)获得了更好的得分。上述工作总结了在固定预算下决定数据集大小的经验定律。
此外,Steiner[231]研究了训练数据量、AugReg(数据增强和模型正则化)、模型大小和计算预算之间的相互作用。他们表明,用AugReg和较小的数据集训练但有更多计算预算的模型,达到了与更多数据训练的模型相同的性能。对于有限的数据场景,Chen[25]提出了一种数据高效的GAN训练方法,该方法用真实图像的小训练集从原始GAN中识别可训练的稀疏子网络(“中奖票”[64])。然后,用相同的有限数据集以及数据和特征级增强技术对该子网络进行进一步训练。他们的框架是对真实图像数据增强方法的补充。此外,Zhao[302]提出了用于GAN训练的可微分增强(DiffAugmentation),该方法将可微分增强技术应用于真实样本和生成样本,这提高了稳定性和收敛性能,在训练数据有限的情况下尤其有效。应该注意的是,用于数据处理的几种技术是计算密集型的,例如数据增强和重要性采样,在给定的计算预算中使用这些技术时会带来权衡。Arazo[4]研究了在固定迭代次数的带预算训练中重要性采样和数据增强的相互作用,表明充分的数据增强比重要性采样方法具有更好的性能,并造成加速。
模型
在给定计算预算的情况下,可以导出模型参数的最佳数量和数据量,Kaplan[110]建议在中等数据上训练非常大的模型,并在收敛前提前停止。Geiping&Goldstein[68]、Izsak[104]还证明,训练大模型而不是小模型,适合低预算情况。类似的发现得到了Li的支持[142],其提出了一种训练策略,
该策略训练更大的模型(更宽、更深)并提前停止,然后通过量化和修剪对其进行大量压缩,而不是训练更小的模型,直到以相同的预算收敛
。较大的Transformer模型,比起较小的Transformer模型,收敛得更快,并且压缩更具鲁棒性。此外,训练大模型还有其他好处,例如Wei[272]表明,模型扩展可以为语言模型带来额外的(涌现)能力。在决定了模型的参数数量后,仍然可以找到并优化模型的有效架构,加快带预算训练或提高性能。
Izsak[104]研究了使用单个低端深度学习服务器在24小时内对类似BERT的掩码语言模型进行预训练。他们提出了一种训练方法,使用稀疏token预测(仅预测掩码tokens)[149]训练大模型。在RTX 2080Ti上训练24小时的预算与Izsak设定的预算相似[104]。Geiping&Goldstein[68]证明,从注意块的QKV投影中消除偏差并禁用所有线性层偏差可以提高计算效率。他们还研究了在注意和FFN块[5]之前应用层归一化(LN),使用门控线性单元[221]可以提高性能。最近,Pan[185]从模型结构的角度观察到,Transformer模型在不同的训练阶段表现出不同程度的冗余。他们提出了一个带预算训练框架,在固定预算下控制模型结构的激活率,主要是注意头的数量、MLP的隐藏维度和训练过程中视觉tokens的数量,调整每个模型复杂度级别的持续时间。