第 15 讲 · Q-Former 与规模定律 · Querying Transformer & Scaling Laws

Generative AI · Lecture 15。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:CMU 10-423 / 10-623 / 10-723 Generative AI(Spring 2026;Aran Nayebi、Matt Gormley),Lecture 15 · Wed 11-Mar · Querying Transformer / Scaling Laws(slides:lecture15-querying-scaling;规模定律部分的 slides 取自 Pat Virtue)。 阅读材料:Li et al. (2023), BLIP-2;Dai et al. (2023), InstructBLIP;Kaplan et al. (2020), Scaling Laws for Neural Language Models;Hoffmann et al. (2022), Training Compute-Optimal Large Language Models(Chinchilla);Gunasekar et al. (2023), Textbooks Are All You Need(Phi-1);Goyal et al. (2024), Scaling Laws for Data Filtering。 依据说明:本讲按原课第 15 讲公开的 slides 展开:PaliGemma 回顾;BLIP-2 的 Q-Former(结构、第一阶段、第二阶段);MetaQueries;历史注记 Perceiver IO;语言模型与图像生成的时间线(“为什么 Transformer 过了这么久才在视觉里流行”);LLM 的规模表;训练 Llama 的成本;幂律的定义;Kaplan et al. 的实验设计与七条结论;Hoffmann et al. 的改进(固定计算量、拟合 L(N, D)、“大家用的数据都太少了”);数据质量(Phi 系列、数据过滤的规模定律)。所有实验是本讲义自己设计的,不代表课堂上讲了什么。 配套代码 Code:code/lecture15/(5 个脚本 + 2 个模块;都在 2 分钟左右或更短;04 --isoflop 约 15 分钟,本讲义没有完整运行) 预计阅读时间:3 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 描述 Q-Former:可学习的查询、交叉注意力、两个训练阶段;说出它和”线性投影”相比省了什么、多了什么。
  2. 写出幂律 f(x)=ax−kf(x) = a x^{-k},知道为什么拟合前要减掉不可约损失;用”记事实”的玩具模型解释幂律从哪里来。
  3. 说出 Kaplan et al. (2020) 的主要结论,以及 Chinchilla 为什么得出”参数和数据应该同比例增加”;会用 L(N,D)=E+A/Nα+B/DβL(N, D) = E + A/N^\alpha + B/D^\beta 推出计算最优的配比。
  4. 用 C≈6NDC \approx 6ND 估算训练一个 LLM 的计算量、GPU 小时和成本。
  5. 解释”数据过滤不能不看计算量”:计算量越大,过滤可以越宽松。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面再展开 Previewed only
第 13 讲:CLIP、PaliGemma / LLaVA 式 VLM、阶段 A / B混合专家的规模定律(第 16 讲)
第 14 讲:交叉注意力分布式训练、MFU(第 17 讲)
P1:参数量与 6ND;P3:GPU 的峰值算力推理时的计算与规模(第 20 讲)

0.3 本讲地图 Map

§1  回顾:PaliGemma 的线性投影
§2  Q-Former(BLIP-2)                                           ← 代码 01、02
§3  规模定律                                                     ← 代码 03、04、05
§4–8  小结、误区、练习、延伸阅读、下一讲

1. 回顾:PaliGemma · Recall

slides 先回顾第 13 讲的 PaliGemma:SigLIP(CLIP 的变体)产生图像嵌入,线性投影把它们放进和词嵌入同一个高维空间,交给 Gemma(一个 2B 的语言模型)。语言模型要自己想办法利用这些图像嵌入,让正确的文字回答的似然最大。

这有两个代价:

  • token 多:图像有多少块,就要往语言模型里塞多少个 token(PaliGemma 在 224×224 的分辨率下是 256 个),而语言模型的计算量和序列长度成正比;
  • 语言模型要动:线性投影本身什么计算都不做,“理解图像”的工作全部压在语言模型上——第 13 讲看到,语言模型冻结时(阶段 A),需要”比较”的问题答不稳。

2. Q-Former(BLIP-2)· Querying Transformer

2.1 结构

BLIP-2(Li et al., 2023)在冻结的图像编码器和冻结的大语言模型之间放了一个小 Transformer,叫 Q-Former(Querying Transformer):

  • 一组可学习的查询向量(32 个,每个 768 维),是 Q-Former 的输入;
  • 查询之间做自注意力,再通过交叉注意力去看冻结的图像编码器的输出(第 14 讲的交叉注意力:查询来自这组向量,键和值来自图像块的特征);BLIP-2 每隔一个块插一层交叉注意力;
  • Q-Former 里还有一个文字 Transformer,和查询共用自注意力层;整个 Q-Former 从 BERT-base 初始化,共 1.88 亿参数。

