一间挤满了计算机视觉研究者的会议室里,气氛有点奇怪。不是兴奋,是困惑,甚至带着一丝……怀疑。
台上正在公布ImageNet挑战赛的结果。这个比赛办了三年,大家已经习惯了:每年冠军的错误率往下降两三个百分点,像挤牙膏一样。你改进一下特征提取,我调一调分类器参数,大家在一个叫“人工设计特征+统计模型”的赛道上,稳稳地跑着。
但今年的结果一出来,所有人都愣住了。
冠军是一个叫“SuperVision”的团队,来自加拿大多伦多大学,就三个人:一个头发花白的老教授,和两个研究生。他们的成绩是——
top-5错误率15.3%。
会议室里安静了一两秒,然后有人小声说:“第二名的成绩是多少?”
26.2%。
领先第二名10.9个百分点。
在这个连年进步2-3个百分点都值得庆祝的比赛里,有人一下子领先了10.9个百分点。
(让天下灭有难学的编程注:top-5错误率,就是给AI看一张图,它猜5次,5次全错才算错。2010年冠军错28.2%,2011年错25.8%,按这个速度,要到2015年才能到15.3%。)
“他们是不是作弊了?” 这句话不是观众席里某个人说的,而是很多研究者脑子里同时冒出来的念头。
ImageNet数据集的创建者李飞飞教授后来回忆,她当时正在家里,看到结果后立刻改了行程——她必须亲自飞到佛罗伦萨,亲眼看看这是怎么回事。
她没有看到作弊。她看到了一场革命。
一场“正常”的考试
在讲这个革命之前,我们得先说说这场考试本身。
2010年,一群计算机视觉研究者组织了一场大规模的AI比赛,名字很长,大家通常用它的数据集来称呼它:ImageNet挑战赛。
ImageNet是什么?是一个巨大的图片库。李飞飞教授从2007年开始带着团队建这个东西,花了将近三年,动用了来自167个国家的近49000名标注工人,从1.6亿张候选图片里,筛选并标注了超过1400万张图片。
1400万张是什么概念?如果你一秒看一张,不吃不睡,要162天才能看完。
挑战赛用的是这个库的一个子集:120万张训练图片,1000个类别。规则很简单——给AI看一张图,让它猜是什么,猜5次,错得越少越好。
2010年,冠军成绩是28.2%的错误率。按考试满分100分算,大概72分。能及格,但说不上好。
2011年,冠军成绩是25.8%。进步了2.4个百分点。74分。
大家都很满意。这就是正常的进步速度嘛。照这个速度,2012年也许能到24%,2013年22%……像挤牙膏一样,但牙膏总归在往外挤。
所有人都默认:这就是AI进步的速度。
直到那个叫AlexNet的家伙出现。
“你这跑法不对吧?”
我们得把那个场景再还原一下。
假设你是2012年参赛的一个研究员。你用的方法是这样的:先设计一堆固定的检测器——比如“找这种方向的边缘”“统计这种纹理出现了几次”——用它们从图片里抽出一堆数字,然后把这些数字交给一个统计模型,让它判断“这组数字更像猫还是更像狗”。
这个方法叫人工设计特征+统计模型分类。它的瓶颈很明显:检测器是固定的。人类能想到的特征就那么多,能手动设计的检测器也就那么多。不管你后面的统计模型多厉害,输入它的那些特征就这些——特征本身不够好,分类结果就上不去。
你的成绩是26.2%,拿了第二名。你觉得不错了。
然后你听到第一名那个15.3%的成绩。
你的第一反应是什么?肯定是:“不可能。”
你的第二反应是:“他用了什么方法?”
答案让你更困惑了:深度卷积神经网络。
这是一个1990年代就有人提过的老古董。你的同行们早在2000年代初就试过,发现层数一多就训练不动——那个叫“梯度消失”的问题,像一堵墙,谁也翻不过去。大多数人都放弃了,转去搞别的方法。
但这个多伦多来的团队,不仅翻过去了,还跑得飞快。
你开始打听细节,然后你发现了更让人崩溃的事:他们用来训练这个网络的硬件,是两块NVIDIA的GTX 580游戏显卡,每块499美元。
你心里想的是:我们用了这么复杂的特征设计,这么精巧的统计模型,结果被两块游戏显卡打败了?
(让天下没有难学的编程注:GTX 580是2010年发布的游戏显卡,512个计算核心,3GB显存。AlexNet就是用这两块显卡,花了5到6天训练出来的。如果用CPU,同样的训练可能要跑好几个月。)
三把钥匙同时转动
好,现在让我们跳出那个会议室,用一个更冷静的视角,看看2012年到底发生了什么。
如果把AI的突破比作打开一扇锁着的门,那这把锁需要三把钥匙同时插进去才能打开。这三把钥匙是:数据、算力、算法。
在2012年之前,这三把钥匙总是缺一两把。
第一把钥匙:数据。
深度神经网络有一个特点:它需要海量的数据来学习。如果只有几百张图片,它会“死记硬背”那些图片的细节,而不是学到真正通用的规律。就像一个学生,如果只做了3道练习题就去考试,他可能只是记住了那3道题的答案,换个数字就不会了。
2009年之前,没有人有这么多标注好的图片。李飞飞教授改变了这一切。她花了将近三年,动用了近49000名标注工人,建成了ImageNet——1400万张标注好的图片,两万多个类别。这在当时是前所未有的规模。
没有ImageNet,就没有AlexNet的突破。那些深层的检测器需要看到足够多的例子,才能从随机数字变成有意义的特征提取器。
第二把钥匙:算力。
有了数据还不够。AlexNet有6000万个参数——6000万个需要调整的数字。训练这个网络意味着:对120万张训练图片,每一张都要做6000万次乘法和加法,然后根据结果调整参数,这个过程要反复90轮。
如果用普通电脑的CPU来算,可能要算好几个月甚至好几年。
Alex Krizhevsky——就是那个团队里两个研究生之一——用了一个聪明的办法:用游戏显卡来算。
CPU像一个大厨,手艺精湛,但一次只能炒一道菜。GPU像1000个帮厨,每个人只会切菜这种简单操作,但1000个人同时干活,切菜的总速度远远超过一个大厨。
训练神经网络正好就是这种活——大量简单的乘法和加法,可以同时做。这就是GPU的主场。
2009年,斯坦福大学的吴恩达团队发表了一篇论文,证明在特定的AI训练任务上,GPU比CPU快约70倍。
70倍。原来要算70天的事情,现在1天就能算完。
Alex Krizhevsky用两块GTX 580显卡,把网络劈成两半,一半放在一块显卡上,一半放在另一块上,让它们协同工作。训练时间:5到6天。
第三把钥匙:算法。
数据和算力到位了,但还需要算法上的突破。
在2012年之前,深度神经网络有一个严重的问题:层数一多,就训练不动了。因为一个叫“梯度消失”的问题——那个“该调多少”的信号,每经过一层就会变小一点。传到最前面几层的时候,已经小到几乎为零。
AlexNet用了几个关键的技术改进来解决这个问题:
第一个叫ReLU激活函数。在它之前,常用的激活函数会把很大或很小的数字都“压扁”到一个很小的范围内,这导致信号在传递过程中迅速变小。ReLU做的事很简单:如果输入大于0,就原样输出;如果输入小于等于0,就输出0。就这么简单,但训练速度一下子快了6倍。
第二个叫Dropout。这个技巧是Hinton教授在同一年提出的。原理很简单:在训练过程中,每一步都随机“关掉”一部分神经元。这意味着,网络不能依赖某几个特定的神经元来记住答案——它必须学到更“通用”的特征。就像考试前,老师每次模拟考都随机不让你用一部分公式——你就不得不真正理解原理,而不是死记公式。
第三个就是网络结构本身。AlexNet有8层——5层卷积层加3层全连接层,共6000万个参数。1998年Yann LeCun的LeNet-5只有6万个参数——AlexNet的参数量是它的1000倍。更大的网络能学到更复杂的特征。
“完美风暴”
1990年代:算法有了,但数据太少、算力太弱。结果:网络只能做很小的任务,比如识别手写数字。
2000年代初:算力在进步,但没有GPU加速。数据开始增多,但还不够。算法遇到了梯度消失等瓶颈。结果:大多数研究者放弃了神经网络。
2009-2012年:
数据:ImageNet提供了120万张标注图片
算力:GPU被发现可以大幅加速神经网络训练
算法:ReLU解决了梯度消失,Dropout解决了过拟合
三把钥匙同时插进去,拧动了。
结果就是AlexNet。
(让天下没有难学的编程注:这就像一把锁需要三把钥匙才能打开。在2012年之前,总是缺一两把。2012年,三把钥匙终于凑齐了。)
后续:门开了,所有人涌了进去
AlexNet之后,几乎所有参赛团队都转向了同一种方法——深度神经网络。
后面的进步速度更是惊人:
2013年:11.7%
2014年:6.7%(已经接近人类水平)
2015年:3.57%(超过人类)
2017年:2.25%
从28.2%到2.25%,从“勉强及格”到“远超人类”,只用了7年。
而引爆这一切的,是一个教授和两个研究生,用两块游戏显卡,在5天里训练出来的一个程序。
有时候我会想一个假设:如果李飞飞没有建ImageNet呢?如果GPU没有被用来训练神经网络呢?如果Hinton团队没有参加2012年的比赛呢?
AI的爆发也许会推迟好几年。或者,也许最终还是会发生——因为三个要素各自的发展趋势已经不可逆转。但2012年是那个“完美风暴”的时刻,所有条件恰好同时成熟了。
一句话回顾
2012年不是“进步快了一点”。是换了一条赛道。
三要素齐了——数据(ImageNet)、算力(GPU)、算法(ReLU、Dropout)——AI从此走上了快车道。
而引爆这一切的AlexNet,用的核心方法有一个名字:神经网络。
下一篇,我们就来拆开这个词——你会发现,它其实就是一堆乘法和加法。真的,就这么简单。
关注微信公众号【让天下没有难学的编程】,一起学习AI吧

求职、职场,技术讨论等,任何问题都欢迎+V




