对应 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
学完这一讲,你应该能够:
- 描述 Q-Former:可学习的查询、交叉注意力、两个训练阶段;说出它和”线性投影”相比省了什么、多了什么。
- 写出幂律 ,知道为什么拟合前要减掉不可约损失;用”记事实”的玩具模型解释幂律从哪里来。
- 说出 Kaplan et al. (2020) 的主要结论,以及 Chinchilla 为什么得出”参数和数据应该同比例增加”;会用 推出计算最优的配比。
- 用 估算训练一个 LLM 的计算量、GPU 小时和成本。
- 解释”数据过滤不能不看计算量”:计算量越大,过滤可以越宽松。
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 的汇总向量 | 1 | 4,160 | 0.946 | 0.926 | 0.958 | 0.716 | 0.858 |
| 线性投影:块特征池化成 4×4 | 16 | 4,160 | 0.878 | 0.890 | 0.928 | 0.566 | 0.752 |
| 线性投影:全部 49 个块 | 49 | 4,160 | 0.892 | 0.878 | 0.928 | 0.848 | 0.786 |
| Q-Former:1 个查询 | 1 | 137,856 | 0.934 | 0.920 | 0.848 | 0.938 | 0.730 |
| Q-Former:4 个查询 | 4 | 138,048 | 0.930 | 0.870 | 0.916 | 0.944 | 0.778 |
| Q-Former:16 个查询 | 16 | 138,816 | 0.890 | 0.866 | 0.830 | 0.874 | 0.696 |
| Q-Former:4 个查询 + 看问题 | 4 | 145,792 | 0.926 | 0.908 | 0.952 | 0.922 | 0.770 |
(500 张测试图,回答逐词完全正确才算对;瞎猜时”是不是”是 0.5。)
“是不是某种形状”在第 13 讲就很不稳定,单个种子说明不了问题。代码 02 对三种接口各换 2 个种子(种子同时决定初始化和训练时抽到的数据):
| 接口 | 种子 0(01) | 种子 1 | 种子 2 |
|---|---|---|---|
| 线性投影:CLIP 的汇总向量 | 0.716 | 0.814 | 0.680 |
| Q-Former:4 个查询 | 0.944 | 0.936 | 0.966 |
| Q-Former:4 个查询 + 看问题 | 0.922 | 0.900 | 0.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-2 | 2019 | 约 100 亿(40 GB) | 15 亿 |
| GPT-3 | 2020 | 3000 亿 | 1750 亿 |
| PaLM | 2022 | 7800 亿 | 5400 亿 |
| Chinchilla | 2022 | 1.4 万亿 | 700 亿 |
| LLaMA | 2023 | 1.4 万亿 | 650 亿 |
| LLaMA-2 | 2023 | 2 万亿 | 700 亿 |
| LLaMA-3 | 2024 | 15 万亿 | 4050 亿 |
slides 的引导问题:Meta 是怎样选择”训练 token 数 / 参数量”这个组合的? 答案就是规模定律。
3.2 训练一个 Llama 要多少钱(代码 03 第 4 部分)
训练的计算量可以用一个简单的公式估计:(N 个参数、D 个训练 token;前向每个参数每个 token 一次乘加 = 2 FLOPs,反向约是前向的 2 倍,合起来 6;P1 讲过)。
| 模型 | C = 6ND(FLOPs) | 每个参数的 token | GPU | 报告的 GPU 小时 | 推出的利用率 MFU |
|---|---|---|---|---|---|
| Llama-1 65B | 5.48e+23 | 21 | A100 | 1.02 M | 48% |
| Llama-2 70B | 8.40e+23 | 29 | A100 | 1.72 M | 43% |
| Llama-3 70B | 6.35e+24 | 212 | H100 | 6.40 M | 28% |
(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 亿美元;按 0.084)只有约 54 万美元。钱主要花在 GPU 上,而不是电上。
注意 Llama-3 70B 每个参数用了 212 个 token,远超 Chinchilla 建议的约 20 个:模型训练好以后要服务很多用户,推理的成本和参数量成正比,宁可在训练时多花计算、“过度训练”一个小一点的模型。
3.3 幂律,以及它从哪里来
幂律(slides):。两边取对数,——在双对数坐标下是一条直线,斜率是 。x 每翻一倍,f 乘以 (k = 0.5 时乘 0.707)。
不可约损失:语言本身有熵,再大的模型、再多的数据,损失也降不到 0。所以规模定律写成 ,幂律描述的是超出 E 的那一部分。代码 03 第 1 部分:不减 E、直接在双对数坐标下拟合 ,斜率 0.5 被估成 0.135(x 大时曲线趋于 1.7、不再下降)。真实语料的 E 未知,只能和其他参数一起拟合——§3.6 会看到,这很危险。
为什么是幂律? 一个”记事实”的玩具模型(Hutter, 2021;Michaud et al., 2023 的想法):世界里有很多事实,出现频率服从 Zipf 分布(第 i 常见的事实频率 ∝ )。一个没记住的事实,每次出现都要多付 log V 的损失。
- 容量有限(模型最多记住最常见的 N 个事实,数据无限):超额损失 = 尾巴上的频率之和 ;
- 数据有限(容量无限,见过 D 句话):频率为 f 的事实,见过它的概率是 ;D 句话大约能覆盖排名在 以内的事实,剩下的尾巴 。
代码 03 第 2 部分( 个实体 × 4 个属性):
| Zipf 指数 a | 容量的指数(拟合) | 理论 a − 1 | 数据的指数(拟合) | 理论 (a − 1)/a |
|---|---|---|---|---|
| 1.2 | 0.273 | 0.200 | 0.221 | 0.167 |
| 1.5 | 0.520 | 0.500 | 0.340 | 0.333 |
| 2.0 | 1.001 | 1.000 | 0.500 | 0.500 |
(a = 1.2 时有限个实体的截断让拟合偏高。)数据的长尾越重(a 越接近 1),指数越小:多一倍的参数或数据,带来的好处越少。真实的 LLM 里,Chinchilla 拟合出的指数是 α ≈ 0.34、β ≈ 0.28。
计算最优(第 3 部分):计算量 固定时,在玩具模型(a = 1.5)里搜索最好的 N,得到 ;理论值 。容量和数据都要随计算量增长,谁涨得快取决于两个指数之比。
3.4 Kaplan et al. (2020)
实验设计(slides):改变参数量 N(768 到 15 亿,只数非嵌入参数)、token 数 D(2200 万到 230 亿)、计算量 C、模型形状(深度、宽度、头数、)、上下文长度(≤ 1024)、批大小(≤ 个 token),看每个模型的测试损失。
七条结论(slides):
- 三个量起主导作用:参数量 N、token 数 D、计算量 C;
- 模型的形状不太重要(同样的 N,深一点浅一点差不多);
- 只要 N 和 D 一起增加,性能就一直提升;
- 训练 / 测试损失曲线服从可预测的幂律;
- 大模型更省样本(同样的数据,大模型学得更多);
- 不需要训练到收敛也能有好的性能;
- 最好的批大小也服从幂律(而且很大:100–200 万个 token)。
Kaplan 的配比建议:“模型每大 8 倍,数据只需要多约 5 倍”(;用计算量表示,)。于是 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) 拟合参数化的损失 (得到 E = 1.69、A = 406.4、B = 410.7、α = 0.34、β = 0.28)。
- 结论:参数和数据应该同比例增加(N × 2、D × 2;,三种方法给出 0.46–0.50)。“大家用的数据都太少了”:同样的计算量,减小模型、增加数据,性能好得多——Chinchilla(700 亿参数、1.4 万亿 token)用和 Gopher(2800 亿参数、3000 亿 token)差不多的计算量,全面打败了它。约每个参数 20 个 token。
由参数化损失推出计算最优:在约束 下最小化 ,用拉格朗日乘子(或把 代入、对 N 求导令其为 0):
α ≈ β 时两个指数都约 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.5M | D = 1M | D = 2M | 其中”值”(D = 2M) |
|---|---|---|---|---|---|---|
| d = 16 | 10,368 | 6,592 | 7.4816 | 3.8573 | 2.6236 | 1.8411 |
| d = 24 | 20,160 | 14,496 | 4.8427 | 3.0442 | 1.9208 | 1.4668 |
| d = 32 | 33,024 | 25,472 | 4.0767 | 2.6841 | 1.5177 | 1.2251 |
| d = 48 | 67,968 | 56,640 | 3.1911 | 2.0510 | 1.1237 | 0.9381 |
| d = 64 | 115,200 | 100,096 | 2.9553 | 1.7491 | 1.0155 | 0.8906 |
(超额损失,nats / 句。“值”的部分 = 没记住的事实,是超额损失的大头。)
- 单变量的幂律:D = 2M 时超额损失 (R² = 0.984);d = 64 时 (R² = 1.000)。
- Chinchilla 的方法 3(L = H + 超额损失,15 个点):
| 拟合 | E | α | β | 的 a | C = 1e13 时每个参数的 token |
|---|---|---|---|---|---|
| E 固定为真实的熵,N = 全部参数 | 6.1034 | 0.962 | 1.048 | 0.52 | 61 |
| E 一起拟合,N = 全部参数 | 0.1630 | 0.414 | 0.261 | 0.39 | 557 |
| E 固定为真实的熵,N = 非嵌入参数(Kaplan 的数法) | 6.1034 | 0.813 | 1.064 | 0.57 | 66 |
- 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 变的 ;方法 3 把两块分开。两者回答的是不同的问题。
IsoFLOP 曲线(方法 2;--isoflop,约 15 分钟,本讲义没有完整运行):4 个计算量 C = 1e11…3e12,每个 C 下换 5–6 个模型大小(D = C / 6N),在 log N 上拟合抛物线找最低点。运行后你应该看到:每个 C 下损失对 log N 是 U 形——模型太小记不住、太大数据不够;最低点随 C 增大而右移;拟合 的 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 token | 0.5M | 1M | 2M | 4M |
|---|---|---|---|---|---|---|
| 严格过滤:5,000 句干净的话 | 0.811 | 7.507 | 4.064 | 2.703 | 1.649 | 1.307 |
| 严格过滤:15,000 句干净的话 | 0.876 | 7.528 | 4.074 | 2.700 | 1.566 | 1.010 |
| 宽松过滤:50,000 句,10% 是错的 | 0.932 | 7.568 | 4.110 | 2.738 | 1.663 | 1.065 |
| 不过滤:无限多,30% 是错的 | 1(全部) | 7.610 | 4.193 | 2.849 | 1.828 | 1.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
- Q-Former:一组可学习的查询通过交叉注意力读取冻结的图像编码器,只交给冻结的语言模型几个 token;BLIP-2 分两阶段训练(表示学习:ITC / ITG / ITM;生成预训练:软视觉提示)。在我们的小实验里,它让语言模型冻结时的”比较”题稳定下来,但”看问题”没有额外帮助。
- 幂律:;拟合前必须处理不可约损失 E。数据里事实的 Zipf 长尾,就足以让超额损失对容量和数据都呈幂律,指数由长尾的轻重决定。
- Kaplan vs Chinchilla:Kaplan 认为参数比数据更重要(),Chinchilla 认为同比例增加(,每个参数约 20 个 token);差别来自学习率调度、数参数的方法和规模。
- 成本:;钱主要花在 GPU 上;为了推理便宜,实际的模型常常”过度训练”(Llama-3 70B 每个参数 212 个 token)。
- 数据质量:过滤要看计算量——计算量越大,越应该宽松。
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 的前向约 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。这就是为什么规模定律下”进步越来越贵”:每减半一次超额损失,参数量都要多 8 倍。
练习 3(推导数据的指数)。 在 §3.3 的玩具模型里,事实 i 的频率 。(a) 说明 D 句话之后,排名大约在 以内的事实都见过了。(b) 推出超额损失 。
参考答案
(a) 事实 i 平均出现 次;它见过(至少一次)大约要 ,即 。(b) 没见过的事实是排名大于 的那些,它们的频率之和 。乘以 log V 就是超额损失。
练习 4(计算最优配比)。 从 和 推出 §3.5 的 公式。用 Chinchilla 的拟合(α = 0.34、β = 0.28),计算量多 10 倍时,参数和数据各该多几倍?
参考答案
把 代入,;,得 ,即 ,;。指数 :参数多 倍,数据多 倍。
练习 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:,,L ≈ 1.69 + 0.083 + 0.162 ≈ 1.935。Gopher:,,L ≈ 1.993。计算量:Chinchilla ,Gopher ——差不多的计算量,Chinchilla 的预测损失更低:Gopher 的数据太少, 那一项太大。
练习 6(过滤的临界点)。 在 §3.7 的实验里,一个数据池有 U 句话、覆盖了概率质量 c 的事实。(a) 数据池里没有的事实,模型最好能学到什么程度?由此写出”严格过滤”的超额损失下限。(b) 不过滤的数据有 30% 是错的,它的下限是多少?哪一个下限更低,就说明在计算量无限时哪一种更好。
参考答案
(a) 没见过的事实只能瞎猜(log 16 ≈ 2.77 nats),所以值的超额损失至少是 :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 是不是更会”记事实”?