【论文阅读】Scaling Laws for Neural Language Models(2020)- 大模型预训练参数量、数据集大小、计算资源之间的关系验证

随着大模型的迅速发展,在有限的资源、数据下,该选取多少量级的数据、需要多少GPU资源能满足当前的场景需求呢?这篇文章就是为大家提供一定的参考。信息量很大,可能有理解不对的地方,结合原文一起理解;

给定以下参数:

  • N N N:代表模型参数量的大小(不包括tokenize的嵌入层大小);
  • D D D:代表数据集的大小;
  • C C C:代表用于训练的计算资源总量(如:GPU个数、每个GPU显存大小确定的总规模数);

定律总结

首先说下总结:

  • 大模型效果最大程度的依赖于模型规模的大小,模型的规模指的就是 N N N D D D C C C共同确定的,在以上规模达到一定的标准后,模型的超参数如宽度和深度对模型效果的影响较为微弱;
  • 大模型效果与 N N N D D D C C C三个参数都有着独立的power-law关系;
  • 同时增加 N N N D D D必然会带来大模型效果的提升,但是如果只提升其中一个变量,就会导致过拟合,性能会发生损失,性能损失的比例为 N 0.74 / D N^{0.74}/D N0.74/D如:模型参数量每提升8倍时,数据量级需要提升至少5倍,从而避免大模型效果弱化;
  • 大模型训练的损失曲线也遵循可预测的power-laws,不管是较小的模型还是较大的模型,训练曲线的形状和特性在数学上会表现出类似的幂律关系,即使模型大小不同,通过观察和外推早期的训练曲线,我们也可以预测模型在更长时间训练后的表现;
  • 当模型在不同任务的数据上进行评估时,模型的效果可能会有弱化的表现,但是不管怎样,模型的效果和训练时的验证效果息息相关,也就是尽管效果迁移可能会存在弱化的情况,但是 当训练时的评估效果有所提升时,也就意味着在迁移任务上效果也会有所提升
  • 大模型比小模型更高效,能在更少的优化步骤和更少的数据点下达到相同的性能水平;
  • 在固定的计算预算下,为了获得最佳的性能,应该训练非常大的模型并在远未达到完全收敛时停止训练。这种方法比训练小模型到完全收敛要高效得多,并且所需的数据量随着计算规模的增加缓慢增长,即 D D D C 0.27 C^{0.27} C0.27
  • 在训练大型模型时,最佳的批处理大小主要取决于损失函数的表现,通过测量梯度噪声可以确定这个大小,并且对于当前最大的模型来说,最佳的批处理大小大约是100万到200万个token。

定律详情

定律公式

