Scaling Law解析

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就是以训练的低效换取推理时的高效
        在这里插入图片描述

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

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scaling Law(扩展定律)是指在计算机科学和计算机工程领域中,用于描述系统性能随着资源规模的增加而变化的规律。它是一种经验法则,用于预测系统在不同规模下的性能表现。 根据Amdahl's Law(阿姆达尔定律)和Gustafson's Law(古斯塔夫森定律),Scaling Law可以分为两种不同的模型: 1. Amdahl's Law(阿姆达尔定律):该定律由Gene Amdahl提出,用于描述在系统中存在串行部分时,系统性能的上限。根据阿姆达尔定律,当我们增加系统中可并行执行的部分的比例时,系统的加速比将受到串行部分的限制。公式表示为: Speedup = 1 / [(1 - P) + (P / N)] 其中,P表示可并行执行的部分所占比例,N表示处理器的数量。该定律表明,无论我们如何增加处理器数量,如果串行部分的比例不变,系统的加速比将受到限制。 2. Gustafson's Law(古斯塔夫森定律):该定律由John L. Gustafson提出,与阿姆达尔定律相反,它假设问题规模会随着系统资源的增加而增加。根据古斯塔夫森定律,当我们增加系统中的资源(如处理器数量)时,问题规模也会相应增加,从而保持相同的执行时间。公式表示为: Speedup = N + (1 - N) * P 其中,N表示处理器的数量,P表示可并行执行的部分所占比例。该定律表明,通过增加系统资源,我们可以处理更大规模的问题,并在相同的时间内完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值