跳到主要内容

卷积 — 从第一性原理推出来的层,与 LeNet

主角先点名:CNN(卷积神经网络,convolutional neural network 的缩写),就是把卷积层堆起来的网络; 这一章先把它从两条视觉常识里推出来,再算清它,最后组装出它的祖师爷。

这一章讲三件事: 卷积层为什么长这样(从两条视觉常识推导出来); 卷积到底在算什么(互相关、通道、池化——把一个小窗口里的数压成一个数,让结果对小挪动不敏感); 以及第一个成功的 CNN——LeNet 的完整结构。 读完你会理解:卷积不是某个天才拍脑袋的发明, 而是「把正确的偏见强加给模型」的最小代价方案。

1. 先看病:全连接用在图像上有多离谱

第 06 章的 MLP 处理的是表格数据——每列是一个特征,列与列之间没有结构。 换成图像试试:一张一百万像素的照片,输入就是一百万个数; 第一层哪怕只压到 1000 个隐藏单元,全连接层也要 10⁶ × 10³ = 十亿个参数1。 数据、算力、过拟合,三座大山一起压下来。

但猫狗识别明明能做——人和机器都做到了。 这说明图像里有全连接没用的结构。卷积网络就是把这种结构 以「约束」的形式加进模型。哪两条结构?用找 Waldo 的游戏说最清楚2: Waldo 藏在人山人海里,但他长什么样,不取决于他站在哪—— 你拿同一个「Waldo 探测器」扫完整张图就行。

2. 推导:两条原则,各砍一刀参数

原则一:平移不变性。 早期层对同一个图案,不管它出现在图的哪个位置, 都应该给出同样的响应3

原则二:局部性。 早期层判断某个位置时,只看它附近的小邻域, 不管图像远处的内容;长程的、全局的特征,交给更深的层去聚合4

现在把这两条数学化。全连接层里,位置 (i,j) 的隐藏单元 要对所有像素 (k,l) 加权求和,权重是四阶张量 V[i,j,a,b]—— 平移不变性要求权重不能依赖位置 (i,j),于是 V[i,j,a,b] 退化成 V[a,b]: 同一套权重在所有位置共享。这就是卷积, 参数从 10¹² 降到 4×10⁶(a、b 仍取遍全图)5

局部性再砍一刀:|a|、|b| 超过 Δ 就置零——每个位置只看 (2Δ+1)² 的邻域,Δ 通常小于 10。参数从 4×10⁶ 再降到 4Δ², 大约几百个6。两刀下来,十亿级的层变成几百个参数, 而输入和隐藏表示的形状一个都没变。

H[i,j] = u + Σ_{a=-Δ}^{Δ} Σ_{b=-Δ}^{Δ} V[a,b] · X[i+a, j+b]

图说:卷积层——同一组权重 V(卷积核)滑过所有位置,
每个位置只看 Δ 邻域。这是「权重共享 + 局部连接」。

作者点了一句本质:所有学习都依赖强加归纳偏置; 偏置和现实相符,就换来样本高效与泛化;不符,连训练集都学不动7。 卷积的归纳偏置是「图像平移不变、局部相关」——它赌对了。 (严格说,深度学习里的「卷积」其实是互相关—— 真卷积要把核翻转 180°;但核是学出来的,翻不翻没有差别8。)

3. 走查:2×2 核滑过 3×3 图

互相关运算(本章主走查):核从左上角开始,逐位置滑动; 每个位置,窗口内的输入与核逐元素相乘再求和,得输出一个数9:

输入 X (3×3) 核 K (2×2) 输出 Y (2×2)
0 1 2 0 1
3 4 5 2 3
6 7 8

Y[0,0] = 0×0 + 1×1 + 3×2 + 4×3 = 19 ← 窗口在左上
Y[0,1] = 1×0 + 2×1 + 4×2 + 5×3 = 25 ← 右滑一格
Y[1,0] = 3×0 + 4×1 + 6×2 + 7×3 = 37 ← 下滑一格
Y[1,1] = 4×0 + 5×1 + 7×2 + 8×3 = 43

