当前位置: 首页 > 科技观察

模型大十倍,性能提升多少倍?谷歌研究人员进行了一项研究

时间:2023-03-20 21:51:56 科技观察

随着深度学习模型变得越来越大,任何形式的超参数调整都会变得非常昂贵,因为每次训练运行都可能花费数百万美元。因此,一些研究旨在探索“随着模型规模的增加,性能提升程度”的规律。进行此类定期预测有助于将较小规模的研究扩展到更大、更昂贵但性能更高的环境。通过利用在多种模型尺寸下进行的小规模实验,可以找到简单的函数比例关系(通常是幂律关系),在扩展训练所需的计算量之前预测大型模型的性能。这个理论很好,但在实践中显然很难做到这一点。如果不小心,推断扩展性能可能会产生误导,导致公司投入数百万美元来训练一个性能不比较小模型更好的模型。本文将通过一个示例来说明这种情况是如何发生的以及发生这种情况的原因之一。作为研究缩放效应的示例,假设我们的目标是在具有3个隐藏层的超宽MLP中训练ImageNet。我们将从64、128和256个隐藏大小开始,并使用它们来选择超参数,在本例中为Adam找到3e-4的学习率。我们还将训练长度固定为30k权重更新,每批128张图像。接下来,我们可以尝试了解我们的模型如何随着隐藏层大小的变化而变化。我们可以训练各种尺寸的模型并查看性能如何变化,绘制结果。具有不同隐藏层大小的8个不同模型的性能(以蓝色显示)。拟合线性回归(黑色虚线)应该理想地预测给定隐藏层大小的损失。您会注意到数据看起来呈惊人的线性。太好了,我们找到了一个“规则”!我们可以使用最小二乘法找到这种线性关系的系数:loss(hsize)=7.0-0.275log(hsize)。根据经验,这似乎适用于隐藏层大小的两个数量级以上。好的插值是令人兴奋的,我们认为我们可以将隐藏大小外推一个数量级以上来训练更大的模型。然而,令人沮丧的是,我们发现模型在实际情况下的表现与预测曲线有明显偏差。较大模型(以红色显示)实现的性能非常差,远低于我们对较小模型(黑色虚线)的预测。在现实世界中,考虑到当今模型的规模,像这样的错误可能会造成数千甚至数百万美元的损失。在>100亿个参数的范围内,几乎不可能进行任何类型的实验来发现模型的错误。幸运的是,我们的示例工作足够小,可以进行详尽的实验测试——在这种情况下,我们可以运行12个模型大小,每个模型有12个不同的学习率(每个都有3个随机初始化),总共432次试验。上图显示了我们使用12种不同学习率训练12种不同模型大小的结果。每个缩略图使用不同的表示。在(a)中,针对不同的隐藏层大小显示了实现的损失,学习率以颜色显示——我们之前的推断是使用单一学习率。在(b)中,我们显示了给定学习率的损失,其中隐藏层的数量是彩色的。较大的模型实现较低的损失,但需要较小的学习率。在(c)中,我们展示了一个显示学习率与隐藏层大小的热图,其中每个像素都是完整训练运行的结果。在(d)中,我们查看给定隐藏层大小的最佳学习率。有了这些数据,故事就变得清晰了,也就不足为奇了。随着我们增加模型大小,最佳学习率会缩小。我们还可以看到,如果我们简单地以较小的学习率进行训练,我们将接近我们最初为给定模型大小预测的性能。我们甚至可以对最佳学习率和模型大小之间的关系进行建模,并使用该模型得出另一种预测。最佳学习率与隐藏层大小(d)的关系图看起来是线性的,因此组合起来没有太大障碍。即使有这样的修复,我们怎么知道这不是用其他一些超参数再次执行此操作的技巧,在下一个隐藏大小数量级上犯严重错误?学习率似乎很重要,但是学习率时间表呢?其他优化参数呢?架构决策呢?宽度和深度之间的关系是什么?初始化呢?浮点数的精度(或缺乏精度)怎么样?在许多情况下,各种超参数的默认值和可接受值设置在相对较小的范围内——谁能说它们适用于更大的模型?随着大型模型的训练成为学术界的新趋势,模型体积膨胀之间的关系问题似乎不断浮出水面。即使像此处显示的使用模型大小与学习率的比率这样简单的事情也并不总是有效(例如为语言模型指定微调过程)。这里值得记住的是这篇论文《Scaling Laws for Neural Language Models》讨论模型体积之间的关系:https://arxiv.org/abs/2001.08361里面讨论了宽度、深度、体积、LR的关系等很多问题,还有是Batchsize之间的关系(https://arxiv.org/abs/1812.06162),但研究人员也承认他们忽略了很多其他问题。他们还讨论了计算和数据大小之间的关系,但我们不在这里讨论或进行更改。他们提出的缩放定律是在假设底层模型是用性能最好的超参数训练的假设下设计的。那么,对于潜在的误导性推论,我们能做些什么呢?理想情况下,我们应该很好地理解模型的各个方面如何随规模变化,并利用这种理解来设计更大规模的模型。否则,外推似乎令人担忧,并可能导致代价高昂的错误。然而,考虑到有多少因素在起作用,要完全理解这一点是不可能的。考虑到计算成本,在每个尺度上调整每个参数似乎不是正确的解决方案。那我现在该怎么办?一种可能的解决方案是使用比例定律来预测性能限制。随着规模的扩大,如果性能偏离幂律关系,则应将其视为未正确调整或设置的信号。听说这是OpenAI经常使用的一个idea。换句话说,当扩展没有按预期工作时,可能意味着发生了一些有趣的事情。知道要做什么或调整哪些参数来修复这种性能下降可能极具挑战性。在我看来,必须在使用比例定律推断更大范围内的性能与实际评估性能之间取得平衡。从这个显而易见的意义上说,它们只是对实际操作的粗略估计。随着模型缩放研究的发展,我们希望这种平衡可以变得更加明确,并且可以更多地利用缩放关系来进行更多的小规模研究。以这个特定的例子为例,虽然我们发现具有固定学习率的简单性能预测没有外推,但我们确实发现了模型大小和学习率之间的线性关系,这导致模型可以在测试模型上表现良好推测大小范围。如果我们尝试外推到更大的模型,是否还有其他一些我们遗漏的因素?有可能,不进行实验很难知道。