跳转至

第九章:卷积神经网络

1. 引言

卷积神经网络(Convolutional Neural Networks, CNN)是一类专门用于处理具有网格状结构数据的神经网络。与全连接神经网络不同,卷积神经网络利用局部连接权重共享两大核心思想,大幅减少了参数数量,同时能够有效地捕捉输入数据的空间层次结构。卷积网络最早成功应用于计算机视觉任务,尤其是图像识别领域,如今已广泛扩展到自然语言处理、语音识别、时间序列分析等多个领域。

本章将系统性地介绍卷积神经网络的基础理论、核心组件、经典架构以及前沿应用,帮助读者建立对卷积运算的深刻理解,并掌握设计高效卷积网络的关键技术。

2. 卷积运算与滤波器

2.1 卷积的数学定义

在深度学习的语境下,我们通常使用互相关(cross-correlation)运算来定义卷积层的前向传播。给定一个输入张量 \(\mathbf{X} \in \mathbb{R}^{H \times W \times C_{in}}\) 和一个卷积核 \(\mathbf{K} \in \mathbb{R}^{k_h \times k_w \times C_{in} \times C_{out}}\),输出特征图 \(\mathbf{Y} \in \mathbb{R}^{H' \times W' \times C_{out}}\) 的计算定义为:

\[ Y_{i,j,k} = \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} \sum_{c=0}^{C_{in}-1} K_{m,n,c,k} \cdot X_{i+m,j+n,c} \]

其中,\((i,j)\) 表示输出空间位置,\(k\) 表示输出通道索引,\(k_h\)\(k_w\) 分别为卷积核的高度和宽度。

2.2 滤波器与卷积核

滤波器(Filter) 是卷积神经网络中的基本学习单元。一个滤波器在整个输入特征图上使用共享的权重参数进行滑动卷积运算,提取特定的特征模式。滤波器的参数通过反向传播算法从数据中自动学习得到。

当输入为彩色图像时,通常包含三个通道(红、绿、蓝),此时卷积核的深度必须与输入通道数匹配。如果我们有 \(C_{out}\) 个滤波器,则输出将产生 \(C_{out}\) 个通道的特征图:

\[ \mathbf{Y} = \sum_{k=1}^{C_{out}} \mathbf{K}^{(k)} * \mathbf{X} \]

2.3 通道深度与特征学习

通道深度(Channel Depth) 指的是卷积层输出特征图的通道数量,它直接决定了该层能够学习到的特征种类数量。较深的通道数意味着网络能够在当前层提取更丰富的特征表示。每一层输出的通道都可以视为对输入不同特征模式的响应,例如边缘、纹理、形状部件乃至更高级的语义概念。

3. 填充与步幅

3.1 填充策略

填充是在输入特征图的边界周围添加额外像素值的技术。常见的填充策略有两种:

Valid 填充(无填充):不使用任何填充,卷积核只在输入的有效像素上滑动。设输入尺寸为 \(H \times W\),卷积核尺寸为 \(k_h \times k_w\),输出尺寸为:

\[ H' = H - k_h + 1, \quad W' = W - k_w + 1 \]

Same 填充(相同填充):添加填充使得输出尺寸与输入尺寸相同。对于步幅 \(s=1\) 的情况,填充量 \(p\) 应满足:

\[ p = \left\lfloor \frac{k_h}{2} \right\rfloor = \left\lfloor \frac{k_w}{2} \right\rfloor \]

更一般地,当步幅为 \(s\) 时,Same 填充的输出尺寸为:

\[ H' = \left\lceil \frac{H}{s} \right\rceil, \quad W' = \left\lceil \frac{W}{s} \right\rceil \]

填充不仅控制了输出特征图的空间尺寸,还能有效防止卷积运算过程中边缘信息的过度丢失。

3.2 步幅

步幅(Stride) 指定卷积核在输入特征图上滑动的步长。设步幅为 \(s\),则输出尺寸的计算公式为:

