Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • 前置篇

    • 模型仓库介绍
  • 基础篇

  • 架构篇

  • 训练篇

  • 微调篇

  • 常见模型篇

  • 大模型持续学习

  • 实战篇

  • 智能体
  • Scaling Law
    • 核心结论
    • 核心公式
    • 大模型中的Scaling Law
      • GPT4
      • Baichuan2
      • MindLLM
    • Scaling Law实操: 计算效率最优
    • LLaMA: 反Scaling Law的大模型
    • 计算量、模型和数据大小的关系推导
    • 参考资料
  • temp
  • 大模型
Geeks_Z
2024-09-24
目录

Scaling Law

解析大模型中的Scaling Law (opens new window)

在大模型的研发中,通常会有下面一些需求:

  1. 计划训练一个10B的模型,想知道至少需要多大的数据?
  2. 收集到了1T的数据,想知道能训练一个多大的模型?
  3. 老板准备1个月后开发布会,给的资源是100张A100,应该用多少数据训多大的模型效果最好?
  4. 老板对现在10B的模型不满意,想知道扩大到100B模型的效果能提升到多少?

以上这些问题都可以基于Scaling Law的理论进行回答。本文是阅读了一系列 Scaling Law的文章后的整理和思考,包括Scaling Law的概念和推导以及反Scaling Law的场景,不当之处,欢迎指正。

核心结论

大模型的Scaling Law是OpenAI在2020年提出的概念[1],具体如下:

  1. 对于Decoder-only的模型,计算量C(Flops), 模型参数量N, 数据大小D(token数),三者满足: C≈6ND 。(推导见本文最后)
  2. 模型的最终性能主要与计算量C,模型参数量N 数据大小D 者相关,而与模型的具体结构(层数/深度/宽度)基本无关。

固定模型的总参数量,调整层数/深度/宽度,不同模型的性能差距很小,大部分在2%以内

  1. 对于计算量C,模型参数量N 数据大小D,当不受其他两个因素制约时,模型性能与每个因素都呈现幂律关系

  1. 为了提升模型性能,模型参数量N 数据大小D 要同步放大,但模型和数据分别放大的比例还存在争议。

  2. Scaling Law不仅适用于语言模型,还适用于其他模态以及跨模态的任务[4]:

这里横轴单位为PF-days: 如果每秒钟可进行1015 运算,就是1 peta flops,那么一天的运算就是1015×24×3600=8.64×1019,这个算力消耗被称为1个petaflop/s-day。

核心公式

L(x)=L∞+(x0x)α

  • 第一项L∞ 指无法通过增加模型规模来减少的损失,可以认为是数据自身的熵(例如数据中的噪音)
  • 第二项(x0/x)α 指能通过增加计算量来减少的损失,可以认为是模型拟合的分布与实际分布之间的差。

根据公式,增大x(例如计算量C),模型整体loss下降,模型性能提升;伴随x 向于无穷大,模型能拟合数据的真实分布,让第二项逼近0,整体趋向于L∞

大模型中的Scaling Law

GPT4

下图是GPT4报告[5]中的Scaling Law曲线,计算量C 模型性能满足幂律关系

  • 横轴是归一化之后的计算量,假设GPT4的计算量为1。基于10,000倍小的计算规模,就能预测最终GPT4的性能。
  • 纵轴是"Bits for words", 这也是交叉熵的一个单位。在计算交叉熵时,如果使用以 2 为底的对数,交叉熵的单位就是 "bits per word",与信息论中的比特(bit)概念相符。所以这个值越低,说明模型的性能越好。

Baichuan2

下图是Baichuan2[6]技术报告中的Scaling Law曲线。基于10M到3B的模型在1T数据上训练的性能,可预测出最后7B模型和13B模型在2.6T数据上的性能

MindLLM

下图是MindLLM[7]技术报告中的Scaling Law曲线。基于10M到500M的模型在10B数据上训练的性能,预测出最后3B模型在500B数据上的性能。

Scaling Law实操: 计算效率最优

根据幂律定律,模型的参数固定,无限堆数据并不能无限提升模型的性能,模型最终性能会慢慢趋向一个固定的值


如图所示,如果模型的参数量为103(图中紫色的线),在数量达到109,模型基本收敛。所以在数据量达到109 ,继续增加数据产生的计算量,没有同样计算量下提升模型参数量带来的收益大(计算效率更优)。根据C=6ND,可以进一步转换成模型参数与计算量的关系,即: 模型参数为103,在计算量为6×1012 Flops,即7×10−8 PF-days时基本收敛。也就是右图中紫色线的拐点。


根据Baichuan[6]的实验,在中英场景下,7B模型收敛时的算力是 1023 FLOPS,对应的数据量应该是 D=10236∗7∗109=2.3T

按照上面的思路,下面进行Scaling Law的实操。

首先准备充足的数据(例如1T),设计不同模型参数量的小模型(例如0.001B - 1B),独立训练每个模型,每个模型都训练到基本收敛(假设数据量充足)。根据训练中不同模型的参数和数据量的组合,收集计算量与模型性能的关系。然后可以进一步获得计算效率最优时,即同样计算量下性能最好的模型规模和数据大小的组合,模型大小与计算量的关系,以及数据大小与计算量的关系。


