登录
首页 >  科技周边 >  人工智能

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

来源:机器之心

时间:2023-10-04 19:56:12 407浏览 收藏

积累知识,胜过积蓄金银!毕竟在科技周边开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Chinchilla之死:只要训练足够长时间,小模型也能超过大模型》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

2022年3月,DeepMind发表了一篇名为《训练计算优化的大型语言模型》的论文,通过构建Chinchilla模型得出了一个结论:大型模型存在训练不足的问题,模型的大小和训练token的数量应该以相等的比例进行扩展。换句话说,模型越大,所需的训练token也应该越多

但事实可能并非如此,近日,博主 Thaddée Yann TYL 写了一篇题为《Chinchilla 之死》的文章,其中分析解读了 OpenAI 与 DeepMind 几篇论文中的细节,得到了一个出人意料的结论:如果有充足的计算资源和数据,训练足够长时间,小模型的表现也可以超越大模型。

多算胜,少算不胜。——《孙子兵法》

为了避免将算力浪费于缓慢的收敛过程中,进行外推是非常重要的。毕竟,如果你不得不步行去珠穆朗玛峰,你不会只靠眼睛辨别方向,而是会使用 GPS

但有时候,你又不得不把视线从 GPS 上移开,看看道路。有些东西是无法通过简单的公式推断出来的。对十九世纪的物理学家来说,紫外灾变( Ultraviolet catastrophe)便是如此;而现在,LLM 亦是如此。我们估计在中心位置附近有效的东西可能在远处会出现巨大的偏差……

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型
                               《我的世界》的边境之地(far lands),这是突然扭曲并与自身重叠的悬崖之地。

Chinchilla 是什么东西?

更小的模型执行的乘法次数较少,因此训练速度更快。然而,根据理论,更小的模型最终会达到自身知识容量的极限,并且学习速度会变慢;而具有更大知识容量的大型模型在给定的训练时间后会超过小模型,表现出更好的性能

在评估如何在训练期间获得最佳性价比时,OpenAI 和 DeepMind 都会试图绘制帕累托边界(Pareto frontier)。虽然他们没有明确说明他们使用了该理论来绘制,但 OpenAI 曾说过的一句话暗示存在这个隐藏假设:

我们预计更大模型的表现应当总是优于更小的模型…… 大小固定的模型的能力是有限的。

这一假设是计算帕累托边界的基础。在Chinchilla研究中,图2展示了经过大量训练的不同大小模型的训练损失变化情况。初看之下,这些曲线与理论相符:较小的模型一开始的损失较低(表现更好),但损失降低的速度最终变慢并被较大模型的曲线超越

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

需要重新写的内容是:“比较许多不同模型大小的损失曲线的Chinchilla图。”

在这张图中,当较小的模型输给较大的模型时,他们会标记一个灰色的点。这些点连接起来形成了帕累托边界,这是他们计算缩放定律的方法

这一假设有个问题:我们不知道如果让更小的模型训练更长时间会发生什么,因为他们在小模型被超越时就不再继续训练它们了。

接下来我们来看一下Llama的论文

Chinchilla 是否具有羊驼的视野?

在今年年初,Meta进行了四个不同大小的模型训练。与其他研究不同的是,每个模型都经过了非常长的训练时间,即使是较小的模型也是如此

他们公布了所得到的训练曲线:

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

                                                四个不同大小的  Llama 模型的训练损失曲线

每一条曲线都会首先以幂律的方式急剧下降

2. 随后,损失开始以近乎线性的方式下降(对应于一个相当稳定的知识获取速度)

在这条曲线的最右端,直线趋势被稍微打破,因为它们稍微变得平缓了一些

首先,对于曲线末端的变平情况,这里解释一下人们可能有的一个微妙的误解。这些模型都是通过梯度下降训练的并且使用了可变的学习率(大致来说,这个超参数定义了每次朝梯度方向前进的程度)。为了获得优良的训练效果,学习率必须不断降低,这样模型才能检测到源材料中更细微的模式。他们用于降低学习率的公式是最常用的余弦调度(cosine schedule)。

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

在余弦调度下,学习率与训练步数的函数关系:学习率首先线性增长,然后下降且下降速度变快,之后到达中途一个转折点,下降速度再减慢。

从这张图中可以看到,在训练结束时,余弦调度会停止降低学习率,此时已经得到一个很好的近乎线性的训练损失曲线。学习速度减慢就是这种做法造成的。模型并不一定不再具有以同样近乎线性的速率学习的能力!事实上,如果我们能为其提供更多文本,我们就能延长其余弦调度,这样其学习率就会继续以同样速率下降。

模型的适应度图景并不取决于我们供给它训练的数据量;所以学习率下降趋势的改变是没有道理的。

不过这并非本文的重点。

训练损失曲线可能在另一方向上也存在误导性。当然,它们训练使用的数据是一样的,但它们处理这些数据的速度不同。我们想知道的并不是模型的样本效率如何(在这方面,更大的模型显然可以从其所见数据中学到更多)。让我们想象一场比赛:所有这些模型同时开始起步,我们想知道哪个模型首先冲过终点线。换句话说,当在训练时间投入固定量的算力时,哪个模型能在那段时间内学到更多?

