一次对MNIST数据集的“控诉”:它究竟糟糕在哪?
发布时间: 2020-11-10
作者:Matteo Barbieri(数据科学家,博洛尼亚大学博士)
译者:青苹果

世界名画《TheTriumphofDeath》。图片出处:Wikipedia
编者按:MINIST 数据集在视觉领域小有名气,但有研究者却认为,它是人类有史以来 “糟糕透顶” 的发明之一。这多少有些夸张色彩,但也不失为一次有价值的反思:
14 世纪四五十年代的欧洲,黑死病(The black plague)的蔓延造成人口急剧减少。使用 MINST 数据集,糟糕程度可能不亚于此。
好吧,或许我言重了,MINST 数据集也没有那么恶劣。但是,它确实有糟糕的地方。
数据科学的世界永远充满着神奇。包括我在内,走入这个世界的人或多或少地会在某个时间段都经历过类似的 “开场仪式”:启动 jupyter notebook 应用程序,导入 pytorch 或 keras 等深度学习库,实现简单的 CNN 模型,并在全能的 MNIST 数据集上训练几个 epochs。然后,你在输出单元格中看到 “validation accuracy” 旁边那些 “甜美可人” 的数字,内心感到一种充盈感。

类似上图这样的充盈感。图片出处:#
比如说,在 MNIST 数据集上训练 AlexNet 后,年轻的数据科学家就有上述的体验。
这种体验倒也没什么可指责之处,毕竟,如果必须从某个任务开始数据科学之旅,手写数字分类倒是一个不错的起点:
首先,手写数字分类的定义很明确,这也就意味着很容易理解任务的目标以及评估任务的方法。
其次,手写数字分类的训练效率很高,只需对神经网络训练短短的几分钟,即可实现很高的准确率。也就是说,即使采用超级简单的架构(比如,AlexNet 或更简单的网络),在验证集上也可能达到 90%以上的准确率。
鉴于上述几点,以及更多其他原因,这个任务能让人们更专注于正确地理解神经网络的基础知识:网络的实际实现、超参数的选择、数据集的拆分等。
那么,对此,我想要 “指控” 的问题究竟是什么呢?
是期望与现实的差距。
机器学习模型存在一个很基本的但又常常被忽视的问题,即假设在训练过程中没有遇到任何的阻碍,包括训练之前的数据集的预处理。只要你使用的数据与训练数据有着相同的分布,那么,你就会产生一种期望 —— 模型在测试集上表现会像训练集所展现的结果的一样好。然而,实际情况是,这种情况发生的概率远比你想象的要低。
针对在 MINIST 数据集上训练的模型,你有什么想法或期望吗?在此,我冒昧地作出了一个合理的假设,你很大程度上会用来对具备合理精度的手写数字进行分类。
这样一个问题出现了 —— 虽然数字的整体形状很明确 (比如,0 总是被多多少少的画成一个圆,而 8 则由两个小圆构成,一个叠在另一个的上面),但人们画数字的方式存在细微的差异。以数字 1 为例:单个垂直线段是一种有效的表示方法,但如果从顶部开始,在左侧带有小标记的线段也是如此。上述都是有效表示数字 1 的方法。

图片出处:Medium
然而,MNIST 数据集只包含与模型左侧类似的例子,所以如果你要问右侧是什么数字,它或许会回答数字 “7”。这很可能基于这样一个事实:右侧两个线段组成的角度,是有力地区分数字特征的标记,而数字 “7” 与数字 “1” 的表示不同,前者在该数据集中具有这样的特性。
然而,特别令人失望的是,尝试将一个在 MINIST 上训练的模型用于非手写、印刷的数字上:虽然大多数字体表示数字的方式略有差异,但这却足以降低预测的可靠性,尤其针对于某些类。

MINIST 数据集中的样例。图片出处:WIKIMEDIA
这个 “臭名昭著” 的数据集,推动世界变得更加 “黑暗” 的另一个关键点是,所有图像基本上都是无噪声的:没有任何类型的 “污点”、没有裁剪不良的边界或任何不是实际数字的形状。
这产生的问题是,在现实中,这是一种不太可能发生的场景:图像的获取来源于相机拍摄的照片或墨水挥洒的纸张的扫描图,很可能会有污斑或其他线条等;不管我们对数据做了多少清理,最终这些缺陷中的一些也很可能会掺杂到输入图像中,而分类器从未 “谋面” 这样的情况,因此,结果显而易见的结果,它很难正确地分类这类的图像。
在 MNIST 数据集上训练的 CNN,很可能会由于顶部和左侧的边界而无法对此类图像进行分类。
我个人对 MNIST (以及大多数使用了该数据集的教程) 的看法是,它给用户了 (可能是初学者,或学生水平的想成为数据科学家的人) 一种不切实际的期望,仿佛自己已经解决了一个问题。
在几乎所有默认设置的网络上经过几次训练之后,当看到极高的准确率时,确实很容易产生那种感觉。而实际情况是,他们所做的是训练了一个分类器,该分类器能正确识别属于 MNIST 数据集的数字,真正识别的正确数很可能并不多。如果他们试图在纸上写一个数字,用手机拍照,然后输入到模型中,参考上述的原因,那么,结果很有可能是错误的。
不幸的是,事情要比这复杂得多,我认为最好能明确声张这种差距的存在,而不是假装没有问题。
当然了,它还是可以作为实现机器学习 pipeline “机械式” 部分的练习,对于该领域完全的 “小白” 来说,也仍能算是有难度的任务,但是使用这个数据集究竟会得到什么样的结果,需要做到进一步的透明。
就个人而言,我鼓励人们在图像分类教程中使用其他数据集:诸如 Fashion MNIST 之类的数据集,可以从 #(也包含在 torchvision.datasets 和 keras.datasets 中)中获取。这个数据集基本上与 MNIST 一样,只是你有不同类别的衣服 / 鞋子的图像,而不是数字。
Fashion MNIST 有着类似 MNIST 的特点 (28×28 像素灰度值,完全与背景隔离,没有噪声等),但我认为,这并不会让人对模型在现实生活中的表现产生过于乐观的感觉,从而影响对实际效果的理性判断。
另一个可行的选择是 CIFAR-10 数据集,该数据集共包含 60000 张彩色图像 (32*32,共 10 个类别,每类 6000 张图)。数据集分为五个训练批次和一个测试批次,每个包含 10000 张图像。测试包含来自每个类别的恰好 1000 个随机选择的图像。训练批次以随机顺序包含剩余图像,但一些训练批次可能包含来自一个类别的图像比另一个更多。总体来说,五个训练集之和包含来自每个类的正好 5000 张图像。重要的是它的性能至少不会好到让人对这类问题的真正难度产生扭曲的想法。
还有很多其他可选择的数据集,本文便不再做详述。
最后,温馨提示:如果你在学校做科研,建议尽量不要使用 MINST 数据集。当然,如果你真的要用,就要做好足够的心理准备,切勿被压倒性的出色性能所迷惑。
Refrence:
[1]#@matteo.a.barbieri/why-mnist-is-the-worst-thing-that-has-ever-happened-to-humanity-49fd053f0f66