如图所示,根据左图可以看到计算量与模型性能呈现幂律关系(可以认为数据和模型都不受限制),根据中图和右图,可以发现Nopt∝Ca,Dopt∝Cb,即计算效率最优时,模型的参数与计算量的幂次成线性关系,数据量的大小也与计算量的幂次成线性关系。

根据C=6ND,可以推算出a+b=1,但是a,b 别是多少存在分歧。

OpenAI[1]认为模型规模更重要,即a=0.73,b=0.27,而DeepMind在Chinchilla工作[2]和Google在PaLM工作[3]中都验证了 a=b=0.5 ,即模型和数据同等重要。

所以假定计算量整体放大10倍,OpenAI认为模型参数更重要,模型应放大100.73 (5.32)倍,数据放大 100.27 (1.86)倍;后来DeepMind和Google认为模型参数量与数据同等重要,两者都应该分别放大 100.5 (3.16)倍。


例如在PaLM的实验中,计算量从1×1021 大10倍到1×1022, 模型参数也提升了3.2倍,3.35B->10.7B。

具体最好在自己的数据上做实验来获得你场景下的a b。

LLaMA: 反Scaling Law的大模型

假设遵循计算效率最优来研发LLM,那么根据Scaling Law,给定模型大小,可以推算出最优的计算量,进一步根据最优计算量就能推算出需要的token数量,然后训练就行。

但是计算效率最优这个观点是针对训练阶段而言的,并不是**推理阶段,**实际应用中推理阶段效率更实用。

Meta在LLaMA[8]的观点是:给定模型的目标性能,并不需要用最优的计算效率在最快时间训练好模型,而应该在更大规模的数据上,训练一个相对更小模型,这样的模型在推理阶段的成本更低,尽管训练阶段的效率不是最优的(同样的算力其实能获得更优的模型,但是模型尺寸也会更大)。根据Scaling Law,10B模型只需要200B的数据,但是作者发现7B的模型性能在1T的数据后还能继续提升。


所以LLaMA工作的重点是训练一系列语言模型,通过使用更多的数据,让模型在有限推理资源下有最佳的性能。

具体而言,确定模型尺寸后,Scaling Law给到的只是最优的数据量,或者说是一个至少的数据量,实际在训练中观察在各个指标上的性能表现,只要还在继续增长,就可以持续增加训练数据。

计算量、模型和数据大小的关系推导

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

推导如下,记模型的结构为:

decoder层数: l

attention 隐层维度: d

attention feedforward层维度: dff, 一般来说 dff=4∗d

首先推导模型的参数量N(忽略embedding,norm和bias)计算如下:

transformer每层包括: self-attetion 和 MLP 两个部分:

self-attention的参数为WQ,WK,WV,WO,每个矩阵的维度均为Rd×d,整体参数量: 4d2

MLP的层数的参数为W1∈Rd×dff,W2∈Rdff×d,整体参数量: 2∗d∗dff=2∗d∗4d=8d2

所以每层的参数量为: 4d2+8d2=12d2,全部的l 的参数量为: 12ld2,即N=12ld2

继续推导模型的前向推理的计算量:

计算量的单位是FLOPs,floating point operations 对于矩阵A∈Rm×n,B∈Rn×p,AB 乘的计算量为2mnp,一次加法一次乘法。

假设Decoder层的输入X∈Rb×s×d, b batch size,s 序列长度, d 模型维度。

  • self-attention部分的计算:

输入线性层: XWQ,XWK,XWV,计算量为:3∗b∗s∗d∗d∗2=6bsd2

atention计算: QKT,计算量为:2∗b∗s∗s∗d=2bs2d

socre与V的计算: SattentionV,计算量为: b∗2∗s∗s∗d=2bs2d

输出线性层: X′WO,计算量为: b∗2∗s∗d∗d=2bsd2

  • MLP部分的计算

升维: XW1,计算量为: b∗2∗s∗d∗4d=8bsd2

降维: XW2,计算量为: b∗2∗s∗4d∗d=8bsd2

所以整个decoder层的计算量为:24bsd2+4bs2d,全部l 为: Cforward=24lbsd2+4lbs2d

反向传播计算量是正向的2倍,所以全部的计算量为: C=3∗Cforward=72lbsd2+12lbs2d

平均每个token的计算量为 Ctoken=Cbs=72ld2+12lsd=6N(1+s6d)≈6N (s≪6d)

所以对于全部包含D token的数据集: C=CtokenD≈6ND

参考资料

  • [1] https://arxiv.org/abs/2001.08361 (opens new window)
  • [2] https://arxiv.org/abs/2203.15556 (opens new window)
  • [3] https://arxiv.org/abs/2305.10403 (opens new window)
  • [4] https://arxiv.org/abs/2010.14701 (opens new window)
  • [5] https://arxiv.org/abs/2303.08774 (opens new window)
  • [6] https://arxiv.org/abs/2309.10305 (opens new window)
  • [7] https://arxiv.org/abs/2310.15777 (opens new window)
  • [8] https://arxiv.org/abs/2302.13971 (opens new window)
  • [9] https://zhuanlan.zhihu.com/p/106406433 (opens new window)
  • [10] https://www.zhihu.com/question/629230332/answer/3278779348 (opens new window)
  • [11] https://zhuanlan.zhihu.com/p/631357320 (opens new window)
  • [12] https://zhuanlan.zhihu.com/p/624740065 (opens new window)
上次更新: 2025/06/25, 11:25:50
智能体
temp

← 智能体 temp→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式