Scaling Law解析

文章目录

  • scaling law
    • 一个token的计算量
    • 幂律关系
    • 幂律规律
    • 实际指导

scaling law

幂律法则:对大模型数据量、参数量、算力之间的最优分配

  • 不仅仅是对语言大模型,对主要基于tranformer的多模态大模型基本都有效

对于Decoder-only结构模型(GPT架构),计算量C(Flops),模型参数量N(除去Embedding部分),数据大小D(tokens数),三者的关系为 C ≈ 6 N D C≈6ND C6ND

  • decoedr层数: l l l
  • attention隐层维度: d d d
  • attention feedforward层维度: d f f d_{ff} dff,一般来说 d f f = 4 ∗ d d_{ff}=4*d dff=4d
  • 模型参数量N,忽略embedding,norm和bias
    • transformer每层包括self-attention和MLP两部分
      • self-attention参数为 W Q , Q K , W V , W O W_Q,Q_K,W_V,W_O WQ,QK,WV,WO,每个矩阵的维度均为 R d × d R^{d×d} Rd×d,整体参数量是 4 d 2 4d^2 4d2
      • MLP的参数为 W 1 ∈ R d × d f f , W 2 ∈ R d f f × d W_1 \in R^{d×d_{ff}}, W_2 \in R^{d_{ff}×d} W1Rd×dff,W2Rdff×d,整体参数量是 2 ∗ d ∗ d f f = 2 ∗ d ∗ 4 d = 8 d 2 2*d*d_{ff}=2*d*4d=8d^2 2ddff=2d4d=8d2
    • 故每层的参数量为 4 d 2 + 8 d 2 = 12 d 2 4d^2+8d^2=12d^2 4d2+8d2=12d2,全部的 l l l层的参数量为 12 l d 2 12ld^2 12ld2,即 N = 12 l d 2 N=12ld^2 N=12ld2
      在这里插入图片描述

一个token的计算量

  • 前向
    • 一个参数对应于两次浮点运算:一次乘法、一次加法,即计算量为2N次计算量
  • 反向
    • 反向求导需要对w和x分别求导,故计算量是前两的两倍,即4N
  • 最终的计算量是6N

一个token的计算量是6N,那么D个tokens的计算量就是6ND

以模型的损失L作为性能的判断标准,L越小,模型性能越强
在这里插入图片描述

幂律关系

  • D与L的幂律关系
    • 限制训练数据D大小,在比较大的语言模型上训练,使用早停策略停止训练的实际(一旦测试及损失停止下降就停止训练)。换句话说,只限制了数据集大小D,模型参数N和计算量C没有限制。模型性能L和D由如下的幂律关系
    • 数据集不断增大,L越来越小,但D增大到一定程度时,L降低的效果就不会明显

L ( D ) = ( D c D ) α D L(D)=(\frac{D_c}{D})^{\alpha_D} L(D)=(DDc)αD
在这里插入图片描述

  • N与L的幂律关系
    • 在不限制数据集的情况下,训练具有不同参数量的大语言模型,直至测试及损失达到收敛。换句话说,只限制了模型参数量N,而数据集D和计算量C没有收到限制。模型性能L和N之间存在如下的幂律关系。( N c 、 α N N_c、\alpha_N NcαN均为常数。需要注意的是模型参数量N不包含静态编码的矩阵 W e m b W_{emb} Wemb)
    • 模型参数不断增大,L越来越小,但N增大到一定程度时,L降低的效果就不会明显

L ( N ) = ( N c N ) α N L(N)=(\frac{N_c}{N})^{\alpha_N} L(N)=(NNc)αN
在这里插入图片描述

  • 基于预算、时间、能源等各方面考虑,计算量C肯定是有一个大致的固定值的,C=6ND,为了获得最好的性能,就要衡量N和D分别是多少
  • C与L的幂律关系
    • 在计算量C受限的情况下,通过关系是 C ≈ 6 N B C≈6NB C6NB,可以遍历不同参数量大小的模型,参数学习迭代 6 N B \frac{6}{NB} NB6次后停止。在这个过程中,保持批量大小B不变;然后可以悬着效果最好的一个模型。接着就得到了模型性能L和C之间的幂律关系,其中 C c , α C C_c,\alpha_C Cc,αC均为常数

