跳到主要内容

卷积的诞生 — 两条假设省下约十个数量级的参数

这一章讲三件事: 全连接网络在图像任务上是怎么「撑死」的(算给你看); 卷积层用哪两条假设把参数从一万亿砍到几百;以及卷积窗口里那个数到底怎么算 (手算一遍),滤波器怎么从「手工设计」变成「从数据里学」。 这是全书的锚点章——「架构 = 先验」这条主线在这里第一次算出具体数字。

1. 问题:全连接为什么撑不住一张图

第 04 章说过,全连接层是「每个神经元连前一层每一个」。对表格数据(几十列)这没问题。 对图像呢?图像的输入是像素阵列——一张不大的手机照片也有一百万个以上的像素值。

原书算了第一笔账:一百万像素的图,要压到 1000 个隐层单元, 全连接一层就要 10⁹(十亿)个参数1

主走查:参数量三级跳

原书 4.2 节用「从 MLP 出发、逐步加假设」的方式推出卷积层——这是全书最值得整段保留的推理(一步一步往前推的论证)。 跟着走(原书的例子是 1000×1000 的图,映射到同尺寸的隐层表示)2:

第 0 步:什么都不假设
每个隐层单元连每个像素 → 参数量 ~ 10¹²(一万亿)
「超过现有计算机的能力」——原书原话。
│ 加第一条假设

第 1 步:平移不变
「同一只猫,挪个位置还是猫」→ 检测「猫耳朵」的那组权重
不该关心自己在图上的位置 → 所有位置共用同一组权重(参数共享)
参数量降到 ~ 4×10⁶(约四百万)
│ 再加第二条假设

第 2 步:局部性
找边缘不需要看整张图 → 只看方圆 Δ 以内的邻域(Δ 通常 <10)
参数量降到 4Δ² 量级 → 几百个
原书:从十亿级「到几百个」,网络照样能干图像的活。

图说:每一步砍掉的数量级,全部来自一条「关于图像的常识」。
这就是「架构 = 先验」的全部含义。

原书给这种「写进结构里的假设」起了正式名字:归纳偏置(inductive bias)。 它的收益规则:假设与数据的真实结构贴合 → 模型用更少样本(更少的训练例子)就能泛化; 假设贴错了 → 模型反而学不动3

2. 卷积窗口里在算什么:手算一遍

上面那个「用同一组权重扫全图」的动作,术语叫互相关(cross-correlation)—— 原书特意说明:深度学习界把它叫「卷积」,与数学系严格定义(要翻核)的区别纯属叫法惯例4

拿原书的图 4.3 数字走一遍:输入 3×3,核(kernel,即那组共享权重)2×2,核从左上角开始滑5:

输入 X: 核 K:
0 1 2 0 1
3 4 5 2 3
6 7 8

第一个输出位置 = 核盖住左上 2×2 那块:
0×0 + 1×1 + 3×2 + 4×3 = 0 + 1 + 6 + 12 = 19
核右移一格,重复;扫完全图。

图说:输出尺寸 = (n − k + 1) 每边:3 − 2 + 1 = 2,得 2×2 的输出。
每个输出值就是「这个位置的图像块(方才被核盖住的那一小片)长得有多像核所代表的图案」。

完整的卷积层 = 这套滑动计算 + 一个偏置 + 可训练性:核的数值随机初始化, 训练时像第 05 章那样靠梯度调6。习惯上说「3×3 卷积」,指的就是 3×3 的核。

3. 边缘检测:不训练,先看懂核在干嘛

滤波器必须手工设计的时代,怎么找边缘? 原书给了一个能整段手算的例子。

造一张 6 行 8 列的「图」:中间 4 列是黑(0),两侧是白(1);再手写一个 1×2 的核 K = [[1, −1]]。核与图像做第 2 节那套滑动计算,输出里每一行都是:

输出某行: 0 1 0 0 0 −1 0

图说:1 出现在白→黑的交界,−1 出现在黑→白的交界,其余为 0。
K 的本质:右减左。相邻像素一样 → 0;颜色跳变 → 非零。
这是对「水平方向导数」的离散近似(原书原话:finite difference operator)。

最妙的一步:把图转置(旋转 90 度)再跑同一个核,输出全是 07。 ——K 只认「左右方向的跳变」,竖直方向的边它视而不见。 一个核 = 一个方向的侦探。 想什么方向的边都抓到?多放几个核(下一章的「多输出通道」)。

学核:把「设计」换成「训练」