当大模型的训练规模受到限制时,模型的测试损失可以通过以下定律进行预估:
在这里插入图片描述

  1. 对于参数量有限的模型,在足够大量的数据集上进行训练时,随着模型参数数量的增加,模型的损失会以一定的速率减小,从而提升模型性能: L ( N ) = ( N c / N ) α N ; α N ~ 0.076 , N c ~ 8.8 ∗ 1 0 13 ( 不考虑嵌入层参数量 ) L(N)=(N_{c}/N)^{\alpha_N};\alpha_N~0.076,N_{c}~8.8*10^{13}(不考虑嵌入层参数量) L(N)=(Nc/N)αN;αN0.076,Nc8.81013(不考虑嵌入层参数量)
  2. 对于数据集量级有限的情况,需要early stop时的损失随着数据集量级的变化,当数据集量级增加时,模型的损失会以一定的速率降低,从而提升模型效果: L ( D ) = ( D c / D ) α D ; α D ~ 0.095 , D c ~ 5.4 ∗ 1 0 13 ( t o k e n s ) L(D)=(D_{c}/D)^{\alpha_D};\alpha_D~0.095,D_{c}~5.4*10^{13}(tokens) L(D)=(Dc/D)αD;αD0.095,Dc5.41013tokens
  3. 当采用有限的计算资源、充足的数据集、最优大小的模型、足够小的批次进行训练时,模型效果也会随着计算资源的提升而提升: L ( C m i n ) = ( C c m i n / C m i n ) α C m i n ; α C m i n ~ 0.050 , C c m i n ~ 3.1 ∗ 1 0 8 ( P F − D a y s ) L(C_{min})=(C^{min}_{c}/C_{min})^{\alpha^{min}_{C}};\alpha^{min}_{C}~0.050,C^{min}_{c}~3.1*10^{8}(PF-Days) L(Cmin)=(Ccmin/Cmin)αCmin;αCmin0.050,Ccmin3.1108PFDays
    上述1. 和2. 的公式共同表明,随着模型大小的增长,应当亚线性地控制数据集的量级,即: D ∝ N α N α D ~ N 0.74 D∝N^{\frac{\alpha_{N}}{\alpha_{D}}}~N^{0.74} DNαDαNN0.74,这两个公式结合的话,损失和数据集大小、模型大小就会有以下关系: L ( N , D ) = [ ( N c N ) α N α D + D c D ] α D L(N,D)=[(\frac{N_{c}}{N})^{\frac{\alpha_N}{\alpha_D}}+\frac{D_{c}}{D}]^{\alpha_{D}} L(N,D)=[(NNc)αDαN+DDc]αD
    下图左边可表明上述表达式针对不同的模型可采用log似然估计对这些变量进行建模。
    在这里插入图片描述
    在无限数据的情况下,当给定一个模型训练一定数量的参数更新step S S S时, S m i n ( S ) S_{min}(S) Smin(S)表示达到最优效果的最小step,经过一个初始的瞬态期之后,学习曲线可以被一个特定的模型准确拟合,上图右侧就体现了这种关联性: L ( N , S ) = ( N c N ) α N + ( S c S m i n ( S ) ) α S L(N,S)=(\frac{N_{c}}{N})^{\alpha_N}+(\frac{S_{c}}{S_{min}(S)})^{\alpha_S} L(N,S)=(NNc)αN+(Smin(S)Sc)αS S c ~ 2.1 ∗ 1 0 3 , α S ~ 0.76 S_{c}~2.1*10^{3},\alpha_S~0.76 Sc2.1103,αS0.76
    以上常量可能会随着其他变量的不同而有所差异,但是整体的规律性是类似的,如下图,不同参数量模型的情况下,损失随着batch size或者计算资源的收敛情况趋势相近。
    在这里插入图片描述
    如何确定临界最优batch size,决定了并行计算过程中的速度和计算效率,而batch size的选取也和损失计算之间存在一定的规律性: B c r i t ( L ) = B ∗ L 1 / α B , B ∗ ~ 2 ∗ 1 0 8 t o k e n s , α B ~ 0.21 B_{crit}(L)=\frac{B_{*}}{L^{1/\alpha_{B}}},B_{*}~2*10^{8}tokens,\alpha_{B}~0.21 Bcrit(L)=L1/αBB,B2108tokens,αB0.21
    基于上述不同的规律性,当计算资源 C C C是固定时,模型参数量 N N N、batch size大小 B B B、step大小 S S S、数据集大小 D D D C C C的关系可以表示如下: N ∝ C α C m i n / α N , B ∝ C α C m i n / α B , S ∝ C α C m i n / α S , D = B ∗ S N∝C^{\alpha^{min}_{C}/\alpha_N},B∝C^{\alpha^{min}_{C}/\alpha_B},S∝C^{\alpha^{min}_{C}/\alpha_S},D=B*S NCαCmin/αN,BCαCmin/αB,SCαCmin/αS,D=BS
    α C m i n = 1 / ( 1 / α S + 1 / α B + 1 / α N ) \alpha^{min}_{C}=1/(1/\alpha_S+1/\alpha_B+1/\alpha_N) αCmin=1/(1/αS+1/αB+1/αN)
    与如下图所示的结果 N ∝ C m i n 0.73 , B ∝ C m i n 0.24 , S ∝ C m i n 0.03 N∝C^{0.73}_{min},B∝C^{0.24}_{min},S∝C^{0.03}_{min} NCmin0.73,BCmin0.24,SCmin0.03是十分吻合的,也说明随着模型越来越大,增加样本提升的收益会更高。
    在这里插入图片描述

定律参数定义&计算