L ( C ) = ( C r C ) α C L(C)=(\frac{C_r}{C})^{\alpha_C} L(C)=(CCr)αC
在这里插入图片描述

幂律规律

在这里插入图片描述

上图中左侧时模型测试集损失与算力log的曲线图,右侧是具体的数据

  • 计算量是 1 × 1 0 20 1×10^{20} 1×1020时,性能最强即损失最小的模型量N约为1B
  • 计算量是 1 × 1 0 21 1×10^{21} 1×1021时,性能最强即损失最小的模型量N约为3B
  • 计算量是 1 × 1 0 22 1×10^{22} 1×1022时,性能最强即损失最小的模型量N约为10B
  • 总结规律时当计算量或算力扩大十倍时,性能最强模型的参数量约扩大三倍;即当计算量是 1 × 1 0 23 1×10^{23} 1×1023时,性能最强即损失最小的模型量N约为30B。(此规律仅限于基于transformer结构的模型)
  • 当确定了算力C,性能最强模型的参数量N,那么训练所需的数据量D也可以估计个大概
  • 基于此规律,可以以小算力的情况下进行实现,将内部涉及的参数规律求解出来,然后再在大算力上进行扩展训练
    在这里插入图片描述

模型在不同数据集的测试集上的损失存在差别,但整体都时呈现上述分析的幂律关系的
在这里插入图片描述
不同模型架构可能也符合幂律关系,如上图中的LSTMs,同样参数量时,transformers的性能比LSTMs更好
在这里插入图片描述

实际指导

同样参数量,模型的越深比越宽性能更好
在这里插入图片描述

固定住计算量,随着计算量的增大,对应的最优模型参数量也越来越大,对应的最优数据量也越来越大,在对数域看就是成线性关系。当在小计算量配置下通过实现获得了上图中的右侧的两张线型图,就可以指导大模型训练过程

  • 假设当前收集到了1.4T tokens的数据,就能通过上图中最右侧图反推出所需的计算量,进而就可以通过上述图中间的图推出应该训练参数量多大的模型
  • 对应计算量C、模型参数量N和数据量D,其中知道了一个值,就能反推出另外两个值
    在这里插入图片描述