手工造核只对边缘这种简单图案行得通。原书的转折句:复杂任务下手造滤波器不现实, 让网络自己从数据里学8。做法和第 05 章完全同构: 给输入 X 和想要的输出 Y(那张边缘图),核是待定参数,MSE 损失,SGD(学习率 0.1)迭代 10 轮, 核被逼着收敛到能产生 Y 的数值——「设计滤波器」变成了「给样本、让它自己长」。 这就是第 01 章「表示学习」三个字在图像上的落地。

4. 感受野:深度换视野

两个名词要立起来:

  • 特征图(feature map):卷积层的输出——每个位置一个「这里有没有目标图案」的强度图9;
  • 感受野(receptive field):输出上某一个数,「看得见」输入里的多大一片。

原书的小实验:单个 2×2 核的输出,每个值只对应输入的 2×2 那一小块; 在这层之上再叠一层 2×2 卷积,第二层的某个输出, 间接看得见第一层全部输出、也就是输入的全部 9 个元素10每叠一层,同一个神经元能看到的范围就大一圈——「看得更远」不靠放大核,靠叠深度。

这个设计有生物学出处:原书引了 Hubel 与 Wiesel 在 1950-60 年代对动物视觉皮层的实验—— 低层神经元只对边缘和简单形状响应——与 CNN 低层学边缘高度同构11

5. 作者的判断与证据

  • 推导完整、数字可复算的: 参数量三级跳(10¹² → 4×10⁶ → 4Δ²)、19 那次手算、 边缘检测输出 [0,1,0,0,0,−1,0] 与转置全 0、双层感受野覆盖 9 个输入—— 本章是全书推导密度最高、也最可验证的一章12

  • 引用错位一处: 正文把 AlexNet 的提出归于「Hinton et al. (2012)」, 而所引那篇其实是 Hinton 同年的 dropout 论文;AlexNet 的一作是 Krizhevsky13。 (AlexNet 的正确引用倒是出现在第 5 章的参考文献里——同一本书自己都没对齐(引用与所据论文对不上)。)

  • 本章的底色(要如实告诉读者): 4.3 节的示例代码第一行就是 from d2l import torch as d2l——本章主体是从开源(公开免费发布)教材 Dive into Deep Learning(d2l.ai) 的卷积章节改写的,连个别图注都标注了「adapted from」某论文; 但章末参考文献没有列出 d2l。内容本身过硬,出处纪律缺失14

  • 许诺未兑现: 4.1 开头预告会讲「现代架构(残差连接、批归一化)」、 结尾小结声称演示了「图像分类用例」——全章都不存在这些内容15

判断(我们的,不是书里的): 本章的真正主角不是「卷积」这个运算, 是**「先验换参数」这个交易**:每一条写进结构的假设,换来的都是参数量与数据量的指数级下降。 这个交易有反方向:假设贴错(比如「平移不变」对「图里物体位置本身有意义」的任务) 就变成枷锁——第 01 章归纳偏置那句「贴错了学不动」说的就是这个。 如果错,会错在: 如果后续架构(比如 ViT 这类少先验、靠数据补的模型)在足够数据下 全面胜过卷积,说明「先验换参数」只在数据稀缺区间占优——那本章的结论要限定在 「数据不够时」,而不是「永远」。这正是 2020 年代图像领域实际发生的辩论。

6. 边界与局限

  • 原书没讲: 池化(在下一章)、现代骨干架构(ResNet/VGG 之类一个没讲, 尽管开头许诺了)、以及「卷积核为什么通常用奇数尺寸」——下一章的 padding 一节会碰它。
  • 本章数字的适用边界: 10¹² 那笔账是「1000×1000 图 ↔ 1000×1000 隐层」这个特定设定; 换设定数字会变,但「全连接在图像上参数爆炸、卷积用结构砍参数」的结论不变。
  • 历史注脚: 本章讲的 2D 图像卷积后来被搬去处理音频、文本甚至图结构 (原书 4.1 一笔带过这些外溢)16。补充(不在书里,来自通用知识):如今序列任务的主流已是 Transformer—— 「卷积 = 图像专属」的印象不成立,「卷积 = 空间先验」才站得住。

