对应 Maps to:Stanford CS525 Winter 2026 Training Data for AI,1/12 From Highleyman to LAION-5B(Ludwig Schmidt,81 页 slides)。阅读:Hardt & Recht, Patterns, Predictions, and Actions 第 8 章 Datasets(mlstory.org/data.html);Schuhmann et al. LAION-5B: An open large-scale dataset for training next generation image-text models(NeurIPS 2022 Datasets & Benchmarks,最佳论文)。 依据说明:这次课的 slides 前 32 页讲完了 CLIP 鲁棒性来源的控制实验(已并入第 2 讲 §5),后 49 页是本讲的内容:一部简短的训练数据史(1950 年代 → Highleyman → AI 寒冬 → 共同任务框架 → MNIST、TinyImages、CIFAR → 多模态)和 LAION-5B。Highleyman 数据集的细节和历史上的错误率、TIMIT / UCI / MNIST 的背景依据 Hardt & Recht 的章节;LAION-5B 的阈值和规模核对了原文;LAION 下架与 Re-LAION 的事实依据 LAION 的公告和新闻报道。第 7 节(数据文档与测量)和第 8 节”延伸与前沿”是我补充的。 配套代码 Code:
code/lecture03/(numpy + PyTorch;3 个脚本 + 1 个模块;最慢的03_laion_pipeline.py约 40 秒) 预计阅读时间:2.5 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
- 说明为什么机器学习的许多核心想法在 1950 年代就有了,却要等到最近十几年才产生影响——缺的是算力和数据,并能用数量级比较这两者的增长。
- 讲出 Highleyman 数据集的故事,并用它说明三件至今仍然重要的事:训练 / 测试划分(以及按组划分)、“别人拿你的数据比方法”、“需要更多更好的数据”。
- 解释 1960 年代 AI 寒冬的数据 / 评测根源,以及 1980 年代”共同任务框架”(共享数据、固定指标、中立评测)怎样让资助恢复、让进步可测量,又带来了”爬山”文化。
- 描述 MNIST、TinyImages、CIFAR、ImageNet 的来源和特点,以及 2020 年之后研究者对这些数据集的伦理反思。
- 讲清楚 LAION-5B 的构建方法(Common Crawl → alt-text → CLIP 分数过滤)、它的成就(第一个公开的十亿级图文数据集,复现了 CLIP)和问题(规模放大后与 OpenAI 的差距、有害内容、下架与重新发布)。
- 理解”基于模型的过滤”会悄悄改变数据的分布(代码 03)。
- 了解数据文档(datasheets)和测量理论对构建数据集的意义。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲只给直觉,后面几讲再展开 Previewed only |
|---|---|
| 第 1、2 讲:ImageNet、基准的可靠性、CLIP 与数据决定鲁棒性 | Common Crawl 的处理工具(第 4 讲) |
| 训练集 / 测试集、准确率 | DataComp:系统地设计图文数据(第 5 讲) |
| 版权、同意、数据治理(第 19 讲) |
0.3 本讲地图 Map
§1 为什么讲历史:1950 年代的想法;缺的是算力和数据
§2 Highleyman 的数据(1959):第一个基准;划分;方法的进步;"需要更多数据" ← 代码 01
§3 寒冬与基准文化:ALPAC、Pierce;Jelinek、Wayne;共同任务框架;TIMIT、UCI ← 代码 02
§4 从 MNIST 到 ImageNet:MNIST、TinyImages、CIFAR;伦理的反思
§5 多模态时代:Common Crawl、alt-text、LAION-5B;成就与问题 ← 代码 03
§6 回到"AI = compute + data":数据固定、比模型的研究范式,以及 DataComp
§7 数据文档与测量:datasheets;构念与测量程序
§8 延伸与前沿
§9–13 小结、常见误区、练习、延伸阅读、下一讲预告
0.4 关于数字
讲义里的实验数字都来自配套代码的实际输出。代码 01 用一个生成器造出”Highleyman 式”的手写字符(glyph_world.py,原始数据早已散失);代码 02 是一个抽象的模拟(每个”系统”只用一个错误率描述);代码 03 复用第 2 讲的合成世界和迷你 CLIP。历史上的错误率、数据集规模等数字引自 Hardt & Recht 的章节、slides 和原始论文,会注明出处。
1. 为什么讲历史 · Why history?
slides 从一个常被忽略的事实讲起:机器学习的很多想法出现得很早。
- 1943 年,McCulloch 和 Pitts 提出了人工神经元的数学模型;
- 1950 年,Turing 在论文里讨论了”学习机器”(learning machines);
- 1958 年,Rosenblatt 的感知机(Perceptron)上了《纽约时报》:一个二分类算法,实现在当时最先进的计算机上,输入是一个 20 × 20 的光电管网格,任务是判断一个方块在图像的左半边还是右半边——用了大约 100 个训练样本;
- 1959 年,Arthur Samuel 的论文通常被认为是”机器学习”(machine learning)这个词的出处。
为什么是 1950 年代?因为第一批可编程计算机在 1950 年前后出现。slides 举的例子是 IBM 704:第一台批量生产的、有浮点运算硬件的计算机,每秒约 12,000 次浮点加法,1955 到 1960 年间 IBM 一共造了 123 台。
到 1950 年代末,很多关键想法都已经有了,但机器学习直到最近 15 年(尤其是最近 3 年)才真正产生影响。slides 的解释是:缺了两样东西——算力和数据。它给了一张数量级的对比:
| 模型 | 年份 | 计算单元 | 每个单元的 FLOPS | 单元数 | 训练总 FLOP | 训练样本 |
|---|---|---|---|---|---|---|
| 感知机 | 1958 | IBM 704 | 1 | 约 | 约 | |
| AlexNet | 2012 | GTX 580 | 2 | 约 | 约 | |
| GPT-4 | 2022 | A100 | 25,000 | 约 | 约 | |
| 各种模型 | 2025 | H100 | 100,000 | 约 | 约 |
(GPT-4 的数字是 slides 给出的估计,OpenAI 没有公布。)从感知机到今天,训练算力增长了约 倍,训练样本增长了约 倍。这门课关心的是第二列——数据是怎样从一百个变成十万亿个的,每一步又是怎样改变了这个领域的。
2. Highleyman 的数据(1959)
2.1 第一个基准数据集
slides 说,这是 Ludwig Schmidt 所知道的第一个机器学习 / AI 风格的训练和基准数据集。
背景:1959 年,Bill Highleyman 和 Louis Kamentsky 在 Bell Labs 工作,任务是让机器自动读取长途电话的通话记录。他们的方法是:数字扫描仪 + 学习 + IBM 704(和感知机用的是同一种计算机)。在这项工作里,他们用到或提出了好几个现代机器学习的基本元素:梯度下降、线性模型、训练 / 测试划分、经验风险最小化(ERM)。
数据:26 个大写字母 + 10 个数字,50 个不同的人每人写一遍,一共约 1800 个样本;扫描成 12 × 12 的二值点阵(每个格子是 0 或 1),存在 IBM 704 的打孔卡上。
后来发生的事(Hardt & Recht 的考证):
- Highleyman 想在自己的数据上复现别人已有的结果,没有成功;
- 别人开始对他的数据感兴趣,他就把数据寄给他们(收复制费和邮费,用美国邮政寄送)——前后大概不到二十份拷贝;
- Woody Bledsoe 拿到数据后,用前 40 个人的字训练、后 10 个人的字测试,错误率约 60%——这大概是有记录的第一次训练 / 测试划分;他预测要做好需要约 1000 套字母;
- Chao Kong Chow(1962)用一种类似 CNN 的方法,在同样的划分上错误率 41.7%(准确率约 58%);
- 斯坦福研究所(SRI)的 1-最近邻基线是 47.5%;
- Munson、Duda、Hart(1968)用 84 个”汇聚的边缘检测器”做特征,加上分段线性的分类器,错误率 31.7%(只看数字约 12%;准确率约 68%);
- 人看同样的 12 × 12 点阵,平均错误率约 15.7%。
结局:Highleyman 在 1963 年就离开了这个领域。他后来回忆自己的博士论文时说(slides 引用):论文虽然被学校接受为正当的研究,却”没能达到目标,因为缺乏计算资源和可靠的分类算法”。Munson、Duda、Hart 也认为错误率太高,建议要做出有用的结果,需要更大、更高质量的数据集:每类”几百甚至几千个样本”,点阵”至少 20 × 20,最好大约 30 × 30”。slides 的评语:这个预言几乎完全准确地描述了 MNIST(每类约 6000 个训练样本,28 × 28)——只是晚了 26 年。
2.2 在合成世界里重建 Highleyman 的数据
原始数据早已散失。glyph_world.py 造了一个”同样形状”的版本:用”16 段显示器”的方式定义 36 个字形(方框上 9 个关键点、16 条线段,每个字符是若干线段的组合);每个书写者有自己的笔迹(倾斜、宽窄、大小、位置、粗细,以及对 A、1、4、7、9、M、G、Y 这几个字符的写法变体,例如尖顶的 A 和平顶的 A);每次写字还有随机的抖动和偶尔漏掉的一笔;最后扫描成 12 × 12 的 0/1 点阵。50 个人 × 36 个字符 = 1800 个样本。
2.3 教训一:怎样划分训练集和测试集
Bledsoe 的划分是按人的:测试集里的人完全没有在训练集里出现过。如果随机划分样本,同一个人写的字会同时出现在训练集和测试集里——这叫泄漏(leakage)。
代码 01 演示 1 把这件事做成了一个干净的对照:测试集固定为书写者 40–49 的一半样本;三种训练集——无泄漏(只用 0–39 号)、有泄漏(再加上 40–49 号的另一半样本,等于随机划分时会发生的事)、对照(再加上同样数量的、另外 5 个人的样本:训练集一样大,但没有泄漏)。表里是错误率:
| 方法 | 无泄漏 | 有泄漏 | 对照 |
|---|---|---|---|
| 每人每个字写 1 遍 | |||
| 1-NN(原始像素) | 0.333 | 0.528 | 0.317 |
| 线性(原始像素) | 0.167 | 0.172 | 0.178 |
| 每人每个字写 3 遍 | |||
| 1-NN(原始像素) | 0.278 | 0.226 | 0.272 |
| 线性(原始像素) | 0.200 | 0.174 | 0.185 |
- 每人每个字写 3 遍时,泄漏让成绩虚高:1-NN 的错误率从 0.278 降到 0.226,而”同样多但没有泄漏”的对照只降到 0.272。测试集里的一个 ‘A’,训练集里常常有同一个人刚写的另一个 ‘A’——最近邻直接”认出了笔迹”。
- 每人每个字只写一遍(Highleyman 的情形)时,结果反过来:1-NN 有泄漏时反而更差(0.333 → 0.528)。训练集里没有同一个人写的同一个字,只有他写的别的字——它们的倾斜、大小、粗细和测试字一样,在像素距离上反而最近,成了干扰项。
泄漏不一定让成绩变好,但一定让成绩不再回答我们关心的问题——“对一个没见过的人写的字,能认对多少?“。这个教训今天仍然重要:同一个病人的多张片子、同一个网站的多篇文章、同一个代码仓库的多个文件、同一个蛋白质家族的多个序列(第 17 讲),都应该放在划分的同一边(按组划分,group split)。
2.4 教训二:方法的进步,以及”数据集解锁方法”
代码 01 演示 2:在 Bledsoe 式的划分(40 人训练 / 10 人测试)上比较几种方法(错误率):
| 方法(本代码) | 错误率 | 历史上的方法(原始数据) | 错误率 | |
|---|---|---|---|---|
| 1-NN(原始像素) | 0.339 | Bledsoe(约 1960) | 约 60% | |
| 线性(原始像素) | 0.194 | SRI 的 1-NN 基线 | 47.5% | |
| 线性(局部特征) | 0.203 | Chow(1962,类 CNN) | 41.7% | |
| 线性(汇聚的边缘检测器) | 0.189 | Munson、Duda、Hart(1968) | 31.7% | |
| 随机特征(边缘检测器之上) | 0.247 | 人 | 15.7% |
最大的一步是从最近邻到线性模型:最近邻只是”找一个最像的训练样本”,线性模型通过最小化训练误差学到了每个像素该有多重——这正是 Highleyman 提出的经验风险最小化。手工特征在这么小的数据上帮助很小,容量更大的随机特征模型反而更差(1800 个样本不够它学)。绝对数字不能和历史直接比:合成的字由 16 条线段组成,比真实手写规整得多。
2.5 教训三:“需要更多、更好的数据”
代码 01 演示 3 检验 Munson、Duda、Hart 的预言:在书写者人数 × 分辨率上扫描(随机特征模型,测试集是另外 200 个人写的字;表里是错误率):
| 书写者人数(样本数) | 12 × 12 | 20 × 20 | 28 × 28 |
|---|---|---|---|
| 50(1800) | 0.228 | 0.127 | 0.115 |
| 200(7200) | 0.132 | 0.077 | 0.075 |
| 800(28800) | 0.118 | 0.070 | 0.067 |
- 只加人数(12 × 12,50 → 800 人):0.228 → 0.118;只加分辨率(50 人,12 → 28):0.228 → 0.115;两样都加:0.067。
- 分辨率决定了数据里有没有这个信息,样本数决定了模型能不能把它学出来。 12 × 12 的点阵会把细节抹掉(斜笔和竖笔挤在一起、尖顶和平顶难以分辨),数据再多也补不回来。
- 回看演示 2:在 1800 个样本上最差的随机特征模型,在 2.9 万个样本、28 × 28 上是最好的——又一次”数据集解锁方法”(第 1 讲 §1.3)。
3. 寒冬与基准文化 · The AI winter and the rise of benchmarks
3.1 1960 年代:钱很多,结果很少
1960 年代(Sputnik 之后),美国在科学技术上大量投入。语音识别和机器翻译是最受瞩目、最”光鲜”的方向,吸引了大量资金——但结果迟迟拿不出来。
slides 介绍了一个关键人物:John R. Pierce(1910–2002),Bell Labs 的研究主管。他共同发明了脉冲编码调制(PCM),领导了发明晶体管的团队(“晶体管”这个名字就是他起的),主持了第一颗商业通信卫星的研制。他不喜欢 AI,并写下了两份影响深远的文件:
- ALPAC 报告(1964–1966):美国政府成立的”自动语言处理顾问委员会”(7 位研究者,由 Pierce 领导),评估机器翻译对政府各部门(主要是国防和科学,例如翻译俄文期刊)的潜力。结论是负面的,建议转而投资计算语言学。此后 10–20 年,美国政府没有再资助机器翻译。
- 《语音识别往何处去?》(Whither Speech Recognition?,1969):一封只有一页半的短信,发表在《美国声学学会杂志》上,对语音识别研究极为尖刻。他说语音识别”对钱很有吸引力”,就像把水变成汽油、从海里提取黄金、治愈癌症、登月一样;而要从”不假思索地给钱的人”那里拿钱,靠的是欺骗和光鲜(deceit and glamour)。他批评大多数研究者像”疯狂的发明家或不可信的工程师”:建造一个复杂的系统,要么几乎什么都做不了,要么以一种说不清的方式失败;花了很多钱和时间,却没有得到简单、清楚、确定的知识——“这项工作是一段经历(experience),而不是一个实验(experiment)“。此后语音识别也有 10–20 年拿不到资助。
从这门课的角度看,Pierce 的批评本质上是一个数据与评测的问题:没有共享的数据、没有固定的指标、没有中立的评测,研究者各说各话,“做得好”和”选了个容易的测试集”分不开,资助方无从判断。
3.2 1980 年代:让评测”防欺骗、防光鲜”
slides 说,1980 年代中后期让语音和翻译的政府资助恢复的,主要是两个人:IBM 的研究经理 Fred Jelinek 和 DARPA 的项目经理 Charles Wayne。他们的关键想法是:让评测”防欺骗、防光鲜”(glamour-and-deceit-proof)。
- Jelinek:信息论博士(导师 Fano),1972 到 1980 年领导 IBM 的”通用听写问题”研究。他主张在测试集上用固定的、自动计算的指标定量地比较不同的算法,也极力主张共享数据集、评价指标和算法;他的组在机器翻译等问题上也用同样的方法。他有一句常被引用的话,大意是:每次我解雇一个语言学家,语音识别器的表现就会上升。
- Wayne:1986 年负责重启资助的 DARPA 项目经理。他的关键想法是强调评测:定义清楚的、客观的评测,由一个中立的机构(NIST,美国国家标准与技术研究院)在共享的数据集(常常来自语言数据联盟 LDC)上执行。一开始研究者是怀疑的,但这个方法成功了:它让资助能够开始(因为项目防欺骗、防光鲜),也让资助能够持续(因为资助方能看到进步随时间的变化)。Wayne 的设计很容易画出进步曲线,帮助向资助方推销研究项目。一个不那么明显的好处是:它让爬山(hill climbing)成为可能——一开始反对”一年被测两次”的研究者,后来每小时都在测自己。
这套做法后来被称为共同任务框架(common task framework):一个共享的任务定义、一份共享的训练数据、一个由中立方掌握的测试集、一个固定的指标、一个排行榜。
代码 02 演示 1 用一个抽象的模拟说明它的作用:8 个实验室、10 年,每家的真实错误率每年都在下降。没有共同评测时,每家用自己的 100 个样本的测试集(难度各不相同),在 5 个系统版本里挑最好的报告;有共同评测时,所有系统在同一个每年新换的 2000 个样本的测试集上由中立方评测。
| 第 10 年平均错误率 | 和真实排名的 Spearman 相关(10 年平均) | |
|---|---|---|
| 真实 | 0.202 | — |
| 各家自报 | 0.114 | 0.47 |
| 共同评测 | 0.201 | 0.93 |
自报的数字整体偏乐观(一部分来自”挑最好的版本”,更多来自各家测试集的难度不同),而且排名几乎没法用。共同评测给出了可以比较的数字和可信的进步曲线。
代码 02 演示 2 模拟了”爬山”:每次评测试一个随机修改(模拟里修改的平均效果是有害的——大多数想法本来就不管用),在共享的开发集上测,比当前记录好就保留;任务有一个去不掉的错误率 0.100。
| 每年评测次数 | 开发集大小 | 10 年后真实错误率 | 开发集上的分数 | 开发集的乐观 |
|---|---|---|---|---|
| 2 | 5000 | 0.391 | 0.391 | −0.000 |
| 20 | 5000 | 0.184 | 0.173 | +0.010 |
| 200 | 5000 | 0.137 | 0.122 | +0.016 |
| 2000 | 5000 | 0.127 | 0.109 | +0.018 |
| 2000 | 500 | 0.192 | 0.127 | +0.066 |
频繁的、自动的评测让研究者能快速筛掉坏想法、留下少数好想法——进步快得多。代价是开发集上的分数越来越乐观;开发集太小、评测太频繁时,“碰巧测得好”的修改不断被保留,真正的进步也被拖慢(同样每年 2000 次,开发集 500 个样本时真实错误率 0.192,5000 个样本时 0.127)。所以共同任务框架还需要一个每年新换、事先没人见过的测试集——这也是第 1 讲 ImageNetV2 那个问题的起源。(模拟假设不同系统错在不同的样本上,是最坏的情况;第 1 讲代码 04 说明系统越相似,这种乐观越小。)
3.3 TIMIT 和 UCI:基准范式进入机器学习
slides:1987 年,David Aha(当时是博士生)创建了 UCI 机器学习数据库,用 FTP 分发数据集;机器学习社区开始采用基准范式。1988 年,语音识别的关键数据集 TIMIT 发布。
Hardt & Recht 补充了一些值得注意的细节:
- TIMIT(由 1986 年 Wayne 的 DARPA 项目资助):1988 年 12 月发布 CD-ROM 原型,1990 年 10 月发布改进版,一开始就有训练 / 测试划分。约 5 小时语音、6300 段话:630 个说话人每人 10 句。说话人 70% 是男性,大多数是德州仪器的员工,91.7% 是白人——数据集记录了每个说话人的种族。早期的语音系统表现出人口统计学上的偏差;Koenecke 等人(2020)发现现代系统里仍然有种族差异。
- UCI:现在有 500 多个大多是小型表格数据的数据集。最受欢迎的是 Fisher 的鸢尾花数据(Iris,1936)。Adult 数据集(约 5 万条、14 个属性,来自 1994 年的人口普查)在公平性研究里很流行,但它的特殊性使它成为一个糟糕的公平性基准(Ding et al. 2021 提出”让它退役”)。早在 1995 年就有人批评这类数据库助长了只做小改进的论文。
4. 从 MNIST 到 ImageNet
4.1 MNIST
slides:一个广泛使用的手写数字分类数据集,约 1994 年发布(LeCun、Cortes、Burges)。6 万个训练样本、1 万个测试样本,28 × 28 灰度图。卷积神经网络在上面表现很好(错误率低于 1%),核 SVM 也表现很好。
MNIST 的来历本身就是一堂”数据划分”的课(Hardt & Recht):它来自美国国家标准与技术研究院(NIST)的两个数据库——一个由人口普查局的员工书写,一个由高中生书写。NIST 原来的划分是用前者训练、后者测试,两个人群写字的方式差别很大;MNIST 的作者把两部分重新混合、再切分(这个过程后来被人重建出来)。Yann LeCun 维护了一个非正式的排行榜:1999 年 2 月的快照里,错误率从线性分类器的 12.0% 一直到提升过的 LeNet-4 的 0.7%。今天,低于 0.5% 的错误率很容易达到,MNIST 被普遍认为”太简单了”。Yadav 和 Bottou(2019)找回了原测试集里”丢失”的 5 万个数字,发现 20 多年的反复使用之后也没有过拟合(第 1 讲 §5.9)。
4.2 TinyImages 与 CIFAR
TinyImages(2008):早期的网络数据集的例子——用 WordNet 的名词去搜索引擎搜图,得到约 8000 万张 32 × 32 的小图,没有任何人工标注。2020 年,因为数据集里有冒犯性的内容(Prabhu 和 Birhane 发现其中大量带有种族和性别歧视的标签和图片),它被作者撤回。
CIFAR-10(Alex Krizhevsky 2009 年的硕士论文 Learning Multiple Layers of Features from Tiny Images):TinyImages 的一个子集,5 万张训练图、1 万张测试图,10 个类别(类别均衡),由多伦多的学生人工标注,32 × 32 彩色图。还有一个 100 个类别的 CIFAR-100(仍然是 5 万 / 1 万)。
4.3 伦理的反思
slides 用一页讲了训练数据的伦理问题:2020 年起,AI 受到更多关注、影响更广,研究者开始从伦理、公平等角度重新审视数据集,例如:
- 暴力、裸露、色情等内容;
- 种族刻板印象和不均衡的代表性;
- 图片中的人是否同意;
- 版权。
背景是:研究用的数据集主要是作为研究产物构建的,不是为部署设计的;早期关注的是抽象的学习问题,在这些维度上标准很宽松。slides 说明这门课主要关注能力,但会指出伦理问题(并给出阅读材料)。第 19 讲会专门讨论版权、同意和数据治理。
4.4 数据集推动方法
slides 再次回到第 1 讲的那条时间线:MNIST(1994)→ 卷积神经网络;CIFAR-10(2009)→ 在 GPU 上训练;ImageNet(2012)→ 深度学习的复兴、ResNet、迁移学习;WebImageText(2021)→ 零样本分类(CLIP)、文本生成图像(DALL·E)。Hardt & Recht 补充了 ImageNet 的一个细节:ILSVRC 的 1000 个类别是倾斜的——只有 3 个关于人的类别,却有 118 个狗的品种(第 1 讲 §4.2)。
5. 多模态时代:LAION-5B
5.1 2021 年 1 月 5 日
OpenAI 在同一天发布了两篇关于多模态学习的论文:CLIP(图像理解:零样本分类、鲁棒性)和 DALL·E(图像生成:由文字生成图像)。它们的共同基础是几亿个图文对的预训练数据。但这样大规模的图文数据集只存在于 Google、OpenAI 这样的公司内部。
slides 介绍了走向更好的公开多模态数据集的两步:LAION-5B(第一个公开的十亿级图文数据集)和 DataComp(第一个以数据为中心的机器学习基准,产生了当时最好的视觉模型,第 5 讲)。
5.2 起点:Common Crawl
Common Crawl 是一个公开的、非营利的互联网抓取(slides):
- 从 2007 年开始运行;
- 累计约 2500 亿个网页;
- 全部存放在 AWS S3 上(约 10 PB);
- 每次更新(大约每月一次)新增约 30 亿个网页、约 100 TB 压缩数据。
它让”互联网规模”的数据整理成为可能——而不只是从 Flickr 之类的单个网站上取数据。slides 把它称为”AI 革命”背后的数据源之一:今天几乎所有大语言模型的预训练数据都有很大一部分来自 Common Crawl(第 6 讲)。第 4 讲讲怎样处理这种规模的数据。
5.3 alt-text 作为监督信号
网页上的图片常常带一个 alt 属性(<img src="..." alt="a golden retriever playing in the snow">):本意是为视障用户和图片加载失败时提供文字描述。这些 alt-text 就是现成的、海量的”说明文字”——不用任何人专门标注。代价是它们非常嘈杂:文件名(“IMG_2034.jpg”)、营销话术(“buy cheap shoes online”)、和图片无关的文字、只是网站标题……
5.4 LAION-5B 的构建
LAION-5B(Schuhmann et al. 2022)的流程(slides 的简化版 + 原文):
- 候选池:从 Common Crawl 里找出所有带 alt-text 的图片,约 500 亿个图文对;
- 内容过滤:用 OpenAI 公开的 CLIP ViT-B/32 分别编码图片和文字,算余弦相似度,只保留高于阈值的(slides 写作 0.3,那是更早的 LAION-400M 用的阈值;LAION-5B 的英文部分用 0.28,多语言部分用多语言 CLIP 和 0.26);
- 此外还计算了水印、不适宜内容(NSFW)和有毒内容的检测分数,供使用者自行过滤。
规模:58.5 亿个图文对,其中约 23 亿是英文、约 23 亿是多语言、约 13 亿不属于特定语言——比之前最大的公开数据集大约 50 倍。LAION 是一个社区项目(Large-scale Artificial Intelligence Open Network),约 10 个机构参与,高度协作。它获得了 NeurIPS 2022 数据集与基准赛道的最佳论文奖。
为什么用 CLIP 过滤? slides 的说法:CLIP 分数是一个质量指标——它衡量文字描述图片描述得好不好。它不需要任何人工标注,用一个已有的模型就能给几十亿对打分。这是这门课里反复出现的基于模型的过滤(model-based filtering)的早期例子。
5.5 验证:能训练出好的 CLIP 吗?
slides 给出了用 OpenCLIP 在 LAION 上训练 CLIP 的结果:
| CLIP 模型 | 训练数据 | ImageNet | ObjectNet |
|---|---|---|---|
| 小(B/32) | OpenAI | 63.3% | 44.2% |
| 小(B/32) | LAION | 62.9%(−0.4) | 43.9%(−0.3) |
| 大(L/14) | OpenAI | 75.6% | 69.0% |
| 大(L/14) | LAION | 72.8%(−2.8) | 59.9%(−9.1) |
好消息:能训练出好的 CLIP 模型——小模型几乎追平了 OpenAI。LAION-5B 成了很多当时最好的模型的训练集:例如广泛使用的文本生成图像模型 Stable Diffusion;Schmidt 组的 OpenCLIP(使用最广的开源 CLIP 实现,约 1.2 万 GitHub 星,Meta、Apple 的内部实现也以它为模板,Stable Diffusion 里的文字编码部分也来自它)。
坏消息:不如 OpenAI 的模型,而且差距随规模增大(大模型在 ObjectNet 上差了 9.1 个百分点)。怎样改进 LAION?这就是第 5 讲 DataComp 的出发点。
5.6 在合成世界里走一遍 LAION 的管线
代码 03 复用第 2 讲的世界:一个教师 CLIP(扮演 OpenAI 的 CLIP)在一份”私有”数据上训练(说明文字更干净,照片占 70%);一个 15 万对的 Common Crawl 式候选池(说明文字 35% 好、45% 含糊、20% 错)。
演示 1:CLIP 分数能分辨好坏吗?
| 说明文字 | 平均 CLIP 分 | 进入前 50% 的比例 | 进入前 15% 的比例 |
|---|---|---|---|
| 好 | 0.435 | 0.870 | 0.401 |
| 含糊 | 0.258 | 0.381 | 0.020 |
| 错 | 0.101 | 0.119 | 0.005 |
能——不需要任何人工标注。但它不只是在给”说明文字”打分:同样是好的说明文字,分数和图片的清晰度相关(相关系数 0.46);不同风格之间的差别却很小(照片 0.438、素描 0.424)。
演示 2:阈值怎么定? 保留分数最高的前 100% / 50% / 30% / 15% / 5%,各训练一个学生 CLIP(训练步数相同):
| 保留比例 | 对数 | 好的说明文字占比 | 零样本 ImageNet | 平均有效鲁棒性 |
|---|---|---|---|---|
| 100% | 150,000 | 0.350 | 0.620 | +0.031 |
| 50% | 75,000 | 0.609 | 0.682 | +0.009 |
| 30% | 45,000 | 0.774 | 0.707 | +0.006 |
| 15% | 22,500 | 0.935 | 0.717 | −0.005 |
| 5% | 7,500 | 0.995 | 0.694 | +0.001 |
ImageNet 准确率在保留 15% 时最好;过滤太松,大量含糊和错的说明文字;过滤太紧,数据太少。这是贯穿这门课的质量与数量的取舍。
但另一列在悄悄下降:有效鲁棒性随过滤变严而下降(+0.031 → 约 0)。过滤让模型在 ImageNet 上更好,却让它更像一个”普通的” ImageNet 模型。
演示 3:过滤之后,留下的是什么样的图?
| 保留比例 | 照片占比 | 素描占比 | 平均清晰度 | 姿态不寻常的比例 |
|---|---|---|---|---|
| 100% | 0.351 | 0.150 | 0.536 | 0.175 |
| 15% | 0.366 | 0.139 | 0.644 | 0.124 |
风格比例几乎没变——教师的训练数据 70% 是照片,但这个偏好在打分里体现得很弱(这一点和我写代码前的预想不同)。真正被改变的是难度:平均清晰度从 0.536 升到 0.644,姿态不寻常的图从 0.175 降到 0.124。CLIP 过滤偏爱清楚、典型的图——和第 1 讲里众包共识筛掉难图的效果如出一辙(那里的”ImageNet”平均清晰度是 0.660)。
一个模型的”品味”通过过滤传给了下一代模型的训练数据。 这和第 2 讲连了起来:鲁棒性来自数据的多样性,而以模型为基础的过滤可能悄悄地减少多样性。第 5 讲会看到,DataComp 在真实的大规模实验里发现更宽松的 CLIP 阈值(保留更多数据)反而更好;Nguyen 等人(2022)也讨论了 CLIP 过滤怎样改变数据的分布。
5.7 LAION 的问题
LAION 的开放也让它的问题被看得很清楚:
- 有害内容:Birhane 等人(2021)分析 LAION-400M,发现大量厌女、色情和恶性刻板印象的内容——CLIP 分数衡量的是”图文是否匹配”,而不是”内容是否合适”。
- 违法内容:2023 年 12 月,斯坦福互联网观察站(Stanford Internet Observatory)的报告在 LAION-5B 里发现了指向儿童性虐待材料(CSAM)的链接。LAION 随即下架了 LAION-5B 和 LAION-400M。2024 年 8 月 30 日,LAION 与互联网观察基金会(IWF)、加拿大儿童保护中心等合作,用已知的链接和图片哈希清单清理后发布了 Re-LAION-5B(约 55 亿对),一共删除了 2236 条链接(包含斯坦福报告指出的 1008 条)。
- 版权与同意:LAION 只发布链接和说明文字,不发布图片本身;但用它训练的生成模型引发了艺术家和图片库的诉讼(第 19 讲)。
LAION 发布的是链接,而不是图片:几年之后,相当一部分链接已经失效(“链接腐烂”),下载到的数据集和原始的不再一样——这给复现带来了另一种困难。
6. 回到”AI = compute + data”
slides 在结尾又回到了第 1 讲的那张图:compute 一侧有成千上万篇论文(优化算法、模型架构、损失函数……),data 一侧是一个问号。它引用 paperswithcode 的统计:机器学习研究的常见范式是”数据固定,改进模型”,很少有论文尝试改进训练数据。
DataComp(Gadre et al. 2023)把这个范式翻了过来:
- 传统的机器学习基准:数据集固定,改进模型;
- DataComp:训练代码固定,改进数据集。
关键想法是”把 LAION-5B 重做一遍,但这次以一种灵活、可复用的方式”:不只发布一个数据集,而是发布整套工具(候选池、过滤代码、训练代码、评测);把它设置成一个基准(DataComp = dataset competition,数据集竞赛);目标是让数据研究像模型研究一样可以协作、可以比较。第 5 讲详细讲。
7. 数据文档与测量(补充)
本节依据 Hardt & Recht 的章节,是我补充的。
数据文档。 Gebru 等人(2018)的 Datasheets for Datasets 提议:每个数据集都应该附一份”说明书”,回答一系列问题——动机(为什么建、谁出资)、组成(有什么、缺什么、有没有敏感信息)、收集过程(怎样收集、谁收集、是否征得同意)、预处理 / 清洗 / 标注、用途(适合做什么、不该做什么)、分发和维护。这些问题看起来繁琐,但 TinyImages 和 LAION 的教训说明:没有人认真回答它们的数据集,迟早会出问题。
构念与测量程序。 测量理论区分构念(construct,你想测的东西)和测量程序(procedure,你实际做的事)。例如”信用风险”是构念,“90 天以上逾期”是测量程序;“犯罪”是构念,“被逮捕”是测量程序——而谁被逮捕取决于谁被警察盯着。Hardt & Recht 的一句话值得记住:一个差的目标变量,不能用更多的数据来弥补。构建训练集时,“标签到底在测什么”是第一个要问的问题。
数据的局限。 Hardt & Recht 还讲了”脆弱家庭挑战”(Fragile Families Challenge):一份跟踪了 15 年的家庭数据(4242 行、12943 列,约 73% 的值缺失),几百个研究者提交了几千个模型去预测孩子 15 岁时的六个结果(成绩、贫困、被驱逐……),最好的模型几乎没有超过一个只预测平均值的基线。有些东西也许本来就很难从过去的数据里预测——机器学习默认”未来和过去相似”。
8. 延伸与前沿 · Beyond the original lecture
本节是我补充的。
- 图文数据之后:LAION 之后出现了 DataComp-1B(第 5 讲)、MetaCLIP 的元数据平衡(第 5 讲)、DFN(用数据过滤网络取代 CLIP 分数)、以及把图文交错的整个网页当作训练数据的 OBELICS、MINT-1T 等。
- 语言模型的数据:同样的”Common Crawl → 过滤 → 去重”范式统治了语言模型的预训练数据(C4、RefinedWeb、FineWeb、DCLM,第 6–7 讲)。
- 数据的寿命:网络数据集只发布链接时会”腐烂”;发布原始内容又有版权和隐私问题。数据集的维护、版本、撤回机制(Re-LAION 就是一个例子)越来越成为数据工作的一部分。
9. 小结 · Summary
- 机器学习的很多核心想法在 1950 年代就有了;缺的是算力和数据。从感知机到今天,训练样本增长了约 倍。
- Highleyman 的 1800 个手写字符是第一个”基准”:它带来了训练 / 测试划分(Bledsoe 的按人划分)、别人用你的数据比方法、以及”需要更多更好的数据”的结论——26 年后 MNIST 实现了这个预言。
- 划分要按组:泄漏(同一个人的字同时出现在训练和测试里)会让测试成绩失真——不一定变好,但不再回答你关心的问题。
- 1960 年代的寒冬有评测的根源:没有共享数据和中立评测,“做得好”和”选了个容易的测试集”分不开。Jelinek 和 Wayne 的共同任务框架让评测防欺骗、防光鲜,让资助恢复、进步可测量,也带来了爬山文化(和它的过拟合风险)。
- MNIST、TinyImages、CIFAR、ImageNet 一路把数据规模推上去;2020 年后,研究者开始从伦理角度重新审视这些”研究产物”。TinyImages 被撤回。
- LAION-5B 用 Common Crawl 的 alt-text 和 CLIP 分数过滤,构建了第一个公开的十亿级图文数据集,复现了 CLIP——但大模型上和 OpenAI 的差距更大,而且有有害、违法内容的问题(2023 年下架,2024 年发布 Re-LAION-5B)。
- 基于模型的过滤会悄悄改变数据的分布:在合成世界里,CLIP 过滤偏爱清晰、典型的图,有效鲁棒性随之下降。
- 研究范式长期是”数据固定、改进模型”;DataComp 把它翻了过来。
10. 常见误区 · Common pitfalls
- “深度学习的成功来自新算法。” 很多基本想法在 1950–1980 年代就有了;决定性的变化是算力和数据(§1、第 1 讲 §4.4)。
- “随机划分训练集和测试集总是对的。” 数据有分组结构(同一个人、同一个病人、同一个网站)时,要按组划分(§2.3)。
- “泄漏只会让成绩虚高。” 也可能让成绩更差(代码 01 演示 1,每人每字写一遍时);关键是它不再测量你想测的东西。
- “基准文化是 ImageNet 带来的。” 它来自 1980 年代语音识别的共同任务框架,1987 年的 UCI 和 1988 年的 TIMIT 把它带进了机器学习。
- “评测越频繁越好。” 频繁的评测加速进步,但开发集太小时会过拟合;需要一个事先没人见过的测试集(代码 02 演示 2)。
- “CLIP 分数高 = 好数据。” CLIP 分数衡量的是图文是否匹配(按教师模型的理解),不衡量内容是否合适、是否合法;而且它有自己的偏好(偏爱清晰、典型的图)。
- “LAION 复现了 CLIP,所以公开数据追上了私有数据。” 小模型几乎追平,大模型差距更大(ObjectNet 差 9.1 个百分点)——差距随规模增大。
- “发布了数据集就完事了。” 链接会失效、内容会被发现有问题、需要撤回和重新发布;数据集需要文档和维护。
11. 练习 · Exercises
练习 1(数量级) 用 §1 的表格:(a) 从感知机到 AlexNet、从 AlexNet 到 2025 年的模型,训练总算力和训练样本数各增长了多少倍?(b) “每个训练样本分到的算力”是在增长还是减少?这说明了什么?
参考答案
(a) 感知机 → AlexNet:算力约 倍,样本 倍。AlexNet → 2025:算力约 倍,样本 倍。
(b) 每个样本的算力:感知机约 ,AlexNet 约 ,2025 年约 ——一直在增长,因为算力增长得比数据快。这意味着数据越来越成为瓶颈:同样的算力想要更多的”新”数据。这正是第 12 讲”数据会用完吗”、第 11 讲合成数据、第 7 讲”重复训练多少遍还有用”要讨论的问题。(这只是粗略的数量级;“一个样本”在感知机里是一张小图,在 2025 年是一个 token。)
练习 2(按组划分) 你要为一个医院建一个从胸片诊断肺炎的数据集:5000 个病人,每人平均 4 张片子(不同时间拍的)。(a) 应该怎样划分训练 / 验证 / 测试集?(b) 如果随机按片子划分,测试成绩可能偏高还是偏低?参考代码 01 演示 1,什么情况下可能偏低?(c) 如果模型将来要部署到另一家医院,还需要什么?
参考答案
(a) 按病人划分:同一个病人的所有片子放在同一份里。
(b) 通常偏高:同一个病人的片子非常相似(解剖结构、拍摄设备),而且标签常常相同,模型可以”认出这个病人”而不是”认出肺炎”。但如果同一个病人的片子标签不同(例如早期没病、后来有病),和测试片最像的训练片可能来自同一个病人的另一个时间点、标签相反——这时泄漏反而可能让最近邻式的模型更差(类似演示 1 每人每字写一遍的情形)。无论偏高偏低,随机划分都不再回答”对一个新病人准不准”。
(c) 还需要按医院分组的评估:用一家医院的数据训练、另一家医院的数据测试(第 2 讲:分布偏移)。最好在训练数据里就包含多家医院(数据决定鲁棒性)。
练习 3(自报的数字) 代码 02 演示 1 里,各家的测试集难度倍数是 0.57、0.67、0.69、0.84、1.14、0.54、0.65、0.91。(a) 为什么即使没有人”作弊”,自报的平均错误率也比真实值低这么多?(b) 一个资助方只能看到自报的数字,它能做什么来减少被误导?
参考答案
(a) 两个来源:(1) 测试集难度不同:8 家里 7 家的测试集比”标准难度”更容易(倍数 < 1),平均约 0.75;研究者自然会收集”他们能处理的”数据,没有人刻意作弊,测试集也会偏容易。(2) 挑最好的版本:在 5 个版本里挑测试集上最好的报告,有乐观偏差(第 1 讲代码 04 演示 1)。
(b) 本质上就是共同任务框架:要求所有人在同一个测试集上评测;测试集由中立方掌握、不提前公开;每年换新的;限制提交次数;固定指标。如果做不到,至少要求公开测试集、报告置信区间、报告所有试过的版本而不是只报最好的。
练习 4(CLIP 过滤的偏好) 代码 03 里,CLIP 过滤偏爱清晰的图。(a) 为什么一个在”图文是否匹配”上训练的模型,会给清晰的图打更高的分?(b) 提出两种减轻这种偏好的过滤方法。
参考答案
(a) 模糊的图,图片向量里关于物体的信号弱、噪声大,和任何文字向量的余弦相似度都会偏低——即使说明文字完全正确。CLIP 分数混合了”文字对不对”和”图里的东西清不清楚”两件事。真实的 CLIP 也一样:物体小、被遮挡、不典型的图分数更低。
(b) 例如:(1) 分层过滤:先按某个”难度”代理(例如图片嵌入的范数、或者教师自己的置信度)分层,在每一层内部分别取前 x%,而不是全局取前 x%;(2) 相对分数:用”这段文字的分数”减去”这张图和随机文字的平均分数”,消掉图本身清不清楚的影响;(3) 更宽松的阈值 + 别的过滤器(DataComp 的做法:放宽 CLIP 阈值,再用图片聚类等方法过滤,第 5 讲)。这些都可以在代码副本里试一试;我没有在课程代码里实现它们。
练习 5(构念与测量) 你要训练一个识别”高质量网页”的分类器,用来过滤预训练数据(第 6 讲)。(a) “高质量”是构念,写出三种可能的测量程序(标签从哪里来)。(b) 每种测量程序可能带来什么偏差?
参考答案
(a) 例如:(1) 被维基百科引用过的网页 = 高质量(GPT-3、早期 LLaMA 的思路);(2) 让一个强大的语言模型给网页的”教育价值”打分(FineWeb-Edu,第 7 讲);(3) 和一组精选的高质量文本(例如指令数据、问答网站的高赞回答)相似的网页 = 高质量(DCLM,第 6 讲)。
(b) (1) 偏向维基百科编辑关心的主题和语言风格,偏向英语、偏向某些地区;(2) 继承了打分模型的偏好(第 3 讲代码 03、第 5 讲 T-MARS 的教训),偏向”像教科书”的文本;(3) 偏向那组精选文本的风格和主题。没有哪种是”真正的质量”——每种测量程序都把某种价值判断写进了数据。Hardt & Recht 的那句话:“一个差的目标变量,不能用更多的数据来弥补”。
12. 延伸阅读 · Further reading
原课阅读
- Hardt & Recht, Patterns, Predictions, and Actions, 第 8 章 Datasets。§2–4、§7 的主要依据:Highleyman、TIMIT、UCI、MNIST、ImageNet 的历史,测试集复用的理论,数据的危害,数据文档与测量理论。强烈推荐全读。
- Schuhmann et al., LAION-5B: An open large-scale dataset for training next generation image-text models(NeurIPS 2022 D&B)。
本讲提到的其他工作
- Schuhmann et al., LAION-400M(2021);Birhane, Prabhu, Kahembwe, Multimodal datasets: misogyny, pornography, and malignant stereotypes(2021);Prabhu & Birhane, Large image datasets: A pyrrhic win for computer vision?(2020)。
- LAION, Releasing Re-LAION 5B(2024)。
- Gebru et al., Datasheets for Datasets(2018 / CACM 2021)。
- Krizhevsky, Learning Multiple Layers of Features from Tiny Images(2009)。
- Pierce, Whither Speech Recognition?(JASA 1969);Church, Emerging trends: A tribute to Charles Wayne(2018)——共同任务框架的历史。
和本目录其他课程的联系
- CS324 第 2 讲(数据)、CS336 第 13 讲(数据来源):从语言模型的角度讲 Common Crawl 和数据来源。
13. 下一讲预告 · Next lecture
LAION 从 500 亿个候选图文对里筛出 58 亿个;一次 Common Crawl 更新就有约 30 亿个网页、100 TB 压缩数据。这些数字背后是一个工程问题:这么大的数据,怎样存、怎样处理、怎样去重?
第 4 讲:大规模数据处理的工具。 客座讲者 Tony Wang(Anthropic 预训练团队负责数据处理)会讲:数据是表格;Parquet 为什么是列式的、Iceberg 在它之上加了什么;什么时候一台大机器加 Polars 就够了,什么时候需要 Spark;表的设计(规范化 vs 反规范化)。代码会手写一个”迷你 Parquet”、一个 map-reduce、一个 Bloom filter 和 MinHash 去重,看看列式存储、数据倾斜、容错和近似去重在实践中是什么样子。