输出比输入小:核要能完整放进图里, n×n 输入配 k×k 核,输出是 (n−k+1)×(n−k+1)。 padding(在边缘补零)可以把尺寸补回来;stride(每次滑多格)用来降分辨率。

核能干什么?看一个手工例子:核 [1, −1] 滑过一张左白右黑的图, 在白→黑边界输出 +1、黑→白边界输出 −1,其余全 0—— 它是一个边缘检测器,数学上就是相邻像素之差, 即水平方向一阶导数的离散近似(有限差分)10。 更有意思的是下一步:不手工设计,把核当初始化随机的参数, 用「输入→输出」样本训练,十几轮后学出来的核 ≈ [1, −1]11—— 特征工程被优化取代,这正是第 01 章端到端主张的微观版。

两个配套概念:

  • 感受野:某层的某个元素,往前追溯到输入层,能影响它的所有元素的集合。 两层 2×2 卷积叠起来,输出的感受野就覆盖全部 3×3 输入—— 想看得更广,就加深网络12。这个词来自 Hubel & Wiesel 的视觉皮层实验 (1959-68,后来发现 CNN 前几层学出的核和生物视觉皮层的响应惊人相似);
  • 通道:图像是三阶张量(高×宽×RGB 三通道),隐藏表示也做成多通道, 每个通道是一张特征图——低层可能有通道专管边缘、有通道专管纹理。 1×1 卷积(Δ=0)不看邻域,只在每个位置跨通道混合—— 相当于逐位置的全连接层,是调整通道数的标准工具。

4. 池化:降分辨率,顺便容忍位移

卷积层保位置;但最终的问题是全局的——「图里有没有猫」。 池化层做两件事:把特征图降采样(常用 2×2 窗口,尺寸减半), 并给表示一点平移容忍:真实世界里物体从不精确出现在同一像素上, 连快门震动都会让整幅图偏移一两个像素13

池化没有参数(没有核):每个窗口取最大值(max-pooling)或平均值。 2×2 max-pooling 的走查:max(0,1,3,4)=4,max(1,2,4,5)=5,…… 效果:边缘检测的结果在窗口内挪动一格,池化输出不变14。 max-pooling 出自认知神经科学(Riesenhuber & Poggio 1999), 实践中几乎总是优于平均池化。

5. 组装:LeNet 的完整结构

1989 年,Yann LeCun 在 AT&T 贝尔实验室的团队 第一次用反向传播成功训练了 CNN——就是后来的 LeNet-5(LeCun 的第五代卷积网络,本书的主角之一),

它为识别手写数字而生,错误率低于 1%,与当时的支持向量机(SVM,深度学习兴起之前最强的分类算法之一)打平。 它被部署去识别 ATM 上的支票数字,今天还有 ATM 在跑这份九十年代的代码15

输入 28×28×1
→ 卷积(5×5,6 通道,padding=2)+ sigmoid → 28×28×6
→ 2×2 平均池化(stride 2) → 14×14×6
→ 卷积(5×5,16 通道)+ sigmoid → 10×10×16
→ 2×2 平均池化 → 5×5×16
→ 展平成 400 维 → 全连接 120 → 全连接 84 → 全连接 10(类别数)

图说:卷积块负责「提特征」(空间尺寸渐缩、通道渐增),
全连接块负责「做决策」(维度渐降到类别数)。

读这张图的规律,就是读此后一切 CNN 的规律: 空间分辨率一路降,通道数一路升,最后展平决策。 (当时 ReLU 和 max-pooling 还没被发明,所以用的是 sigmoid 和平均池化; 换今天的零件重训,结构一字不用改。) 顺带一个冷知识:MNIST 的 28×28,是从 32×32 的原扫描图裁掉两圈像素得来的—— 当年是为了省 30% 的存储16

