一个简单的网站搭建教程,郑州工作,网站大全浏览器,如何推广自己的店铺概述
在自然语言处理#xff08;NLP#xff09;领域#xff0c;大型语言模型的发展一直是研究的热点。这些模型通过增加参数数量和训练数据量来提升性能#xff0c;但这种增长趋势是否会有一个极限#xff1f;实际上#xff0c;研究者们已经注意到#xff0c;为了有效地…概述
在自然语言处理NLP领域大型语言模型的发展一直是研究的热点。这些模型通过增加参数数量和训练数据量来提升性能但这种增长趋势是否会有一个极限实际上研究者们已经注意到为了有效地训练这些拥有海量参数的语言模型所需的训练数据量也同样庞大。 以Gopher模型为例它拥有2800亿个参数而Chinchilla模型虽然只有700亿个参数但由于其训练数据量是Gopher的四倍因此在性能上更胜一筹。这表明单纯的参数数量增长并不一定能够带来性能上的提升除非我们能够提供相应增长的、高质量的训练数据。 这种现象可以通过“缩放规则”Scaling Laws来解释它描述了模型规模和性能之间的关系。缩放规则指出为了实现性能上的提升我们需要按照特定的比例增加模型的参数数量和训练数据量。然而这种增长模式在实际应用中可能会遇到瓶颈因为可用的高质量数据是有限的而且模型规模的增加也会带来计算资源和效率上的挑战。 例如MT-NLG 是一个拥有 580 亿个参数的大型语言模型在应用于龙猫缩放定律时可能需要在 30 TB 的文本上进行训练。换句话说要想通过增加模型参数数量来获得无限好的性能所需的数据量可能远远超过互联网上现有的可训练文本数据集。 这里介绍的论文基于这些可能性提出了语言模型在训练数据数量有限时的数据约束扩展法则。此外本文还提出了一种在数据有限的情况下提高语言模型性能的方法。
源码地址https://github.com/huggingface/datablations 论文地址https://arxiv.org/pdf/2305.16264.pdf
分配和回报
在考虑语言模型的缩放法则时分配和回报是重要的概念。扩展法则是这样一条法则语言模型中可以增加哪些内容来提高语言模型的性能其背景是希望通过优化有限计算资源的分配Allocation来最大化投资回报Return从而提高语言模型的性能。
举个形象的例子子弹头列车的速度需要提高。换句话说如果将越来越多的资金用于改进新干线的车体和发动机速度就会提高。然而预算是有限的。他们不确定应该投入多少资金来改进新干线车身减少空气阻力或改进新干线电机提高电机输出功率。因此他们希望了解新干线速度、新干线车体改进和新干线电机改进之间的关系并做出最佳预算分配以便在当前预算有限的情况下获得最大的速度改进效果。
子弹头列车速度的提高→语言模型性能预测准确性的提高“金钱→计算资源”如果再联想到 车身空气阻力→模型参数数量 和 “电机输出功率→训练数据数量”那么这就是语言模型的缩放定律。
问题是随着计算资源的增加语言模型的性能能提高多少在给定计算资源的限制下模型参数数量和训练数据数量的最佳分配是什么问题是
因此如果计算资源的预算越多基本模型和语言模型的预测准确率就会越高但对于每种预算模型参数和训练数据数量的最佳值是多少这就是缩放法则。因此在缩放法则的背后存在着这样一个优化问题。
缩放规则
以往的研究假设数据取之不尽用之不竭。
因此在背景优化问题等式 1中对训练数据的数量没有限制。 等式 1.传统缩放定律背后的最小化问题。
在公式 1 中预测误差 LL 越小语言模型的性能越好是需要最小化的函数它取决于模型参数 N 的数量和训练标记 D 的数量。在计算资源为 C 的约束条件下多少个模型参数 N 和多少个训练数据 D 能使 L 最小化这就是最小化问题。
计算资源数量的计量单位是 “FLOPs”。FLOPs 是衡量计算机计算速度的单位。FLOPs 值越高的计算机运算速度越快。对于需要高级计算的任务如游戏或科学模拟来说这是一个重要的性能指标因为 FLOPs 似乎更像是计算速度的衡量标准而不是计算资源的衡量标准这似乎有点不妥。
就目前的情况而言当只有一台速度较慢的计算机时过多的模型参数和过多的训练数据将无法实际完成学习过程。那么在只有一台慢速计算机的情况下模型参数数量和训练数据数量的合适设定值是多少才能在实际计算时间内达到最大预测精度呢这或许值得考虑。
以往的研究预测语言模型因计算资源输入而产生的性能提升效应Return与训练语言模型所用计算资源的平方成正比。根据这一假设为了与实际实验数据相匹配它与多少平方成正比比例系数是多少
计算资源分配的最佳平衡Allocation大致是指在不断增加的训练数据数量和模型参数数量之间平均分配。
拟议的数据约束缩放
为了研究如何充分利用有限的数据本文提出了一种缩放规则该规则施加了有限数据和计算资源的限制。
技术要点 1. 将训练代币总数分解为唯一训练代币数和迭代次数并查看迭代次数的新投资回报率
在所提出的数据限制缩放规则中栗鼠缩放规则中的训练数据数量 D 被重新定义为训练标记总数 D以深化数据限制下的考虑。换句话说该定义不再简单地看与所给训练数据数量的相关性而是将多次训练的同一数据也算作训练标记数。
然后训练标记总数 D 被分解为唯一训练标记数 U_D 和迭代次数 Repoch 数 - 1。迭代次数是一个数字表示在深度学习的训练过程中使用了整个训练数据的多少次迭代。一旦全部训练数据用完则算作一个epoch。一般来说epoch 越多给定训练数据的预测准确率就越高。另一方面过多的epoch会导致对训练数据的过度训练和对未知数据的预测性能低下。以往研究中的缩放规则只考虑了迭代次数 R0。本文的新颖之处在于研究了 R 0 的情况即 R 的投资回报率。
对于模型参数个数 N为了表达的一致性拟合一个唯一标记所需的基本模型参数个数为 U_N该赋值的迭代次数为 R_N。
技术要点 2.设置唯一训练代币的数量上限
在传统的栗鼠缩放定律中只有计算资源受到限制。在数据约束下的缩放定律中唯一训练标记 U_C 有一个新的预算 D_C。因此在公式 1 所示的最小化问题中增加了新的唯一训练标记数 U_D ≤ 唯一数据预算 D_C 约束。 公式 2.数据受限缩放规则背后的最小化问题。
为了与实际实验数据相匹配N 和 D 的幂的比例系数是多少比例系数是多少
数据约束缩放规律
介绍了数据约束缩放定律与实际实验数据拟合的主要结果。
图 1 显示了对训练数据进行迭代训练重复训练时的计算资源投资回报。 图 1训练数据迭代训练期间计算资源的投资回报。
在图 1 中横轴是标记数历时纵轴是语言模型的测试误差越小性能越好。橙色实线是根据数据约束缩放规则预测的语言模型测试误差。橙色虚线是假设标记数都是唯一标记新数据时的测试误差。
从图中可以看出在 4 个 epochs 之前对相同数据的重复训练与添加新数据具有相同的性能提升效果从 4 个 epochs 到 40 个 epochs性能提升效果迅速下降40 个 epochs 之后准确率提升效果消失。从 4 个 epoch 到 40 个 epoch性能提升效果迅速下降40 个 epoch 之后准确度提升效果消失。
图 2 显示了训练数据迭代训练过程中计算资源的最佳分配值。 图 2.训练数据迭代训练过程中计算资源的最佳分配。
蓝色虚线是计算资源数量相同时的结果。黑线是代币数为所有唯一代币新数据时的最优分配预测红线是根据数据约束缩放规律得出的最优分配预测。蓝色虚线与黑线的交点和蓝色虚线与红线的交点是在给定相同计算预算的情况下有数据限制和无数据限制迭代学习的最优分配之间的差异。
从图中可以看出在数据受限的情况下作为计算资源的分配平衡增加历元数比增加模型参数数更好。这是与传统的栗鼠缩放规则的不同之处。
数据补充
数据受限缩放规则表明即使独特数据有限增加历时次数也能在一定程度上提高性能。但同时也表明增加历时次数对性能的提高是有限度的。因此本文提出了一种补充独特数据不足的方法。 图 3独特的数据完成方法。
如图 3 所示除了目前所述的对唯一数据的迭代学习重复外我们还提出了一种通过填充程序代码填充代码和对唯一数据进行排序过滤来进行迭代学习的方法。
顾名思义用代码填充 就是在缺乏自然语言文本数据的情况下为程序提供代码。
从字面上理解过滤也意味着对分类后的数据进行学习。在这种情况下我们提出了两个过滤器重复过滤器Deduplicate和复杂性过滤器Perplexity重复过滤器去除重复的文本而复杂性过滤器只收集对语言模型的预测具有高置信度的文本。(Perplexity 是一个指标perplexity 越小语言模型预测的可信度就越高。例如如果有两个句子AThe cat is curled up in the kotatsu 和 B“The cat is curled up on the apple”那么更有可能的句子是 “The cat is curled up in the kotatsu”。因此句子 A 的 PERPLEXITY 要小于句子 B。
评估结果
独特数据完成方法的评估结果如图 4 所示。 图 4补充方法的评估结果。
纵轴为 19 项任务的平均性能横轴为数据预算。模型参数数为 42 亿唯一令牌总数为 840 亿。横轴上 100% 的数据预算指的是 840 亿个代币。图中每一点都是使用不同种子训练模型五次的平均值标准偏差以阴影显示。
用代码填充的效果
图中紫线表示对训练数据进行迭代训练的结果红线表示用 python 代码代替迭代训练的结果。在数据预算较低时没有性能提升效果导致性能下降。当数据预算较大时给出 python 代码会有性能提升但性能提升效果不稳定。至少似乎没有性能下降的副作用。
论文报告了添加 python 代码的效果显示了在 WebNLG 和 bAbI 任务上性能的显著提高其中 WebNLG 是将结构数据如 Taro Nippon生日2000_01_01转化为句子的生成任务而 bAbI 是逻辑推理。我们假设学习 python 代码可能提供了随时间跟踪状态的能力而这正是这些任务所必需的。
论文指出通过在 代码填充 中加入程序代码并进行 4 次历时迭代训练将数据量增加一倍使训练标记总数增加了 8 倍而这一训练标记总数与唯一标记数量一样有效。
过滤的效果
图中的星星显示的是对数据进行分类后反复训练的结果。虽然看不清楚但白色的星星是 Perplexity 过滤器的结果橙色的星星是 Deduplicate 过滤器的结果。在这个基准测试中Deduplicate 过滤器似乎没有任何改进。另一方面Perplexity 筛选器显示出了一些改进。
该论文认为使用重复数据过滤器Deduplicate filter后效果没有改善可能是由于以前的研究曾报告过数据重复对语言模型产生负面影响的案例而且以前研究中的基准可能是有效的。
从根本上说过滤器的有效性背后的逻辑首先在于它们通过排除这些异常高的数据或不可能的句子解决了出现次数异常多的句子或一般不可能的句子的过度拟合问题降低了一般句子的处理能力
论文指出只有在噪声数据集中加入滤波器才能提高性能。
总结
在本文所述的论文中提出了一种使用有限训练数据的语言模型性能改进规则。结果表明即使使用相同的训练数据迭代训练也能将性能提高到大约四个历元这与添加不同训练数据的效果类似。
关于模型参数数和训练代币总数的优化分配结果表明在计算资源相同的情况下减少模型参数数和增加训练代币总数比传统的缩放法更好。
为了有效利用有限的文本数据集还有人建议不仅应在同一数据上反复训练程序代码而且应将程序代码作为训练数据并对数据进行排序。从这次实验的结果来看建议只对有噪声的数据集进行数据排序基本上在同一数据上进行迭代学习并将程序编码也作为训练数据会更有效率。