跳到主要内容

卷积神经网络

卷积神经网络(CNN)针对网格状数据(如图像)内置了两个核心假设:

  • 局部性:邻近值先发生交互,远处值要经过更多层才能影响当前位置;
  • 参数共享:同一个检测器(卷积核)在图像的不同位置复用。

这两个假设大幅削减了参数量,并赋予模型平移等变性:输入图像平移后,输出的特征图也会随之平移。注意,等变(Equivariance)不等于不变(Invariance)。池化、聚合、数据增强或任务设计可能带来一定的平移容忍度,但单纯的卷积操作本身不会让输出对平移保持不变。

互相关层

深度学习框架中所谓的“卷积”操作,底层实现的通常是互相关(Cross-Correlation)。对于输入 X\mathbf{X} 和卷积核 V\mathbf{V},计算公式如下:

Hi,j,d=bd+abcVa,b,c,dXi+a,j+b,c.H_{i,j,d} = b_d + \sum_a\sum_b\sum_c V_{a,b,c,d}\,X_{i+a,j+b,c}.

卷积核遍历所有输入通道 cc,生成一个输出通道 dd。多个卷积核并行工作,从而生成多张特征图。

在一维情况下,若卷积核宽度为 kk、两侧填充为 pp、步幅为 ss,输出长度为:

n+2pks+1.\left\lfloor\frac{n+2p-k}{s}\right\rfloor+1.

高度和宽度的计算逻辑相同,独立进行。空洞卷积(Dilation)通过在卷积核元素间插入间隔来扩大感受野,从而改变有效卷积核大小。

手算卷积核与输出形状

输入 [1,2,4,8][1,2,4,8],核为 [1,1][1,-1],偏置为零,无填充、步幅为一,互相关输出为 [1,2,4][-1,-2,-4]:每个位置计算相邻值之差。数学卷积会翻转核,在同样只取有效窗口的约定下输出 [1,2,4][1,2,4]

普通稠密二维卷积层的输入若为 [B, 3, 32, 32],有 16 个形状为 [3, 3, 3](输入通道、高、宽)的核,填充为一、步幅为二,输出就是 [B, 16, 16, 16]。含偏置共 16(333+1)=44816(3\cdot3\cdot3+1)=448 个参数,与图像宽高无关。某个共享权重的梯度,要把所有使用它的空间位置和批次样本的贡献加起来。

空洞率为 rr 时,把输出长度公式中的 kk 换成 r(k1)+1r(k-1)+1。上面的互相关公式默认步幅和空洞率均为一,且索引有效;填充负责补充边界值。填充与步幅的教材讨论说明了边界处理的影响。在无限网格上,步幅为一的卷积具有严格平移等变性;有限填充会在边缘破坏这一性质,步幅为二时一般只对与采样网格对齐的平移保持等变。池化也不保证对任意平移不变。

核心组件

  • 填充(Padding):处理边界像素,常用于保持特征图的空间尺寸不变。
  • 步幅(Stride):控制卷积核移动的步长,实现下采样。
  • 池化(Pooling):对局部邻域进行统计汇总(如取最大值或均值),不包含可学习的空间权重。
  • 1×11\times1 卷积:在每个空间位置独立地混合通道信息,可调整通道数;增加非线性还需配合激活函数。
  • 堆叠层:逐层扩大感受野,将局部特征组合成更高层的语义表示。

局限与边界

  • 归纳偏置的有效性:局部性和平移结构并非所有数据都具备,需视具体任务而定。
  • 下采样风险:池化等操作可能丢失微小目标或精确位置信息。
  • 感受野误区:感受野大不代表模型能有效利用所有相关上下文。
  • 鲁棒性验证:在随机裁剪下表现好,不等于能抵抗真实的分布漂移。
  • 数据主导性:数据集构造和增强策略对性能的影响,往往超过架构本身的微调。

如果输入数据不具备明显的空间结构,建议优先使用小型 MLP 或线性模型作为基线。关于更多实现细节与练习,参考 Dive into Deep Learning: Convolutional Neural Networks

探索关联打开关联网络