\[ H' = \left\lfloor \frac{H + 2p - k_h}{s} \right\rfloor + 1, \quad W' = \left\lfloor \frac{W + 2p - k_w}{s} \right\rfloor + 1 \]

较大的步幅可以显著减少输出特征图的空间尺寸,从而降低计算复杂度和参数数量,但同时也会损失一定的空间分辨率信息。

4. 池化操作

池化(Pooling) 是卷积神经网络中的另一个关键操作,用于对特征图进行空间降采样,同时保留重要的特征信息。池化操作通过对局部邻域内的值进行聚合来实现,通常跟在卷积层之后。

4.1 最大池化

最大池化(Max Pooling) 取局部窗口内的最大值:

\[ Y_{i,j,k} = \max_{m=0}^{k_h-1} \max_{n=0}^{k_w-1} X_{i \cdot s + m, j \cdot s + n, k} \]

最大池化能够保留显著的特征响应,对轻微的输入变换具有较好的鲁棒性。

4.2 平均池化

平均池化(Average Pooling) 计算局部窗口内的平均值:

\[ Y_{i,j,k} = \frac{1}{k_h \cdot k_w} \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} X_{i \cdot s + m, j \cdot s + n, k} \]

平均池化能够保留全局的背景信息,但可能受到噪声的干扰。

4.3 Lp 池化

Lp 池化 是对局部窗口内值进行 \(L_p\) 范数计算的推广形式:

\[ Y_{i,j,k} = \left( \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} |X_{i \cdot s + m, j \cdot s + n, k}|^p \right)^{\frac{1}{p}} \]

\(p \to \infty\) 时,Lp 池化趋近于最大池化;当 \(p = 1\) 时,等价于平均池化。Lp 池化提供了介于最大池化和平均池化之间的折中选择。

5. 多维卷积与转置卷积

5.1 一维卷积