6. 作者的判断与证据

书里给了证据的: 参数量推导(10¹² → 4×10⁶ → 4Δ²); 互相关运算例;学核实验(学出 ≈[1,−1]);LeNet 结构与历史(ATM 部署)。

作者的立场: 「从第一性原理推出卷积」是一条重构的论证线—— 作者明说历史上 CNN 未必是这么被发明的(Neocognitron 1982、TDNN 1989 在先), 但知道「按合理的视觉原则它就是对的选择」令人安心17

判断(我们的,不是书里的): 这一章的方法论比卷积本身更值钱—— 当你发现模型在某个数据类型上参数爆炸,先问:这个数据有什么结构是模型没用的? 把结构写成约束,参数就降下来了。 后面会看到,注意力(第 12 章) 恰好是这条路的反面:它几乎不带结构偏见,用数据和算力换通用性—— 两种哲学各有适用域,这个对照会在第 13 章收口。 如果错,会错在: 「约束换效率」成立的前提是约束与现实相符; 图像其实不完全平移不变(物体有常见位置),完全不变的假设也丢了信息—— 现代工作(如带位置编码(把「每个块在图中的位置」编成数字、一并喂给模型的做法)的视觉模型)正是在两端之间找平衡。

7. 边界与局限

  • 推导基于「平移不变 + 局部」两条原则;对不满足的数据(比如排列敏感的结构化数据)卷积不是答案;
  • 卷积层只管「看」,最后的全局判断仍需展平或全局池化,这部分第 09 章(全局平均池化)还有升级;
  • LeNet 的 sigmoid + 平均池化是时代零件,非本质设计。

8. 可带走的

  1. 全连接处理图像参数爆炸;图像的结构(平移不变、局部)就是省参数的钥匙;
  2. 平移不变 ⟹ 权重共享(同一核扫全图);局部性 ⟹ 只看 Δ 邻域;两刀:10¹² → 4Δ²;
  3. 互相关 = 窗口逐元素乘再求和;n×n 配 k×k 核,输出 (n−k+1)²;
  4. 核可以学:[1,−1] 边缘检测器能从样本里训出来;
  5. 感受野随层数扩大;通道=特征图;1×1 卷积=逐位置全连接,管通道;
  6. 池化:无参数,降分辨率 + 容忍一两个像素的位移;
  7. LeNet 骨架:卷积块(空间降、通道升)+ 全连接块(维度降到类别数);
  8. 归纳偏置与现实相符 = 样本高效——这是「为什么卷积对图像有效」的最深一层。

9. 原文地图

主题原书章原文位置
百万像素十亿参数From Fully Connected Layers to Convolutionstext/40-from-fully-connected-layers-to-convolutions.txt:26(搜「one-megapixel」)
Waldo、两条原则From Fully Connected Layers to Convolutionstext/40-from-fully-connected-layers-to-convolutions.txt:79(搜「what Waldo looks like」) · text/40-from-fully-connected-layers-to-convolutions.txt:100(搜「translation invariance」) · text/40-from-fully-connected-layers-to-convolutions.txt:102(搜「locality」)
归纳偏置From Fully Connected Layers to Convolutionstext/40-from-fully-connected-layers-to-convolutions.txt:198(搜「inductive bias」)
互相关 vs 卷积From Fully Connected Layers to Convolutionstext/40-from-fully-connected-layers-to-convolutions.txt:240(搜「cross-correlation」)
19 走查Convolutions for Imagestext/41-convolutions-for-images.txt:85(搜「19」)
[1,−1] 有限差分、学核Convolutions for Imagestext/41-convolutions-for-images.txt:285(搜「finite difference operator」) · text/41-convolutions-for-images.txt:460(搜「remarkably close」)
感受野Convolutions for Imagestext/41-convolutions-for-images.txt:516(搜「receptive field」)
快门震动、max-poolingPoolingtext/44-pooling.txt:32(搜「shutter」) · text/44-pooling.txt:77(搜「maximum pooling」)
LeNet 历史与 ATMConvolutional Neural Networks (LeNet)text/45-convolutional-neural-networks-lenet.txt:27(搜「AT&T Bell Labs」) · text/45-convolutional-neural-networks-lenet.txt:39(搜「ATMs still run」)
LeNet 结构Convolutional Neural Networks (LeNet)text/45-convolutional-neural-networks-lenet.txt:74(搜「two parts」) · text/45-convolutional-neural-networks-lenet.txt:107(搜「120, 84, and 10」)

