大家好,这里是 NewBeeNLP。分享符尧博士关于大语言模型的数据工程方面的一些见解。
take-home message: 高质量数据才是大语言模型取胜的关键,其中数据构造的格式、不同类型数据的占比,数据喂给模型的顺序对模型学习的速度都有所影响。
随着大家逐渐认识到高质量数据的关键作用,研究机构和开源社区对于大语言模型的研究重心逐步转向了 数据工程 。那么,什么是高质量数据?又该如何优化呢?
比如
虽然通常使用下一个词的预测损失来评估预训练的效果,但是我们更希望去优化这个损失的下降速度(比如使得学习曲线更陡峭)。为了评估模型的学习速度,可以考虑用“grokking”来作为评价指标。
Grokking means at a certain step of training, the model suddenly learns a skill and transits from memorization to generalization
比如下图我们可以看到,在不同的超参数条件下,模型泛化的速度是不同的。
理想情况下我们希望最大化模型实现泛化的速度。由于模型在不同任务上实现泛化需要的学习时间是不一样的,因此要加速grokking意味着我们希望模型在不同任务上都要学得快一些(move the dots leftwards)
为了更好的观察模型学习的动态过程,记得多保存训练过程的中间模型。
相同数据采用不同的数据格式对于学习的速度也是有影响的
不同类型数据喂给模型学习的顺序不同对于学习的速度也是有影响的
训练数据中不同来源数据的配比对于学习的速度也是有影响的
不过这些在数据工程上发现的trick在不同规模的模型之间可能没法迁移,数据工程在模型和数据scaling到一定程度可能也就失效了
在训练过程中,模型会从微观到宏观逐渐学习不同的技能,从不可解释到可解释再到展现出统计特性。不同技能的学习速度是不一样的,但整体来看会是一条光滑的对数线性损失曲线。
从单一技能的评估或者训练loss来评价模型的学习都不是太理想,要是存在一个更理想的指标能够反应模型的capability就好了
模型能够学习并展现出泛化能力的原因是它可能已经学习了数据的生成过程。Kolmogorov复杂性是指生成数据的最小算法描述长度。从无损压缩的角度看,语言模型被视为(不可计算的)Kolmogorov压缩器的近似。语言模型的权重 不是直接编码数据,而是编码了生成数据的过程。
[1]
原文链接: https://yaofu.notion.site/An-Initial-Exploration-of-Theoretical-Support-for-Language-Model-Data-Engineering-Part-1-Pretraini-dc480d9bf7ff4659afd8c9fb738086eb