为什么这样设计:不管图像编码器输出多少个块(ViT-L/14 是 257 × 1024),Q-Former 的输出永远是 32 × 768——一个信息瓶颈,逼着查询只提取”和文字有关”的视觉信息,交给语言模型的序列也短得多。

2.2 两个训练阶段

第一阶段:在冻结的图像编码器上学视觉-语言表示。三个目标共用同一组参数,区别只在于自注意力的掩码(谁能看谁):

目标做什么掩码
图文对比(ITC)查询的输出和文字的 [CLS] 做第 13 讲的对比学习单模态:查询和文字互相看不见
基于图像的文字生成(ITG)让查询”装下”生成描述所需的全部信息多模态因果:文字能看查询和前面的词,查询看不见文字
图文匹配(ITM)二分类:这对图文配不配双向:查询和文字互相都能看

第二阶段:在冻结的大语言模型上做生成式预训练。查询的输出经过一个全连接层,投到语言模型的输入维度,作为”软视觉提示”拼在文字前面:解码器式的语言模型(OPT)用普通的语言模型损失,编码器-解码器式的(FlanT5)用前缀语言模型损失。

只训练 Q-Former 和那个全连接层,图像编码器和语言模型都冻结。BLIP-2 报告:在零样本 VQAv2 上比 Flamingo80B 高 8.7 个百分点,可训练参数少 54 倍。

InstructBLIP(Dai et al., 2023)再进一步:把**指令(问题)**也送进 Q-Former,让指令的 token 和查询一起做自注意力——查询就能”带着问题去看图”,提取和这个问题有关的视觉特征。

2.3 相关的做法

  • MetaQueries(Pan et al., 2025;slides:“更简单,但有效”):把一组可学习的查询送进一个冻结的多模态 LLM,它的输出经过一个连接器,作为扩散模型的条件——把”理解”模型直接变成”生成”模型的条件来源,方向和 BLIP-2 正好相反。
  • 历史注记:Perceiver IO(Jaegle et al., 2021):一个小的”潜变量数组”通过交叉注意力读取任意长的输入,在潜空间里做计算,再用”输出查询”读出结果。Q-Former 的查询就是这个思路。

2.4 我们的实验(代码 01、02)

设定和第 13 讲的阶段 A 相同:第 13 讲的 CLIP 图像编码器冻结(给出 1 个汇总向量和 49 个块的 64 维特征),第 11 讲的聊天助手冻结(只放开词表两端,因为 circle、top、yes 这些新词要能说出来),只训练”接口”,每种 1200 步。qformer_lab.QFormer:2 层,每层是”查询(和问题)的自注意力 → 查询对 49 个块的交叉注意力 → 前馈层”,宽 64。

接口交给语言模型的图像 token接口的参数什么形状大还是小在哪里是不是某种形状描述这张图
线性投影:CLIP 的汇总向量14,1600.9460.9260.9580.7160.858
线性投影:块特征池化成 4×4164,1600.8780.8900.9280.5660.752
线性投影:全部 49 个块494,1600.8920.8780.9280.8480.786
Q-Former:1 个查询1137,8560.9340.9200.8480.9380.730
Q-Former:4 个查询4138,0480.9300.8700.9160.9440.778
Q-Former:16 个查询16138,8160.8900.8660.8300.8740.696
Q-Former:4 个查询 + 看问题4145,7920.9260.9080.9520.9220.770

(500 张测试图,回答逐词完全正确才算对;瞎猜时”是不是”是 0.5。)

“是不是某种形状”在第 13 讲就很不稳定,单个种子说明不了问题。代码 02 对三种接口各换 2 个种子(种子同时决定初始化和训练时抽到的数据):

