Ch07 CNN与CV修订于 二〇二六年七月二日

7.1 卷积:滑动窗口看局部

从全连接到局部:为什么图像需要卷积

上一章 全连接网络 面对图像时有一个致命缺陷:将一张 224x224 的彩色图片展开,瞬间变成 150528 个独立数字,第一层若有 1000 个神经元,参数量直奔 1.5 亿。人眼不是这样看世界的——你不会同时看清一张照片的所有像素,你的视线在一个小区域内聚焦,然后移动。

CNN 的核心是卷积核(Convolution Kernel,也叫滤波器 Filter)——一个很小的矩阵(例如 3x3),它像一只手电筒,在图片上逐行逐列滑动。每停到一个位置,手电筒光圈内的像素与卷积核的权重逐元素相乘再求和,输出一个数字。滑完整张图,输出的数字阵列就是一张”特征图”(Feature Map)1。

生活比喻:想象你在沙滩上用金属探测器找硬币。探测器(卷积核)只能探测脚下巴掌大的区域(3x3 感受野),你一步一步走遍整个沙滩(滑动),每一脚踩下去,探测器发出一个信号强度(输出值)。最后你画出一张”硬币热力图”(特征图),颜色越亮的地方硬币越可能在那里。

卷积运算:三步走

对于输入图像上一个 3x3 的区域和卷积核,计算过程只有三步:

  1. 覆盖:将卷积核对齐到图像区域上
  2. 逐元素相乘:将卷积核的 9 个权重,和图像区域的 9 个像素值,一一对应相乘
  3. 求和:将 9 个乘积加起来,得到输出特征图上的一个值

举个例子。假设图像左上角的 3x3 区域是:

[10, 20, 30]
[60, 70, 80]
[110,120,130]

卷积核是垂直边缘检测器(左边负、右边正):

[-1, 0, 1]
[-1, 0, 1]
[-1, 0, 1]

计算:(-1x10)+(0x20)+(1x30)+(-1x60)+(0x70)+(1x80)+(-1x110)+(0x120)+(1x130) = -10+0+30-60+0+80-110+0+130 = 60。

数值 60 告诉我们:这个区域有强烈的”左边暗、右边亮”的垂直边缘。然后卷积核向右滑动一格(步长 stride),计算下一个位置,如此反复,直到覆盖全图。

卷积核的本质是模式检测器。不同的权重组合检测不同的视觉模式——有的专门找竖线,有的找横线,有的找颜色突变,有的找纹理。一个 CNN 层中有几十到几百个卷积核,每个学习检测一种模式2。

卷积为什么比全连接高效三个数量级

卷积相对于全连接有三个结构性优势,这也是 CNN 统治计算机视觉十年的根基:

参数共享(Weight Sharing):同一个卷积核的 9 个权重,在图片的每一个位置复用。如果全连接层要在 224x224 的图上对每个位置单独检测竖线,需要 50176 套参数;卷积核只需 9 个参数。参数共享的直观道理是:一个竖线检测器在图片左上角有效,在右下角同样有效,没有理由为每个位置重新学一遍。

局部连接(Local Connectivity):每个输出神经元只看 3x3 的一小块区域,而不是整张图。图片中相邻的像素关系紧密,远处的像素几乎无关——卷积的局部性恰好匹配图像的这个自然属性。就像你看一个陌生人的脸,先看眼睛、鼻子、嘴巴这些局部特征,不会试图一次性”感受”整张脸的每一个毛孔。

平移等变性(Translation Equivariance):如果图片中的物体向右移动了 3 个像素,特征图上的响应也会精确地向右移动 3 个像素。数学上写为 f(shift(x)) = shift(f(x))。这意味着卷积天然理解”猫在左边还是右边都是猫”,不需要为每个位置单独学习3。

生活比喻:参数共享就像你的签名——不管签在合同左上角还是右下角,都是同一个签名,不需要为每个位置练一种签名。局部连接就像你看书——一次只看一行字,而不是同时看清整页的所有字。平移等变性就像你认出朋友——他站在房间左边还是右边,都不影响你认出他。

关键参数与注意事项

卷积层有几个超参数,直接决定输出特征图的尺寸和计算量,理解它们比背诵公式重要:

卷积核大小(Kernel Size):最常见的是 3x3。为什么不是更大?两个 3x3 卷积堆叠,感受野等于一个 5x5 卷积,但参数更少(18 vs 25),中间多一层非线性激活。VGG 网络的核心哲学就是”用深度换参数效率”。但 2022 年后 ConvNeXt 重新尝试 7x7 大卷积核,因为大数据量下更大的感受野一次性捕获更多上下文反而更有效4。

步长(Stride):卷积核每次滑动的像素距离。stride=1 时输出尺寸几乎不变;stride=2 时输出尺寸减半,相当于降采样。现代 CNN 越来越多地用 stride=2 的卷积替代池化层做降采样——卷积有可学习的参数,能学到”怎样降采样最好”。

填充(Padding):在输入图片边缘补零。“same” padding 让输出尺寸与输入相同(3x3 卷积补一圈零,即 padding=1);“valid” padding 不补零,每层卷积都会缩小特征图。没有 padding,深层网络很快就没像素可操作了。但 padding 也会在边缘引入人工零值,对边缘位置的检测精度有微弱影响。

输入与输出通道:彩色图有 RGB 三个输入通道。一个卷积核实际上是一个三维张量(k_h x k_w x C_in),对输入的所有通道同时做卷积并求和。N 个卷积核产生 N 个输出通道——即 N 张不同的特征图,每张图由不同的”探测器”生成。

输出尺寸公式:H_out = floor((H_in + 2P - K) / S) + 1,其中 K 为核大小,P 为填充,S 为步长。

关联


← 上一节:章首 | 下一节:7.2 卷积运算的数学直觉 →

注释

  1. LeCun et al., “Gradient-Based Learning Applied to Document Recognition”, 1998, http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf ↩

  2. Krizhevsky et al., “ImageNet Classification with Deep Convolutional Neural Networks”, 2012, https://papers.nips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html ↩

  3. CS231n, Stanford, “Convolutional Neural Networks for Visual Recognition”, https://cs231n.github.io/convolutional-networks/ ↩

  4. Liu et al., “A ConvNet for the 2020s”, 2022, https://arxiv.org/abs/2201.03545 ↩

关联8

知识图谱

局部图谱 · 点节点跳转