对应 Maps to:Stanford CS525 Winter 2026 Training Data for AI(Bulletin 课名 Data for AI),1/5 Introduction, course logistics, ImageNet(Ludwig Schmidt)。阅读:Deng et al. ImageNet: A Large-Scale Hierarchical Image Database(CVPR 2009)、Russakovsky et al. ImageNet Large Scale Visual Recognition Challenge(IJCV 2015)、Krizhevsky et al. ImageNet Classification with Deep Convolutional Neural Networks(AlexNet,NeurIPS 2012)、Recht et al. Do ImageNet Classifiers Generalize to ImageNet?(ImageNetV2,ICML 2019)。 依据说明:本讲主要依据这次课公开的 90 页 slides(课程网站链接的 PDF;其中十几页是 ImageNet 的示例图片,没有文字)。slides 分三部分:动机与引言、课程安排、“通过训练数据实现可靠泛化”的前半(ImageNet 作为关键基准 → 基准可靠吗?);后半(分布偏移、CLIP)是第 2 讲(1/7)的内容。ImageNet 的构建细节依据 Deng et al.(2009)原文,ImageNetV2 的实验细节依据原文。Engstrom et al.(2020)的统计偏差、Blum & Hardt(2015)的提升攻击与 Ladder、Roelofs et al.(2019)的 Kaggle 元分析、第 6 节”延伸与前沿”是我补充的,slides 只提到其中的一部分。 配套代码 Code:
code/lecture01/(标准库 + numpy;4 个脚本 + 3 个共享模块;最慢的03_imagenet_v2.py约 80 秒,其余都在 12 秒以内) 预计阅读时间:3 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
- 用自己的话说清楚”机器学习 = 从数据中学出程序”,以及为什么这让训练数据成为 AI 的”另一半”(slides:AI = compute + data)。
- 举例说明数据集怎样推动了方法上的进步(MNIST → CIFAR-10 → ImageNet → WebImageText),并解释”哪个方法更好,取决于有多少数据”。
- 区分随机标签噪声和系统性标签噪声,说明为什么”数据质量”不是一个数字。
- 讲清 ImageNet 的来龙去脉:为什么要建(Fei-Fei Li 的设想)、图片从哪里来(网络搜索)、标签从哪里来(众包 + 动态共识),以及它在不知不觉中筛掉了什么。
- 描述 ILSVRC 分类任务(1000 类、top-5)和 AlexNet 的配方,以及它为什么改变了整个领域。
- 区分三种”过拟合”,写出 ImageNetV2 的误差分解(适应性差距 + 分布差距 + 泛化差距),并概括 ImageNetV2 的主要发现。
- 解释测试集反复使用在什么情况下会造成严重的过拟合(提升攻击),以及为什么在实际研究中它出奇地小(模型相似性、Ladder、Kaggle 元分析)。
- 解释选择频率(selection frequency)、三种采样策略,以及 Engstrom 等人发现的统计偏差(回归均值)。
- 了解 CS525 的结构、课程项目和本讲义 20 讲的路线图。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲只给直觉,后面几讲再展开 Previewed only |
|---|---|
| 监督学习的基本设定:训练集、测试集、准确率、过拟合 | 分布偏移、有效鲁棒性、CLIP(第 2 讲) |
| 概率:条件概率、贝叶斯公式、正态分布 | 数据集的历史与 LAION(第 3 讲) |
| 神经网络的基本概念(CNN 是什么即可) | 基于模型的过滤、数据基准 DataComp / DCLM(第 5–7 讲) |
| Python 基础;numpy 不熟也没关系,代码里有解释 | 评测数据与测试集污染(第 14 讲);数据集的伦理问题(第 19 讲) |
CS525 原课的先修是研究生水平的机器学习(例如 CS229:监督学习、深度学习、Transformer、语言模型)。第 1 讲用不到这么多:它讲的是”为什么”和”历史”,技术内容集中在第 5 节的统计推理上。
0.3 本讲地图 Map
§1 为什么研究训练数据:程序 vs 数据;AI = compute + data; ← 代码 01
数据集推动方法进步;规模;数据质量与分布
§2 CS525 这门课:目标、形式、项目、讲者、本讲义的 20 讲
§3 ImageNet 的诞生:设想;网络搜索;众包与动态共识; ← 代码 02 演示 1–4
数据集是对世界的一次筛选
§4 ILSVRC、top-5 与 AlexNet:分类任务;进步曲线;AlexNet 的配方与影响 ← 代码 02 演示 5
§5 基准可靠吗?三种过拟合;测试集的反复使用;ImageNetV2;误差分解; ← 代码 03、04
选择频率与采样策略;probit 难度模型;统计偏差;为什么没有适应性过拟合
§6 延伸与前沿
§7–11 小结、常见误区、练习、延伸阅读、下一讲预告
0.4 记号 Notation(全课统一)
| 符号 | 含义 | 例子 |
|---|---|---|
| 数据分布:产生训练集和测试集的”真实”分布 | ImageNet 收集流程产生的图片-标签分布 | |
| 测试集:从 抽出的有限样本,大小为 | ImageNet 验证集, = 50,000 | |
| , | 复现实验的新分布和新测试集 | ImageNetV2, = 10,000 |
| 一个训练好的模型(分类器) | ResNet-152 | |
| , | 在 上的准确率;在整个分布上的(期望)准确率 | |
| 测试误差(ImageNetV2 论文用的记号) | ||
| 被比较、被挑选的模型(或排行榜提交)的个数 | ||
| sf | 选择频率(selection frequency):标注任务里选中这张图的工人比例 | 0.71 |
| top- 准确率 | 模型分数最高的 个类别里有正确答案,就算对 | top-1、top-5 |
| , | 标准正态分布的累积分布函数和它的反函数(probit) |
“数据集""训练集""训练数据”在本讲义里大多可以互换;需要区分时会说明。
0.5 关于这门课 · Which CS525?
Stanford Bulletin 里的课名是 CS525: Data for AI,课程网站上的标题是 CS525: Training Data for AI(Winter 2026,授课教师 Ludwig Schmidt)。它是一门 3 学分的研讨课(seminar):教师讲座、客座讲座和学生论文报告穿插进行,成绩的 90% 来自一个课程项目——为一个你自己选的学习问题构建一个训练集。本讲义把 20 次课整理成 20 讲,SYLLABUS.md 有逐场对应表。
0.6 关于数字 · About the numbers
讲义里所有实验数字都来自配套代码的实际输出(固定随机种子,同一台机器上重复运行逐字相同;代码 01 只用标准库,在 Python 3.9 和 3.13 下输出也相同)。数据是两个合成的小世界:
- 一个邮件世界(代码 01):每封邮件由常用词、主题词、只有搭配起来才有意义的词组和”变形拼写”组成;
- 一个视觉世界(
vision_world.py):40 个类别(8 个超类 × 5 个细类),每张”图片”是一个特征向量,我们知道它的真实类别、物体有多清晰、里面有没有第二个物体、一个标注员会不会选它。
合成世界的意义是知道真相:我们能精确地问”收进来的图有多少是对的""新测试集比旧的难在哪里”。它们演示的是机制,不是量级——例如 ImageNetV2 的准确率下降在真实世界里是 11–14 个百分点,在合成世界里是 4 个百分点左右。哪些结论能推广、哪些不能,正文会逐一说明。有几处结果和我写代码前的预想不一样,讲义按实际结果写,这些情况列在代码 README 的”关于实验结果”里。
论文里的数字(ImageNet、AlexNet、ImageNetV2 等)引自原文,会注明出处。
1. 为什么研究训练数据 · Why study training data?
1.1 从一个问题开始:什么是机器学习?
slides 从一个最基本的问题开始:机器学习 / AI 到底是什么? 它的回答是:
不是直接写一个解决问题 P 的程序,而是写一个程序,让它从数据中”学”出一个模型——也就是另一个程序——这个模型(近似地)解决问题 P。
要体会这句话,先看两个”不需要学习”的问题。
排序。 输入一个数字列表,输出排好序的同一组数字。选择排序只有几行:每一轮在剩下的部分里找到最小值,换到前面。它对任何输入都正确,不需要任何例子。最短路径也一样:Dijkstra 算法大约 20 行 Python,对任何带权图、任何起点和终点都给出正确答案。
对这类问题,我们有清晰的定义和高效的算法,直接实现算法就好。代码 01 演示 1 (a) 用 1000 个随机列表测试了选择排序:1000 个全对。
但很多问题我们不知道怎样写成程序。 slides 举了三个例子:
| 问题 | 输入 → 输出 | 为什么写不出程序 |
|---|---|---|
| 垃圾邮件分类 | 一封邮件 → 是 / 不是垃圾邮件 | “什么算垃圾邮件”没有精确的定义,而且骗子会不断改变写法 |
| 停车标志检测 | 一张图片 → 停车标志的位置(如果有) | 光照、角度、遮挡、贴纸……像素和”停车标志”之间的关系太复杂 |
| 语言建模 | 一段文字的前缀 → 下一个 token | 语言本身就是这个问题的全部规格说明 |
我们写不出程序,但能做到(花些功夫)的是:收集一批”输入 → 输出”的例子,展示我们希望程序做什么——人工标注的垃圾邮件和正常邮件、行车记录仪的图片加上停车标志的标注、互联网上、书里、论文里的文字。机器学习提供了一套工具,从这样的数据里学出程序。
slides 总结了这种范式的优点和代价:
- 优点:广泛适用——同一套工具能解决很多问题。
- 代价:需要数据(可能需要很多);学出来的程序通常不完美。
这里有一个对整门课都很重要的视角转换:当你写不出规格说明(specification)时,数据就是规格说明。 程序员通过代码告诉计算机”做什么”;机器学习的实践者通过数据告诉它。于是,数据里的一切——覆盖了什么、漏掉了什么、错在哪里、偏向哪里——都成了”规格说明”的一部分。这就是为什么研究训练数据,就是在研究”我们到底在让 AI 做什么”。
代码 01 演示 1 (b):在一个合成的邮件世界里,一位”工程师”凭经验写了一条规则——出现至少 2 个已知垃圾词就判为垃圾;另外两个模型从 1000 封带标签的邮件里学习。测试集 4000 封:
| 方法 | 准确率 | 垃圾召回率 | 正常邮件误报率 |
|---|---|---|---|
| 手写关键词规则(≥ 2 个已知垃圾词) | 0.684 | 0.925 | 0.553 |
| 朴素贝叶斯(只看单个词) | 0.845 | 0.833 | 0.143 |
| 逻辑回归(单词 + 相邻词组) | 0.889 | 0.894 | 0.115 |
规则的主要问题是误报:一半以上的正常邮件被判成了垃圾——正常邮件里也会出现促销词,而规则不知道每个词”该算多重”。换阈值也没用:阈值从”≥ 1 个”调到”≥ 4 个”,准确率在 0.567 到 0.754 之间,召回率和误报率此消彼长。要知道哪个阈值最好,你需要一批带标签的邮件来测——也就是数据。 而学习方法从数据里自己找到了规则没写的东西:每个词的权重,以及 52 个工程师根本没想到的变形词(urg3nt、pill$、w1nner……)。
1.2 AI = compute + data
slides 用一张图概括了这门课的立场:
AI = compute + data
│ │
┌──────────────────────┘ └──────────────────────┐
优化算法、模型架构、 ?
数据中心与系统……(成千上万篇论文) 这正是 AI / ML 和经典计算机科学
→ 经典计算机科学(算法、系统)的延伸 真正不同的地方;研究还很早期
→ 这门课的主题
“compute”这一侧——怎样优化、用什么架构、怎样在数据中心里高效地训练——本质上是算法和系统问题,和经典计算机科学一脉相承,已经有大量研究。“data”这一侧是机器学习独有的:经典计算机科学里没有”训练数据”这个东西。可它的研究却相对薄弱。为什么?
- 文化:机器学习的基准文化是”数据固定、比方法”。ImageNet、GLUE、各种排行榜都把数据集当作给定的东西,大家在同一份数据上比模型。研究数据本身,在这种文化里”不算贡献”。
- 激励:slides 展示了 CHI 2021 的最佳论文——Sambasivan 等人的 “Everyone wants to do the model work, not the data work”:在高风险的 AI 应用里,数据工作常常被低估,数据问题会像瀑布一样层层传递,造成”数据级联”(data cascades)。
- 成本:研究”数据 A 好还是数据 B 好”,需要在每份数据上各训练一次模型;研究模型时,数据是现成的。
- 保密:对前沿模型来说,训练数据越来越被当作商业机密(§1.4)。
这门课想要改变这个局面。一个关键的方法论转变是把基准”翻过来”:固定模型和训练代码,只改变数据,用下游评测来比较数据集。这就是 DataComp(图文数据,第 5 讲)和 DCLM(语言模型预训练数据,第 6 讲)的设计——它们都出自 Ludwig Schmidt 的研究组和合作者。
1.3 数据集推动了方法上的进步
slides 列了一条时间线:数据集常常”解锁”或”凸显”方法上的进步。
| 数据集 | 规模 | 解锁 / 凸显的进步 |
|---|---|---|
| MNIST(1994) | 6 万张手写数字 | 卷积神经网络 |
| CIFAR-10(2009) | 6 万张 32×32 小图(取自 8000 万张的 TinyImages) | 在 GPU 上训练神经网络 |
| ImageNet(2012 年的 ILSVRC) | 120 万张 | 深度学习的复兴、ResNet、迁移学习 |
| WebImageText(2021,CLIP 的训练集) | 4 亿个图文对 | 零样本分类(CLIP)、文本生成图像(DALL·E) |
从 MNIST 到 WebImageText,训练集大了将近 7000 倍。每一次跳跃,都让一类之前”看起来不如简单方法”的技术显出了优势。
为什么数据集能”解锁”方法? 直觉是:表达能力强的模型需要更多数据才能把能力兑现出来。数据少的时候,假设很强、参数很少的简单模型反而更好;数据多了,复杂模型才反超。
代码 01 演示 2 复现了这个现象。在邮件世界里,信息分成两层:单个词只有微弱的倾向性;而”多义词 + 跟随词”的搭配(例如 free now 是垃圾、free this 是正常)则是决定性的证据——只是一共有 64 种搭配,每种都很少见。朴素贝叶斯只看单个词,参数少、学得快;逻辑回归同时看词组,参数多得多。
| 训练邮件数 | 10 | 30 | 100 | 300 | 1000 | 3000 | 10000 |
|---|---|---|---|---|---|---|---|
| 朴素贝叶斯准确率 | 0.635 | 0.702 | 0.784 | 0.804 | 0.850 | 0.861 | 0.867 |
| 逻辑回归准确率 | 0.584 | 0.583 | 0.770 | 0.833 | 0.891 | 0.922 | 0.946 |
朴素贝叶斯在 时领先,然后很快饱和(它根本看不到词组信息);逻辑回归在 时反超,之后一路拉开。在 的范围里把错误率拟合成幂律 :逻辑回归 ,朴素贝叶斯只有 。
这正是 ImageNet 和卷积网络的故事(§4.4):卷积网络在 1990 年代就有了,在 MNIST 上效果很好;但在 2012 年之前的大规模视觉任务上,它并没有明显胜过”手工特征 + 简单分类器”。直到 120 万张图的 ImageNet 出现(加上 GPU),它才一下子拉开了差距。方法的价值,常常要等到合适的数据出现才能被看见。
1.4 规模:训练集的增长,以及越来越少的细节
语言模型的训练集增长得更快。slides 的估计:
| 模型 | 年份 | 训练 token 数(约) |
|---|---|---|
| GPT-1 | 2018 | 10 亿 |
| GPT-2 | 2019 | 300 亿 |
| GPT-3 | 2020 | 3000 亿 |
| GPT-4 | 2023 | 3 万亿(slides 打了问号:OpenAI 没有公布) |
5 年里增长约 3000 倍。之后的开放权重模型继续往上走:Llama 3(2024)用了 15 万亿以上的 token,Qwen2.5 用了 18 万亿,Qwen3(2025)约 36 万亿。
与此同时,slides 指出了一个反向的趋势:关于预训练数据的细节越来越少,连开放权重的模型也是如此。 模型权重公开了,训练数据却往往只有一两段话的描述。slides 引用了两份技术报告来说明业界对数据重要性的认识:Llama 3 的发布博客说,为了训练最好的模型,他们在预训练数据上投入了大量精力;Qwen2.5-Coder 的报告把代码能力归功于细致的数据清洗、可扩展的合成数据和均衡的数据混合。
所以我们处在一个奇怪的位置:大家都承认数据是关键,但关于”什么数据、怎样处理”的公开知识相对稀缺。 这门课的很多内容(DCLM、FineWeb、OLMo、Tulu、OpenThoughts……)来自少数把数据完全公开、并系统地做了消融实验的工作。
1.5 为什么研究训练数据:三个理由
slides 给了三个理由:
- 训练数据是机器学习 / AI 的关键原料。 没有数据,就没有模型训练。
- 扩大规模是改进模型的可靠方法。 更多的数据 → 更好的模型(§1.3 的学习曲线;第 4、7、12 讲的规模定律)。
- 可靠的泛化。 想让模型泛化得更好——分布外泛化、公平性 / 偏差——改进训练数据常常是最有效的办法(第 2 讲会给出一个很强的版本:CLIP 的分布鲁棒性几乎完全由训练数据决定)。
第 1 条和第 2 条是关于数量的;第 3 条暗示了质量和分布同样重要。代码 01 的后两个演示各给了一个例子。
数据质量不是一个数字(代码 01 演示 3)。 用朴素贝叶斯,比较两种”脏标签”:
- 随机噪声:每个标签以 10%–40% 的概率随机翻转,和邮件内容无关;
- 系统性噪声:标注员认不出变形拼写——含变形词的垃圾邮件有 90% 被标成”正常”。总错标比例只有 0.136,比 20% 的随机翻转还小。
| 训练标签(朴素贝叶斯) | = 300 | 1000 | 10000 | 30000 |
|---|---|---|---|---|
| 干净 | 0.813 | 0.843 | 0.867 | 0.869 |
| 随机翻转 20% | 0.715 | 0.817 | 0.857 | 0.862 |
| 随机翻转 40% | 0.637 | 0.755 | 0.833 | 0.855 |
| 系统性:认不出变形拼写 | 0.765 | 0.766 | 0.759 | 0.754 |
| ↳ 系统性噪声下,变形垃圾邮件被抓到的比例 | 0.619 | 0.497 | 0.305 | 0.270 |
随机噪声的伤害随数据增加而消失: = 30000 时,连 40% 的翻转都只差 0.014。朴素贝叶斯的训练就是数数,随机翻转只是把两类的词频按比例”掺匀”了一点,每个词偏向哪一类并没有改变;数据一多,平均就把噪声抹掉了。系统性噪声则相反:错误有方向,而且集中在一类特定的邮件上。数据越多,模型越确信”变形词 = 正常邮件”,抓到变形垃圾邮件的比例从 0.619 一路掉到 0.270。
所以,评价数据质量时要问的不只是”错了多少”,而是”错误和我关心的东西有没有关系”。一个对某类样本有系统偏差的过滤器,比一个随机出错的过滤器危险得多——第 5–7 讲的基于模型的过滤会反复遇到这个问题。
这里有一个值得注意的细节:同样的实验换成逻辑回归,随机噪声的伤害不会随数据消失(20% 翻转、 = 30000 时 0.863,干净标签 0.955)。“随机噪声在数据多时无害”依赖于模型能否把”被噪声压扁的信号”正确地还原,练习 3 会讨论原因。
训练数据要像部署时的数据(代码 01 演示 4)。 骗子换了套路:新的垃圾邮件 90% 用的是钓鱼和加密货币的词,变形拼写更多,而且开始模仿正常邮件的措辞。
| 训练数据(逻辑回归) | 旧邮件准确率 | 新邮件准确率 |
|---|---|---|
| 旧邮件 1000 封 | 0.894 | 0.557 |
| 旧邮件 10000 封 | 0.944 | 0.539 |
| 旧邮件 1000 封 + 新邮件 100 封 | 0.896 | 0.672 |
| 旧邮件 10000 封 + 新邮件 100 封 | 0.943 | 0.619 |
| 新邮件 1000 封 | 0.702 | 0.804 |
更多的旧数据救不回新邮件上的表现(0.557 → 0.539,甚至略差:模型学得越牢,越相信旧的词组规律);少量新数据很有用,但旧数据越多,这 100 封新邮件的”声音”越小(0.672 vs 0.619)——数据的混合比例和数据量一样重要(第 10 讲)。只用新数据训练的模型,又在旧邮件上掉到 0.702。没有一份训练集对所有分布都最好;训练数据要”覆盖”部署时会遇到的分布。
2. CS525 这门课 · The course
2.1 目标
slides 列出的课程目标:
- 概览 AI / 机器学习里的训练数据集;
- 学习贯穿性的技术,例如基于模型的过滤(model-based filtering)和数据归因(data attribution);
- 动手练习创建和处理数据集;
- 更多与数据有关的话题:法律问题、AI 安全(例如数据投毒);
- 重点是近五年的 AI 和基础模型,尤其是文本和图像;
- 作为在其他领域(机器人、3D、生物……)做研究的起点。
2.2 形式与课程项目
CS525 是研讨课,由教师讲座、客座讲座和学生论文报告组成。评分:课程项目 90%(提案 10%、中期报告 10%、期末报告 50%、展示 20%)+ 课堂论文报告 10%。
课程项目:为一个你自己选的学习问题构建一个训练集。 理由很朴素——学习怎样构建训练集,最好的方法是亲手做一次。交付物:提案(1–2 页:动机、数据来源、方法(收集、过滤)、怎样评估数据集的质量、算力需求)、中期报告(3 页)、期末报告(5 页)、10 分钟展示。评价标准是技术质量、原创性和表达。可以组队(最多 3 人),鼓励和自己的研究结合;做得好的项目可以达到研究水平,甚至发表成会议论文。第一个截止日期(提案)在开课后两周多。
本讲义的第 20 讲专门讲”怎样构建你自己的训练集”,把整门课的技术串起来。
2.3 讲者
Ludwig Schmidt 的研究方向是机器学习的经验基础(empirical foundations):训练数据集、多模态(图像和文本的结合)、可靠泛化(模型为什么、怎样失灵)、评测与基准。slides 提到他 2024 年加入 Stanford,此前 2021–2024 年在华盛顿大学任教,同时在 Anthropic 的预训练团队工作。他参与的开源项目包括 OpenCLIP、LAION-5B、DataComp 和 DCLM;本讲后半部分的 ImageNetV2 也是他的工作。
2.4 本讲义的 20 讲
原课的顺序受客座讲者时间的影响;本讲义按逻辑重新排了一下(详见 SYLLABUS.md §0.1):
| Part | 内容 | 讲次 |
|---|---|---|
| I | 基础与历史:本讲;分布偏移与数据决定鲁棒性;数据集简史(Highleyman → LAION-5B);大规模数据处理的工具 | 1–4 |
| II | 图像与多模态数据:DataComp、MetaCLIP、交错图文 | 5 |
| III | 语言模型的数据:预训练(DCLM、FineWeb、Nemotron-CC……)、后训练(指令、偏好、推理、RL 环境)、数据混合、合成数据、数据扩展的极限 | 6–12 |
| IV | 理解数据的作用:数据归因;评测数据 | 13–14 |
| V | 其他模态:机器人、3D、生物 | 15–17 |
| VI | 隐私与投毒;版权、许可与伦理 | 18–19 |
| VII | 构建你自己的训练集 | 20 |
3. ImageNet 的诞生 · The making of ImageNet
slides 的第三部分题为”通过训练数据实现可靠的泛化”。动机是:机器学习从研究走向现实世界——交通、医疗、机器人、语言模型——需要可靠的机器学习。而讨论可靠泛化,绕不开一个数据集:ImageNet。它既是深度学习革命的起点,也是这十几年里最重要的基准。我们先看它是怎样被造出来的,再看它作为基准有多可靠。
3.1 背景:2000 年代的计算机视觉
2000 年代中期,计算机视觉的主流是手工设计的特征(SIFT、HOG 等)加上简单的分类器(例如 SVM),评测用的是几个小数据集:
- Caltech-101(2004):101 个类别,约 9000 张图;
- PASCAL VOC(2005–2012):当时最活跃的物体检测 / 分类数据集。slides 指出,它最大的版本(2012)一共只有约 12,000 张图、20 个类别。
Fei-Fei Li 的设想(2006–2007):神经科学的研究表明,人能认出成千上万个视觉类别(常被引用的是 Biederman 1987 年的估计:约 3 万个物体类别)。如果我们想要”像人一样”的计算机视觉,就需要相应规模的数据集。她当时在 Princeton 任助理教授(2009 年起在 Stanford),而 Princeton 正好是 WordNet 的家。
WordNet 是一个英语(后来也有其他语言)词汇的层级数据库。它的基本单位是”同义词集”(synset):一组表达同一个概念的词,例如 pitcher, ewer(水罐)。名词 synset 约有 8 万个,组织成一棵”是一种”(is-a)的树:Norwich terrier 是一种 terrier,terrier 是一种 dog……每个 synset 有一个编号(WordNet ID,wnid),例如 n02094258 就是 Norwich terrier。
于是计划是:给 WordNet 的每个名词节点配上约 1000 张图——大约 5 万个类别、5000 万张图,比 PASCAL VOC 大一千倍。
为什么用 WordNet 的层级? 三个好处:(1) 类别有现成的、语言学上有依据的定义,不用自己发明;(2) 层级结构天然地提供了”细粒度”的类别(各种狗、各种猫),而视觉的难点恰恰在细粒度;(3) 可以按层级做评测和分析(“把 husky 认成 malamute”比”把 husky 认成卡车”要轻得多)。
ImageNet 项目的主要学生是 Jia Deng(现在在 Princeton 任教)。剩下的问题是两个:“5000 万张图从哪里来?""谁来标注?“slides 的回答是两个”互联网”,外加”大量巧妙的任务设计”和”大量辛苦的工作”。
3.2 图片从哪里来:网络搜索
2000 年代后期,互联网上的消费者照片快速增长(Flickr 等网站)。ImageNet 用类别名去各个图片搜索引擎查询(Deng et al. 2009 §3.1)。问题是:搜索结果大部分不是你要的东西。 论文引用的估计是,网络图片搜索结果的平均准确率只有约 10%。
ImageNet 的目标是每个 synset 有 500–1000 张干净的图,所以需要一个大得多的候选池。为此论文用了两个技巧来扩大和多样化查询:
- 查询扩展:用 synset 的所有同义词查询;如果父节点的词出现在这个 synset 的释义里,再把它加到查询后面。例如 whippet 的释义是”英国培育的一种灵缇(greyhound)型小型细长犬”,于是也查 “whippet dog” 和 “whippet greyhound”。
- 多语言:借助其他语言的 WordNet,把查询翻译成中文、西班牙语、荷兰语、意大利语。
去掉同一个 synset 内的重复图片之后,平均每个 synset 有一万多张候选图。
代码 02 演示 1 在合成世界里模拟了”搜索”:每个查询返回的候选图有 5 种真实身份——主体就是查询的物体(true)、查询的物体只是图里的第二个东西(secondary,例如”花上的蝴蝶”)、兄弟类(sibling,搜 husky 得到 malamute)、无关物体(other)、垃圾图(junk)。
| 查询 | 含有查询物体的比例 | true | secondary | sibling | other | junk |
|---|---|---|---|---|---|---|
| husky | 0.180 | 0.152 | 0.028 | 0.199 | 0.166 | 0.455 |
| burmese | 0.176 | 0.148 | 0.028 | 0.190 | 0.178 | 0.456 |
| jeep | 0.177 | 0.147 | 0.030 | 0.209 | 0.172 | 0.442 |
| bagel | 0.180 | 0.151 | 0.029 | 0.199 | 0.172 | 0.450 |
合成世界里约 18% 的候选图含有查询的物体(比论文估计的 10% 宽松一点)。更值得注意的是”一个随机的标注员会选中它的概率”(真实选择频率):
| 身份 | 平均选择频率 | 选择频率 ≥ 0.5 的比例 |
|---|---|---|
| true | 0.599 | 0.686 |
| secondary | 0.420 | 0.341 |
| sibling | 0.124 | 0.000 |
| other / junk | 0.068 | 0.000 |
即使物体确实在图里,平均也只有约 60% 的标注员会选它:物体小、被遮挡、或者是标注员不认识的品种。“图里有这个物体”和”标注员认为图里有这个物体”是两回事——这一点在 §5 会变得至关重要。
3.3 标签从哪里来:众包与动态共识
一万多张候选图 × 几万个类别 = 几亿张需要人看的图。ImageNet 用了 Amazon Mechanical Turk(MTurk):一个让人发布小任务、由全球的在线工人完成并按件付费的平台。据 Fei-Fei Li 的公开演讲,前后有近 5 万名来自 167 个国家的工人参与了 ImageNet 的清洗和标注。
任务设计(Deng et al. 2009 §3.2):每个任务给工人看一组候选图和目标 synset 的定义(附维基百科链接),请他们选出含有这个类别物体的图。论文特别鼓励工人”不论遮挡、物体数量和背景杂乱”都要选,以保证数据的多样性。
两个质量问题:第一,人会犯错,也不是每个人都按说明做;第二,人和人之间会有分歧,尤其是在细微、容易混淆的类别上——通常是 WordNet 树里较深的节点。论文的图 7 展示了 6 个工人对同一组”Burmese cat(缅甸猫)“候选图的不同判断。
解决办法:让多个工人独立地标同一张图,只有得到”足够多数”的票才算正例。但论文观察到,不同类别需要的共识程度不同:“cat”可能一两票就够,“Burmese cat”可能需要五票。于是他们设计了一个动态共识算法:
- 对每个 synset,先随机抽一小批候选图,每张图至少收集 10 票;
- 由此得到一张置信表(confidence table):给定”几票是、几票否”,这张图是好图的概率;
- 其余的候选图边收票边查表,直到置信度达到预定的阈值。
论文图 7 右的置信表(P(好图 | 投票)):
| (#是, #否) | (0,1) | (1,0) | (1,1) | (2,0) | (0,2) | (3,0) | (2,1) |
|---|---|---|---|---|---|---|---|
| Cat | 0.07 | 0.85 | 0.46 | 0.97 | 0.02 | 0.99 | 0.85 |
| Burmese cat | 0.23 | 0.69 | 0.49 | 0.83 | 0.12 | 0.90 | 0.68 |
同样是”2 票都说是”,“cat”已经 0.97,“Burmese cat”只有 0.83。论文指出,置信表本身就是一个类别”语义难度”的自然度量;对有些 synset,工人对任何一张图都达不到多数——说明这个概念很难用图片来表达。
为什么置信表长这样?——贝叶斯的视角。 设一张候选图是好图的先验概率是 ,好图被一个工人选中的概率是 ,坏图被选中的概率是 。看到 票”是”、 票”否”之后,用贝叶斯公式:
每一票”是”把胜率(odds)乘上 ,每一票”否”乘上 。细粒度类别的问题在于:好图的选中率 低(很多工人不认识 Burmese cat),坏图(例如别的品种的猫)的选中率 高,于是每一票”是”带来的证据更弱,需要更多票才能达到同样的把握。ImageNet 的置信表就是在不假设任何参数的情况下,直接从数据里估计这个后验概率。
代码 02 演示 2 比较了 4 种验证策略(每类 1500 张候选图,前 200 张收满 10 票建置信表,其余 52,000 张用来比较):
| 策略 | 精度 | 召回 | 每张候选图的票数 | 精度(难的超类 / 容易的超类) |
|---|---|---|---|---|
| 1 票 | 0.623 | 0.595 | 1.00 | 0.558 / 0.680 |
| 固定 3 票多数 | 0.877 | 0.623 | 3.00 | 0.821 / 0.926 |
| 固定 9 票多数 | 0.993 | 0.650 | 9.00 | 0.983 / 0.999 |
| 动态共识(ImageNet) | 0.987 | 0.548 | 2.87 | 0.973 / 0.997 |
(“难的超类”是 dog、cat,“容易的”是 vehicle、instrument。)动态共识的成本和”固定 3 票”差不多,精度却从 0.877 提到 0.987,接近”固定 9 票”。省钱的地方在于”该停就停”:大多数候选图是垃圾或无关物体,第一两票说”不是”就被拒绝;票数花在真正有分歧的图上。
但有两个和直觉不一样的地方,值得仔细看:
- 动态共识并没有在难的类别上”多花钱”:dog 的候选图平均只用了 2.82 票,比 instrument(3.16)还少。难类别里很多真图在第一两票就收到”不是”而被拒绝了。
- 代价体现在召回上:dog 的召回只有 0.328,vehicle 是 0.714。整体召回(0.548)甚至比固定 9 票(0.650)还低。
对 ImageNet 来说这可以接受——候选图有的是,每类只需要几百到一千张。但”被拒绝的是哪些图”会悄悄改变数据集的分布(§3.5)。
代码 02 演示 3 用 5000 张候选图估计了 4 个类别的置信表:
| (#是, #否) | jeep | bagel | burmese | husky |
|---|---|---|---|---|
| 先验 | 0.14 | 0.11 | 0.08 | 0.06 |
| (1,0) | 0.63 | 0.50 | 0.34 | 0.29 |
| (2,0) | 0.89 | 0.83 | 0.67 | 0.63 |
| (3,0) | 0.96 | 0.96 | 0.88 | 0.80 |
| 达到 0.95 需要连续几票”是” | 3 | 3 | 4 | 5 |
结构和论文一致:容易的类别几票就有把握,细粒度类别需要更多票。数字整体比论文低,主要因为先验低——这里只有约 18% 的候选图含有物体,而且置信表用”10 票过半”当作”好图”的伪真相,难类别的很多真图达不到。
3.4 2009 年的 ImageNet,以及后来
ImageNet 第一次公开是 CVPR 2009 的一篇论文(以 poster 形式发表)。当时已经建好了 12 个子树(哺乳动物、鸟、鱼、爬行动物、两栖动物、交通工具、家具、乐器、地质构造、工具、花、水果)里的 5247 个 synset、320 万张图。论文在 80 个随机抽取的 synset 上人工检查了标注精度:平均 99.7%。目标是”在接下来两年里完成约 5000 万张图”。
最终的完整 ImageNet(2011 年秋的版本)有约 1420 万张图、21,841 个 synset——没有达到 5000 万张,但已经比之前的任何数据集大了几个数量级。
3.5 数据集是对世界的一次筛选
一个数据集里有什么,是”世界上有什么”经过一连串筛选之后剩下的东西:搜索引擎返回了什么 × 标注员认得出什么 × 设计者做了哪些选择(ImageNet 要求不选素描和绘画)。
代码 02 演示 4 在合成世界里比较了”世界上以某类物体为主体的图”和”用 ImageNet 流程收进数据集的图”的清晰度分布:
| 清晰度区间 | 世界上的占比 | 数据集里的占比 | 这个区间里的真图被收进来的比例 |
|---|---|---|---|
| [0.0, 0.2) | 0.121 | 0.017 | 0.094 |
| [0.2, 0.4) | 0.213 | 0.104 | 0.300 |
| [0.4, 0.6) | 0.239 | 0.247 | 0.615 |
| [0.6, 0.8) | 0.242 | 0.340 | 0.814 |
| [0.8, 1.0) | 0.185 | 0.292 | 0.885 |
平均清晰度:世界 0.533,数据集 0.660。清晰度低于 0.4 的图在世界上占三分之一,在数据集里只占八分之一。数据集不是世界的随机样本,而是”搜索引擎返回、且多数标注员一眼认得出”的那一部分。
后果是:在 ImageNet 上训练、在 ImageNet 的测试集上测出来的准确率,衡量的是”在这个经过筛选的分布上”的表现。测试集和训练集经过了同样的筛选,难的图在两边都被筛掉了——所以测试集不会提醒你这件事。§5 会看到,换一种(看起来几乎一样的)筛选方式,准确率就会明显变化。
收进来的图也不完美。合成数据集里约 0.089 是”物体只是图里的第二个东西”(标签不算错,但主体是别的物体),约 0.016 是真正的错标。真实的 ImageNet 也是这样:后来的研究估计其验证集里至少约 6% 的标签是错的(Northcutt et al. 2021),约 20% 的图片不止一个正确标签(Shankar et al. 2020 的多标签重新标注)。
4. ILSVRC、top-5 与 AlexNet · The ImageNet challenge
4.1 把 ImageNet 变成比赛
ImageNet 大约完成 10% 的时候(那时已经有 500 万张图),Alex Berg 提议:把它变成一个比赛。于是有了 ImageNet 大规模视觉识别挑战赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC,2010–2017),主要组织者之一是当时在 Stanford 读博、后来做博士后的 Olga Russakovsky。比赛用的是 ImageNet 的一个”小”版本:1000 个类别、约 120 万张训练图。今天人们说”ImageNet”,几乎总是指 ILSVRC 2012 的这个版本。
4.2 分类任务与 top-5
| 部分 | 规模 | 说明 |
|---|---|---|
| 训练集 | 约 120 万张(每类 732–1300 张) | 大致类别均衡 |
| 验证集 | 50,000 张(每类正好 50 张) | 标签公开;大多数论文在这上面报告结果 |
| 测试集 | 约 10 万张(2010 年是 15 万张) | 每类均衡,标签不公开,结果在评测服务器上算 |
1000 个类别里既有常见的东西,也有很细的类别。slides 展示了一组随机的类别:n03950228 pitcher, ewer(水罐)、n02488702 colobus(疣猴)、n03026506 Christmas stocking(圣诞袜)、n02950826 cannon(大炮)、n02094258 Norwich terrier(诺里奇㹴)、n02412080 ram, tup(公羊)、n04613696 yurt(蒙古包)、n01687978 agama(飞蜥)、n02134418 sloth bear(懒熊)、n04591713 wine bottle(酒瓶)。光是狗就有一百多个品种。
评价指标是 top-5 准确率:模型给每张图 5 个预测,只要正确标签在其中就算对。slides 给了三个理由:(1) 有时一张图有多个合理的标签;(2) 有时类别之间的边界不清楚;(3) 而且这个任务本来就够难了。slides 里的几张验证集示例图很能说明问题——例如一张图里蝴蝶停在花上,标签是哪一个?
代码 02 演示 5 在合成数据集(每类 250 张训练、50 张验证)上训练了一个 softmax 回归:top-1 准确率 0.725,top-5 0.944。把 top-1 的错误逐一分类:
| top-1 错误的类型 | 占错误的比例 | 其中 top-5 对了 |
|---|---|---|
| 标签本身是错的(兄弟类 / 无关物体 / 垃圾图) | 0.053 | 0.552 |
| 图里有两个物体,模型说的是另一个 | 0.225 | 0.573 |
| 细粒度混淆(猜成同一超类的兄弟类) | 0.602 | 0.949 |
| 其他(物体太模糊等) | 0.120 | 0.561 |
近三成的 top-1 错误”不全是模型的错”:标签错了,或者模型说出了图里的另一个真实物体。细粒度混淆是最大的一类,而且 95% 在 top-5 下就算对了。如果允许”说出图里任何一个真实存在的物体都算对”(多标签评测),准确率从 0.725 升到 0.797。
4.3 进步曲线
ILSVRC 分类任务冠军的 top-5 错误率(引自 Russakovsky et al. 2015 和各年的结果公告):
| 年份 | 冠军 | top-5 错误率 |
|---|---|---|
| 2010 | NEC(手工特征 + SVM) | 28.2% |
| 2011 | XRCE(Fisher vector) | 25.8% |
| 2012 | SuperVision(AlexNet) | 16.4%(使用额外数据时 15.3%) |
| 2013 | Clarifai | 11.7% |
| 2014 | GoogLeNet | 6.7% |
| 2015 | ResNet | 3.6% |
| 2016 | Trimps-Soushen | 3.0% |
| 2017 | SENet | 2.3% |
作为参照,Andrej Karpathy 亲自做这个任务,测得的人类 top-5 错误率约 5.1%;2015 年 He 等人报告的 4.94% 第一次在这个指标上”超过人类”。slides 还引用了 Jitendra Malik 2017 年的评价:他认为 ImageNet 论文是之前五年里机器学习和计算机视觉领域最有影响力的论文。
4.4 AlexNet
2012 年的冠军是 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 的 AlexNet:一个大型卷积神经网络(CNN),约 6000 万个参数,5 个卷积层加 3 个全连接层。它把 top-5 错误率从上一年的 25.8% 降到 16.4%(第二名是 26.2%),领先约 10 个百分点。
基本想法并不新。 slides 指出,卷积网络的基本思想在 1980 年代末就有了(LeCun 等人)。它的基本模块是”一个有结构的、可学习的线性层(卷积)+ 一个简单的逐元素非线性”,把这个模块重复几次,最后加上分类损失。AlexNet 的贡献是让它在 ImageNet 上真的能工作的一系列”技巧”:
| 成分 | 作用 |
|---|---|
| ReLU 非线性 | 比 sigmoid / tanh 训练得快得多 |
| 在 GPU 上训练 | 两块 NVIDIA GTX 580(每块约 1.6 TFLOPS),训练 6 天左右;按峰值算总计约 次浮点运算 |
| 局部响应归一化(LRN) | 一种归一化(后来被 BatchNorm 等取代) |
| 重叠池化 | 池化窗口互相重叠 |
| Dropout | 训练时随机丢掉一部分神经元,减少过拟合 |
| 数据增强 | 随机裁剪、水平翻转、颜色扰动——用”变换过的训练图”扩大训练集 |
slides 的评语是:为什么是这些?因为每一项改动都带来 0–2 个百分点的提升。这是一个典型的”工程积累”的胜利。
它的背景是另一个数据集。 Alex Krizhevsky 的硕士论文 Learning Multiple Layers of Features from Tiny Images 构建了 CIFAR-10:5 万张训练图、10 个类别、32×32 像素,取自 8000 万张的 TinyImages。他在 CIFAR-10 上开发了快速的 GPU 神经网络实现(cuda-convnet),效果很好,于是决定把这个方法放大到 ImageNet,并在 ImageNet 上调了大约一年。
从数据的角度看 AlexNet,有两点值得注意:
- 规模让大模型成为可能。 6000 万个参数,如果只有几万张训练图,几乎一定会严重过拟合;120 万张图(再加上数据增强)让这样的模型能够泛化。这正是 §1.3 “数据集解锁方法”的例子。
- AlexNet 已经在”处理训练数据”了。 数据增强本质上是一种合成数据:用变换生成新的训练样本。第 11 讲会看到,合成数据在今天成了一个独立的研究方向。
4.5 影响
slides 总结了 AlexNet 之后的变化:
- ImageNet 上:几乎所有队伍都改用卷积网络;参赛队伍从个位数增加到八十多支。网络越来越深、参数越来越多——VGG(2014)最多 19 层,ResNet(2015)超过 150 层——因为更大的模型效果更好。训练成本一度涨到”几十块 GPU 上训练几周、约 3 万美元”,之后又下降了几个数量级(slides:训练一个 ResNet 约 100 美元)。
- 整个计算机视觉:物体检测、图像分割、姿态估计、三维重建、图像修复、生成模型……几乎全部转向卷积网络。用 ImageNet 预训练的网络当作其他任务的起点(迁移学习),成了 2010 年代视觉领域的标准做法——某种意义上,它是基础模型的前身。
- 其他基准上的相似趋势:slides 展示了 PASCAL VOC 和 COCO 的物体检测、Cityscapes 的语义分割、WMT 英德翻译、SQuAD 问答、WikiText-103 语言建模上的进步曲线——都是一个稳定的基准加上持续多年的进步。
基准驱动的进步如此成功,以至于一个问题变得非常重要:这些基准上的进步是真的吗?
5. 基准可靠吗?· How reliable are benchmarks?
5.1 测试集上的好成绩到底意味着什么
标准的分类设定:有一个”真实”的数据分布 ,我们关心模型 在整个分布上的误差(总体误差)
我们不知道 ,只能用一个从 抽出的测试集 来估计:
如果 很低,我们就假设 在未来来自 的样本上也表现很好——这个假设支撑着机器学习里几乎所有的实证评估。slides 问了一个最起码的问题:至少,模型在”同一个来源、同样清洗流程”收集的新数据上,应该表现得差不多吧?
5.2 三种过拟合
slides 区分了三种”过拟合”:
- 测试误差 ≥ 训练误差:最经典的过拟合,模型记住了训练集。
- 通过反复使用测试集而过拟合(适应性过拟合,adaptive overfitting):模型(或者整个研究社区)根据测试集上的结果反复调整,测试集的信息泄漏进了模型。
- 分布偏移:新测试集的分布和原测试集不一样。
第 1 种在每门机器学习课里都讲过。本节讲后两种:它们都会让”原测试集上的准确率”高估”新数据上的准确率”,但原因完全不同,补救方法也完全不同。
5.3 测试集的反复使用
理想的工作流程:(1) 收集数据;(2) 切成训练集、验证集、测试集;(3) 在训练集上训练、在验证集上调参;(4) 最后只用一次测试集,算出最终准确率。
典型的工作流程:(1) 下载数据(划分是固定的);(2) 下载别人的模型;(3) 训练、调参——常常直接看测试集;(4) 算测试准确率。而且整个社区对同一个测试集重复这个过程,持续十年。
教科书把”不要用测试集选模型”称为机器学习的”黄金法则”之一,否则会得到过于乐观的性能估计;PASCAL VOC 也因此每年发布新的测试数据,防止参赛者过拟合测试集。按照这个逻辑,ImageNet 和 CIFAR-10 的测试集被反复使用了十年,它们的数字应该已经严重虚高。
会虚高多少?先看两个极端。
(a) 只是”挑最好的”。 设有 个模型,真实准确率都是 ,测试集大小为 。每个模型的测试分数有抽样误差,标准差 。我们报告其中最高的那个。如果各模型的误差互相独立,最大值的期望大约比 高出 。
代码 04 演示 1( = 0.75, = 2000, = 0.0097;每格 200 次重复的平均):
| 独立模型:乐观偏差 | 近似 | 模型相似度 0.9 | 相似度 0.98 | |
|---|---|---|---|---|
| 1 | +0.0007 | 0 | +0.0002 | −0.0001 |
| 10 | +0.0145 | +0.0208 | +0.0086 | +0.0050 |
| 100 | +0.0240 | +0.0294 | +0.0123 | +0.0088 |
| 1000 | +0.0308 | +0.0360 | +0.0176 | +0.0107 |
两个结论:第一,偏差按 增长,非常慢—— 从 10 增加到 1000,偏差只翻了一倍。第二,模型越相似,偏差越小:如果大家错在同样的样本上(相似度 0.9 时,两个模型意见不一致的样本只有 0.117,独立时是 0.375),测试分数之间的差别本来就小,“挑”不出多少运气。真实的 ImageNet 模型都在同一份训练集上用相似的方法训练,错误高度重叠(Mania et al. 2019 把这称为”模型相似性缓解了测试集的过度使用”)。
(b) 真正的适应性攻击。 如果每次提交都根据之前的分数来设计,情况就完全不同了。Blum & Hardt(2015)描述了一种”提升攻击”(boosting attack):
- 提交 个完全随机的预测向量;
- 留下排行榜分数高于 0.5 的那些(它们碰巧在测试集上”偏对”了一点);
- 对留下的向量按样本做多数投票,作为最终提交。
代码 04 演示 2(二分类, = 4000):
| 提交次数 | 排行榜分数 | 新数据上的准确率 | 理论 |
|---|---|---|---|
| 10 | 0.519 | 0.514 | 0.511 |
| 100 | 0.540 | 0.505 | 0.536 |
| 1000 | 0.604 | 0.493 | 0.611 |
| 3000 | 0.690 | 0.490 | 0.687 |
攻击者从没看过一张图、一个标签,排行榜分数却从 0.5 涨到 0.69;在新数据上,它仍然只是随机猜。理论值的来历:一个随机向量的分数是 , 的标准差是 ;被留下的向量 ,平均 ,也就是在每个样本上”偏对”这么多;约 个这样的向量做多数投票,正确率约为 。上升幅度由 决定,比 (a) 的 快得多。
所以”测试集反复使用会导致过拟合”在原理上完全正确。问题是:十年的 ImageNet 研究更像 (a) 还是更像 (b)? 如果是 (b),后来的模型的”进步”应该越来越多地来自对测试集的适应,在新测试集上会出现收益递减:原测试集上涨了很多,新测试集上几乎不涨(slides 画了这样一张假想图:模型的点越往右越平)。要回答这个问题,就需要一个新的测试集。
5.4 ImageNetV2:把思想实验做出来
Recht、Roelofs、Schmidt、Shankar(2019)做了这个实验:按照原来的数据集创建流程,从同一个来源再收集一份测试集,看看现有模型的准确率还剩多少。他们对 CIFAR-10 和 ImageNet 都做了。ImageNet 部分的关键设计(论文 §3–4、附录 C):
- 同一个来源:从 Flickr 收集候选图,只用和原 ImageNet 相近时间段上传的图片(避免”汽车、手机这些类别十年来变了样”的问题),并参照 ImageNet 的文档匹配每个类别内部的查询分布。
- 同样的标注流程:MTurk 任务界面尽量模仿原版——每个任务 48 张候选图的网格、类别定义和维基百科链接、同样的说明(不论遮挡、其他物体和杂乱背景都要选;不选素描和绘画)。每张图至少 10 个工人。
- 质量控制:每个任务里随机嵌入至少 6 张原验证集的图(3 张同类、3 张来自 WordNet 里相近的类别)。这同时让他们能测出原验证集的图被新工人选中的频率。
- 选择频率(selection frequency):一张图在它的目标类别的任务里被工人选中的比例。这是 MTurk 标注的主要产出。
- 规模:每类 10 张、共 10,000 张——比原验证集小,但足以让 95% 置信区间约为 ±1%。最后人工检查,去掉标签错误的图。
- 因为大多数论文是在验证集上开发和报告结果的,他们复现的是验证集的创建过程;论文里”验证集”和”测试集”混用。CIFAR-10 部分由两位研究生作者”扮演”原来的学生标注员,新测试集 2000 张。
结果:测试了 60 多个 ImageNet 模型(从 Fisher vector 和 AlexNet 到当时最好的 NASNet / PNASNet)。
| 模型 | 原验证集 top-1 | ImageNetV2 top-1 | 下降 |
|---|---|---|---|
| pnasnet_large_tf | 82.9% | 72.2% | 10.7 |
| resnet152 | 78.3% | 67.0% | 11.3 |
| vgg19_bn | 74.2% | 61.9% | 12.3 |
| alexnet | 56.5% | 44.0% | 12.5 |
| fv_64k(Fisher vector) | 35.1% | 24.1% | 11.0 |
(选自论文表 1。)
- 所有模型都明显下降:ImageNet 上 11–14 个百分点,CIFAR-10 上 3–15 个百分点。最好的模型 top-5 从 96% 掉到 90%,而 90% 大致是 ILSVRC 2013–2014 年的最好水平(2013 年冠军约 89%、2014 年约 93%)——这 6 个百分点约等于这个领域最活跃时期的五年进步。
- 排名几乎不变:原测试集上好的模型,在新测试集上仍然最好。
- 新准确率和原准确率之间是很好的线性关系:ImageNet 上 ,CIFAR-10 上 。斜率大于 1:原测试集上每进步 1 个百分点,新测试集上进步超过 1 个百分点。
第 3 点和”适应性过拟合导致收益递减”的预测正好相反:后来的模型被测试集”调”得更多,却掉得更少。论文的结论是:下降的主要原因不是适应性,而是分布差距——模型无法泛化到比原测试集稍微”难”一点的图片。
代码 03 演示 1 在合成世界里复现了这个实验:用 ImageNet 的流程建”原版数据集”,在上面训练 60 个能力不同的模型(5 种特征质量 × 4 种分类器 × 3 种训练数据量,原准确率从 0.226 到 0.735),再用 ImageNetV2 的流程(新候选池、每图 10 票估计选择频率、MatchedFrequency 采样、去掉错标)建一个新测试集。
| 模型 | 原准确率 | 新准确率 | 下降 | 原名次 → 新名次 |
|---|---|---|---|---|
| softmax-d32-n300 | 0.735 | 0.674 | +0.061 | 1 → 1 |
| nc-d32-n20 | 0.655 | 0.607 | +0.048 | 12 → 11 |
| nc-d16-n75 | 0.553 | 0.506 | +0.047 | 28 → 28 |
| nc-d10-n20 | 0.409 | 0.377 | +0.032 | 44 → 44 |
| knn-d6-n20 | 0.226 | 0.209 | +0.017 | 60 → 60 |
- 60 个模型全部下降,平均 0.042(论文是 0.11–0.14;合成世界里的偏移小得多);
- 排名几乎不变:Spearman 秩相关 0.997,名次平均只变化 0.9 位;
- 线性关系很好:新 ≈ 0.91 × 原 + 0.002( = 0.998)。
但有一点没有复现:斜率是 0.91,小于 1——这里越好的模型掉得越多,和真实 ImageNetV2 相反。§5.6 会用论文的 probit 难度模型解释这个差别。
5.5 误差分解
为了想清楚”下降是从哪里来的”,论文把原测试误差和新测试误差的差拆成三项(slides 也用了这张分解图):
(论文写成 的形式,符号相反;用准确率写就是 。)
- 泛化差距 :新测试集 和模型无关,这一项只是抽样误差。10,000 张图时,95% 置信区间不超过 ±1%。它解释不了 11%。
- 适应性差距 :模型被调到适应 ,使 上的准确率高估了总体准确率。对单个模型,它和分布差距无法分开;但如果它是主因,应该看到收益递减——实际看到的是斜率 > 1。slides 的估计:≈ 0%。
- 分布差距 :新旧两个分布本身的系统差别。slides 的估计:≈ 11%。
真实世界里没有 的新样本,所以 测不出来。合成世界里可以:用同样的流程再收集一份数据,就是 的一个新的独立样本。代码 03 演示 2(60 个模型的平均):
| 分项 | 平均 | 最小 | 最大 |
|---|---|---|---|
| 总下降 | +0.042 | +0.009 | +0.065 |
| 适应性差距 | +0.002 | −0.013 | +0.016 |
| 分布差距 | +0.037 | +0.007 | +0.050 |
| 泛化差距 | +0.003 | −0.013 | +0.019 |
试验台里没有任何模型在 上调过参数,所以适应性差距只是抽样噪声(单个模型在 上的标准误约 0.008)。下降几乎全部来自分布差距:复现流程”看起来一样”,得到的分布却不一样。
5.6 选择频率与三种采样策略
分布差距从哪里来?ImageNetV2 论文的 §4 给出了一条线索:标注流程的细节。他们用同一个候选池、同样的 MTurk 标注,构造了三个新测试集,只是”按什么规则挑图”不同:
- MatchedFrequency:先估计每个类别的原验证集图片的选择频率分布(分成 [0, 0.2)、[0.2, 0.4)、……、[0.8, 1.0] 五个区间),再按这个分布从候选图里抽——让新测试集的选择频率”和原来一样”。这是论文的主测试集。
- Threshold0.7:每类随机抽选择频率至少 0.7 的图。
- TopImages:每类取选择频率最高的图。
论文表 2:
| 测试集 | 平均选择频率 | top-1 准确率的平均变化 |
|---|---|---|
| 原验证集 | 0.71 | — |
| MatchedFrequency | 0.73 | −11.8% |
| Threshold0.7 | 0.85 | −3.2% |
| TopImages | 0.93 | +2.1% |
三个测试集的图都来自同一个来源、标签都正确、平均选择频率都超过 0.7,准确率却差了 14 个百分点——比 AlexNet 之后所有卷积网络之间的差距还大。只用最”容易”的图(TopImages),几乎可以完全恢复原来的准确率。论文的评论是:即使是最好的图像分类器,准确率也对数据清洗过程的细枝末节非常敏感;这让”超过人类水平”的说法需要打一个问号。
代码 03 演示 3 在合成世界里重复了这个比较:
| 测试集 | 估计的选择频率(10 票) | 真实选择频率 | 平均清晰度 | 准确率的平均变化 |
|---|---|---|---|---|
| 原测试集 | 0.699 | 0.692 | 0.650 | — |
| MatchedFrequency | 0.691 | 0.652 | 0.604 | −0.054 |
| Threshold0.7 | 0.806 | 0.726 | 0.686 | +0.043 |
| TopImages | 0.973 | 0.780 | 0.791 | +0.126 |
顺序和论文一致。合成世界的原测试集,用 10 票重新估计的平均选择频率是 0.699,和论文测得的原验证集的 0.71 很接近(这是我调世界参数时的一个校准目标)。最有意思的是第一行和第二行:MatchedFrequency 的估计选择频率和原测试集几乎一样(它匹配的就是这个),真实选择频率和清晰度却明显更低。“看起来一样”不等于”分布一样”。为什么?§5.8 回答。
5.7 为什么是线性的?probit 难度模型
ImageNetV2 的新旧准确率呈现出惊人的线性关系。论文 §5.3 给了一个简单的解释框架(附录 C.2 还发现,在 probit 尺度上拟合得比在线性尺度上更好):
- 每个样本 有一个标量”难度” ,一个测试集的难度服从 ;
- 模型 有一个”技能” ,它答对难度为 的样本的概率是 。
于是模型 在这个测试集上的准确率是
(把 写成”一个标准正态变量小于某个值的概率”,两个独立的正态变量相减还是正态的,就得到这个式子。)在 probit 尺度 上,它是技能 的线性函数。对两个测试集(参数分别是 和 )消去 :
所以只要两个测试集的区别可以概括成”难度分布变了”,所有模型就会落在一条直线上(probit 尺度)——不管模型是什么架构、用什么方法训练。截距 反映平均难度的变化,斜率 反映难度离散程度的变化:新测试集的难度更分散()时 ,更集中时 。
这解释了合成世界里斜率 < 1 的现象:新测试集混进了更多难图,难度更分散( 的清晰度标准差 0.233, 是 0.214),probit 斜率 0.92。真实 ImageNetV2 的斜率 > 1,说明那里的变化不只是”多了一些难图”。合成世界复现了”下降、排名不变、线性”,没有复现斜率——这是一个诚实的局限。
“准确率在一条线上”(accuracy on the line)后来在大量分布偏移上被反复观察到,也有重要的例外——CLIP 就是最著名的例外。这是第 2 讲的主题。
5.8 统计偏差:回归均值
ImageNetV2 小心地匹配了选择频率,为什么新测试集还是更难?Engstrom、Ilyas、Santurkar、Tsipras、Steinhardt、Madry(2020)指出了一个微妙的统计陷阱。
关键:MatchedFrequency 匹配的是估计出来的选择频率,每张图只有约 10 票,估计有噪声。而原验证集的图和候选池的图,它们真实选择频率的”先验分布”不同:
- 原验证集的图都通过了原 ImageNet 的共识筛选,真实选择频率普遍偏高;
- 候选池里则有大量选择频率中等、甚至偏低的图。
现在看一张”10 票里 5 票说是”(估计值 0.5)的图。如果它来自原验证集,它更可能是”真实选择频率 0.6、这次运气差少得了票”;如果它来自候选池,它更可能是”真实选择频率 0.4、这次运气好多得了票”。这就是回归均值(regression to the mean):一个有噪声的测量值,会向它所在总体的均值”回归”。按估计值分箱匹配之后,新测试集在每个箱子里的真实选择频率都更低——更难。
代码 03 演示 4 (a) 直接看到了这件事(每图 10 票,按估计的选择频率分区间):
| 估计 sf 区间 | 原测试集的占比 | 原测试集的真实 sf | 候选图的真实 sf | 原测试集的清晰度 | 候选图的清晰度 |
|---|---|---|---|---|---|
| [0.0, 0.2) | 0.012 | 0.182 | 0.269 | 0.396 | 0.308 |
| [0.2, 0.4) | 0.048 | 0.457 | 0.353 | 0.421 | 0.331 |
| [0.4, 0.6) | 0.150 | 0.577 | 0.493 | 0.512 | 0.422 |
| [0.6, 0.8) | 0.354 | 0.692 | 0.650 | 0.639 | 0.571 |
| [0.8, 1.0] | 0.435 | 0.773 | 0.769 | 0.739 | 0.720 |
在中间几个区间里,同样的估计值背后,原测试集的图真实 sf 高 0.04–0.10、清晰度高 0.07–0.09。(最低的区间方向相反,但原测试集只有 1.2% 的图落在那里。)
演示 4 (b):如果每张图的选择频率用更多票来估计,匹配会更准,偏差应该变小。分布差距用每类 300 张的大样本计算(避免抽样噪声):
| 每图票数 | 的真实 sf | 的清晰度 | 分布差距 |
|---|---|---|---|
| (原测试集 ) | 0.692 | 0.650 | — |
| 10 | 0.652 | 0.606 | +0.043 |
| 40 | 0.683 | 0.636 | +0.016 |
| 160 | 0.681 | 0.635 | +0.006 |
| ∞(直接用真实 sf) | 0.685 | 0.637 | +0.003 |
票数越多,差距越小;直接用真实选择频率时,差距基本消失。(只用每类 50 张的 来算”总下降”,这一列会因为抽样噪声而不单调——40 票 +0.009、160 票 +0.018——这本身也是一个提醒:小测试集上的比较要小心。)
Engstrom 等人在真实的 ImageNetV2 上做了类似的修正(收集更多标注、用统计模型校正偏差),结论是:原本 11.7% ± 1.0% 的下降里,修正后只有约 3.6% ± 1.5% 无法解释。合成世界里除了”选择频率的估计有噪声”之外,两个流程没有别的差别,所以修正后差距基本消失;真实世界里仍有约 3.6% 的差距——时间、工人群体、任务细节都可能不同,ImageNet 的分布并没有被”完全复现”。
这个故事的教训不只是关于 ImageNet:用一个有噪声的代理量去”匹配”两个先验不同的总体,匹配结果会系统性地偏向噪声的方向。 构建数据集时,我们经常做这类匹配(按质量分数、按长度、按某个分类器的打分去平衡数据),这个陷阱随处可见。
5.9 为什么测试集的反复使用没有造成大问题?
ImageNetV2 的结果说明,十年的测试集反复使用并没有造成严重的适应性过拟合。slides 补充了更多证据:
- CIFAR-10:同样是”新测试集上下降、但没有收益递减”。更有意思的是,后来的模型掉得更少:AutoAugment 和 ResNet 在原测试集上差 4.9 个百分点,在 CIFAR-10.1 上差 10.3 个百分点——“恰恰相反”。
- Kaggle:Roelofs 等人(2019)对 120 场 Kaggle 比赛做了元分析。Kaggle 的比赛有一个公开排行榜(参赛者可以反复提交、看分数)和一个私有排行榜(最后才公布、决定排名)——这正是一个天然的”测试集反复使用”实验。结论:几乎没有大量过拟合的证据,排名相对稳定。
- MNIST:Yadav & Bottou(2019)重建了 MNIST 原始测试集里”丢失”的 5 万张数字,发现 20 多年的反复使用之后仍然没有过拟合。他们的结论(大意)是:这印证了 Recht 等人观察到的趋势——误分类率略有偏差,但分类器的排序和模型选择大体可靠。
为什么? ImageNetV2 论文给了两个可能的解释,代码 04 各演示了一个:
- 实际被评估过的模型集合很有限、彼此相似(代码 04 演示 1):大家都用 SGD 在同一份训练集上训练相似的网络,“能挑的运气”很少。
- 社区的行为本身就像 Ladder 机制(代码 04 演示 3):Blum & Hardt 设计的 Ladder 排行榜只在新提交比当前最好分数高出至少 时才更新,显示的分数也四舍五入到 。面对 Ladder,提升攻击几乎得不到信息——3000 次提交只留下 3 个向量,最终测试分数约 0.51;而一个真正在进步的团队,它的进步照样被一级一级地记录下来。研究社区只关心”有没有刷新最好结果”、只报告显著的进步,行为上很像 Ladder。
代码 04 演示 4 模拟了一场 Kaggle 比赛(公开榜 3000 个样本、私有榜 7000 个,200 支诚实的队伍各提交 50 次、按公开榜爬山):最终提交的公开分数平均只比私有分数高 0.008,公开榜和私有榜的排名几乎一致(Spearman 0.996)。对照组是一支”过度爬榜”的队伍:从中等水平的模型出发,2000 次随机微调、只按公开分数保留——公开分数从 0.866 爬到 0.899(第 64 名),私有分数却从 0.858 掉到 0.830(第 132 名)。
适应性过拟合是真的,但在”诚实、相似的模型 + 只关心显著进步”的研究实践下,它比教科书担心的小得多。 论文也提醒了一个它排除不了的可能:如果测试集的适应性让所有模型都等量地高估,那就不会表现为收益递减。要检验这一点,需要一个真正 i.i.d. 的新测试集——这正是合成世界能提供、真实世界很难提供的东西。
5.10 这对研究训练数据意味着什么
把 §3–5 合起来,可以得到几条贯穿整门课的认识:
- 基准也是数据集。 它有来源、有筛选、有标注流程、有错误,同样需要被研究。
- 准确率的绝对值对数据清洗的细节非常敏感:同一个来源、同样正确的标签,挑图的规则一变,准确率就能变 14 个百分点。
- 模型从”容易的图”泛化到”难一点的图”并不可靠。 ImageNet 的筛选让测试集和训练集一样”容易”,掩盖了这一点。
- 相对的进步是真的,绝对的数字不可靠。 排名几乎不变——这让基准仍然有用。
- “复现一个数据分布”非常难,而且有不直观的统计陷阱。这正是为什么需要把”数据”当作一门严肃的学问来研究。
6. 延伸与前沿 · Beyond the original lecture
本节是我补充的,原课 slides 没有展开。
重新标注 ImageNet。 ImageNetV2 之后,几组研究者重新审视了 ImageNet 验证集本身:Shankar 等人(2020)为验证集做了多标签标注,发现约 20% 的图片不止一个正确标签,并比较了人和模型;Beyer 等人(2020,Are we done with ImageNet?)发布了 ReaL 标签,发现在新标签下,模型最近几年的一部分”进步”其实是在拟合原始标注的偏好;Northcutt 等人(2021)估计验证集里至少约 6% 的标签是错的,并发现纠正这些错标之后,一些模型的排名会改变(例如错标的比例再高一些时,ResNet-18 会反超 ResNet-50);Vasudevan 等人(2022,When does dough become a bagel?)逐一分析了最好模型剩下的错误,发现其中相当一部分不是真正的错误。共同的结论:在 ImageNet 上刷到 90% 以上之后,基准本身的噪声已经和模型之间的差距一样大。
ImageNet 的伦理问题。 WordNet 里的”人”子树包含大量带有贬义和冒犯性的类别;2019 年的 Excavating AI 项目把这个问题带进了公众视野。ImageNet 团队随后过滤和平衡了人物类别(Yang et al. 2020),并研究了给图片里的人脸打码对模型的影响(Yang et al. 2022)。CIFAR-10 的来源 TinyImages 在 2020 年因为类似问题被作者撤回。这些是第 3 讲(数据集历史)和第 19 讲(伦理与法律)的话题。
语言模型时代的”ImageNetV2”。 同样的问题在语言模型上更严重:测试题可能直接出现在预训练语料里(测试集污染)。Zhang 等人(2024)仿照 GSM8K(小学数学应用题)的风格和难度,从头写了 1250 道新题(GSM1k)。一些模型家族在新题上明显下降(NeurIPS 版本报告最多约 8 个百分点,arXiv 后续版本约 13 个百分点),前沿模型则几乎没有过拟合的迹象;模型生成 GSM8K 原题的倾向和它的下降幅度正相关。这和 ImageNetV2 的设计如出一辙——“按原来的流程,再造一份测试集”。第 14 讲专门讨论评测数据。
把基准翻过来。 ImageNet 时代的基准固定数据、比较模型;DataComp(2023)和 DCLM(2024)固定模型和训练代码、比较数据。这是”把数据当作研究对象”最直接的方法论,也是第 5、6 讲的核心。
7. 小结 · Summary
- 机器学习 = 从数据中学出程序。 写不出规格说明的问题,用例子来说明;于是数据就是规格说明,它的覆盖、错误和偏向都成了”程序”的一部分。
- AI = compute + data。 compute 一侧是经典计算机科学的延伸,data 一侧是机器学习独有的、研究还很早期的一半。
- 数据集推动方法的进步:表达能力强的方法需要足够的数据才能显出优势(代码 01:逻辑回归在 = 300 时才反超朴素贝叶斯)。
- 数据质量不是一个数字:随机噪声常常能被数据量抹平,系统性噪声却会让模型对一类样本越来越”失明”。
- ImageNet = 网络搜索 + 众包 + 动态共识:用 WordNet 的层级定义类别,从约 10% 准确率的搜索结果里,用每类单独估计的置信表决定要收几票。
- 数据集是对世界的筛选:ImageNet 收进来的是”搜索引擎返回、且多数标注员一眼认得出”的图,测试集和训练集一起变”容易”了。
- AlexNet 的成功是数据 + 算力 + 工程技巧:120 万张图让 6000 万参数的模型能泛化,GPU 让它能训练完,一系列各贡献 0–2 个百分点的技巧让它真正好用。
- ImageNetV2:按原流程再收集一份测试集,所有模型掉 11–14 个百分点,但排名几乎不变,新旧准确率呈线性关系(斜率 > 1)。
- 误差分解:总下降 = 适应性差距 + 分布差距 + 泛化差距;ImageNetV2 的下降主要是分布差距,而它的一大部分来自用有噪声的选择频率做匹配所造成的统计偏差(修正后只剩约 3.6%)。
- 测试集的反复使用原理上可以造成严重过拟合(提升攻击),但在相似的模型 + 只关心显著进步的研究实践下,它出奇地小。
8. 常见误区 · Common pitfalls
- “测试准确率高,模型就能泛化。” 它只说明模型在这个筛选过的分布上表现好。换一个”看起来一样”的收集流程,准确率就可能掉十几个百分点。
- “ImageNetV2 的下降说明大家在测试集上过拟合了。” 恰恰相反:排名不变、斜率 > 1 的证据指向分布差距,而不是适应性过拟合。
- “匹配了选择频率,新测试集就和原来同分布了。” 匹配的是估计值。两个总体的先验不同时,按有噪声的估计值匹配会系统性地偏向噪声的方向(回归均值)。
- “错标率是衡量数据质量的指标。” 错标的结构比比例更重要:0.136 的系统性错标比 20% 的随机错标危害大得多(代码 01 演示 3)。
- “随机标签噪声在数据多时总是无害的。” 对朴素贝叶斯成立,对逻辑回归不成立(代码 01 演示 3 (c))——取决于模型能否从被噪声压扁的信号里还原出正确的判决边界。
- “top-1 错误都是模型的错。” 很多是多物体、类别边界不清或者标签本身错了;这正是 ILSVRC 用 top-5 的原因,也是后来重新标注 ImageNet 的动机。
- “测试集用得越多,过拟合越严重,所以绝不能多看测试集。” 原则上没错,但实际的乐观偏差按 缓慢增长,模型越相似越小;真正危险的是”根据分数设计下一次提交”的适应性行为(提升攻击)。
- “更多数据总是更好。” 更多错的数据救不回来(代码 01 演示 4:旧邮件从 1000 封加到 10000 封,新邮件上反而略差),而且会稀释少量对的数据。
- “AlexNet 是一个新想法。” 卷积网络在 1980 年代末就有了;新的是规模(ImageNet + GPU)和一系列工程技巧。
- “数据集是中立的。” 每一个数据集都带着来源、筛选规则和标注者的判断——ImageNet 的人物类别就是一个例子。
9. 练习 · Exercises
练习 1(误差分解) 某个模型在 ImageNet 原验证集上 top-1 是 77.0%,在 ImageNetV2(10,000 张)上是 65.5%。(a) 泛化差距大约最多能解释多少?(b) 如果你认为适应性差距接近 0,分布差距大约是多少?(c) 为什么只看这一个模型,无法把适应性差距和分布差距分开?
参考答案
(a) 10,000 张图时,准确率的标准误约 ,95% 置信区间约 ±0.9 个百分点;论文说 99.99% 的置信区间也不超过 ±2%。所以泛化差距最多解释 1–2 个百分点,解释不了 11.5。
(b) 总下降 11.5 个百分点,减去 ±1 左右的泛化差距,分布差距约 10–12 个百分点。
(c) 对单个模型,我们只能观测 和 ,而 (原分布上的总体准确率)测不出来——没有原分布的新样本。适应性差距和分布差距之和是确定的,但怎么分配无法确定。论文的办法是看很多模型:如果适应性是主因,后来的、调得更多的模型应该掉得更多(收益递减),而实际看到的是斜率 > 1。合成世界里可以直接造出 的新样本(代码 03 的 D_fresh),所以能把三项都算出来。
练习 2(挑最好的模型) ImageNet 验证集有 50,000 张图。设 100 个模型的真实 top-1 都是 0.80、误差互相独立,研究者报告测试分数最高的那个。(a) 估计乐观偏差。(b) 如果把验证集换成 ImageNetV2 的 10,000 张呢?(c) 为什么真实的偏差可能比 (a) 还小?
参考答案
(a) ,,偏差约 ,即约 0.5 个百分点。(代码 04 演示 1 显示这个近似对中等的 略有高估。)
(b) ,偏差约 1.2 个百分点——测试集越小,“挑”带来的偏差越大。
(c) 真实的模型彼此相似、错在同样的样本上,测试分数之间的差别比独立时小得多(代码 04 演示 1:相似度 0.98 时, = 100 的偏差只有独立时的约三分之一)。另外,研究者通常不会在 100 个”真实准确率相同”的模型里挑,而是在真实准确率有差别的模型里挑,这时被挑中的往往就是真实最好的那个,运气的作用更小。
练习 3(为什么逻辑回归怕随机噪声,朴素贝叶斯不怕) 代码 01 演示 3 里,20% 随机翻转、 = 30000 时,朴素贝叶斯 0.862(干净 0.869),逻辑回归 0.863(干净 0.955)。给出一个解释,并提出一个让逻辑回归对随机噪声更稳健的办法。
参考答案
设干净标签下 , 是各个特征的权重之和(在这个邮件世界里,干净的对数几率确实近似是可加的)。随机翻转率为 时,噪声标签满足
它仍然是 的单调函数,所以”按 0.5 判决”的最优边界没变。但它的对数几率不再是 的线性函数: 很大时被压到 封顶。逻辑回归只能用”各特征权重之和”去拟合这个被压扁的曲线,于是强证据(例如决定性的词组)的权重被压得比弱证据(单个词)更厉害,两者之间的相对比例被扭曲,判决边界随之偏移——数据再多,它也只是更准确地收敛到这个扭曲的边界。朴素贝叶斯不拟合 ,而是分别数两类里每个词的频率;随机翻转只把每个词的频率按比例向另一类”掺匀”,每个词偏向哪一类、偏多少的排序基本不变,加起来的判决几乎不受影响。
让逻辑回归更稳健的办法(任选其一):(1) 噪声感知的损失:把模型输出 换成 再算交叉熵(需要知道或估计 ),这样模型学的就是干净的 ;(2) 先用一个小的干净子集训练,再用模型的置信度过滤掉”很可能错标”的样本(第 5–7 讲的基于模型的过滤就是这个思路的推广);(3) 用对噪声更不敏感的损失(例如对异常样本惩罚有上限的损失)。这些办法我没有在代码里实现,可以作为扩展练习。
练习 4(置信表的贝叶斯计算) 某类别的候选图里 20% 是好图;好图被一个工人选中的概率是 0.8,坏图是 0.1。(a) 分别算出看到 1、2、3 票”是”(没有”否”)之后,这张图是好图的后验概率。(b) 如果是细粒度类别,好图只有 0.6 的概率被选中,坏图(多为兄弟类)有 0.2,结果怎样?(c) 这和 ImageNet 的置信表、“动态共识”有什么关系?
参考答案
(a) 先验胜率 ;每票”是”乘以 。1 票:,后验 ;2 票:16,后验 ;3 票:128,后验 。
(b) 每票”是”只乘以 。1 票:0.75 → 后验 0.429;2 票:2.25 → 0.692;3 票:6.75 → 0.871;4 票:20.25 → 0.953。要 4 票才能超过 0.95。
(c) 这正是”cat vs Burmese cat”的结构:细粒度类别里,一票”是”带来的证据更弱,需要更多票才能达到同样的把握。ImageNet 的置信表不假设 是多少,而是直接从初始的小批图里数出后验概率;动态共识按每个类别自己的表决定要收几票。
练习 5(probit 斜率) 在 §5.7 的模型里,设原测试集难度 。(a) 新测试集难度 时, 和 是多少?(b) 一个原准确率为 0.80 的模型,新准确率是多少?(c) 什么样的新测试集会让斜率 ?
参考答案
(a) ;。
(b) ;新的 probit 值 ;新准确率 。
(c) 新测试集的难度更集中()时 。例如新测试集里极难和极易的图都更少,大部分是中等难度的图:这时技能高的模型几乎全对(中等难度对它们不难),技能低的模型几乎全错,差距被放大。代码 03 里的合成新测试集难度更分散(清晰度标准差 0.233 > 0.214),所以 ;真实 ImageNetV2 的斜率 > 1,说明它和原验证集的差别不能简单地概括成”多了一些难图”。
练习 6(改匹配方式) 在代码 03 里,(a) 把估计选择频率的票数从 10 改成 20;(b) 票数仍是 10,但把选择频率的 5 个区间改成 10 个。预测分布差距会怎样变,然后在代码的副本里验证。
参考答案
预测:(a) 票数增加,估计更准,回归均值的偏差变小,分布差距应该介于 10 票(+0.043)和 40 票(+0.016)之间。(b) 区间变细不能消除”估计值有噪声”这个根本问题:同一个估计值背后,两个总体的真实选择频率仍然不同,所以偏差应该基本不变(区间更细只是让匹配在”估计值”上更精确)。
我在一份代码副本里跑了这个实验(课程目录里的文件没有改动;SF_BINS 改成 10 个区间,其余不变):
| 设定 | 分布差距 | 的真实 sf |
|---|---|---|
| 10 票、5 个区间(默认) | +0.043 | 0.652 |
| 20 票、5 个区间 | +0.025 | 0.672 |
| 10 票、10 个区间 | +0.043 | 0.653 |
| 真实 sf、10 个区间 | −0.002 | 0.692 |
两个预测都对了:20 票时差距降到 +0.025,正好在 10 票和 40 票之间;区间从 5 个变成 10 个,差距纹丝不动(+0.043)——“更细地匹配一个有噪声的量”解决不了噪声本身的问题。最后一行是个附带的观察:用真实选择频率时,10 个区间把 5 个区间时剩下的 +0.003 也消掉了(−0.002,已经在抽样误差之内),说明那一点残差来自区间太粗。结论:要减小这种偏差,要么让估计更准(更多票),要么在统计上校正噪声(Engstrom 等人的做法),而不是把区间切得更细。
练习 7(提升攻击的规模) (a) 用 估计:在 ImageNet 验证集大小( = 50,000)的二分类测试集上,提交 3000 次随机向量,排行榜分数能刷到多少?(b) Kaggle 常见的规则是每天最多提交 5 次、比赛持续 2–3 个月。这能防住提升攻击吗?(c) 为什么”多类别”的任务比二分类更难这样攻击?
参考答案
(a) ,。测试集越大,攻击越难:同样 3000 次提交, = 4000 时能刷到 0.69(代码 04 演示 2), = 50,000 时只有约 0.555。
(b) 5 次 / 天 × 约 75 天 ≈ 375 次; = 3000 的公开榜上,——对一个随机猜测的攻击者来说上升很明显,但对一个本来就有 0.85 的真实模型,这种”随机微调 + 挑选”的空间要小得多(代码 04 演示 4 的”过度爬榜”队伍用了 2000 次提交才爬了 3 个百分点)。限制次数、加上私有排行榜,大大降低了攻击的收益。
(c) 多类别时,随机猜测在每个样本上只有 的概率对,被”挑出来”的向量在每个样本上偏向正确答案的幅度更小;多数投票也需要在 个类别里投票,信息积累得更慢。(但攻击原理不变:只要能看到精确分数并反复提交,信息就会泄漏。)
练习 8(设计一个可靠的测试集) 你要为一个新的图像分类任务建一个测试集,并希望五年后有人能”复现”它。根据本讲的内容,列出你会做的至少四件事,并说明理由。
参考答案
参考要点(言之成理即可):
- 一开始就多收一份、藏起来:从同一批收集到的数据里随机切出两份测试集,一份公开,一份隐藏多年后再用——这样将来有真正 i.i.d. 的新样本,可以直接测适应性差距(ImageNetV2 论文 §3.2 正是遗憾当年没人这样做)。
- 完整记录收集和标注流程:来源、时间段、查询词、任务界面、说明文字、报酬、工人资格、每张图的全部投票(不只是最后的标签)。保存原始投票,将来就能用更好的统计方法估计选择频率,避免”只用 10 票”带来的偏差。
- 每张图收集足够多的标注,并记录每张图的”难度”或选择频率,方便将来按难度分层分析(以及做分层匹配)。
- 多标签和”不确定”选项:允许一张图有多个正确标签,或标注”看不清""有歧义”,减少 top-1 评测里”不是模型的错”的错误。
- 测试集要足够大,给出置信区间;报告结果时附上置信区间,减少挑选带来的乐观偏差。
- 限制和记录测试集的使用:例如通过评测服务器提交、限制次数、只显示四舍五入的分数(Ladder 的思路)。
- 写一份数据说明(datasheet):说明数据的来源、筛选规则、已知的偏差和不该用于什么——第 3、19 讲会讨论。
10. 延伸阅读 · Further reading
原课阅读(按建议顺序)
- Deng et al., ImageNet: A Large-Scale Hierarchical Image Database(CVPR 2009)。只有 8 页,重点读 §3(构建方法:候选图收集、AMT 清洗、置信表)。
- Russakovsky et al., ImageNet Large Scale Visual Recognition Challenge(IJCV 2015)。ILSVRC 的完整记录:数据集构建、各年结果、人类与机器的比较(含 Karpathy 的人类实验)。
- Krizhevsky, Sutskever, Hinton, ImageNet Classification with Deep Convolutional Neural Networks(NeurIPS 2012)。AlexNet 原文,读 §3(架构里的各个”技巧”)和 §4(减少过拟合:数据增强与 dropout)。
- Recht, Roelofs, Schmidt, Shankar, Do ImageNet Classifiers Generalize to ImageNet?(ICML 2019)。本讲 §5 的主线。正文 14 页值得全读;附录里有大量关于数据收集细节的讨论。
本讲补充的工作
- Engstrom et al., Identifying Statistical Bias in Dataset Replication(ICML 2020)。§5.8 的统计偏差。
- Blum & Hardt, The Ladder: A Reliable Leaderboard for Machine Learning Competitions(ICML 2015);Dwork et al., The Reusable Holdout(Science 2015)。适应性数据分析的理论。
- Roelofs et al., A Meta-Analysis of Overfitting in Machine Learning(NeurIPS 2019);Mania et al., Model Similarity Mitigates Test Set Overuse(NeurIPS 2019);Yadav & Bottou, Cold Case: The Lost MNIST Digits(NeurIPS 2019)。
- Sambasivan et al., “Everyone wants to do the model work, not the data work”: Data Cascades in High-Stakes AI(CHI 2021,最佳论文)。
- Shankar et al., Evaluating Machine Accuracy on ImageNet(ICML 2020);Beyer et al., Are we done with ImageNet?(2020);Northcutt et al., Pervasive Label Errors in Test Sets Destabilize Machine Learning Benchmarks(NeurIPS 2021 Datasets & Benchmarks);Vasudevan et al., When does dough become a bagel? Analyzing the remaining mistakes on ImageNet(NeurIPS 2022)。
- Yang et al., Towards Fairer Datasets: Filtering and Balancing the Distribution of the People Subtree in the ImageNet Hierarchy(FAT* 2020)。
- Zhang et al., A Careful Examination of Large Language Model Performance on Grade School Arithmetic(GSM1k,NeurIPS 2024 Datasets & Benchmarks)。
和本目录其他课程的联系
- CS324 第 2 讲(数据):包含 Ludwig Schmidt 2023 年在 CS324 的客座报告 A data-centric view on reliable generalization,和本课第 2 讲直接相关。
- CS224N 第 13 讲(基准与评测):语言模型时代的基准问题。
11. 下一讲预告 · Next lecture
本讲的结论是:ImageNet 模型在一个”几乎相同”的新测试集上掉了十几个百分点,原因是分布差距;而且所有模型的新旧准确率落在一条直线上。
第 2 讲:可靠泛化——分布偏移、“准确率在一条线上”与数据决定鲁棒性。 把视野从 ImageNetV2 扩大到更大的分布偏移:素描(ImageNet-Sketch)、艺术渲染(ImageNet-R)、换了角度和背景的物体(ObjectNet)……我们会看到,几乎所有的”鲁棒性干预”都落在同一条线上,只有一类模型明显离开了这条线——在 4 亿个网络图文对上训练的 CLIP。然后是这门课的第一个重要论点:CLIP 的分布鲁棒性几乎完全来自它的训练数据,而不是语言监督、对比损失或者模型架构。代码会在本讲的视觉世界里加上”风格 / 领域”,亲手复现这条线和离开它的方法。