上一篇留下的问题
上一篇 讲的是 scaling laws——loss 随着参数、数据、算力按 power law 下降。2020 年 Kaplan 把它写成公式之后,大家已经习惯了"模型更大、数据更多、算力更强,结果就会更好"。
但有一个更早的问题:大家为什么会愿意相信这条路?
今天回头看,这条路像常识。2012 年之前,它一点也不像——深度学习几度陷入寒冬,SVM / boosting 一度是主流。
往回走一步,看 2012 年那场比赛到底发生了什么。
ImageNet 2012
ImageNet 是 Fei-Fei Li 团队搞的图像识别比赛,有 120 万张标注图片,分成 1000 类。2010、2011 两年,最好的系统 top-5 错误率在 25% 上下。这是靠手工设计特征 + SVM 的时代,进步以每年 1-2 个百分点计。
2012 年 9 月,结果出来——
| 2010 冠军 | 2011 冠军 | 2012 AlexNet | 2012 第二名 | |
|---|---|---|---|---|
| top-5 错误率 | 28.2% | 25.8% | 15.3% | 26.2% |
领先第二名 10 个百分点。这个分差一出来,大家就知道事情变了。
论文标题:ImageNet Classification with Deep Convolutional Neural Networks。三个作者:Alex Krizhevsky(一作)、Ilya Sutskever、Geoffrey Hinton,都来自多伦多大学。
之前为什么不行
AlexNet 里没有哪一样东西是凭空冒出来的。数据、GPU、训练技巧,之前都有人做过。2012 年第一次不一样,是这些东西终于一起工作了。
卷积神经网络(CNN)这个结构 LeCun 1989 年就做出来了。反向传播 1986 年就有了。AlexNet 里几乎所有思路,2012 年之前都已经存在。
先是数据。ImageNet 2009 年才建成。在它之前,公开可用的图像数据集只有几万张——对深网络来说太少,模型很容易把训练集背下来。ImageNet 一下给了 120 万张。
然后是算力。深网络训练要做大量矩阵乘法。2010 年之前大家用 CPU,训一个能用的模型要几个月。等到 CUDA 成熟、GTX 580 这种消费级 GPU 能跑起来,训练时间从几个月压到了几天。
还差最后一块:训练得真的跑起来。深网络训不动这件事,2012 年之前是个拦路石——梯度要么消失、要么爆炸,正则化又把有用信息也磨掉。AlexNet 把几个已有但零散的 trick 组合到一起,让一个 8 层的网络真的收敛了。
AlexNet 到底做对了什么
ReLU 替代 sigmoid/tanh。激活函数从 $\tanh(x)$ 换成 $\max(0, x)$。好处是正区间不饱和——梯度不会随着层数加深而消失。训练速度快 6 倍。
Dropout。全连接层训练时随机丢掉 50% 的神经元。相当于每次都在训一个小一点的网络,再集成起来。过拟合明显减弱。这个技术是 Hinton 组先提的,Sutskever 参与了在 AlexNet 上的落地。
数据增强。训练时对每张图随机裁剪、翻转、颜色抖动。等价于把 120 万图放大成几千万。
GPU 训练。用 2 张 GTX 580,显存加起来 6GB,把 8 层网络压进去跑。这是 Sutskever 最关键的贡献——说服团队把整套反向传播训练流程搬到 GPU 上。没有这一步,训练根本跑不完。
ReLU、dropout、数据增强、GPU,单看都不是第一次出现。AlexNet 特别的地方,是这些东西第一次在同一个训练流程里一起跑通了。
2012 → 2020:这条信念怎么传开的
AlexNet 之后的 8 年,深度学习一路扩张:
- 2014:VGG(19 层)、GoogLeNet(22 层)继续加深
- 2015:ResNet(152 层)用残差连接把"深"这件事推到极致
- 2017:Transformer 把深度学习从图像扩展到语言
- 2020:Scaling laws 把"深 + 大 + 多"的关系量化
起点就是 2012。AlexNet 之前也有 CNN,也有深网络,它是第一个在公开比赛里把对手甩开十个百分点的。从那一刻起,你可以不喜欢深网络,但很难再假装它没发生。
Sutskever 在这里面做了什么
Ilya Sutskever 是 Hinton 的学生。在 AlexNet 里他的名字挂二作,Hinton 后来在多个访谈里讲过 Sutskever 的作用:
- 在组里最早相信"网络应该更深"的人之一
- 推动了整套反向传播训练流程在 GPU 上的实现
- 对 dropout 的工程落地有参与
这些事拆开看没有哪一件能当新闻标题,放在一起才是 AlexNet 真正能跑起来的原因。这个风格后来延续到了他在 OpenAI 做 GPT 系列——别人还在争论语言模型能做多大,他的判断是"就是要做大,做到最大"。
和上一篇的关系
上一篇讲的是:大家已经信了规模有用,接下来怎么算、怎么堆。AlexNet 讲的是更早的一步:大家是从哪一刻开始信的。2012 年那个 15.3%,至少把一件事提前说服了整个行业。
代码
完整 notebook 在 ZhenchongLi/sutskever-30-reading,文件是 07_alexnet_cnn.ipynb。
toy model 示范了 AlexNet 里几个关键部件:
- 卷积层与池化的前向传播
- ReLU 激活和 sigmoid 的训练速度对比
- Dropout 在训练和推理阶段的差别
- 数据增强(翻转、裁剪、颜色抖动)对训练的影响
数据是合成的,不追求和 ImageNet 真实精度对齐——展示的是各部件的形态。
Run Metadata
- repo: ZhenchongLi/sutskever-30-reading
- notebook:
07_alexnet_cnn.ipynb - Python
3.13.2/ NumPy2.4.4/ Matplotlib3.10.8
怎么跑
cd ~/code/sutskever-30-implementations
jupyter lab 07_alexnet_cnn.ipynb
选 kernel Python (sutskever-30)。
备注
- Krizhevsky, Sutskever, Hinton 2012 ImageNet Classification with Deep Convolutional Neural Networks 是原始论文
- AlexNet 原版把网络拆到 2 张 GTX 580 上训,这是消费级 GPU 上跑深网络最早的工程样本之一
- Dropout 更早的提出在 Hinton 组 2012 年技术报告 Improving neural networks by preventing co-adaptation of feature detectors
- 2011 → 2012 这一年,ImageNet top-5 错误率从 25.8% 跌到 15.3%,之前每年只动 1-2 个百分点
$$\text{article}^* = \underset{\theta}{\arg\min}\ \mathcal{L}_{\text{lizcc}}(\theta), \quad \theta \in \lbrace\text{Joe, Weaver, Ruyi, Thorn}\rbrace$$