一维卷积(1D Convolution) 主要应用于时间序列数据和自然语言处理任务。设输入序列 \(\mathbf{x} \in \mathbb{R}^{L \times C_{in}}\),卷积核 \(\mathbf{k} \in \mathbb{R}^{k \times C_{in} \times C_{out}}\),输出序列 \(\mathbf{y} \in \mathbb{R}^{L' \times C_{out}}\)

\[ y_{i,k} = \sum_{c=1}^{C_{in}} \sum_{j=0}^{k-1} k_{j,c,k} \cdot x_{i+j,c} \]

在 NLP 中,一维卷积常用于文本分类、情感分析等任务,能够捕捉 n-gram 级别的局部语义特征。

5.2 二维卷积

二维卷积(2D Convolution) 是图像处理和视频分析中最常用的卷积形式。设输入图像 \(\mathbf{X} \in \mathbb{R}^{H \times W \times C_{in}}\),卷积核 \(\mathbf{K} \in \mathbb{R}^{k_h \times k_w \times C_{in} \times C_{out}}\)

\[ Y_{i,j,k} = \sum_{c=1}^{C_{in}} \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} K_{m,n,c,k} \cdot X_{i+m,j+n,c} \]

二维卷积能够有效地捕捉图像中的空间层次结构,从底层的边缘和纹理到高层的物体部件和整体语义。

5.3 三维卷积

三维卷积(3D Convolution) 应用于视频数据、医学图像(CT、MRI)、点云等三维结构数据。设输入体积 \(\mathbf{X} \in \mathbb{R}^{D \times H \times W \times C_{in}}\)

\[ Y_{d,i,j,k} = \sum_{c=1}^{C_{in}} \sum_{m=0}^{k_d-1} \sum_{n=0}^{k_h-1} \sum_{o=0}^{k_w-1} K_{m,n,o,c,k} \cdot X_{d+m,i+n,j+o,c} \]

三维卷积能够同时捕捉空间维度和时间维度(或深度维度)的特征关联。

5.4 转置卷积

转置卷积(Transposed Convolution),又称去卷积(Deconvolution)分数步幅卷积(Fractionally Strided Convolution),是卷积神经网络的逆向操作。转置卷积主要用于:

  • 上采样操作:在语义分割、目标检测等任务中恢复空间分辨率
  • 自编码器和解码器网络:重构输入数据
  • 生成对抗网络(GAN):生成高质量图像

转置卷积的数学定义为:给定卷积核 \(\mathbf{K}\),输出尺寸的计算公式为:

\[ H' = s \cdot (H - 1) - 2p + k_h, \quad W' = s \cdot (W - 1) - 2p + k_w \]

转置卷积可以被理解为卷积核在输出特征图上"滑动"的逆过程,其梯度反向传播恰好是普通卷积的前向传播。

6. 经典卷积网络架构

6.1 LeNet

LeNet(LeCun et al., 1998)是最早的卷积神经网络之一,专门用于手写数字识别(MNIST数据集)。其网络结构包括:

  • 两个卷积层(Conv1、Conv2)
  • 两个池化层(Pool1、Pool2)
  • 两个全连接层(FC1、FC2)

LeNet 的设计开创了"卷积-池化-全连接"的经典范式,奠定了现代卷积网络的基础。

6.2 AlexNet

AlexNet(Krizhevsky et al., 2012)在 ImageNet 图像分类竞赛中取得了突破性成绩,掀起了深度学习在计算机视觉领域应用的热潮。AlexNet 的主要创新包括:

  • 使用 ReLU 激活函数替代 sigmoid/tanh
  • Dropout 正则化技术
  • 多 GPU 并行训练
  • 局部响应归一化(Local Response Normalization)
  • 重叠池化

AlexNet 包含 5 个卷积层和 3 个全连接层,参数总量超过 6000 万。

6.3 VGG

VGGNet(Simonyan & Zisserman, 2014)通过使用更小的 \(3 \times 3\) 卷积核堆叠代替较大的卷积核,展示了深度网络的重要性。VGG 的主要贡献是证明了网络深度是性能提升的关键因素。

VGG-16 和 VGG-19 是两个最常用的变体,分别包含 16 层和 19 层参数层。VGG 的设计原则:

  • 所有卷积核大小统一为 \(3 \times 3\)
  • 步幅为 1,使用 Same 填充
  • 池化使用 \(2 \times 2\) 的最大池化,步幅为 2
  • 深度增加时,通道数从 64 逐渐增加到 512

6.4 ResNet

ResNet(He et al., 2016)引入了残差连接(Residual Connection) 技术,解决了深层网络训练困难的问题。ResNet 的核心思想是让网络学习残差映射而非直接映射:

\[ \mathbf{y} = \mathcal{F}(\mathbf{x}) + \mathbf{x} \]

其中 \(\mathcal{F}(\mathbf{x})\) 是需要学习的残差函数。残差连接使得梯度能够直接流向网络的浅层,有效缓解了梯度消失问题。

ResNet 的变体包括 ResNet-50、ResNet-101、ResNet-152 等,深度从 50 层到 152 层不等。ResNet 在多项计算机视觉任务中刷新了记录,并成为后续许多模型的基础 backbone。

7. 高效卷积与应用

7.1 深度可分离卷积

深度可分离卷积(Depthwise Separable Convolution) 将标准卷积分解为两个独立操作:深度卷积和逐点卷积,大幅降低了计算成本和参数量。

给定输入 \(\mathbf{X} \in \mathbb{R}^{H \times W \times C_{in}}\)

  1. 深度卷积(Depthwise Convolution):每个输入通道独立与一个卷积核进行卷积 $$ \hat{Y}{i,j,c} = \sum $$}^{k_h-1} \sum_{n=0}^{k_w-1} K_{m,n,c} \cdot X_{i+m,j+n,c

  2. 逐点卷积(Pointwise Convolution):使用 \(1 \times 1\) 卷积核整合通道信息 $$ Y_{i,j,k} = \sum_{c=0}^{C_{in}} P_{k,c} \cdot \hat{Y}_{i,j,c} $$

深度可分离卷积的计算量约为标准卷积的 \(\frac{1}{C_{out}} + \frac{1}{k_h \cdot k_w}\),在通道数较大时近似于 \(\frac{1}{k_h \cdot k_w}\)

7.2 逐点 separable 卷积

逐点可分离卷积(Pointwise Separable Convolution) 进一步将 \(1 \times 1\) 卷积分解为低秩近似,适用于需要极度压缩模型的场景。

7.3 分组卷积

分组卷积(Grouped Convolution) 将输入通道和卷积核分成若干组,每组独立进行卷积操作。当分组数等于通道数时,分组卷积等价于深度卷积。分组卷积能够显著减少计算量和内存占用,是现代高效网络(如 ResNeXt、Xception、MobileNet)的重要组件。

7.4 应用领域

计算机视觉

卷积神经网络在计算机视觉领域取得了巨大成功,主要应用包括:

  • 图像分类:ResNet、EfficientNet 等模型在 ImageNet 上达到了超越人类的识别精度
  • 目标检测:Faster R-CNN、YOLO、SSD 等两阶段/单阶段检测器
  • 语义分割:FCN、DeepLab、U-Net 等全卷积网络
  • 人脸识别:FaceNet、ArcFace 等人脸验证和识别系统
  • 图像生成:GAN、VAE 等生成模型

自然语言处理

在自然语言处理领域,一维卷积网络被广泛应用于:

  • 文本分类:使用一维卷积提取 n-gram 特征进行情感分析、主题分类
  • 机器翻译:ConvS2S、Transformer 等模型中的卷积结构
  • 语音处理:WaveNet 使用因果 dilated 卷积生成原始音频波形

语音识别

卷积网络在语音识别任务中也有重要应用:

  • 语音命令识别:轻量级卷积网络用于嵌入式设备
  • 语音合成:WaveNet、Tacotron 等模型利用卷积结构生成自然语音
  • 声纹识别:CNN 用于提取说话人的声学特征

公式汇总表

公式名称 数学表达式 说明
二维卷积 \(Y_{i,j,k} = \sum_{c} \sum_{m,n} K_{m,n,c,k} \cdot X_{i+m,j+n,c}\) 标准卷积前向传播
Valid 输出尺寸 \(H' = H - k_h + 1\) 无填充时的输出高度
Same 输出尺寸 \(H' = \lceil H/s \rceil\) 步幅为 \(s\) 时的输出高度
最大池化 \(Y_{i,j,k} = \max_{m,n} X_{i \cdot s + m, j \cdot s + n, k}\) 取局部最大值
平均池化 \(Y_{i,j,k} = \frac{1}{k_h k_w} \sum_{m,n} X_{i \cdot s + m, j \cdot s + n, k}\) 取局部平均值
Lp 池化 $Y_{i,j,k} = \left( \sum_{m,n} X_{i \cdot s + m, j \cdot s + n, k}
转置卷积输出 \(H' = s(H-1) - 2p + k_h\) 上采样输出尺寸
残差连接 \(\mathbf{y} = \mathcal{F}(\mathbf{x}) + \mathbf{x}\) ResNet 核心机制
深度可分离卷积 \(Y = P \cdot (K \circledast X)\) 深度卷积后接逐点卷积

小结

卷积神经网络通过局部连接权重共享两大核心思想,实现了对网格状数据的高效处理。本章详细介绍了卷积运算、填充与步幅、池化操作、多维卷积及其变体、以及从 LeNet 到 ResNet 的经典架构演进。深度可分离卷积和分组卷积等高效卷积技术使得在资源受限的设备上部署深度模型成为可能。

卷积神经网络不仅是计算机视觉的核心工具,其影响力已扩展到自然语言处理、语音识别、医学图像分析、自动驾驶等众多领域,成为现代人工智能技术的重要基石。