清华发布Temporal Scaling Law,解释时间尺度对大模型表现的影响

众所周知,

语言模型调参!

预训练语言模型调参!!

预训练大语言模型调参!!!

简直就是一个指数级递增令人炸毛的事情,小编也常常在做梦,要是只训练几步就知道现在的超参数或者数据配比能不能行,那该有多好。

但现在,有一篇工作似乎正在令小编的梦想成为现实,那就是清华大学提出的Temporal Scaling Law。根据他们提出的这条规则,便可以通过当前训练步来准确预测未来训练步损失(loss)的下降情况,从而可以极大程度上提高各位炼丹师的效率。

此外,正所谓“重剑无锋,大巧不工”,这篇研究还发现在训练过程中并不需要针对token position添加权重,默认的预训练模式就足以达到非常好的效果

 GPT-3.5研究测试:

yeschat

GPT-4研究测试:

Hello, LLMs

Claude-3研究测试(全面吊打GPT-4):

AskManyAI

论文标题Temporal Scaling Law for Large Language Models

论文链接https://arxiv.org/pdf/2404.17785

Scaling Law

在介绍本文工作之前,先来回顾一下2020年由Kaplan等人首次提出的Scaling Law,即对于生成式Transformer模型,测试损失与模型大小、数据集大小和用于训练的计算量之间存在幂律关系(power-law relationship)。

此后,也陆续有研究在迁移学习(transfer-learning)和多模态预训练(multi-modal pre-training)验证了scaling law的存在。

Temporal Scaling Law

1. 从Scaling Law到Temporal Scaling Law

如前文所述,Scaling Law更侧重于建立测试损失与各个静态属性之间的关系,尽管Kaplan等人也提出测试损失与训练步之间遵从幂律,但这是建立在无限训练数据和训练步数前提下的,而这显然不符合我们的现实情况。

因此,本文在Scaling Law的基础上,进一步提出了考虑训练时间维度的Temporal Scaling Law,用以描述训练步与测试损失之间的关系,从而勾勒出大语言模型(LLMs)的预训练轨迹。

2. 实验设置

  • 训练数据:本文选用了Pile数据集作为预训练数据,这是一个包括22个领域的单语言大规模数据集

  • 测试数据:为度量测试损失,本文构造了两个测试数据,包括一个同样来自Pile的同分布数据集(IID-Val)和一个来自PG-19的异分布数据集(OOD-Val),都处理成1024 tokens的长度。测试损失取测试集中的所有序列损失的平均

  • 模型选择:本文选用了468M和1.2B两种大小的生成式语言模型

  • 训练方法:所有模型都需要经过400B tokens的训练,为捕捉时间维度训练进展,本文在训练阶段每隔1B个tokens创建一个checkpoint,并使用这些checkpoint进行测试损失评估

  • 度量指标:为评估temporal scaling law的预测结果对真实测试损失的拟合情况,本文采用了可决指数(coefficient of determination,)和均方误差(mean-square error,),前者表示所提出模型可解释原始数据方差的比例,后者度量所提出模型的预测结果对真实值的误差

3. Temporal Scaling Law

语言模型的本质是经过训练的统计模型,即根据先前所有token对下一个token的概率分布进行预测建模。,其中。因此,对于一个连续的序列,我们通常会认为位于后面的token会比位于前面的token更好预测,因为它有更多的背景信息,即:

图片

为验证这一假设,本文在IID-Val数据集上用468M和1.2B模型预训练400B tokens进行实验

图片

与假设一致,在两种大小的模型上都呈现出一致的规律,即输入序列中位置更靠前的token(背景信息更少)往往有更高的测试损失,而随着token位置越来越靠后逐渐收敛到一个固定的数值。通过以下倒数关系(reciprocal-law)的等式来拟合这种趋势,其中为token在输入序列中的位置

图片

其中,,和为拟合参数。其中,表示序列第一个token和最后一个token之间的损失差,为基于序列长度的缩放因子,为收敛因子,表示随着上下文的延长,每个token上损失的收敛值。下图展示了在468M模型的整个预训练阶段,IID Val上,,和的拟合曲线。