接口种子 0(01)种子 1种子 2
线性投影:CLIP 的汇总向量0.7160.8140.680
Q-Former:4 个查询0.9440.9360.966
Q-Former:4 个查询 + 看问题0.9220.9000.946
  • Q-Former 让语言模型冻结时的”比较”题稳定了:三个种子都在 0.9 以上,线性投影在 0.68–0.81 之间摇摆。线性投影本身不做任何计算,比较问题和图像的工作只能由冻结的 Transformer 去做;Q-Former 有自己的注意力层和前馈层,可以先把图像加工成”更好用”的几个 token。
  • “看问题”并没有更好(0.900–0.946 vs 0.936–0.966)。原以为让查询读到问题,就能把比较挪进 Q-Former——但不看问题的 Q-Former 已经够了:我们的图里只有一个物体、4 个属性,4 个查询足以把它们都装下,语言模型从这几个 token 里读出”是不是方块”并不难。InstructBLIP 的好处出现在图像信息远多于一个问题所需的场景(复杂的照片、很多物体),这时”带着问题去看”才省得了容量。
  • “描述这张图”线性投影(1 个 token)最好(0.858):要说出整句话,就要把全部 4 个属性按固定格式说出来;CLIP 的汇总向量本来就是为了和整句描述对齐而训练的(第 13 讲),直接投影过去最省事。
  • 查询数不是越多越好:16 个查询的”在哪里”和”描述”反而最差(0.830、0.696)。语言模型冻结时,更长的图像前缀也意味着它要从更多 token 里找信息。
  • 代价:Q-Former 有 13.8 万个参数,线性投影只有 4160 个。BLIP-2 的 Q-Former(1.88 亿)相对于它连接的 ViT-g 和 FlanT5-XXL 很小,在我们这里却比语言模型的”词表两端”还大——小模型上不能简单地照搬”冻结两头、训练中间”的经济账。

3. 规模定律 · Scaling laws

3.0 一个问题

slides 的两条时间线:Transformer 2017 年出现,立刻占领了 NLP(ELMo、GPT、BERT、GPT-2、RoBERTa、T5……GPT-4、Llama、Mistral);但在计算机视觉里,ViT 2021 年才出现。为什么 Transformer 过了这么久才在视觉里流行? 一个答案是规模:ViT 没有卷积网络的”局部性""平移等变”这些先验,在 ImageNet-1k 这样”小”的数据上不如 ResNet;只有在 JFT-300M 这样大得多的数据上预训练,它才反超。哪种结构在什么规模下更好,本身就是一个规模问题——这一节就是关于”规模”的定量规律。

3.1 LLM 有多大?

slides 的表(部分):

模型年份训练 token参数
GPT-22019约 100 亿(40 GB)15 亿
GPT-320203000 亿1750 亿
PaLM20227800 亿5400 亿
Chinchilla20221.4 万亿700 亿
LLaMA20231.4 万亿650 亿
LLaMA-220232 万亿700 亿
LLaMA-3202415 万亿4050 亿

slides 的引导问题:Meta 是怎样选择”训练 token 数 / 参数量”这个组合的? 答案就是规模定律。

3.2 训练一个 Llama 要多少钱(代码 03 第 4 部分)

训练的计算量可以用一个简单的公式估计:C≈6NDC \approx 6ND(N 个参数、D 个训练 token;前向每个参数每个 token 一次乘加 = 2 FLOPs,反向约是前向的 2 倍,合起来 6;P1 讲过)。

模型C = 6ND(FLOPs)每个参数的 tokenGPU报告的 GPU 小时推出的利用率 MFU
Llama-1 65B5.48e+2321A1001.02 M48%
Llama-2 70B8.40e+2329A1001.72 M43%
Llama-3 70B6.35e+24212H1006.40 M28%

(MFU = 实际有用的计算 / 峰值算力;峰值按稠密 BF16:A100 312 TFLOP/s、H100 989 TFLOP/s。slides 表里的 0.6 / 1.9 PFLOPS 是带稀疏加速的数字。6ND 没算注意力等,所以 MFU 是粗略估计。)