Footnotes

  1. 出处:「From Fully Connected Layers to Convolutions」第 26 段(text/40-from-fully-connected-layers-to-convolutions.txt:26,搜「one-megapixel」)与第 30 段(text/40-from-fully-connected-layers-to-convolutions.txt:30,搜「10^9」)。

  2. 出处:「From Fully Connected Layers to Convolutions」第 79 段(text/40-from-fully-connected-layers-to-convolutions.txt:79,搜「what Waldo looks like」)。

  3. 出处:「From Fully Connected Layers to Convolutions」第 100 段(text/40-from-fully-connected-layers-to-convolutions.txt:100,搜「translation invariance」)。

  4. 出处:「From Fully Connected Layers to Convolutions」第 102 段(text/40-from-fully-connected-layers-to-convolutions.txt:102,搜「locality」)。

  5. 出处:「From Fully Connected Layers to Convolutions」第 151 段(text/40-from-fully-connected-layers-to-convolutions.txt:151,搜「translation invariance」)及随后的参数账(10^12 → 4×10^6)。TDNN(Waibel et al. 1989)是早期实践。

  6. 出处:「From Fully Connected Layers to Convolutions」第 170 段(text/40-from-fully-connected-layers-to-convolutions.txt:170,搜「locality」)及随后(4×10^6 → 4Δ²,Δ 通常小于 10)。

  7. 出处:「From Fully Connected Layers to Convolutions」第 198 段(text/40-from-fully-connected-layers-to-convolutions.txt:198,搜「inductive bias」)。

  8. 出处:「From Fully Connected Layers to Convolutions」第 240 段(text/40-from-fully-connected-layers-to-convolutions.txt:240,搜「cross-correlation」);「Convolutions for Images」第 486 段(text/41-convolutions-for-images.txt:486,搜「flipped both horizontally and vertically」)。

  9. 出处:「Convolutions for Images」第 85 段(text/41-convolutions-for-images.txt:85,搜「19」)。

  10. 出处:「Convolutions for Images」第 285 段(text/41-convolutions-for-images.txt:285,搜「finite difference operator」)。

  11. 出处:「Convolutions for Images」第 460 段(text/41-convolutions-for-images.txt:460,搜「remarkably close」)。

  12. 出处:「Convolutions for Images」第 516 段(text/41-convolutions-for-images.txt:516,搜「receptive field」)。

  13. 出处:「Pooling」第 32 段(text/44-pooling.txt:32,搜「shutter」)。

  14. 出处:「Pooling」第 123 段(text/44-pooling.txt:123,搜「moves no more than one element」)。

  15. 出处:「Convolutional Neural Networks (LeNet)」第 27 段(text/45-convolutional-neural-networks-lenet.txt:27,搜「AT&T Bell Labs」)、第 35 段(text/45-convolutional-neural-networks-lenet.txt:35,搜「support vector machines」)与第 39 段(text/45-convolutional-neural-networks-lenet.txt:39,搜「ATMs still run」)。

  16. 出处:「Convolutional Neural Networks (LeNet)」第 284 段(text/45-convolutional-neural-networks-lenet.txt:284,搜「trimming」)。

  17. 出处:「From Fully Connected Layers to Convolutions」第 314 段(text/40-from-fully-connected-layers-to-convolutions.txt:314,搜「first principles」)。