图片

当时(表示总训练步数),和收敛。因此,对于,取, 。此外还发现与学习率衰减呈强相关关系。

最终,未来测试损失可通过平均所有token位置的损失以进行预测:

图片

对比基于Kaplan等人幂律,倒数和对数关系的baseline,通过Temporal Scaling Law的未来损失预测具有显著优势:

图片

4. 不同token位置加权重?

前面的实验发现,位于输入序列头部的token往往更难预测,但随着训练更多的tokens以后,和逐渐趋于平稳,意味着LLMs开始对于不同位置的token平等学习。那么是否还需要对不同位置的token加不同权重以促进模型学习呢?

为验证这一点,本文将默认的预训练方法与3种简单的加权方法在8个公开评测数据上进行对比,分别是

  • 头部抑制:头部10%的token计算损失时乘以0.5的权重

  • 中部抑制:中部80%的token计算损失时乘以0.5的权重

  • 尾部抑制:尾部10%的token计算损失时乘以0.5的权重

实验发现,加权方法对比默认方法并没有明显优势,基本都取得了相当的效果,证实了现行默认的预训练方法已经足够有效。

结论与展望

1. 本文贡献

本文在Scaling Law的基础上,进一步提出了Temporal Scaling Law,从而实现在时间维度上分析和预测LLMs在预训练过程中的损失变化,从而助力研究者们更好地把握LLMs预训练趋势,提高调参效率。

本文通过研究不同模型规模和训练阶段下LLMs每个token位置的损失不平衡现象,发现损失模式遵循一个倒数关系,并提供了这种模式的数学化描述。

此外,本文通过Temporal Scaling Law揭示了LLMs在不同token位置的学习模式,尽管在初始训练阶段存在不同位置token的损失不平衡,但LLMs在经过一定量token的训练以后,会对所有token位置平等学习。以此为启发,本文也验证了默认的LLMs训练范式(不使用基于位置的重加权策略)的有效性,为LLMs的预训练提供了更深入的理解。

2. 当前挑战与未来展望

  • 本文的研究主要着眼于以transformer decoder为底座的类GPT生成式模型,而没有对transformer encoder为底座的模型或混合专家模型(Mixed of Experts Models)进行探索,因此本文的结论可能并不能推广,还有待进一步验证。

  • 本文的研究主要集中在预训练阶段。而其他情况,如持续预训练,有监督微调,迁移学习,并没有被包括在内。在这些方向上,也有待做进一步验证。

  • 此外,本文仅在468M和1.2B两个规模的模型上进行了验证,并没有推广到更大尺度的LLMs上面,因此Temporal Scaling Law能否推广到更大的模型上还需要更充分的实验。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【ALM】ALM解决方案系列:质量保证

1软件的质量管理现状与痛点 在软件开发中,质量被视为软件产品的生命。保证软件质量,是贯穿整个软件生命周期的重要问题。如果在软件开发早期忽视质量管理,会导致软件项目管理出现问题。因此,重视并规范软件管理在软件项目管理中起…

springboot整合rabbitmq的不同工作模式理解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

Spring6 的JdbcTemplate的JDBC模板类的详细使用说明

1. Spring6 的JdbcTemplate的JDBC模板类的详细使用说明 文章目录 1. Spring6 的JdbcTemplate的JDBC模板类的详细使用说明每博一文案2. 环境准备3. 数据准备4. 开始4.1 从数据表中插入(添加)数据4.2 从数据表中修改数据4.3 从数据表中删除数据4.4 从数据表中查询一个对象4.5 从数…

C++--类与对象(二)

类的六个成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员 函数。 默认成员函数:用户没有显式实现,编译器会生…

crossover24中文破解版百度云免费下载 crossover永久免激活汉化包安装使用教程 crossover24激活码分享

原则上,我们不提倡各位使用破解版,这是处于对知识产权的保护,也是为了各位的长远利益。使用正版你可以获得更优质的服务和完善的产品功能。 但仍然有部分用户由于预算、使用习惯等原因,需要破解版。所以本文不讲原则,…

华为交换机配置导出备份python脚本

