确定每次训练运行的步数

训练工作负载有两种类型:

  • 受计算限制
  • 没有计算限制

计算限制型训练取决于您在训练上花费的时间,而不是您具有的训练数据量或其他一些因素。换言之,“最佳”训练时间始终是“您可以承受的时间”。如果您以某种方式可以训练得更长或更高效,训练损失应该会下降。(经过适当的调整后,验证损失也应该会下降。)

加速计算绑定训练等同于改善训练。尽管如此,即使工作负载的计算受限,并不意味着训练时间较长或更快是改进结果的唯一方式。

如果训练不受计算限制,则您可以随意训练。但是,训练模型训练模型可能没什么用,甚至可能导致过拟合。如果训练不受计算限制:

  • 您可以训练极低的训练损失,使额外的训练可能会略微减少训练损失,但不会对验证损失造成显著影响。
  • 您可以更轻松地进行调节,尤其是在调整学习速率衰减时间表时,因为这些调整与训练预算的互动特别强大。相比之下,在计算受限的训练中使用较低的训练损失可能需要将学习率衰减时间表调整到完美。

无论指定的工作负载是否受计算限制,增加(跨批次)梯度方差的方法通常会减慢训练进度,进而增加达到特定验证损失所需的训练步骤数。以下任意情况都可能会导致高偏差:

  • 使用较小的批次大小。
  • 添加数据增强。
  • 添加某些类型的正则化(例如,丢弃正则化)。

确定训练不受计算限制时训练多长时间

目标:训练足够长的时间,使模型能够达到最佳结果,而不会浪费训练步骤。

您的主要目标是确保训练足够长的时间,使模型能够达到最佳结果,而不会浪费不必要的训练步骤。有疑问时,尽量避免进行较长的训练。在训练时间较长时,假设您正确使用回顾性检查点选择并且检查点足够频繁,则评估指标(例如精确率、召回率、AUC 或 F1)绝不应下降。

切勿调整研究中的 max_train_steps 数字。请改为选择一个值,并在所有试验中使用同一值。在这些试验中,绘制回顾性检查点选择找到的训练步骤,以优化 max_train_steps 的选择。

例如,如果最佳步骤始终是训练的前 10%,则最大步数就太大了。或者,如果最佳步骤始终是最近 25% 的训练,那么您可以受益于更长的训练,并重新调整衰减时间表。理想的训练步数会在架构或数据更改时(例如添加数据增强)发生变化。 下一部分将介绍如何使用恒定学习速率,让训练集“完美适合”所需的步数,从而为 max_train_steps 选择初始候选值。

如果训练过程有所改进,(例如,使用经过优化的优化器或优化的学习速率时间表),就可以降低 max_train_steps

使用学习速率扫除为 max_train_steps 选择初始候选算法的算法

您可以使用学习速率清除算法为 max_train_steps 选择初始候选样本。以下算法假设不仅可以“完美”地匹配训练集,而且可以使用恒定学习速率时间表来实现此目的。

  1. 如果能够完全适合整个训练集,则必须存在一种配置(一些值为 max_train_steps),完全适合训练集。找到任何此类配置,并将其值 max_train_steps 用作起点 N
  2. 运行恒定的学习速率清除(即网格搜索学习速率),而不增强数据,且不进行正则化(每个试验训练 N 步)。首先,您需要在学习速率方面达到最快速度并达到完美的训练性能所需的步骤数,作为 max_train_steps 的初步猜测。

注意:糟糕的搜索空间可能会导致自我欺骗。 例如,如果研究中的所有学习速率都太小,您可能错误地认为有必要使用非常大的 max_train_steps。至少,应确保研究中的最佳学习速率没有位于搜索空间的边界内。

当训练受计算限制时,决定训练多长时间

