2010年,ImageNet大规模视觉识别挑战赛的冠军方案把Top-5错误率做到了28.2%。放在当时,这是全球计算机视觉系统能交出的最好成绩;换算一下,相当于给四张图做五次猜测,平均总有一张猜不到。到2017年,同一项赛事(那也是最后一届常规举办的比赛)交出的冠军成绩是2.25%。七年时间,错误率从28.2%压到2.25%,而人类在这份榜单上的平均水平大约是5%左右——也就是说,机器在一项明确的视觉识别任务上,已经稳定超过了普通人。
这七年,不只是十几个模型轮流登顶那么简单。它对应着整个计算机视觉从“手工特征时代”切换到“深度学习时代”,再一步步把深度神经网络从8层推到152层、甚至更远的过程。我想把这几年里每一条冠军路线摊开,看看每一年到底为什么能往下跳一大截,哪些创新是转折点,哪些只是锦上添花。无论你是刚接触视觉的初学者,还是已经在做深度学习的老手,这条下降曲线背后拆出来的东西,都值得再看一遍。
1. 先把时间线摊开:从28.2%到2.25%,八年八份成绩单
1.1 历届冠军以及它们的Top-5错误率
要理解这条进化链,最好的办法是先把历届冠军放到一张表里。这里说的错误率都是官方公布的Top-5错误率,也就是模型输出概率最高的5个类别里,不包含正确类别的比例。
| 赛季 | 冠军方案 | 核心技术标签 | Top-5错误率 | 一句话点评 |
|---|---|---|---|---|
| 2010 | 稀疏编码+空间金字塔匹配 | 手工特征、稀疏编码 | 28.2% | 古典特征工程的又一次推高 |
| 2011 | Fisher Vector | 高斯混合建模、高维向量 | 25.8% | 手工特征路线的最后一次冲锋 |
| 2012 | AlexNet | 深度CNN、ReLU、Dropout | 15.3% | 深度学习引爆点 |
| 2013 | ZFNet | CNN可视化、结构调优 | 11.2% | 读懂网络内部的第一课 |
| 2014 | GoogLeNet(VGG第二) | Inception多尺度模块 | 6.67% | 用宽度加降维换深度 |
| 2015 | ResNet | 残差学习、152层 | 3.57% | 把深度推到工程极限 |
| 2016 | 多模型集成方案 | 系统级集成、多尺度评测 | 2.99% | 工程集成胜过单模型创新 |
| 2017 | SENet | 通道注意力、特征重标定 | 2.25% | 常规赛事收官 |
表格里最扎眼的就是2012年那一跳:从前一年的25.8%直接掉到15.3%,一年砍掉十个百分点。之后再往后,每一年下降的幅度大约在三到四个百分点,速度其实也不慢,但整个技术路径已经完全不同了。
1.2 看这张表之前,先弄清三个口径
第一次看这张表的人,很容易被“2.25%”这个数字误导,以为机器已经完美识别图像了。不是这样的,有三个口径必须先说清楚。
第一,比赛提交的成绩大多不是单模型,而是多个模型的集成。所谓集成,就是训练好几个结构类似或不同的网络,对同一张图分别预测,再把预测概率平均起来。不同模型的误差会有一部分互相抵消,所以集成后的错误率通常能比最好的单模型再低一到两个百分点。后面提到的2.25%、2.99%、3.57%,基本都是集成成绩。
第二,Top-5和Top-1不是一回事。Top-5等于给网络五次机会,只要正确类别落在前五,就算它对。但实际使用中,很多时候我们只关心最优的那个预测,也就是Top-1错误率。Top-1的数字通常比Top-5难看很多,往往是Top-5的将近一倍。但大家在比赛里统一用Top-5,因为它是当年官方指定的评测指标,所以在横向比较各个模型时,Top-5是最公平的口径。
第三,很多人会问:标题说的是7年,表格里怎么有8届?因为比赛从2010年办到2017年,年份跨度是7年,但经历了8个完整赛季。从2010到2017,看起来只多了几位冠军,实际上这是一部完整的视觉技术断代史。前两届用的是手工特征加浅层分类器,从2012年开始,深度卷积网络接管了一切,此后所有冠军都是深度学习的传人。
2. 原点上:2010与2011,手工特征时代的两次冲刺
2.1 2010年:稀疏编码接过视觉词袋的接力棒
在深度学习还没进入视觉领域时,主流的图像分类流程可以简化为三步:提取特征、编码特征、训练分类器。这里面的特征通常是SIFT描述子,它描述图像局部的梯度方向和尺度信息,对旋转和光照有一定鲁棒性。
最早期的做法叫视觉词袋:把所有SIFT向量聚类成几千个“视觉单词”,每张图的局部特征都硬分配到最近的单词,然后统计每个单词出现的频率,得到一张直方图,最后把直方图喂给支持向量机分类。这套流程的问题在于,硬分配丢失的信息太多。比如一个边缘特征既像单词A又像单词B,硬生生归到A,B的信息就完全没了。
2010年的冠军方案,核心改动就是把硬分配换成稀疏编码。稀疏编码的思路是:用一个过完备的字典重建局部特征,字典里只有少量基向量被激活(系数稀疏),其余系数为0。这样既保留了重建精度,又通过稀疏约束让表示更鲁棒。配合空间金字塔匹配——也就是把图像划分成越来越细的子区域,每个区域分别统计表示,再拼接成全局向量——最终把错误率做到了28.2%。在满分1000类的任务里,这样的成绩当时是很强的。
2.2 2011年:Fisher Vector让特征表示学会“统计偏离”
第二年,冠军方法换成了Fisher Vector。这个思路不再统计视觉词的频数,而是用高斯混合模型为所有的局部特征建一个分布模型,然后求“为了让这个分布更贴合当前特征,高斯模型的均值、方差等参数应该朝哪个方向调整”的梯度向量。
直观理解就是:视觉词袋只记录“每张图里出现了哪些词”,Fisher Vector还记录了“每个词出现的方式偏离标准期望多少”。它把局部特征和词典之间的关系写得更细,所以表达力高出不少。缺点也很明显——维度很高。通常会先用PCA把SIFT降到64维左右,再用高斯混合模型建模,最后得到的Fisher Vector可以达到几十万维。好在当时已经有线性SVM这种高效工具,对付几十万维的稀疏向量并不吃力。
这一年错误率降到25.8%。注意,从28.2%到25.8%,一年只进步了2.4个百分点。这已经是手工特征路线能拿出来的“极限速度”了,因为整个pipeline的每一环都是人设计出来的,改进空间越来越小。
2.3 为什么要说“手工特征时代”必然撞墙
现在回头看,2010和2011两年的冠军有很强的共性:特征提取、特征编码、分类器训练是三个完全割裂的阶段。SIFT提取的只是低层梯度信息,它根本不知道“这是一只狗”还是“这是一辆车”;编码和分类器虽然在做抽象的活,但抽象能力很浅。
打个比方,这就像让人用零件说明书去拼一台机器:每个零件都知道自己的形状,但拼装规则必须由人提前写死。一旦图像里的场景、角度、遮挡超出人们预设的规则,系统就崩溃。而且低层特征和最终语义之间隔着一道巨大的鸿沟,靠浅层模型很难跨越。所以即便研究者把编码方式从硬量化换成稀疏编码,再从稀疏编码换成Fisher Vector,收益也是递减的。
如果沿着这条路继续走,25.8%可能就是天花板。转折之所以发生在2012年,不是因为旧方法彻底不行了,而是因为一条完全不同的路线突然以碾压姿态出现。
3. 分水岭:2012年AlexNet如何一口气砍掉十个百分点
3.1 AlexNet做对的四件事
2012年的冠军结构是AlexNet,一个8层的卷积神经网络:5个卷积层加3个全连接层。它在这个1000类、一百多万张训练图片的任务上拿到了15.3%的Top-5错误率。现在回看,它的成功可以拆成四个关键点。
第一,端到端的深度特征学习。AlexNet不再提取SIFT,而是直接从原始像素出发,通过卷积、池化、非线性激活一层层变换,自动学出从边缘、纹理到物体部件的层级化特征。特征提取和分类不再分成两段,而是同一个网络里的连贯过程,梯度可以反向传播到每一层参数上。
第二,ReLU激活函数。当时的卷积网络大多用tanh或sigmoid,这类函数在输入较大或较小时梯度会饱和,几乎变成0,深度一加深梯度就传不动。ReLU在正区间梯度恒为1,负区间直接置0,计算简单,收敛效率提升非常明显。AlexNet的训练收敛速度比tanh版本快好几倍,这不是修辞,是论文里实测过的事。
第三,双GPU并行训练。单块显卡显存放不下这个规模的网络,AlexNet把网络拆到两块GPU上,各算一半卷积,分工协作。这让“训练一个足够大的网络”在当时变成了现实。第四,Dropout和数据增强。全连接层随机丢弃一部分神经元,强迫网络学冗余表示,减轻过拟合;同时把训练图做随机裁剪、水平翻转、PCA颜色抖动,等于把有限的数据翻出好几倍的效果。
3.2 为什么这套方案在之前没人做出来
很多人以为卷积网络是2012年才发明的,其实不是。卷积神经网络在更早之前就有了,但在AlexNet之前,大家尝试做深度卷积网络时常常得到很差的结果,于是主流学界甚至放弃了这条路。
为什么一个看起来很合理的方案迟迟没有成功?缺的不只是算法,是一整套工程配套。激活函数不够好,梯度饱和会让深层训练变成灾难;没有Dropout和数据增强,百万级参数的网络在小数据集上严重过拟合;算力不够,单卡跑一个粗糙的大网络可能要训练好几个月;初始化策略不成熟,网络深一点就训练崩掉。AlexNet把这些痛点全解决了:用ReLU解决梯度,用Dropout和数据增强解决过拟合,用双GPU解决算力,用精心调的SGD和权重衰减解决训练稳定性。每一个组件单独拿出来都不是石破天惊的发明,但组合到一起,就是一次系统级的胜利。
这是当年很多人没有看到的:深度学习想撼动视觉领域,不只需要一个“更好的模型”,还需要全套训练工程跟上。AlexNet的训练细节现在看起来朴素到像常识,但当时能在所有细节上做到对,本身就是极高难度的工程挑战。
3.3 15.3%给整个领域带来的冲击
15.3%比上一年冠军的25.8%低了10.5个百分点。可以这么说,2011年到2010年的进步幅度是2.4个百分点,而AlexNet一上来,等于把对手两年的进步幅度再乘以四倍还多。整个计算机视觉圈的第一反应是先怀疑,然后立刻去复现,接着所有人都意识到,深度学习这条路不是没有可能,而是已经跑得飞快。
从2012年开始,几乎再没有哪个顶级视觉竞赛冠军敢不用卷积网络。GPU训练、ImageNet预训练、特征微调这些概念也开始在更大范围内普及。一个有趣的事实是,AlexNet的8层网络在今天看来非常浅,参数却有约6000万个,训练时要跑一周左右。正是这6000万个参数用十足的“蛮力”向整个行业演示了一条新路:只要数据、算力和结构三者到位,机器认图的能力可以发生质变。
4. 2013-2014:从“堆层数”到“设计结构”,网络开始被理解
4.1 ZFNet:先把网络内部看清楚,再谈怎么调
2013年的冠军方案,本质上是AlexNet的一次“调优复刻”。它把第一层卷积核从11x11改成7x7,步长从4改成2,第二层卷积核从5x5改成3x3,减少前期池化和大步长带来的信息丢失。看起来只是小改动,却把错误率从15.3%降到了11.2%。
这个版本的更大贡献不是减少的那几个百分点,而是反卷积可视化。研究团队把网络中间层的特征图映射回像素空间,让人能看到每一层到底学到了什么。结果发现,网络的层次结构非常清晰:浅层学边缘、颜色块,中间层学纹理和局部形状,深层学物体部件乃至完整的物体轮廓。这是人类第一次“看见”深度网络内部发生了什么,也是可解释性的开山之作。
有了可视化工具,调整网络就不再是纯盲猜了。网络哪一层“看不清”细节、哪一层“理解”得不够抽象,都能从可视化图里找到线索。这对当时热闹但玄学的深度学习来说,是非常珍贵的定心丸:原来大网络不是黑盒子,它有自己的逻辑,只是以前没人想到去打开它。
4.2 GoogLeNet:多尺度并行与1x1瓶颈的巧妙组合
2014年的冠军GoogLeNet,是结构设计上的一个分水岭。之前大家想到提升网络性能,第一反应是“加深”,但单纯加深会带来计算量爆炸和梯度问题。GoogLeNet给出的思路是:同一层里并行用好几种尺寸的卷积核,让网络自己决定该关注多大范围的感受野。
这个模块后来被称为Inception模块。它把1x1、3x3、5x5的卷积和一个3x3池化并联,输出再在通道维度拼接起来。这里最妙的是1x1卷积:先用它把通道数压缩到原来的四分之一左右,再去做3x3或5x5卷积,计算量暴降。22层网络的总参数量只有约500万个,比AlexNet的6000万小一个数量级,这就非常反直觉——网络更深,参数反而更少。
另一个关键设计是用全局平均池化替换了最后的全连接层。传统网络最后通常接几个全连接层,参数量巨大还容易过拟合。全局平均池化把每个通道的特征图直接平均成一个数,相当于给每个类别生成一个“通道特征”,然后用一个极小的线性层完成分类,参数一下子少了一大截。
为了防止22层网络在反向传播时梯度在中间断掉,GoogLeNet还在网络中间插了两个辅助分类器,把一部分梯度从浅层“分流”回来,缓解梯度消失。最终6.67%的成绩,让21世纪开头那些只知道“越深越难训”的言论彻底失去了市场。
4.3 VGG:那个“只拿了第二但后来最常被搬运”的模型
2014年还有一位特殊选手:VGG。它在当年的分类任务里拿了第二,错误率7.3%,跟GoogLeNet差得不远。为什么它值得单独说?因为论被后人复用的频率,VGG可能是历届冠军里最高的一个。
VGG的设计理念极度简洁:整张网络只用3x3卷积核,靠连续的卷积层堆叠来扩大感受野。两个3x3卷积等于一个5x5的感知范围,三个3x3等于一个7x7,但参数量更少、非线性更强。这种规整的结构意味着它特别容易在各类框架里实现,也特别适合做特征提取主干。VGG-16有1.38亿参数,计算量很大,但训练好的模型可以被直接搬到别的视觉任务上用,这就是后来“迁移学习”大规模流行的雏形。
VGG被广泛复用的另一个原因是控制器好:固定输入尺寸、固定3x3卷积、固定池化步长,几块积木拼来拼去就是另一个网络。它把“深度视觉网络”变成了一个积木游戏,大大拉低了入门门槛。可以说,如果没有VGG的简洁示范,后来的很多视觉框架不会普及得这么快。
5. 2015年ResNet:残差学习,解决“越深越差”的悖论
5.1 退化问题:不是过拟合,是优化在路上走丢了
到了2015年,深度已经不是一个新鲜词了。GoogLeNet有22层,VGG有19层,再往上做,研究者很快就撞上一个反直觉的现象:网络加到56层,训练误差竟然比20层还高。而且这不是过拟合,因为训练集和验证集上的表现一起变差。
这就是著名的“退化问题”。它说明的不是“模型能力不足”,而是“深层网络更难优化”。一个56层的网络,理论上应该至少能拟合出“前20层起作用、后面36层做恒等映射”这样的解,但让网络自己学会“什么都不做”,竟然比学会“做点什么”还难。梯度在几十层之间反复连乘后会急剧衰减,靠近输入端的层几乎收不到有效的更新信号。
想强制让深层组件学会恒等映射,等于要求一个复杂函数逼近器“输出等于输入”,这在数学上并非不可能,但在优化层面上道路极其难走。当时的解决方案通常是各种复杂的初始化,但效果都一般。ResNet之前,深网络训练更多靠的是运气和玄学。
5.2 残差块:给梯度开一条不转弯的捷径
ResNet的做法极其干净:在每个残差块里,让模块去学习一个残差F(x),最终的输出是F(x)加输入x。如果某个深层的变换本来就应该接近恒等映射,那它只需要把F(x)学成接近0,而“把输出变成0”比“把输出变成输入”容易得多。
更关键的是反向传播。损失函数的梯度经过残差块的捷径连接时,可以直接携带到前层,几乎不衰减。这相当于在深层的各层之间架了一条“高速公路”,梯度不再需要一层层绕弯才能回到网络前部。配合BatchNorm这种把每层输入重新归一化的手段,网络可以把学习率开得很大而不担心训练崩掉,收敛速度成倍提升。
ResNet最终做到了152层,比VGG-16深了8倍,参数量却更少,只有约6000万。深层的优势在于,每一层都可以在前层语义的基础上再抽象一层,整个网络的表达空间被极大地撑开了。最后的集成成绩3.57%,把错误率推过了5%这条人类平均水平线。
5.3 152层与3.57%:机器首次稳定超过人类平均线
关于人类在ImageNet上的表现,学界有过估算。不同论文给出的Top-5错误率大约在5%到6%之间,取一个约数的话,正常人类平均大概在5%左右。ResNet的3.57%,意味着机器在一个1000类的图像识别任务上,已经稳定超过普通人的平均水平。
这里要强调“稳定”二字。之前的模型偶尔会在某些图片上比人类强,但ResNet是第一次做到在一个大规模标准数据集上,整体错误率低于人类平均。这件事的舆论效应非常大。几乎一夜之间,很多非专业人士开始讨论“人工智能超越人类识别能力”,尽管学术界清楚这只是特定数据集上的特定口径。
但ResNet给产业界的信号更实际:深度网络可以用到152层,甚至更深的网络也能被正常训练。它直接带火了一批ResNet变体,也让“残差连接”从一种创新变成了此后所有深度模型的标准配置。你会看到后来的几乎所有主流网络,包括Transformer在视觉领域的应用,都自带残差连接。仅凭这一点,ResNet就足够在技术史上占据一个位置。
6. 2016与2017:集成策略和通道注意力,在最后两公里决胜负
6.1 2016年:单模型到头了,那就用“军团作战”
2016年冠军并不是某个全新结构的单模型,而是一个精心组织的多模型集成系统。它把多种不同深度的ResNet变体、Inception变体组合在一起,再加上复杂的多尺度评测策略:同一张图先缩放到多个分辨率,中心裁剪加四个角裁剪,得到一堆预测后统一平均。
这种做法的本质是让不同类型、不同初始化、不同深度的模型互相纠错。某个模型擅长纹理,另一个模型擅长轮廓;喜欢看细节的模型和喜欢看整体的模型,给出的预测各有偏重,平均之后可以抵消一部分误差。当年冠军把错误率打到了2.99%,靠的就是这种“军团作战”。
这件事在比赛层面很有意义。它说明当结构创新暂时进入瓶颈期,系统级的工程集成依然能挤出一两个百分点的提升。但它也带来一个问题:这样的获胜方式对算力和资源的要求极高,普通实验室很难复现。比赛越来越像一个拼资源、拼工程细节的游戏,单纯的结构创新在排行榜上不那么显眼了。
6.2 2017年SENet:给每个特征通道装上关注度阀门
2017年冠军SENet,找到了一条新的结构创新路线:通道注意力。之前的网络结构设计都在调整卷积核大小、深度、宽度和分支连接,很少有人思考一个问题——特征图的不同通道,重要性果然是相同的吗?
答案自然是否定的。一个特征图有几百个通道,有的通道可能编码了“毛发纹理”,有的编码了“背景天空”,对不同图片,每个通道的重要性应该动态变化。SENet提出了一个极轻量的模块,叫SE block。第一步是Squeeze,对每个通道做全局平均池化,把一个二维特征图压缩成一个数;第二步是Excitation,用两个全连接层加一个Sigmoid函数,学习出每个通道应该获得的权重;第三步是Scale,把学到的0到1之间的权重乘回到每个通道上。
这个模块可以插到ResNet、Inception里,附加的参数量和计算量都极小。通道数在瓶颈层被压缩到原来的四分之一再恢复,用的全连接层也很小,几乎不影响速度,但通道加权让网络从“被动接收卷积结果”变成“主动筛选重要特征”。把SE模块叠加进现有的残差结构后,SENet在提交时再用集成进一步压榨,最终做到了2.25%。
这个数字放到当时的环境里,几乎逼近人类水平的天花板。但SENet更大的贡献是推动了一个方向:视觉注意力机制。此后CBAM、Non-local、自注意力等层出不穷,大家开始系统地思考“网络应该把注意力放在哪里”。SENet为解决这个问题提供了最直接、最便宜的答案。
6.3 关于“超越人类”:数字是真的,但别过度联想
很多报道把2.25%和“AI超越人类识别能力”画等号,这个说法需要打上引号。首先这仍是Top-5错误率,系统有五次机会;其次这是集成模型,不是单模型;再次ImageNet的1000类图像高度受控,真实世界的视觉场景比这复杂百倍。
但数字本身是真的:在2017年的ImageNet分类任务上,机器确实做到了人类平均水平之上。这就引出一个更有意思的推论:一个任务的错误率被压到2%附近,继续投入的性价比已经很低。这也是ILSVRC在2017赛季后不再常规举办的原因之一。读者看到这里可以放心,不需要为这门技术担惊受怕,当年那个数字是里程碑,不是终点。真正的挑战在“识别一张标准化图片”之外,还有无数个更难的任务等着视觉模型去接手。
7. 这七年留下的三笔遗产,到今天仍然在用
7.1 组件遗产:ReLU、BN、残差、注意力成了通用积木
回顾这些年,AlexNet带来的ReLU、Dropout,GoogLeNet带来的1x1降维和全局平均池化,ResNet带来的残差连接和BatchNorm,SENet带来的通道注意力,这些组件没有一样随着时间被淘汰,反而都成了现代深度学习的基本积木。
你看今天的各种视觉模型,不管是CNN新秀还是Vision Transformer,都会用到残差连接、LayerNorm或BatchNorm、注意力机制,以及最基础的ReLU和它的各种变体。就连Transformer在视觉里的成功,本质上也是在把“注意力”这个概念从通道维度扩展到全局的序列维度,核心思想仍然是:让模型学会动态地决定关注哪里。
7.2 范式遗产:大数据预训练到下游微调成为行业标准
AlexNet之后,ImageNet预训练几乎成了视觉工程师的默认动作:先在百万级数据集上把骨干网络训好,再根据自己的小数据做微调。这个模式在2014年前后已经成熟,到今天仍然是绝大多数视觉任务的标准流程。
后来出现的自监督预训练、大规模多模态预训练,只是把这个范式从“监督预训练”换成了“无监督预训练”,从“单一视觉模态”扩展到了“图文联合”,但底层逻辑没变:先用大规模数据学到通用表示,再针对特定任务做适配。如果你现在打开任何一个深度学习框架,下载一个预训练权重当起点,你其实就在用这七年参赛者们摸索出来的经验。
7.3 方法遗产:关键洞见加工程细节,才是登顶的完整配方
最后也是最重要的一笔遗产,是方法论上的。纵观这几个冠军,几乎每一个都遵循同一个配方:一个简洁的结构洞见,加上大量精密的工程细节。
ResNet的成功不只是因为“残差连接”四个字,还需要BatchNorm、恰当的学习率、细致的初始化配合。SENet能在各大网络上通用,也离不开把SE模块设计得很轻量,否则它只会是一个漂亮的实验,而不是可落地的组件。当年的冠军们在参赛报告里动辄写几百行训练细节,这些“笨功夫”恰恰是区分第一和第二的关键。
我自己在复现这些历史论文的时候,最深的感受是:现代深度学习框架帮我们抹平了太多曾经要手动调的细节,但你依然能看到那些冠军方案里有大量关于数据增强、输入尺寸、裁剪策略的经验积累。今天做任何视觉任务,我都会先从小模型和高质量数据增强入手,再考虑结构创新。因为在错误的训练策略下,再好的结构也发挥不出真实水平。
做视觉这几年,我越来越觉得ImageNet那条从28.2%降到2.25%的曲线最迷人的地方,不在于最终那个数字,而在于它不是一条均匀的斜坡:前面两年在山脚爬行,2012年突然起飞,之后每隔一两年换一次引擎。每当大家以为某个架构已经到头时,总有一个新的洞见把上限再抬高一截。如果你刚开始学视觉,我真心建议不要只盯着最新的Transformer,好好把这几届冠军的方案捋一遍,你会更清楚今天的模型为什么长成这个样子,也更明白“数据、算力、结构、工程”这四根柱子缺一不可。