上图中当计算量扩大10倍时,不同公司对数据和模型的分配有区别

  • openai是数据扩大1.8倍,模型扩大5.5倍
  • deepmain是数据和模型都扩大3.16倍
  • 原因是模型架构有差别,如激活函数、位置编码、数据质量等差异
  • 上述的最优算力分配((性价比最优)是指在训练的时候,计算量固定时,对应的最优的模型大小和数据大小;如果不固定计算量,在固定的参数量N固定,数据量D持续增大,即计算量C持续增大时,模型的测试集损失也会逐渐降低的,只是性价比变低了
    • 假设同样的计算量,性价比最优的配比是用1T的数据训练一个20B的模型,但其实也能使用3T的数据训练一个7B的模型,这样做的原因有二
      • 一是便于推理时能部署模型的显卡型号更多,如果时20B或更大的50B的模型,其性能最好,但服务开发时并没有合适的显卡进行部署
      • 二是模型过大,推理的效率很低,速度很慢
      • 对于openai,因为其不开源,并且有大显存的卡进行部署,所以其可以进尽可能遵循scaling law的指导训练对应尺寸的模型
      • Meta开源的LLaMa系列模型因为其开源性质,就要考虑开源社区的开发者能用手头的显卡进行部署的问题,所以其观点是,给定模型的目标性能后,并不需要用最优的计算效率在最快的实践训练好模型,而应该在更大规模的数据上,训练一个相对更小模型,这样模型在推理阶段的成本更低
      • 根据scaling law,10B模型只需要200B的数据,但LLaMa作者发现,7B的模型性能在1T的数据训练后性能还能提升
      • LLaMa就是以训练的低效换取推理时的高效
        在这里插入图片描述

幂律规律有失灵的情况,即大模型中的涌现,前期算力增加,模型性能是按上述分析的规律逐渐提高,但是当算力提高到一定程度后,模型性能会突然陡增,目前来话,幂律规律只在涌现发生前有效,当具体算力提升到多少会发生涌现,目前还不知道,只能通过实践后统计发现,但一定会发生涌现

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

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

相关文章

springboot整合ShardingSphere分库分表并插入1kw条记录

目录 一,数据分片 二,水平分片 三,创建数据库表 四,springboot项目导入依赖 五,创建类 六,bug bug放到最后了。 一,数据分片 数据分片指按照某个维度将存放在单一数据库中的数据分散地存…

鸿蒙TypeScript 开发学习第9天:【TypeScript Number】

1、TypeScript Number TypeScript 与 JavaScript 类似,支持 Number 对象。 Number 对象是原始数值的包装对象。 语法 var num new Number(value);复制注意: 如果一个参数值不能转换为一个数字将返回 NaN (非数字值)。 2、Number 对象属性 下表列出…

HCIA-Datacom H12-811 题库补充(4/7)

完整题库及答案解析,请直接扫描上方二维码,持续更新中 共享介质型网络使用哪一种技术进行数据转发? A:CDMA/CD B:CSMA/AC C:TDMA/CD D:CSMA/CD 答案:D 解析:以太网 CSMA …

【数据结构】红黑树详解

目录 前言: 红黑树的概念: 红黑树的性质: 红黑树节点的定义: 红黑树的插入: 情况1:cur为红,p为红,g为黑,u存在且为红 情况2:cur为红,p为红&#xff0c…

【每日刷题】Day4

【每日刷题】Day4 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 目录 1. 83. 删除排序链表中的重复元素 - 力扣(LeetCode) 2. 88. 合并两个有序数组 - 力扣(LeetCode&…

数据可视化高级技术Echarts(快速上手柱状图进阶操作)

目录 1.Echarts的配置 2.程序的编码 3.柱状图的实现(入门实现) 相关属性介绍(进阶): 1.标记最大值/最小值 2.标记平均值 3.柱的宽度 4. 横向柱状图 5.colorBy series系列(需要构造多组数据才能实现…

shopee虾皮运营技巧,学会这几招能有效提高销量

在电商的运营过程中,新手总会踩上不少的坑,运气好的累计成经验值,应用于日后的店铺运营中,运气不好的,进坑了就再也爬不上来了,特别是跨境电商,本身与国内电商存在很大的信息差,不可…

Windows SDK(六)组合框与列表框控件

组合框和列表框同样也是控件,所以我们在应用组合框和列表框时同样也需要父窗口,现在我们以 创建项目时程序自行创建的窗口作为父窗口展开如下的控件创建与应用 在进行组合框与列表框的讲解前,我们首先在程序中定义几个宏作为我们在编写程序…

C++可变参数模板

可变参数模板 一个可变参数模板就是一个接受可变数目参数的模板函数或模板类。 可变数目的参数被称为参数包。 存在两种参数包: 模板参数类,表示零个或多个模板参数;函数参数包,表示零个或多个函数参数。 我们用一个省略号来…

CVE漏洞是什么,如何对其进行针对性的防护

CVE(Common Vulnerabilities and Exposures)漏洞是一个网安技术术语,用于描述和标识信息安全领域的已知漏洞和安全风险。CVE是一个公开的列表或数据库,它为各种公开知晓的信息安全漏洞和风险提供了标准化的名称。 每个CVE标识符都…

监控员工电脑的方法有哪些,七种有效的措施

堡垒往往是从内部攻破的,很多企业信息的泄密就是内部员工泄露的,内部泄密占到了企业泄密的八成因素,那么企业能不能监控员工的电脑呢?有什么有效的办法呢? 1. 安装监控软件 屏幕监控软件:此类软件可以实时捕…

Redis群集模式

目录 一、集群的作用 二、Redis集群的数据分片 三、集群的工作原理​编辑 四、搭建Redis群集模式 1.准备环境 1.1 首先安装redis 1.2 在etc下创建redis 1.3再在redis中创建redis-cluster/redis600{1..6}文件 1.4 做个for循环 1.5 开启群集功能 1.6启动redis节点 1.…