刷新世界纪录!
用600行代码,在单张A100上,不到10秒,就完成了CIFAR-10数据集的训练,并且精度高达94%。
特斯拉前AI总监Andrej Karpathy连发3条推特,疯狂点赞。
Karpathy之所以如此激动,是因为12年前,他试过手动对CIFAR-10进行分类,得到的也是94%!而当时的SOTA只有80%。
项目介绍
项目地址:https://github.com/tysam-code/hlb-CIFAR10
这段代码可以在Colab上直接使用,事实上——其中大部分是在Colab中开发的。
这位叫Tysam的小哥,给自己定下的目标是——
- 简单
- 初学者友好
- 只需torch和python的常用代码
- 几乎不用外部依赖(目前只有torch和torchvision)
- 破世界纪录的单GPU训练时间(此前在A100上的世界纪录是18.1秒,而Tysam打破了世界纪录——小于10秒)
- 在2年内让训练时间小于2秒
为了达成快速训练的神经网络实现,Tysam参考了David Page在CIFAR-10图像分类数据集上有效训练残差网络的代码,但几乎是从头编写的。
这种做法的好处是,Tysam code现在保持着CIFAR-10上单GPU训练速度的世界纪录——在A100上不到10秒!
在David Page代码的基础上,Tysam做了如下改动:
- 压缩和激励层(squeeze and excite layers)
- 非常多的超参数调整
- 复杂架构修剪(miscellaneous architecture trimmings)
- 更改内存格式,更好地使用张量核心等
- 其他
与原始代码相比,Tysam的代码全部都在一个文件中,而且非常扁平flat。
此外,所有的管线也都已经公开,有兴趣的朋友可以在里面快速探索自己的想法。
至于为什么会选择ConvNet,而不是现在最流行的Transformer呢?
在Tysam看来,虽然Transformer是新事物,但信息从训练集中压缩到神经网络中的方式,实际上始终都遵循着同样的一套基本数学原理。
Tysam希望,在一两年内让这个代码库在2秒内完成训练,在四到五年内在1秒内完成训练。
Karpathy疯狂点赞
对于Tysam的代码,Karpathy赞叹不已,他丝毫不吝啬自己的溢美之辞——
「我喜欢这种极简的设计美学,它让阅读代码不再是精疲力竭的寻宝过程。你不需要把代码散布在复杂的嵌套目录结构之中,然后用各种指令把事情搞得过于复杂。」
随后,Karpathy还表示,这让他想起了自己在12年前做的测试:
12年前,「肉眼」分类实现了94%的准确率,用时未知。
12年后,600行代码实现了94%的准确率,用时不到10秒。
当时的过程大概是:
在一个平平无奇的周末,Karpathy突然想看看人类在这个数据集上能达到什么样的精度。
于是就快速地手搓了一段MATLAB代码用于测试。
界面长这个样子:
在测试过程中,程序首先会一张一张图片地展示,然后Karpathy会按下0-9(10个键),对应这张图他所认为的类别(10个分类)。
在经过了不知道多长时间之后,Karpathy终于完成了400张图片的分类,准确率为94%左右。
那么,为什么不是100%呢?
Karpathy:「因为有些图像真的太扯了!」
比如下面这几个:
也难怪Karpathy当年预测AI所能达到的极限是85-90%(笑)。
当然,后来的结果大家也都知道了,CIFAR-10分类的准确率早就被刷到了99.5%。
著名的CIFAR-10
众所周知,CIFAR-10是由Geoffrey Hinton和他的学生Alex Krizhevsky和Ilya Sutskever整理的一个用于识别普适物体的小型数据集,也是如今机器学习研究中最广泛使用的数据集之一。
CIFAR-10数据集由10类32x32的彩色图片组成,总共包含60000张图片,其中50000张图片作为训练集,10000张图片作为测试集。
这10个类别为:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。
参考资料:https://github.com/tysam-code/hlb-CIFAR10