7. 可带走的

  1. 全连接处理图像的第一关不是「慢」,是参数爆炸:100 万像素→1000 隐元就要十亿参数;
  2. 参数量三级跳:10¹² →(平移不变/参数共享)→ 4×10⁶ →(局部性)→ 几百—— 约十个数量级全部来自两条关于图像的常识(10¹²→4×10⁶ 是六个数量级,4×10⁶→几百再添约四个)
  3. 写进结构的假设叫归纳偏置;贴数据就省样本,贴错就学不动;
  4. 深度学习里说的「卷积」其实是互相关(不翻核);输出尺寸每边 = n − k + 1;
  5. 主走查一个数:0×0+1×1+3×2+4×3 = 19——卷积就是「图像块(一小片像素)与核的相似度打分」;
  6. 核 = 方向侦探:[[1,−1]] 抓竖边,图一转置它就全瞎;想抓所有方向,多放几个核;
  7. 「学核」= 把滤波器设计变成标准训练问题(X、Y、损失、SGD)——表示学习的图像版落地;
  8. 感受野随深度扩大:叠两层 2×2,一个输出就能看全 9 个输入——深度换视野;
  9. 本章内容过硬但底子是 d2l.ai 改编且未署名;AlexNet 引用错位;小结许诺未兑现—— 内容可引,出处要绕开它自己列的参考文献。

8. 原文地图

主题原书章原文位置
CNN 背景/AlexNet4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:17(搜「significant attention」) · text/41-ch04-4-convolutional-neural-networks.txt:19(搜「Hinton」)
全连接 10⁹ 账4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:141(搜「one-megapixel」)
10¹² 参数4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:349(搜「1000」) · text/41-ch04-4-convolutional-neural-networks.txt:352(搜「10」)
平移不变 4×10⁶4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:360(搜「Translation Invariance」) · text/41-ch04-4-convolutional-neural-networks.txt:3(搜「4」)
局部性 4Δ²4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:405(搜「Locality」) · text/41-ch04-4-convolutional-neural-networks.txt:430(搜「4」)
几百个参数4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:447(搜「hundred while still」)
归纳偏置4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:462(搜「inductive biases」)
Waldo 类比4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:205(搜「Waldo」)
互相关 19 手算4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:3(搜「0」) · text/41-ch04-4-convolutional-neural-networks.txt:693(搜「19」)
输出尺寸公式4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:723(搜「oh」) · text/41-ch04-4-convolutional-neural-networks.txt:734(搜「2」)
互相关=卷积的叫法4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:1037(搜「Cross-Correlation and Convolution」)
卷积层=核+偏置+随机初始化4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:800(搜「Convolutional Layers」) · text/41-ch04-4-convolutional-neural-networks.txt:806(搜「randomly」)
边缘检测 6×8 图4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:873(搜「Edge Detection」) · text/41-ch04-4-convolutional-neural-networks.txt:902(搜「K = torch.tensor([[1, -1]])」)
边缘输出 [0,1,…,−1,0]4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:927(搜「-1」)
转置后全 04 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:944(搜「0.」)
有限差分导数4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:890(搜「finite difference」)
学核(SGD 十轮)4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:959(搜「Learning a Kernel」) · text/41-ch04-4-convolutional-neural-networks.txt:998(搜「range(10)」)
特征图/感受野定义4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:1061(搜「feature map」) · text/41-ch04-4-convolutional-neural-networks.txt:1066(搜「receptive field」)
叠两层看全 9 元素4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:1078(搜「nine」)
Hubel & Wiesel4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:1082(搜「Hubel」)
d2l import 证据4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:630(搜「d2l」)
预告未兑现(现代架构)4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:89(搜「skip connections」) · text/41-ch04-4-convolutional-neural-networks.txt:2039(搜「use case」)
CNN 外溢到音频/文本/图4 Convolutional Neural Networkstext/41-ch04-4-convolutional-neural-networks.txt:50(搜「audio」) · text/41-ch04-4-convolutional-neural-networks.txt:63(搜「graph」)