幸好我们可以把这些损失曲线与 Meta 提供的另一些数据组合起来看:每个模型训练所用的时间。

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

让我们先来谈谈上面我们看过的那张 Chinchilla 图吧。这张图只占整个图像的左侧一小部分。在这个小部分中,我们可以看到 Chinchilla 记录了相同的行为。以 7B 版本为例,它的损失下降速度一开始比更大的模型快得多,然后逐渐减慢。之后,13B 版本的模型超过了它,并率先达到了1.9

然后,抵达边境之地,意外的转折出现了:7B 版本进入了近乎线性的疆域,损失稳步下降,看起来似乎走上了反超 13B 版本之路?如果能训练 7B 版本更长时间,说不好会发生什么。

但是,13B 和 33B 版本之间似乎也有类似的现象,其中 13B 版本起初的 Chinchilla 减慢也使其呈现出近乎线性的趋势,这时候 13B 版本的损失下降速度似乎很快!33B 其实胜之不武,因为它超越 13B 版本时已经用去了超过两倍的计算时间。

33B和65B版本之间也出现了相同的先减速再加速的现象,以至于实际上从未被65B超越。这幅图的内容打破了OpenAI和Chinchilla的假设:更大的模型并没有取得胜利(至少目前还没有)。他们检测到的这种减速实际上并不是由于达到了某个能力极限!

尽管如此,7B 模型的线还是有点不尽如人意。如果 Meta 能训练更长时间就好了……

没有必要再悬念了:他们已经训练完毕!他们发布了 Llama 2!

是时候证实我们的怀疑了

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

                                                四个不同大小的 Llama 2 模型的训练损失曲线

同样,可以获得训练时间

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

Llama 2 的训练损失与所耗费的 GPU 时间需要重新编写

一眼就能看出,这里的训练损失曲线与Llama 1不同,尽管这些基础模型是一样的。事实证明,Llama 2的训练采用了双倍的上下文大小和更长的余弦调度,不幸的是,这对所有模型的大小都产生了负面影响。然而,更小的模型受到的影响比更大的模型更严重。因此,结果是,在Llama 1的训练时间内,33B模型始终优于65B模型;而在Llama 2的训练时间内,34B模型稍逊于70B模型之前

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

更重要的是,训练速度的比较强烈地佐证了之前对Llama 1的猜想

1. 在开始阶段,较小的模型比较大的模型更快

2. 然后,更小的模型速度变慢,并被更大的模型超越(按照 Chinchilla)。

3. 但再然后,模型进入近乎线性的区域,这时候更小的模型能更快地下降,获取更优的知识,它们再次超越更大的模型。

这就带来了一个有关训练方法的结论:与普遍的看法相反,更大的模型会产生更差的结果。如果你必须选择一个参数大小和数据集,你可能最好选择 7B 模型,然后在数万亿 token 上训练 7 epoch。

请观察一下7B模型近乎线性的区域,然后将其模式推广到70B模型,观察70B模型训练停止时的情况:如果将70B模型的训练资源用于7B模型,可能会达到更低的困惑度!

从 Llama 2 的曲线还能看到另一点:Llama 1 曲线末端的学习减速实际上是余弦调度造成的。在  Llama 2 的训练中,在对应于 1 万亿 token 读取数的位置,就完全没有这种减速。

实际上,可能的原因是这样的:在相同的位置上,Llama 2 7B 模型的质量低于 Llama 1 7B 模型,可能是因为其余弦调度被拉长了!

我们现在回到那篇关于 Chinchilla 的论文,以证明这一点。在论文的附录 A 中的图 A1 中,作者进行了一系列消融实验,通过使用不同的余弦调度参数来调整学习率曲线的延展方式

Chinchilla之死:只要训练足够长时间,小模型也能超过大模型

余弦调度消融研究的内容需要进行改写

他们指出,当学习率曲线没有延展时,能够实现最低的损失。这一观点得到了图表的支持,但其中也存在一些问题。在读取了600万个标记后,上图模型的训练损失低于2.8;与此同时,在相同的位置,下图模型的训练损失表现更好。然而,这两个模型之间的差异仅仅是余弦调度!由于下图模型注定会处理更多的训练数据,所以计算了更多步骤的「未拉伸的」余弦调度,这实际上产生了拉伸效果。如果学习率按照分配给更少训练步骤的余弦调度进行,那么在相同的训练时间下,损失会更低

更广泛地说,这会引出一个有待解答的问题:如果余弦调度不是最优的,那么曲线的尾部形状应该是什么样子?

重写内容时,需要将原文链接改为:

需要重写的内容是:https://espadrine.github.io/blog/posts/chinchilla-s-death.html

以上就是《Chinchilla之死:只要训练足够长时间,小模型也能超过大模型》的详细内容,更多关于工程,Chinchilla的资料请关注golang学习网公众号!

声明:本文转载于:机器之心 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>