在某些情况下,训练损失将无限期地持续改进,因此您的耐心和计算资源成为限制因素。但是,只要你能够负担得起,你应该进行训练吗?不一定。请注意以下几点:

  • 您可以运行更多短时间实验,为希望启动的模型保留最长的“生产时长”,从而更有效地进行微调。
  • 随着训练的训练时间接近您的耐心等待极限,调整实验会与您的潜在发布候选项目相关,但您可以完成的实验数量会更少。
  • 您可能只需回答大约 10% 的生产时长即可回答许多问题。但是,目前此限制下得出的结论可能不适用于生产环境中 20% 的实验,更不用说 100%。

随着每轮训练步数的增加逐渐增加,这是一个合理的做法。您可以随意运行任意几轮,但 1-3 轮方式最为实用。从本质上讲,您可以通过非常快的周转时间来尽可能深入地理解相关问题,同时需要权衡以下因素:

  • 调整全面程度。
  • 与最终的最长运行时间相关。

在给定每次试用期的限制生成有用的数据分析后,请增加训练时间并继续调整,并根据需要从较短的运行时间仔细检查您的结论。首先,我们建议进行两轮调整:

  • 第 1 轮:缩短运行时长,找到合适的模型和优化器超参数。
  • 第 2 轮:在良好的超参数点运行很短的时长来获取最终模型。

从第 1 轮到第 2 轮的最大问题是:

您如何调整学习率衰减时间表。

在不同轮次之间调整学习率时间表时,一个常见的问题是使用学习率过低的所有额外训练步骤。

第 1 轮:大量进行短期训练

遗憾的是,无法保证在短小且不完整的训练中找到的超参数是明显增加的训练时长的理想选择。不过,对于某些超参数,良好的选择通常具有相关性,因此第 1 轮有用。在较短的运行作业中找到哪些超值值会成功转移到较长的训练运行作业?我们还不知道,还需要进一步研究。 但根据我们到目前为止所掌握的情况,我们怀疑会降低转移概率:

  • 很有可能转移。在第一轮调整中,只需较少的训练步骤即可解决早期训练不稳定的问题。以下超参数最有可能被传输:
    • 预热时间
    • 初始化
  • 可能会转移。模型架构的巨大进步通常可以转移,但很多反例很有可能。
  • 可能会转移。以下超参数可能会传输:
    • 优化算法和超参数采用“松散”传输。
    • 数据增强。
    • 正则化。如果训练数据集无法完全符合训练集的标准,则模型可能处于一种正规化不太可能帮助的模式。
  • 不太可能会转移。学习速率时间表不太可能完全转移。训练计算最优大语言模型表明,即使是衰减时间表迁移,但我们并不认为这是正确的。例如,在少量训练步上调整 sqrt 衰减,然后扩展到大量步骤,导致大多数训练都发生在过小的步中。在达到极限训练预算上限的情况下,大多数时间表可能表现“足够好”,但如果微调,效果可能会显著提升。了解随机元优化中的短时偏差描述了尝试不明确选择学习率的危险。

第 2 回合:运行次数较少,但时长较长

运行第 1 轮的最佳超参数配置。

推测:🤖? 使用额外的步骤以高学习率延长训练期。例如,如果您使用的是线性时间表,则应将第 1 轮的衰减时长保持在固定不变,并在开头延长常量 lr。对于余弦衰减,请保留第 1 轮的基本 lr 并扩展 max_train_steps,如训练计算最优大语言模型中所述。

后续几轮的培训或许适合以下所有团队:

  • 非常成熟的建模
  • 调整流水线
  • 非常长时间且昂贵的生产运行培训

但是,额外的训练运行通常效率不高。

我们已经介绍了如何从第 1 轮转移到第 2 轮。 如果您不在意分析时间,并且优先考虑高效利用计算资源,那么我们建议在多轮调整中以指数方式增加训练运行时长(从而增加完成研究所需的端到端时间):

  • 在每一轮中,系统地确保您的选择继续提供良好的结果。
  • 通过流水线运行新创意,使用从第 i 步到第 i+1 步且运行时间越来越多的实验,逐步降低这些创意的风险。