对于模型大小参数 N N N而言,它是基于超参数网络层数 n l a y e r n_{layer} nlayer、数据维度 d m o d e l d_{model} dmodel、前馈神经网络的维度数 d f f d_{ff} dff、注意力机制的输出维度数 d a t t n d_{attn} dattn、注意力机制的头数 n h e a d s n_{heads} nheads、以及输入上下文token数 n c t x n_{ctx} nctx,默认为1024,则有: N ≈ 2 d m o d e l n l a y e r ( 2 d a t t n + d f f ) = 12 n l a y e r d m d o e l 2 N≈2d_{model}n_{layer}(2d_{attn}+d_{ff})=12n_{layer}d^2_{mdoel} N2dmodelnlayer(2dattn+dff)=12nlayerdmdoel2
其中,按照常规的 d a t t n = d f f / 4 = d m o d e l d_{attn}=d_{ff}/4=d_{model} dattn=dff/4=dmodel进行换算就能得到上述结果。在大模型参数量计算时其实还有两个比较大的参数即tokenize过程中的参数量,嵌入层是 n v o c a b d m o d e l n_{vocab}d_{model} nvocabdmodel,还有位置编码的部分参数 n c t x d m o d e l n_{ctx}d_{model} nctxdmodel,这部分参数量是没有考虑进去的,即 N N N的计算不包含文本向量化的这部分参数。Transformer前向传播过程中所需要的计算资源可以估计如下: C f o r w a r d = 2 N + 2 n l a y e r n c t x d m o d e l C_{forward}=2N+2n_{layer}n_{ctx}d_{model} Cforward=2N+2nlayernctxdmodel更详细的资源估计计算可参考下表:
在这里插入图片描述
对于 d m d o e l > n c t x / 12 d_{mdoel}>n_{ctx}/12 dmdoel>nctx/12的模型而言,每个token转换计算对于总的计算而言占比相对较小,而对于 d m o d e l > > n c t x / 12 d_{model}>>n_{ctx}/12 dmodel>>nctx/12的大模型而言,就更不需要把文本向量化的参数考虑进去,再把梯度反向传播的过程考虑进来,计算资源和模型参数量之间的关系就可以估算为 C ≈ 6 N C≈6N C6N

实验详情

为了验证不同的配置对模型效果(损失)的影响,测试了不同的变量对模型效果的影响:

  • 模型大小:从768到1.5B的参数范围;
  • 数据集量级:从22到23B的数据量级;
  • 模型结构:深度、宽度、多头注意力头数、前向反馈层维度数;
  • 上下文token长度:最长1024;
  • Batch Size:大多数 2 19 t o k e n / b a t c h 2^{19}token/batch 219token/batch,但是对于不同的实验也会调整,使之达到最优解;
  1. 当模型的参数量 N N N固定时,模型的效果和模型结构参数的关联性是很微弱的,也就是说改变模型结构其实对最终结果的影响没有很大,比如,一个层数为6、隐藏层维度为4288的模型,其损失值仅比一个层数为48、隐藏层维度为1600的模型高3%。
    在这里插入图片描述
  2. 当其他参数固定时,模型效果会随着模型大小的增大而增大,如下图所示,即: L ( N ) ≈ ( N c N ) α N L(N)≈(\frac{N_{c}}{N})^{\alpha_{N}} L(N)(NNc)αN
    在这里插入图片描述
    如下图所示,在不同的数据集上进行训练,这种关系的常数几乎是一致的,更进一步地验证了上述规律性:
    在这里插入图片描述
  3. 比较了LSTM和Transformer在不同的变量情况下模型效果的变化,LSTM在前期和Transformer持平,到后面就不如Transformer了,如下图所示:
    在这里插入图片描述
  4. 数据集大小和计算资源大小的影响如总结中所示, L ( D ) ≈ ( N c N ) α D L(D)≈(\frac{N_{c}}{N})^{\alpha_{D}} L(D)(NNc)αD
    L ( C ) ≈ ( N c N ) α C L(C)≈(\frac{N_{c}}{N})^{\alpha_{C}} L(C)(NNc)αC

