LLMs——扩展数据受限的语言模型解决方案

概述

在自然语言处理(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 中,预测误差 L(L 越小,语言模型的性能越好)是需要最小化的函数,它取决于模型参数 N 的数量和训练标记 D 的数量。在计算资源为 C 的约束条件下,多少个模型参数 N 和多少个训练数据 D 能使 L 最小化?这就是最小化问题。

计算资源数量的计量单位是 “FLOPs”。FLOPs "是衡量计算机计算速度的单位。FLOPs 值越高的计算机运算速度越快。对于需要高级计算的任务(如游戏或科学模拟)来说,这是一个重要的性能指标,因为 FLOPs 似乎更像是计算速度的衡量标准,而不是计算资源的衡量标准,这似乎有点不妥。

就目前的情况而言,当只有一台速度较慢的计算机时,过多的模型参数和过多的训练数据将无法实际完成学习过程。那么,在只有一台慢速计算机的情况下,模型参数数量和训练数据数量的合适设定值是多少,才能在实际计算时间内达到最大预测精度呢?这或许值得考虑。

以往的研究预测,语言模型因计算资源输入而产生的性能提升效应(Return)与训练语言模型所用计算资源的平方成正比。根据这一假设,为了与实际实验数据相匹配,它与多少平方成正比?比例系数是多少?

计算资源分配的最佳平衡(Allocation)大致是指在不断增加的训练数据数量和模型参数数量之间平均分配。

拟议的数据约束缩放

为了研究如何充分利用有限的数据,本文提出了一种缩放规则,该规则施加了有限数据和计算资源的限制。

技术要点 1. 将训练代币总数分解为唯一训练代币数和迭代次数,并查看迭代次数的新投资回报率

在所提出的数据限制缩放规则中,栗鼠缩放规则中的训练数据数量 D 被重新定义为训练标记总数 D,以深化数据限制下的考虑。换句话说,该定义不再简单地看与所给训练数据数量的相关性,而是将多次训练的同一数据也算作训练标记数。

然后,训练标记总数 D 被分解为唯一训练标记数 U_D 和迭代次数 R(epoch 数 - 1)。迭代次数是一个数字,表示在深度学习的训练过程中使用了整个训练数据的多少次迭代。一旦全部训练数据用完,则算作一个epoch。一般来说,epoch 越多,给定训练数据的预测准确率就越高。另一方面,过多的epoch会导致对训练数据的过度训练和对未知数据的预测性能低下。以往研究中的缩放规则只考虑了迭代次数 R=0。本文的新颖之处在于研究了 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 越小,语言模型预测的可信度就越高。例如,如果有两个句子,A:"The 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)后效果没有改善,可能是由于以前的研究曾报告过数据重复对语言模型产生负面影响的案例,而且以前研究中的基准可能是有效的。

从根本上说,过滤器的有效性背后的逻辑首先在于,它们通过排除这些异常高的数据或不可能的句子,解决了出现次数异常多的句子或一般不可能的句子的过度拟合问题,降低了一般句子的处理能力

论文指出,只有在噪声数据集中加入滤波器,才能提高性能。

总结

在本文所述的论文中,提出了一种使用有限训练数据的语言模型性能改进规则。结果表明,即使使用相同的训练数据,迭代训练也能将性能提高到大约四个历元,这与添加不同训练数据的效果类似。

关于模型参数数和训练代币总数的优化分配,结果表明,在计算资源相同的情况下,减少模型参数数和增加训练代币总数比传统的缩放法更好。

为了有效利用有限的文本数据集,还有人建议,不仅应在同一数据上反复训练程序代码,而且应将程序代码作为训练数据,并对数据进行排序。从这次实验的结果来看,建议只对有噪声的数据集进行数据排序,基本上,在同一数据上进行迭代学习,并将程序编码也作为训练数据,会更有效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大话设计模式-依赖倒转原则

依赖倒转原则 在大话设计模式这本书中,作者通过电话修电脑这个例子引入了面向对象设计的基本原则之一:依赖倒转原则。 概念 依赖倒转原则是面向对象设计的基本原则之一,它用于减少类之间的耦合,提高系统的灵活性和可维护性。在…

QT C++ sqlite 对多个数据库的操作

//本文描述,QT 对多数据库的操作。 //你可能会想,多数据库的操作时,查询语句怎么知道是哪个数据库。 //QT提供了这样一种构造函数 QSqlQuery(const QSqlDatabase &db) //指定数据库 //在QT6.2.4 MSVC2019调试通过。 //效果见下图&am…

Docker(二)Docker+ server部署极简前端页面

本篇文章介绍如何使用 Dockerserver 将一个极简前端页面进行部署 1.本地运行一个简单的前端页面&#xff0c;再把它部署到服务器上 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

prompt问题【中间不好】

问题1:longchain 关键词在中间容易被忽略掉 Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding 论文对大模型在长文本情况下的性能做了一系列实验研究&#xff0c;发现了一个有趣的“Lost in the middle”现象&#x…

贴片 AMC1200BDWVR 封装 SOIC-8 隔离放大器IC芯片

AMC1200BDWVR的应用领域相当广泛&#xff0c;主要涵盖以下几个方面&#xff1a; 工业控制&#xff1a;在工业自动化系统中&#xff0c;AMC1200BDWVR可用于精确地检测和控制电流&#xff0c;例如在电机驱动和电力转换系统中。 电源管理&#xff1a;该器件适用于各种电源系统&a…

【昇腾产品应用】英码科技EA500I基于昇腾Mind SDK实现实时人体关键点检测

在教育、体育、安防、交通、医疗等领域中&#xff0c;实时人体关键点检测应用发挥着至关重要的作用&#xff0c;比如在体育训练时&#xff0c;实时人体关键点检测可以精确、实时地捕捉运动员的动作&#xff0c;从而进行动作分析和优化&#xff1b;在安防应用场景中&#xff0c;…

Vue3:响应式数据的基本使用(ref、reactive)

一、前言 在Vue3中&#xff0c;如果数据不是响应式数据&#xff0c;当数据的值发生改变时&#xff0c;页面上的数据是不会发生改变的。因此本文主要介绍Vue3中响应式数据的使用&#xff0c;包括ref和reactive的基本使用。 二、ref 1、ref —— 创建基本类型的响应式数据 re…

Python-VBA函数之旅-globals函数

目录 一、globals函数的常见应用场景&#xff1a; 二、globals函数与locals函数对比分析&#xff1a; 1、globals函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;https://blog.csdn.net/ygb_1024?spm101…

Python的round与Excel的round不一样?

Python四舍五入怎么做 round()奇进偶舍round函数既不是“四舍五入”的原则&#xff0c;也不是“四舍六入无成双”的原则。 decimal round() 偶然发现python的round函数和excel的round函数对某些数据的处理结果不一致。有看到博主提到是奇进偶舍的方法&#xff0c;但经过验证和…

49-PCIE转网口电路设计

视频链接 PCIE转网口电路设计01_哔哩哔哩_bilibili PCIe转网口电路设计 1、PCIE转网口电路设计基本介绍 pcie转网口的设计&#xff0c;一般有intel (i350)和网讯&#xff08;wx1860&#xff09;两种方案。 2、PCIE转网口的方案 2.1、I350 2.2、WX1860 (网迅) 国产化&#…

linux C -- 消息队列

linux C -- 消息队列 前言一、System V(IPC)消息队列接口调用主要涉及到 msgget、msgsnd、msgrcv 和 msgctl 四个接口&#xff1a; 1、创建消息队列 msgget2、发送消息到队列3、从队列接收信息4、控制消息队列 msgctl5、删除消息队列 二、代码编写1、发送部分的代码2、代码完成…

BYOL(NeurIPS 2020)原理解读

paper&#xff1a;Bootstrap your own latent: A new approach to self-supervised Learning third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/models/selfsup/byol.py 本文的创新点 本文提出了一种新的自监督学习方…

uniapp picker 多列选择器用法

uniapp picker 多列选择器联动筛选器交互处理方法&#xff0c; uniapp 多列选择器 mode"multiSelector" 数据及筛选联动交互处理&#xff0c; 通过接口获取数据&#xff0c;根据用户选择当前列选项设置子列数据&#xff0c;实现三级联动效果&#xff0c; 本示例中处…

SEW减速机参数查询 2-2 实践

首先说说结论&#xff1a;在不和SEW官方取得沟通之前&#xff0c;你几乎无法直接通过查阅SEW官方文档得到相关减速机的所有技术参数&#xff1a;比如轴的模数和齿数&#xff0c;轴承的参数。我在周一耗费了一个上午&#xff0c;最终和SEW方面确认后才知晓相关技术参数需要凭借销…

Jenkins的安装和部署

文章目录 概述Jenkins部署项目的流程jenkins的安装启动创建容器进入容器浏览器访问8085端口 Jenkins创建项目创建example项目 概述 Jenkins&#xff1a;是一个开源的、提供友好操作界面的持续集成&#xff08;CLI&#xff09;工具&#xff0c;主要用于持续、自动构建的一些定时…

什么是Rust语言?探索安全系统编程的未来

&#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来 文章目录 &#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来摘要引言正文&#x1f4d8; Rust语言简介&#x1f31f; 发展历程&#x1f3af; Rust的技术意义和优势&#x1f4e6; Rust解决的问题…

电商技术揭秘三十:知识产权保护浅析

电商技术揭秘相关系列文章&#xff08;上&#xff09; 相关系列文章&#xff08;中&#xff09; 电商技术揭秘二十&#xff1a;能化供应链管理 电商技术揭秘二十一:智能仓储与物流优化(上) 电商技术揭秘二十二:智能仓储与物流优化(下) 电商技术揭秘二十三&#xff1a;智能…

deepinV23 Beta3安装cuda

文章目录 下载CUDA安装,以cuda11.6为例运行.run文件安装选项配置环境变量查看cuda版本重启计算机 卸载cuda deepinV23 Beta3对应的debian版本是12&#xff1a; bookworm指的是debian12&#xff0c; sid代表不稳定版。 下载CUDA 官网&#xff1a;https://developer.nvidia.com…

中华环保联合会获得国家“绿色制造体系” 第三方评价机构资格

近日&#xff0c;中华环保联合会成功获得工业和信息化部“绿色制造体系”第三方评价机构资格&#xff0c;可为企业、园区及相关机构提供全面的绿色制造体系评价服务&#xff0c;包括绿色工厂、绿色园区、绿色供应链等方面。 “绿色制造体系建设”是由工业和信息化部负责统筹推进…

redis异常:OOM command not allowed when used memory > ‘maxmemory‘

redis存储数据太多,内存溢出,导致异常 1.查看redis内存使用情况 登录redis后 info memory2.查看分配给redis的最大内存 config get maxmemory3.处理方式:拓展redis的最大内存 打开redis.conf文件,修改maxmemory 4.删掉键值重启redis后,发现删掉的数据又恢复了? redis根目录…