一、脚本编写思路 (一)针对设备型号 主要针对华为(Huawei)和华三(H3C)交换机设备的配置备份 (二)导出前预处理 1.在配置导出前,自动打开crt软件或者MobaXterm软件&am…

NIOS II实现LED流水灯以及串口输出(DE2-115开发板)

NIOS II实现LED流水灯以及串口输出(DE2-115开发板) 前言什么是Qsys?什么是NIOSII?注意事项1、管脚配置2、配置NIOSII时的连接3、注意中断配置好后是这样的4、注意名称的配置5、设置双功能引脚 NIOS II的报错代码以及效果演示流水灯输出到电脑串口助手 …

Python模块之Numpy(二)-- 生成各种随机数

对于 NumPy,与随机数相关的函数都在 random 模块中,其中包括可以生成服从多种概率分布随机数的函数,示例如下: #生成10个服从0-1均匀分布的随机数 arr1 np.random.random([2,5]) #也生成10个服从0-1均匀分布的随机数 arr2 np.ra…

数据分析思维——数据埋点笔记,以电商为例

数据埋点 数据分析前提是有数据,数据从哪里来,要选择采集哪些数据都需要考虑。如某些app上的商品推荐,是基于哪些信息来预判的呢?因此作为数据分析师有必要系统的了解用户行为到用户数据的整个过程 何为数据埋点 每当用户在客户端…

字节码基础

基本概念 java中的字节码,英文bytecode。是java代码编译后的中间代码格式。JVM需要读取并解析字节码才能执行相应的任务。java字节码是JVM的指令集。JVM加载字节码格式的class文件。校验之后通过JIT编译器转换成本机机器代码执行。 java字节码简介 1、java byteco…

【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout 文章编号&…

leetcode刷题:买卖股票的最佳时机

题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大…

Java基于Geth1.8实现节点同步、合约部署,以及踩坑记录—主节点控制台卡死、节点同步出错的解决方案

前言:本文将从一个区块链入门小白的视角,来一步步的讲解如何实现区块链数据上链,链上数据查询,geth多节点同步。以及讲解在上链过程中,我踩过的坑及其解决方案。如果有不对的地方,还请大佬指教!…

2023愚人杯 )————被遗忘的反序列化

<?php# 当前目录中有一个txt文件哦 error_reporting(0); show_source(__FILE__); include("check.php");class EeE{public $text;public $eeee;public function __wakeup(){if ($this->text "aaaa"){echo lcfirst($this->text);}}public functi…

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

用迭代加深解决加成序列问题

可以看到这个最坏的结果是100层搜索&#xff0c;但是其实1 2 4 8 16 32 64 128&#xff0c;到128的话也只要8&#xff0c;所以大概只需要10几层搜索就可以解决了&#xff0c;这个时候就可以用迭代加深的方法&#xff0c;深度一点点的加&#xff0c;如果大于概深度就舍去。有人说…

解决vue3项目打包后部署后某些静态资源图片不加载问题

目录 问题 原因 解决方案 问题 开发完项目打包并部署 然后访问时发现导航栏背景图片没加载 打开浏览器控制台发现这张图片报错404 原因 可能是因为在部署后的服务器环境中对中文文件名的支持不完善。服务器在解析 URL 时可能无法正确识别或编码中文字符&#xff0c;导致无…

实现stract(字符串拼接)函数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;char a[80], b[80];int i, n1, n2;//填充字符串&#xff1b;printf("请输入字符串a的内…

Shell编程之循环语句之for

一.for循环语句 读取不同的变量值&#xff0c;用来逐个执行同一组命令 for 变量名 in 取值列表 do命令序列 done 示例&#xff1a; 1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数&#xff0c;并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和…

【计算机网络】计算机网络体系结构

&#x1f6a9;本文已收录至专栏&#xff1a;计算机网络学习之旅 一.常见的三种结构 (1) OSI参考模型 为了使不同体系结构的计算机网络都能互连起来&#xff0c;国际标准化组织于1977年成立了专门机构研究该问题&#xff0c;提出了著名的开放系统互连基本参考模型&#xff0c…