实验最终计算出来的各个常量数据如下:
在这里插入图片描述
那么为了避免过拟合,样本的数据量级应该多大呢?在所有实验的模型中,采用全量的 22 B t o k e n 22Btoken 22Btoken量的数据进行训练时,并未发生过拟合现象,说明当前数据是足够充分的,即可理解为 D ~ ∞ D~∞ D,因此可以得出: δ L ( N , D ) ≡ L ( N , D ) L ( N , ∞ ) − 1 δL(N, D)≡\frac{L(N,D)}{L(N,∞)}-1 δL(N,D)L(N,)L(N,D)1上述求偏导仅把损失看作是和 N 、 D N、D ND相关的函数,如下图右边所示,再根据之前 N 、 D N、D ND之间的scaling law,该偏导公式可以表示为: δ L ( N , D ) ≈ ( 1 + ( N N c ) α N α D D c N c ) α D − 1 δL(N, D) ≈(1+(\frac{N}{N_{c}})^{\frac{\alpha_{N}}{\alpha_{D}}}\frac{D_{c}}{N_{c}})^{\alpha_{D}}-1 δL(N,D)(1+(NcN)αDαNNcDc)αD1因此为了避免过拟合,数据集的量级需要满足以下公式: D ≳ ( 5 ∗ 1 0 3 ) N 0.74 D\gtrsim(5*10^3)N^{0.74} D(5103)N0.74
在这里插入图片描述

  1. 在训练过程中,Batch Size大小对模型的效果影响其实也很大,当 B = B c r i t B=B_{crit} B=Bcrit时的训练效率是最高的,当 B > > B c r i t B>>B_{crit} B>>Bcrit能够使得Step降至最低, B < < B c r i t B<<B_{crit} B<<Bcrit的计算资源消耗是最大的,在训练过程成训练step大小 S S S和批次大小 B B B之间遵循着简单的关系 E = B S E = BS E=BS ( S S m i n − 1 ) ( E E m i n − 1 ) = 1 (\frac{S}{S_{min}}-1)(\frac{E}{E_{min}}-1)=1 (SminS1)(EminE1)=1
    其中, S m i n S_{min} Smin是训练至固定损失时的最小Step值, E m i n E_{min} Emin是最小的处理数据量级估计,因此最佳的Batch Size可表示为: B c r i t = E m i n S m i n B_{crit}=\frac{E_{min}}{S_{min}} Bcrit=SminEmin最优的Batch Size选取可以在模型训练效率上有很大的提升,因此可以基于此去确定训练Step和最小样本集合,如,若需要的样本量级为 2 E m i n 2E_{min} 2Emin,那么Step设置也应为 2 S m i n 2S_{min} 2Smin。Batch Size的选取和模型无关,独立和损失挂钩: B c r i t ( L ) = B ∗ L 1 / α B , B ∗ ~ 2 ∗ 1 0 8 t o k e n s , α B ~ 0.21 B_{crit}(L)=\frac{B_{*}}{L^{1/\alpha_{B}}},B_{*}~2*10^{8}tokens,\alpha_{B}~0.21 Bcrit(L)=L1/αBB,B2108tokens,αB0.21
    可以使用 B c r i t ( L ) B_{crit}(L) Bcrit(L)来估计 B = 2 19 B=2^{19} B=219 B > > B c r i t B>>B_{crit} B>>Bcrit时损失可达最小的最优Step: S m i n ( S ) = S 1 + B c r i t ( L ) / B , B > > B c r i t S_{min}(S)=\frac{S}{1+B_{crit}(L)/B},B>>B_{crit} Smin(S)=1+Bcrit(L)/BS,B>>Bcrit
    也可以估计模型大小为 N N N B < < B c r i t B<<B_{crit} B<<Bcrit时的达最小损失的最优计算资源消耗量: C m i n ( C ) = C 1 + B c r i t ( L ) / B , B < < B c r i t C_{min}(C)=\frac{C}{1+B_{crit}(L)/B},B<<B_{crit} Cmin(C)=1+Bcrit(L)/BC,B<<Bcrit其中 C = 6 N B S C=6NBS C=6NBS预估了在 B B B下的计算资源;
  2. 在已经得到了 S m i n S_{min} Smin的情况下,模型大小 S S S对模型效果的影响就可以表示为: L ( N , S m i n ) = ( N c N ) α N + ( S c S m i n ) α S L(N,S_{min})=(\frac{N_{c}}{N})^{\alpha_N}+(\frac{S_{c}}{S_{min}})^{\alpha_S} L(N,Smin)=(NNc)αN+(SminSc)αS其中各个参数的实验结果如下:
    在这里插入图片描述
    那么在数据有限的情况下,如何控制模型的early stop机制来避免过拟合呢?采用下界估计的方法,这个方法基于一个假设:在达到 S m i n ≈ S s t o p S_{min} ≈ S_{stop} SminSstop之前,有限数据和无限数据的学习曲线几乎相同。可以通过以下公式来预估early stop的Step,超过预估值时会发生过拟合: S s t o p ( N , D ) ≳ S c [ L ( N , D ) − L ( N , ∞ ) ] 1 α S S_{stop}(N,D)\gtrsim\frac{S_{c}}{[L(N,D)-L(N,∞)]^{\frac{1}{\alpha_{S}}}} Sstop(N,D)[L(N,D)L(N,)]αS1Sc
    当我们知道 L ( C m i n ) L(C_{min}) L(Cmin)(即在某一最小损失下的训练计算量)时,问题转向寻找能在这种计算量下提供最小损失的模型大小,并指出 N ( C m i n ) N(C_{min}) N(Cmin) 可以很好地用幂律来拟合,这意味着模型大小与计算量之间存在一种特定的数学关系: N ( C m i n ) ∝ ( C m i n ) 0.73 N(C_{min})∝(C_{min})^{0.73} N(Cmin)(Cmin)0.73
    在之前的计算中 C m i n = 6 N B c r i t S C_{min}=6NB_{crit}S Cmin=6NBcritS,可以推导出 B ∝ L − 4.8 B ∝ L^{−4.8} BL4.8 L ∝ C m i n − 0.05 L ∝ C^{−0.05}_{min} LCmin0.05,从而可以推导出 B c r i t ∝ C m i n 0.24 B_{crit} ∝ C^{0.24}_{min} BcritCmin0.24,因此最优训练步数( B c r i t B_{crit} Bcrit)随着计算量( C m i n C_{min} Cmin)的增加会非常缓慢地增长,换句话说,当计算量增加时,需要增加的训练步数并不会显著增加,这对计算资源的优化利用有重要意义,即: S m i n ∝ ( C m i n ) 0.03 S_{min}∝(C_{min})^{0.03} Smin(Cmin)0.03也就是说当我们用优化的计算分配来扩大语言建模时,我们应该主要增加模型大小 N N N,同时通过 B ∝ B c r i t B∝ B_{crit} BBcrit来扩大批量大小,而Step数量的增加可以忽略不计。
    对于之前提到的等式 L ( N , S m i n ) L(N,S_{min}) L(N,Smin),可以用 S m i n = C m i n 6 N B S_{min}=\frac{C_{min}}{6NB} Smin=6NBCmin来进行替换,并把损失函数看成一个和变量 N N N相关的函数: L ( C m i n ) = ( C c m i n C m i n ) α C m i n L(C_{min})=(\frac{C^{min}_{c}}{C_{min}})^{\alpha^{min}_{C}} L(Cmin)=(CminCcmin)αCmin
    α C m i n = 1 1 / α S + 1 / α B + 1 / α N ≈ 0.054 \alpha^{min}_{C}=\frac{1}{1/\alpha_{S}+1/\alpha_{B}+1/\alpha_{N}}≈0.054 αCmin=1/αS+1/αB+1/αN10.054同时还能做出以下推断: N ( C m i n ) ∝ ( C m i n ) α C m i n α N ≈ ( C m i n ) 0.71 N (C_{min}) ∝ (C_{min})^{\frac{\alpha^{min}_{C}}{\alpha_{N}}}≈(C_{min})^{0.71} N(Cmin)(Cmin)αNαCmin(Cmin)0.71
    为了避免过拟合,我们已知数据集大小应该设置为 D ∝ N 0.74 ∝ C m i n 0.54 D∝N^{0.74}∝C^{0.54}_{min} DN0.74Cmin0.54
    当我们以最优批次 B c r i t B_{crit} Bcrit进行训练时,如 C = 2 C m i n C=2C_{min} C=2Cmin,当不包含重复数据时,数据量的要求随着计算资源的增加而增长: D ( C m i n ) = 2 C m i n 6 N ( C m i n ) ≈ ( 4 ∗ 1 0 10 t o k e n s ) ( C m i n / P F − D a y ) 0.26 D(C_{min})=\frac{2C_{min}}{6N(C_{min})}≈(4*10^{10}tokens)(C_{min}/PF-Day)^{0.26} D(Cmin)=6N(Cmin)2Cmin(41010tokens)(Cmin/PFDay)0.26
    当我们受数据集大小(即过拟合)的限制时,损失应按 L ( D ) ∝ D 0.95 L(D)∝D^{0.95} L(D)D0.95来计算,也即 L ( D ( C m i n ) ) ∝ C m i n − 0.03 L(D(C_{min}))∝C^{-0.03}_{min} L(D(Cmin))Cmin0.03。如图所示在 L ( D ( C m i n ) ) ∝ C m i n − 0.05 L(D(C_{min}))∝C^{-0.05}_{min} L(D(Cmin))Cmin0.05的scaling law的情况下也有一个交点:
    在这里插入图片描述
    根据以上的多条scaling laws,当某个变量受到限制时会需要调整缩放定律的常量,这种调整可能会存在一定的矛盾点或者存在和其他slacing law的交叉点,因此在实际落地过程中,可能也不是100%没有问题的,存在交叉点或矛盾点的具体情况有: C ∗ ∼ 1 0 4 P F − D a y s , N ∗ ∼ 1 0 12 p a r a m e t e r s , D ∗ ∼ 1 0 12 t o k e n s , L ∗ ∼ 1.7 n a t s / t o k e n ( 6.8 ) C^∗∼ 10^4 PF-Days,N^∗∼10^{12} parameters, D^∗∼10^{12} tokens, L^∗ ∼ 1.7 nats/token (6.8) C104PFDays,N1012parameters,D1012tokens,L1.7nats/token(6.8)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值