slides 的问题”Llama-3 70B 如果一个月训完要花多少钱”:640 万 GPU 小时 ÷ 720 小时 ≈ 8,889 块 GPU 同时跑一个月;按每块约 1.5 万美元买下来 ≈ 1.33 亿美元;按 1–4/小时租≈640万–2560万美元;电费(700W≈每小时0.7kWh,约1–4 / 小时租 ≈ 640 万–2560 万美元;电费(700 W ≈ 每小时 0.7 kWh,约 0.084)只有约 54 万美元。钱主要花在 GPU 上,而不是电上。

注意 Llama-3 70B 每个参数用了 212 个 token,远超 Chinchilla 建议的约 20 个:模型训练好以后要服务很多用户,推理的成本和参数量成正比,宁可在训练时多花计算、“过度训练”一个小一点的模型。

3.3 幂律,以及它从哪里来

幂律(slides):f(x)=a x−kf(x) = a\,x^{-k}。两边取对数,log⁡f=log⁡a−klog⁡x\log f = \log a - k\log x——在双对数坐标下是一条直线,斜率是 −k-k。x 每翻一倍,f 乘以 2−k2^{-k}(k = 0.5 时乘 0.707)。

不可约损失:语言本身有熵,再大的模型、再多的数据,损失也降不到 0。所以规模定律写成 L=E+Ax−kL = E + A x^{-k},幂律描述的是超出 E 的那一部分。代码 03 第 1 部分:不减 E、直接在双对数坐标下拟合 1.7+3x−0.51.7 + 3x^{-0.5},斜率 0.5 被估成 0.135(x 大时曲线趋于 1.7、不再下降)。真实语料的 E 未知,只能和其他参数一起拟合——§3.6 会看到,这很危险。

为什么是幂律? 一个”记事实”的玩具模型(Hutter, 2021;Michaud et al., 2023 的想法):世界里有很多事实,出现频率服从 Zipf 分布(第 i 常见的事实频率 ∝ i−ai^{-a})。一个没记住的事实,每次出现都要多付 log V 的损失。

  • 容量有限(模型最多记住最常见的 N 个事实,数据无限):超额损失 = 尾巴上的频率之和 ∑i>Ni−a∝N−(a−1)\sum_{i>N} i^{-a} \propto N^{-(a-1)};
  • 数据有限(容量无限,见过 D 句话):频率为 f 的事实,见过它的概率是 1−(1−f)D1-(1-f)^D;D 句话大约能覆盖排名在 D1/aD^{1/a} 以内的事实,剩下的尾巴 ∝D−(a−1)/a\propto D^{-(a-1)/a}。

代码 03 第 2 部分(2202^{20} 个实体 × 4 个属性):

Zipf 指数 a容量的指数(拟合)理论 a − 1数据的指数(拟合)理论 (a − 1)/a
1.20.2730.2000.2210.167
1.50.5200.5000.3400.333
2.01.0011.0000.5000.500

(a = 1.2 时有限个实体的截断让拟合偏高。)数据的长尾越重(a 越接近 1),指数越小:多一倍的参数或数据,带来的好处越少。真实的 LLM 里,Chinchilla 拟合出的指数是 α ≈ 0.34、β ≈ 0.28。

计算最优(第 3 部分):计算量 C∝N⋅DC \propto N\cdot D 固定时,在玩具模型(a = 1.5)里搜索最好的 N,得到 Nopt∝C0.392N_{\text{opt}} \propto C^{0.392};理论值 β/(α+β)=1/(a+1)=0.400\beta/(\alpha+\beta) = 1/(a+1) = 0.400。容量和数据都要随计算量增长,谁涨得快取决于两个指数之比。

3.4 Kaplan et al. (2020)

实验设计(slides):改变参数量 N(768 到 15 亿,只数非嵌入参数)、token 数 D(2200 万到 230 亿)、计算量 C、模型形状(深度、宽度、头数、dmodeld_{\text{model}})、上下文长度(≤ 1024)、批大小(≤ 2192^{19} 个 token),看每个模型的测试损失。

七条结论(slides):

  1. 三个量起主导作用:参数量 N、token 数 D、计算量 C;
  2. 模型的形状不太重要(同样的 N,深一点浅一点差不多);
  3. 只要 N 和 D 一起增加,性能就一直提升;
  4. 训练 / 测试损失曲线服从可预测的幂律;
  5. 大模型更省样本(同样的数据,大模型学得更多);
  6. 不需要训练到收敛也能有好的性能;
  7. 最好的批大小也服从幂律(而且很大:100–200 万个 token)。

Kaplan 的配比建议:“模型每大 8 倍,数据只需要多约 5 倍”(D∝N0.74D \propto N^{0.74};用计算量表示,Nopt∝C0.73N_{\text{opt}} \propto C^{0.73})。于是 GPT-3 这一代模型都是”大模型、相对少的数据”:1750 亿参数只用了 3000 亿 token(每个参数不到 2 个)。

3.5 Hoffmann et al. (2022):Chinchilla

slides:“Hoffmann et al. 讲了一个很不一样的故事”。

  • 做法:固定计算量 C,改变 N 和 D(400 多个模型,7000 万到 160 亿参数,50 亿到 5000 亿 token),测 L(N, D);学一个模型去预测任意 N、D 下的损失,再用它预测最优的模型大小。论文用了三种方法:(1) 对每个 N 取训练曲线的下包络;(2) IsoFLOP 曲线:固定几个 C,每个 C 下换模型大小,损失对 log N 是 U 形,取最低点;(3) 拟合参数化的损失 L(N,D)=E+A/Nα+B/DβL(N, D) = E + A/N^{\alpha} + B/D^{\beta}(得到 E = 1.69、A = 406.4、B = 410.7、α = 0.34、β = 0.28)。
  • 结论:参数和数据应该同比例增加(N × 2、D × 2;Nopt∝C0.50N_{\text{opt}} \propto C^{0.50},三种方法给出 0.46–0.50)。“大家用的数据都太少了”:同样的计算量,减小模型、增加数据,性能好得多——Chinchilla(700 亿参数、1.4 万亿 token)用和 Gopher(2800 亿参数、3000 亿 token)差不多的计算量,全面打败了它。约每个参数 20 个 token。

由参数化损失推出计算最优:在约束 C=6NDC = 6ND 下最小化 AN−α+BD−βA N^{-\alpha} + B D^{-\beta},用拉格朗日乘子(或把 D=C/6ND = C/6N 代入、对 N 求导令其为 0):

Nopt=G(C6)βα+β,Dopt=G−1(C6)αα+β,G=(αAβB)1α+β.N_{\text{opt}} = G\left(\frac{C}{6}\right)^{\frac{\beta}{\alpha+\beta}},\quad D_{\text{opt}} = G^{-1}\left(\frac{C}{6}\right)^{\frac{\alpha}{\alpha+\beta}},\quad G = \left(\frac{\alpha A}{\beta B}\right)^{\frac{1}{\alpha+\beta}}.

α ≈ β 时两个指数都约 0.5——“同比例增加”就是这么来的。

为什么 Kaplan 和 Chinchilla 不一样? 几个原因(后来的论文逐一检查过):

  • 学习率的余弦长度:Kaplan 的余弦调度长度固定、不随 D 变;数据少的实验学习率没降完,损失偏高,看起来”多加数据收益很大,多加参数收益更大”。Chinchilla 让余弦长度和 D 匹配。
  • 数参数的方法:Kaplan 只数非嵌入参数,Chinchilla 数全部;Kaplan 的模型又小,嵌入占的比例大。Pearce & Song (2024) 发现,单是这一点就能把 Chinchilla 的指数”变成”接近 Kaplan 的。
  • 规模:Kaplan 的模型最大 15 亿参数,在小规模上外推。

3.6 我们的实验:在一个已知熵的小世界里拟合(代码 04)

scaling_lab.FactWorld:4096 个实体,名字是 3 个”音节”;每个实体 4 个属性,每个属性的值是 16 个里随机定好的一个;一句话 = <s> 音节 音节 音节 属性 值 </s>;实体按 Zipf 分布(a = 1.2)出现。真实分布完全已知:语言的熵(不可约损失)H = 6.1034 nats / 句;模型的超额损失 = KL(真实 ‖ 模型),对全部 16384 种句子精确加权求和,没有抽样噪声。模型是第 2 讲的 2 层 GPT,学习率余弦长度和 D 匹配,每个 token 只见一次。

模型全部参数 N非嵌入参数D = 0.5MD = 1MD = 2M其中”值”(D = 2M)
d = 1610,3686,5927.48163.85732.62361.8411
d = 2420,16014,4964.84273.04421.92081.4668
d = 3233,02425,4724.07672.68411.51771.2251
d = 4867,96856,6403.19112.05101.12370.9381
d = 64115,200100,0962.95531.74911.01550.8906

(超额损失,nats / 句。“值”的部分 = 没记住的事实,是超额损失的大头。)

  • 单变量的幂律:D = 2M 时超额损失 ∝N−0.40\propto N^{-0.40}(R² = 0.984);d = 64 时 ∝D−0.77\propto D^{-0.77}(R² = 1.000)。
  • Chinchilla 的方法 3(L = H + 超额损失,15 个点):
拟合EαβNopt∝CaN_{\text{opt}} \propto C^{a} 的 aC = 1e13 时每个参数的 token
E 固定为真实的熵,N = 全部参数6.10340.9621.0480.5261
E 一起拟合,N = 全部参数0.16300.4140.2610.39557
E 固定为真实的熵,N = 非嵌入参数(Kaplan 的数法)6.10340.8131.0640.5766
  • E 一起拟合时完全失准:拟合出的 E = 0.163,真实值 6.103。只有 15 个点、N 跨 11 倍、D 跨 4 倍时,“E 很小、损失下降得慢”和”E 很大、下降得快”几乎一样好地拟合同一组点;而 E 一错,α、β、计算最优的 a、每个参数该配几个 token 全都跟着错(557 vs 61)。真实的语料里 E 未知,规模定律的论文都要靠跨越几个数量级的 N 和 D 来把它定下来。这是本讲最值得记住的教训之一:拟合规模定律时,不可约损失和指数是互相牵制的。
  • E 已知时,a = 0.52——和 Chinchilla 的”同比例增加”一致。
  • 换成非嵌入参数:α 从 0.962 变成 0.813,a 从 0.52 变成 0.57。小模型里嵌入参数占的比例大(d = 16 时 36%,d = 64 时 13%),两种数法下”模型大了几倍”不一样,拟合出的指数也就不一样——Pearce & Song (2024) 说的正是这件事,方向也一致(只数非嵌入参数时,a 偏向 Kaplan 那一边)。
  • 单变量指数和方法 3 的指数不一样(D:0.77 vs 1.05):单变量拟合是在 N 固定时对总超额损失拟合,里面还有一块不随 D 变的 A/NαA/N^\alpha;方法 3 把两块分开。两者回答的是不同的问题。

IsoFLOP 曲线(方法 2;--isoflop,约 15 分钟,本讲义没有完整运行):4 个计算量 C = 1e11…3e12,每个 C 下换 5–6 个模型大小(D = C / 6N),在 log N 上拟合抛物线找最低点。运行后你应该看到:每个 C 下损失对 log N 是 U 形——模型太小记不住、太大数据不够;最低点随 C 增大而右移;拟合 Nopt∝CaN_{\text{opt}} \propto C^{a} 的 a 应该和上表”E 固定”那一行的 0.52 差不多(具体数字以你的运行为准)。

3.7 数据质量(代码 05)

Phi 系列(slides):不加大模型、不加大数据,而是提高数据质量。Phi-1(“Textbooks Are All You Need”,13 亿参数、70 亿 token 的”教科书质量”代码数据)的表现和大得多的代码模型相当;Phi-1.5 在常识推理上和大 5 倍的 LLM 相当。

数据过滤的规模定律(Goyal et al., 2024;slides):最近的趋势是强调数据质量而不只是数量,但质量、数量、计算量之间怎样取舍很难预测。他们的结论:计算量越大,过滤可以越宽松——高质量的数据很少,过滤得越狠留下的越少;计算量大时只能把这些数据反复看很多遍,而同一份数据每多看一遍,价值都在下降。

我们的版本:同一个事实世界,d = 32 的 GPT,四种数据策略,在干净的真实分布上算超额损失:

数据策略数据池覆盖的事实(按概率)0.25M token0.5M1M2M4M
严格过滤:5,000 句干净的话0.8117.5074.0642.7031.6491.307
严格过滤:15,000 句干净的话0.8767.5284.0742.7001.5661.010
宽松过滤:50,000 句,10% 是错的0.9327.5684.1102.7381.6631.065
不过滤:无限多,30% 是错的1(全部)7.6104.1932.8491.8281.290
  • 计算量小时,最狠的过滤最好(5000 句);1M 以后,留 15000 句的最好:计算量越大,最好的过滤越宽松,和 Goyal et al. 一致。
  • 大计算量下,最狠的过滤反而不如不过滤(4M 时 1.307 vs 1.290):5000 句的数据池只覆盖了 81.1% 的概率质量,数据池里没出现过的事实,看多少遍也学不会。
  • 错的数据有永久的代价:30% 的句子错时,数据无限多也只能学到”正确的值概率 0.7 + 0.3/16 ≈ 0.719”,每句话至少多损失 0.330 nats;10% 错时下限是 0.098。宽松过滤在我们的范围里一次也没赢——它的数据池还没被”看腻”,噪声的代价却已经付了。

4. 小结 · Summary

  1. Q-Former:一组可学习的查询通过交叉注意力读取冻结的图像编码器,只交给冻结的语言模型几个 token;BLIP-2 分两阶段训练(表示学习:ITC / ITG / ITM;生成预训练:软视觉提示)。在我们的小实验里,它让语言模型冻结时的”比较”题稳定下来,但”看问题”没有额外帮助。
  2. 幂律:L=E+Ax−kL = E + A x^{-k};拟合前必须处理不可约损失 E。数据里事实的 Zipf 长尾,就足以让超额损失对容量和数据都呈幂律,指数由长尾的轻重决定。
  3. Kaplan vs Chinchilla:Kaplan 认为参数比数据更重要(Nopt∝C0.73N_{\text{opt}} \propto C^{0.73}),Chinchilla 认为同比例增加(C0.5C^{0.5},每个参数约 20 个 token);差别来自学习率调度、数参数的方法和规模。
  4. 成本:C≈6NDC \approx 6ND;钱主要花在 GPU 上;为了推理便宜,实际的模型常常”过度训练”(Llama-3 70B 每个参数 212 个 token)。
  5. 数据质量:过滤要看计算量——计算量越大,越应该宽松。

5. 常见误区 · Common pitfalls

  • “规模定律就是在双对数坐标下画直线。” 只有超出不可约损失的那一部分才是直线;不减 E 拟合,斜率会被严重低估(0.5 → 0.135)。
  • “不可约损失可以和指数一起放心地拟合。” 点太少、范围太窄时,E 和指数互相牵制,可能错得离谱(我们的 0.163 vs 6.103)。
  • “Chinchilla 推翻了 Kaplan。” 两者都是在各自的设定下”对”的;差别来自调度、数参数的方法和规模。而且”计算最优”只管训练:要考虑推理成本,就应该过度训练小模型。
  • “参数量就是参数量。” 数不数嵌入层,在小模型上会改变拟合出的指数。
  • “Q-Former 一定比线性投影好。” 它在我们的”比较”题上更稳,但”描述”题上不如线性投影;它还多了很多参数。
  • “数据越干净越好。” 计算量大时,过滤得太狠,数据池就太小、太单一;有时又多又脏的数据反而更好。

6. 练习 · Exercises

练习 1(Q-Former 省了多少)。 一个 7B 的语言模型,处理一个 token 的前向约 2×7×1092 \times 7\times10^9 FLOPs。BLIP-2 用 32 个查询代替 ViT-L/14 的 257 个块。(a) 每张图的”前缀”在语言模型里少算多少 FLOPs?(b) 如果问题和回答一共 50 个 token,整段对话的前向计算量变成原来的几分之几?(忽略注意力和 Q-Former 本身。)

参考答案

(a) 少 225 个 token,约 225 × 1.4e10 ≈ 3.2e12 FLOPs。(b) 原来 257 + 50 = 307 个 token,现在 32 + 50 = 82 个,计算量变成 82 / 307 ≈ 27%。图像越多(多图对话、视频),省得越多。

练习 2(两点定斜率)。 一组模型的超额损失在参数量 × 8 时减半。指数 k 是多少?要让超额损失再减半,参数量还要乘以几?

参考答案

8−k=1/28^{-k} = 1/2,所以 k=log⁡2/log⁡8=1/3k = \log 2 / \log 8 = 1/3。幂律的每一次”减半”都要乘同样的倍数:再乘 8。这就是为什么规模定律下”进步越来越贵”:每减半一次超额损失,参数量都要多 8 倍。

练习 3(推导数据的指数)。 在 §3.3 的玩具模型里,事实 i 的频率 fi∝i−af_i \propto i^{-a}。(a) 说明 D 句话之后,排名大约在 D1/aD^{1/a} 以内的事实都见过了。(b) 推出超额损失 ∝D−(a−1)/a\propto D^{-(a-1)/a}。

参考答案

(a) 事实 i 平均出现 Dfi∝Di−aD f_i \propto D i^{-a} 次;它见过(至少一次)大约要 Di−a≳1D i^{-a} \gtrsim 1,即 i≲D1/ai \lesssim D^{1/a}。(b) 没见过的事实是排名大于 D1/aD^{1/a} 的那些,它们的频率之和 ∑i>D1/ai−a∝(D1/a)1−a=D−(a−1)/a\sum_{i > D^{1/a}} i^{-a} \propto (D^{1/a})^{1-a} = D^{-(a-1)/a}。乘以 log V 就是超额损失。

练习 4(计算最优配比)。 从 L(N,D)=E+A/Nα+B/DβL(N, D) = E + A/N^\alpha + B/D^\beta 和 C=6NDC = 6ND 推出 §3.5 的 NoptN_{\text{opt}} 公式。用 Chinchilla 的拟合(α = 0.34、β = 0.28),计算量多 10 倍时,参数和数据各该多几倍?

参考答案

把 D=C/(6N)D = C/(6N) 代入,f(N)=AN−α+B(6N/C)βf(N) = AN^{-\alpha} + B(6N/C)^{\beta};f′(N)=−αAN−α−1+βB(6/C)βNβ−1=0f'(N) = -\alpha A N^{-\alpha-1} + \beta B (6/C)^\beta N^{\beta-1} = 0,得 Nα+β=αAβB(C/6)βN^{\alpha+\beta} = \frac{\alpha A}{\beta B}(C/6)^{\beta},即 Nopt=G(C/6)β/(α+β)N_{\text{opt}} = G (C/6)^{\beta/(\alpha+\beta)},G=(αA/βB)1/(α+β)G = (\alpha A/\beta B)^{1/(\alpha+\beta)};Dopt=C/(6Nopt)D_{\text{opt}} = C/(6N_{\text{opt}})。指数 β/(α+β)=0.28/0.62≈0.45\beta/(\alpha+\beta) = 0.28/0.62 ≈ 0.45:参数多 100.45≈2.810^{0.45} ≈ 2.8 倍,数据多 100.55≈3.510^{0.55} ≈ 3.5 倍。

练习 5(Chinchilla vs Gopher)。 用 Chinchilla 的拟合(E = 1.69、A = 406.4、B = 410.7、α = 0.34、β = 0.28)算 Chinchilla(N = 700 亿、D = 1.4 万亿)和 Gopher(N = 2800 亿、D = 3000 亿)的预测损失和计算量。

参考答案

Chinchilla:A/Nα=406.4/(7×1010)0.34≈406.4/4870≈0.083A/N^\alpha = 406.4/(7\times10^{10})^{0.34} ≈ 406.4/4870 ≈ 0.083,B/Dβ=410.7/(1.4×1012)0.28≈410.7/2540≈0.162B/D^\beta = 410.7/(1.4\times10^{12})^{0.28} ≈ 410.7/2540 ≈ 0.162,L ≈ 1.69 + 0.083 + 0.162 ≈ 1.935。Gopher:406.4/(2.8×1011)0.34≈0.052406.4/(2.8\times10^{11})^{0.34} ≈ 0.052,410.7/(3×1011)0.28≈0.251410.7/(3\times10^{11})^{0.28} ≈ 0.251,L ≈ 1.993。计算量:Chinchilla 6×7×1010×1.4×1012≈5.9×10236 \times 7\times10^{10}\times1.4\times10^{12} ≈ 5.9\times10^{23},Gopher 6×2.8×1011×3×1011≈5.0×10236\times2.8\times10^{11}\times3\times10^{11} ≈ 5.0\times10^{23}——差不多的计算量,Chinchilla 的预测损失更低:Gopher 的数据太少,B/DβB/D^\beta 那一项太大。

练习 6(过滤的临界点)。 在 §3.7 的实验里,一个数据池有 U 句话、覆盖了概率质量 c 的事实。(a) 数据池里没有的事实,模型最好能学到什么程度?由此写出”严格过滤”的超额损失下限。(b) 不过滤的数据有 30% 是错的,它的下限是多少?哪一个下限更低,就说明在计算量无限时哪一种更好。

参考答案

(a) 没见过的事实只能瞎猜(log 16 ≈ 2.77 nats),所以值的超额损失至少是 (1−c)⋅log⁡16(1-c)\cdot\log 16:5000 句(c = 0.811)至少 0.52,15000 句(c = 0.876)至少 0.34。(b) 不过滤的下限是 0.330(§3.7)。15000 句和不过滤的下限差不多,5000 句的下限更高——所以计算量足够大时,5000 句一定会输给不过滤。(这只是”值”那一部分的下限,名字的频率模型也会受数据池影响。)

练习 7(“看问题”何时有用)。 §2.4 里看问题的 Q-Former 没有更好。设计一个让它更可能占优的图像世界:图里应该有什么?问题应该问什么?查询数应该怎样选?

参考答案

让”一张图里的信息”远多于”一个问题需要的信息”:比如每张图里有 4–6 个物体,各有形状、大小、位置、颜色;问题只问其中一个物体(“左上角那个是什么形状”)。再把查询数限制得很小(1–2 个),让查询装不下整张图。这时不看问题的查询只能平均地压缩所有物体,看问题的查询可以只提取被问到的那个——InstructBLIP 的优势就出现在这种”容量不够、要挑重点”的场景。

7. 延伸阅读 · Further reading

  • Q-Former 与相关:Li et al. (2023), BLIP-2;Dai et al. (2023), InstructBLIP;Jaegle et al. (2021), Perceiver IO;Pan et al. (2025), Transfer between Modalities with MetaQueries;Beyer et al. (2024), PaliGemma。
  • 规模定律:Kaplan et al. (2020);Hoffmann et al. (2022), Chinchilla;Hutter (2021), Learning Curve Theory;Michaud et al. (2023), The Quantization Model of Neural Scaling;Pearce & Song (2024), Reconciling Kaplan and Chinchilla Scaling Laws;Porian et al. (2024), Resolving Discrepancies in Compute-Optimal Scaling of Language Models;Allen-Zhu & Li (2024), Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws。
  • 数据质量:Gunasekar et al. (2023), Textbooks Are All You Need(Phi-1);Li et al. (2023), Textbooks Are All You Need II(Phi-1.5);Goyal et al. (2024), Scaling Laws for Data Filtering—Data Curation cannot be Compute Agnostic;Muennighoff et al. (2023), Scaling Data-Constrained Language Models(重复数据的价值)。

8. 下一讲预告 · Next lecture

第 16 讲进入”扩大规模”单元:混合专家(MoE)。Transformer 一半以上的参数在前馈层里;把前馈层拆成很多个”专家”,每个 token 只交给其中几个(top-k 路由),就能让参数量很大、每个 token 的计算量却不变。我们会从零实现 MoE 层和路由器,看负载均衡项为什么必不可少,再回到本讲的事实世界:参数多了、计算没多,MoE 是不是更会”记事实”?

← 返回课程目录