LeNet → AlexNet → VGG → Inception → ResNet → DenseNet → EfficientNet, 名字很多,但真正改变了游戏规则的只有三次: ReLU + GPU、3×3 堆叠、残差连接。第三次的思路像修图: 不要求网络从零画一张脸,只让它在一张现成的照片上改。其余都是工程调优。
上一章《感受野与下采样》说清了怎么把图压小、看广。可接下来是十年里几十个名字—— 到底哪些是真变化,哪些只是调参?卷积好用,但怎么堆才又深又准?
互动 · 架构进化时间轴
图 · 三次真突破,各改了什么
2012 年 ImageNet 竞赛(1000 类图像分类),AlexNet 把 top-5 错误率——给出五个候选、 正确答案不在里面就算错——从 26% 打到 15%,第二名还是传统做法: 在密集采样的手工特征上算 Fisher 向量、再训几个分类器。 这次胜利不是靠新算法,而是三个条件同时成熟:
| 条件 | 为什么关键 |
|---|---|
| ReLU 替代 Sigmoid | 训练速度提升约 6 倍(论文里的 CIFAR-10 小实验,10 类小图)。Sigmoid 在深层会 |
| 两块 GTX 580 显卡 | 6000 万 |
| 120 万张标注图片 | ImageNet 提供了前所未有的数据量。没有它,6000 万参数会直接 |
AlexNet 里没有任何"新数学"——卷积是 1989 年的,反向传播是 1986 年的。
它的胜利是工程条件的胜利:算法早就有了,只是
这个模式在深度学习里反复出现:很多想法是被"等"出来的,不是被"想"出来的。
因为要把模型拆到两块
互动 · 六千万参数,都堆在哪一层
VGG 的核心主张是:用一堆 3×3 卷积,替代一个大卷积核。
两个 3×3 的
互动 · 为什么 3×3 堆叠更划算
① 更多非线性。三个 3×3 之间夹着三次 ReLU,一个 7×7 只有一次。
表达能力实质性地变强了。
② 更规整。整个网络只用 3×3,可以写成一个循环——
VGG 的代码只有十几行,后来的 ResNet / DenseNet 全都继承了这种模块化写法。
到 2015 年,一个反直觉的现象卡住了所有人:把 20 层的网络加深到 56 层,训练误差反而更高。 这不是过拟合,是往回传的梯度到不了前面的层,深层网络根本训不动。
互动 · 拖深度,看梯度还回不回得来
像修图。如果要求你"画出一张符合描述的脸",很难。但如果给你一张现成的照片,
只要求你"改一改",就容易得多。
残差连接把每一层的任务从"从零构造"改成"在上一步的基础上做修正"。
而且最坏情况下 F(x) 学成 0,这一层等于跳过,网络也不会变差。
让网络「自己学会跳过」理论上也行,但要把一堆权重恰好学成「原样输出」很难;
改成加一条捷径,「什么都不改」就成了默认值。
∂y/∂x 读作「输出 y 随输入 x 的变化率」——梯度往回传时乘的就是它。 结构上多出一条把输入原样送过去的路,回传的式子就多了一个 1: 它不经过任何权重,无论 F 那一路衰减成多小,这 1 的路总是通着。 这就是为什么 ResNet 能堆到 152 层、1000 层, 也是为什么今天所有大模型(包括 Transformer)都还在用残差连接。
| 架构 | 核心思想 | 贡献 | 为什么没成为主流 |
|---|---|---|---|
| Inception 2014 · GoogLeNet |
一个分支里同时用 1×1、3×3、5×5、池化,结果拼起来 | 多尺度并行;1×1 降维(先把通道压窄再算)让它在当时只有 680 万参数,约是 VGG 的 1/20 | 结构复杂、超参多,每个版本都要重新设计分支比例 |
| DenseNet 2017 |
每一层都和之前所有层的输出连接 | 特征复用极致;参数量非常小 | 显存占用大(要保存所有中间特征);实现复杂 |
| MobileNet 2017 |
深度可分离卷积:把标准卷积拆成"逐通道卷积 + 1×1" | 计算量降到 1/8 ~ 1/9,为手机和边缘设备而生,是今天所有轻量模型的基础 | 精度有损失,用之前要按场景权衡 |
| EfficientNet 2019 |
先用 NAS(神经架构搜索)搜出基准网络 B0,再用网格搜索定"深度、宽度、分辨率"的缩放比例 | 同精度下参数量最少;复合缩放系数成为通用经验 | 基准网络靠 NAS 搜出来,复现成本高 |
它发现:深度、宽度、输入分辨率这三个维度应该按固定比例一起放大。经验比例大致是 深度 ×1.2、宽度 ×1.1、分辨率 ×1.15 每档。
只加深度会饱和,只加宽度收益递减——三者同时加才最划算。
互动 · 一个 1×1 卷积能省下多少参数
前面讲的都是「谁赢了」。这一节回答一个更硬的问题—— 一叠 3×3 的小窗,凭什么能看见整张图? 答案只有一行公式,而且你能亲手拖出来。
核心图 · 每深一层,视野往外扩一圈(拖一下看)
上面那张卡是活的:r、L、k 的当前值都跟着左边的滑块变。 鼠标移到公式里的符号上——左图里对应的那圈就会亮起来。
一排人传话,每个人只能听见左右各一个人(这就是 3×3)。
只传一轮,最边上那个人听到的原始消息只有 3 个人的范围;
传两轮,范围变成 5 个人;
传 L 轮,范围就是 1 + 2L 个人。
每个人只做同一件小事,但消息能一路传到很远——这就是卷积堆叠的全部秘密,
也是为什么 VGG 敢把网络摞到 19 层。
把 k 定在 3、L 拖到 2:1 + 2×2 = 5——
这就是第 3 节说的「两个 3×3 顶一个 5×5」。
再拖 L 到 13:1 + 2×13 = 27。VGG-16 正是 13 个卷积层(再加 3 个全连接层),
它的卷积堆到底就是 27 格的视野(还没算池化)。
但视野每扩一圈,乘法链就长一环——这也是第 4 节必须靠残差才能堆到 152 层的原因。
参数量的十年:谁胖谁瘦
| 问题 | 说明 |
|---|---|
| 手工设计已经到极限 | 靠人想结构基本没有提升空间了,NAS(神经架构搜索)就是对它的回应——EfficientNet 的基准网络 B0 就是搜出来的。 再往前得换结构(→ ViT) |
| 卷积的视野是局部堆出来的。要建模"图片左上角的猫和右下角的球有关系", CNN 非常吃力——这正好是注意力(Attention)擅长的事(后面章节讲) | |
| 需要海量标注 | ImageNet 有 120 万张人工标注。下一个领域的 ImageNet 可能不存在 |
| 局部连接 + 权重共享对图像非常好,但也限制了它学"全局任意依赖"。 这是 ViT 出场的理由(后面章节讲) |
今天仍然有大量场景必须用 CNN:移动端和嵌入式设备(MobileNet 系列)、
实时检测(YOLO 的骨干网络)、医学影像(数据量小,CNN 的归纳偏置反而是优势)。
正确的心智模型是:CNN 和数据量是一对权衡——
数据少时 CNN 的"先验知识"帮你省数据;数据多到一定程度,ViT 的"无偏"就更强。
这一章是一段历史。但历史真正的教训不是“有人很聪明”,而是“有些东西终于到了”。
回到第 4 节那张梯度图,把「网络深度」滑块从 8 慢慢拖到 110: 没有捷径时,粉线的最左端(第 1 层)一路往下掉;有捷径时绿线一直大约贴着 1,两者越拉越开。
那个缺口就是“规模会赢”的附加条款:拖深就是“堆规模”,但没有那条捷径,多出来的层数是负收益——得有个结构把它们接住。
| 暗线 | 这一章的回答 |
|---|---|
| 信息流动 | 十年里入口和出口几乎没变(224×224×3 → 1×1×1000),变的是中间路径: LeNet/VGG 是“阶梯式下降 + 一次压平”(把特征图拉成一排数);ResNet 把两条分支相加; Inception 把四条分支拼起来;MobileNet 把空间和通道拆开走。形状没变,路径一直在重新安排 |
| 参数账本 | 第 6 节那条条形图:LeNet 0.06M → AlexNet 60M → VGG-16 138M →
Inception 6.8M → ResNet-50 25.6M → DenseNet 8M → MobileNet 4.2M →
EfficientNet-B0 5.3M。 关键的账只有一笔:VGG 的 138M 里有 124M(90%)在最后三个全连接层,而那三层和卷积毫无关系。 GoogLeNet / ResNet 用全局平均池化干掉这块(0 参数),曲线才掉下来 |
| 跑在什么上 | 这条线本身就是一部硬件史,瓶颈换过两次:2012 年卡在显存——两块 GTX 580 只有 3GB,AlexNet 只能把网络劈成两半; ResNet 那几年卡在算力;2017 年之后转到手机,卡在内存带宽和功耗, 不是每秒能算多少次乘法。最贵的动作也跟着变:2012 年是“把 6000 万参数装进显存”,后来是“把权重从内存搬到计算单元”。 完整的账在 《硬件与算力账本》 |
| 它假设了什么 | 假设“局部性 + 平移等变”这个归纳偏置值得拿参数量去买——六个架构全部建在这条假设上。 EfficientNet 又多假设了一条:“深度、宽度、分辨率应该按固定比例一起放大”。 这是一条经验规律,不是定理:换到别的任务不保证成立 |
| 违背了哪个直觉 | 两条。 ① “更好的数学会赢”是错的。2012 年赢的不是新算法——卷积是 1989 年的,反向传播是 1986 年的—— 而是两块显卡和 120 万张标注图。 ② “参数更少 = 更差”是错的。2014 年比赛里,GoogLeNet 比 VGG 错得更少,参数却只有它的约 1/20 |
它接住了上一章的什么:《感受野与下采样》说清了“降下去才能看得广”, 这一章展示了几代网络怎么在“堆多深、省多少”之间取舍:VGG 用 3×3 把视野一层层堆出来(第 M 节亲手拖过), ResNet 用那条捷径让深度真能加上去(第 4 节)。
它给后面留了什么:CNN 的天花板不是参数、算力,而是 归纳偏置太强——局部、平移等变挡住了“任意位置直接相关”。下一章 《数据增强与迁移学习》接着用它;拆掉它的是更后面 《ViT》。
十年的进步,本质上是三个突破 + 无数工程调优:
AlexNet(ReLU + GPU + 大数据)证明了深度学习能用;
VGG(3×3 堆叠)给出了省参数、更规整的结构范式;
ResNet(残差)像修图:不重画,只教每层改哪里,靠那条捷径把梯度原样送回去,打开了深度的大门。
今天的 CNN 在移动端和实时任务里仍然不可替代,但手工设计已经到极限,
而且
上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。