Footnotes

  1. 出处:「4 Convolutional Neural Networks」第 141 段(text/41-ch04-4-convolutional-neural-networks.txt:141,搜「one-megapixel」)。原文:一百万像素的输入压到 1000 维隐层,全连接层需 10⁹ 参数。

  2. 出处:「4 Convolutional Neural Networks」第 348-358 段(text/41-ch04-4-convolutional-neural-networks.txt:349,搜「1000」)、第 392 段(搜「4」)、第 429-448 段(搜「hundred while still」)。三级跳的原始推导:四阶权重张量 → 与位置无关 → 限幅 Δ<10;「exceeds the computational capabilities of current computers」在第 354 段。

  3. 出处:「4 Convolutional Neural Networks」第 462 段(text/41-ch04-4-convolutional-neural-networks.txt:462,搜「inductive biases」)。原文:归纳偏置与数据特性对齐时模型泛化好、样本效率高;不对齐时拟合困难、泛化差。

  4. 出处:「4 Convolutional Neural Networks」第 1037 段(text/41-ch04-4-convolutional-neural-networks.txt:1037,搜「Cross-Correlation and Convolution」)。原文:深度学习框架做的是不翻核的互相关,但术语上沿用「卷积」这一行业惯例。

  5. 出处:「4 Convolutional Neural Networks」第 690-693 段(text/41-ch04-4-convolutional-neural-networks.txt:3,搜「0」)。图 4.3 图注:0×0 + 1×1 + 3×2 + 4×3 = 19;输出尺寸公式(n−k+1)在 text/41-ch04-4-convolutional-neural-networks.txt:723(搜「oh」),3×3 入 2×2 核出 2×2 的算例在第 727-736 段。

  6. 出处:「4 Convolutional Neural Networks」第 800 段(text/41-ch04-4-convolutional-neural-networks.txt:800,搜「Convolutional Layers」)与第 806 段(搜「randomly」)。原文:卷积层参数=核+标量偏置;核随机初始化以打破对称、训练靠反向传播调整。

  7. 出处:「4 Convolutional Neural Networks」第 874 段(搜「Edge Detection」)、第 902 段(text/41-ch04-4-convolutional-neural-networks.txt:902,搜「K = torch.tensor([[1, -1]])」)、第 927 段(输出 [0,1,0,0,0,-1,0])、第 944 段(转置后全 0)。「finite difference operator」与水平导数近似在第 890 段。

  8. 出处:「4 Convolutional Neural Networks」第 959 段(text/41-ch04-4-convolutional-neural-networks.txt:959,搜「Learning a Kernel」)。原文:任务复杂后手工设计不现实,改由网络从数据学;示例:X、Y 已知,nn.Conv2d(1,1,kernel_size=2,bias=False),MSELoss,SGD lr=0.1,10 轮(:998,搜「range(10)」)。

  9. 出处:「4 Convolutional Neural Networks」第 1061 段(text/41-ch04-4-convolutional-neural-networks.txt:1061,搜「feature map」)。

  10. 出处:「4 Convolutional Neural Networks」第 1078 段(text/41-ch04-4-convolutional-neural-networks.txt:1078,搜「nine」)。原文:再叠一层 2×2 卷积后,z 对原始输入的感受野包含全部九个输入元素。

  11. 出处:「4 Convolutional Neural Networks」第 1082 段(text/41-ch04-4-convolutional-neural-networks.txt:1082,搜「Hubel」)。原文:Hubel 与 Wiesel 在 1950-60 年代发现视觉皮层低层神经元对边缘和简单形状响应。

  12. 出处:同本章 §1-§4 各脚注;汇总于此。本章数字均给出原文位置,可逐条回核。

  13. 出处:「4 Convolutional Neural Networks」第 19 段(text/41-ch04-4-convolutional-neural-networks.txt:19,搜「Hinton」)。正文写「AlexNet, was developed by Hinton et al. (2012)」;章末参考文献第 2059 段列的是《Improving neural networks by preventing co-adaptation of feature detectors》(dropout 论文)。补充(不在书里,来自通用知识):AlexNet 论文作者是 Krizhevsky、Sutskever、Hinton(NIPS 2012)。

  14. 出处:「4 Convolutional Neural Networks」第 630 段(text/41-ch04-4-convolutional-neural-networks.txt:630,搜「d2l」)。代码首行 from d2l import torch as d2l;图 4.4 图注自称「adapted from Field (1987)」(:1089,搜「adapted」)。章末参考文献(第 2048 段起)无 d2l 条目。补充(不在书里,依据我们的书架):Dive into Deep Learning(d2l.ai)由 Zhang、Lipton、Li、Smola 合著,我们的 dive-into-deep-learning 书架条目收录其全书文本(CC BY-SA 4.0);其卷积章节的节标题与本章 4.2-4.6 逐节同构。

  15. 出处:「4 Convolutional Neural Networks」第 86 段(搜「skip connections」)与第 2039 段(text/41-ch04-4-convolutional-neural-networks.txt:2039,搜「use case」)。4.1 预告现代架构与「下一章详讲流行架构」;4.7 小结声称「presents a use case study on image classification」;两者在全章正文均不存在,下一章是 RNN。

  16. 出处:「4 Convolutional Neural Networks」第 50 段(text/41-ch04-4-convolutional-neural-networks.txt:50,搜「audio」)与第 63 段(搜「graph」)。原文:CNN 被搬去音频(语音识别、音乐)、文本分类与图卷积网络。