跳转至

卷积神经网络(CNN)

CNN 是处理空间数据(图像、视频)的核心架构。它模仿人类视觉系统,通过局部感受野和权值共享,高效提取层次化的空间特征。


1. 核心思想:为什么不用全连接?

假设输入是一张 \(224 \times 224 \times 3\) 的彩色图片,展平后有 \(224 \times 224 \times 3 = 150528\) 个像素。如果用全连接层连接到 1000 个神经元,仅第一层就需要 1.5 亿个参数——这既浪费算力,又极易过拟合。

CNN 的两个核心设计解决了这个问题:

设计 含义 效果
局部连接 每个神经元只看输入的一小块区域(感受野) 大幅减少参数
权值共享 同一个卷积核在整张图上滑动,共享参数 进一步减少参数,且能检测任意位置的特征

直觉理解

全连接网络像是让每个人独立审阅整份文件;CNN 像是用一个放大镜在文件上滑动扫描——放大镜的参数是固定的,但它能在每个位置发现相同类型的模式。


2. 卷积操作

基本原理

卷积操作的核心是一个小矩阵——卷积核(Kernel / Filter),在输入特征图上滑动,每到一个位置就做逐元素相乘再求和

\[ (\mathbf{I} * \mathbf{K})(i,j) = \sum_{m}\sum_{n} \mathbf{I}(i+m, j+n) \cdot \mathbf{K}(m,n) \]

示例:3×3 卷积核

输入(5×5)          卷积核(3×3)        输出(3×3)
1 0 1 0 1            1 0 1               4 3 4
0 1 0 1 0     *      0 1 0       =       2 4 2
1 0 1 0 1            1 0 1               4 3 4
0 1 0 1 0
1 0 1 0 1
输出的每个值 = 对应区域与卷积核逐元素相乘后求和。

关键超参数

参数 含义 影响
卷积核大小 感受野的尺寸(如 \(3 \times 3\)\(5 \times 5\) 越大看到的范围越广,参数也越多
步长(Stride) 卷积核每次移动的像素数 步长越大,输出尺寸越小
填充(Padding) 在输入边缘补零 控制输出尺寸,常用 "same" 保持不变
卷积核数量 使用多少个不同的卷积核 每个核提取一种特征,决定输出的通道数

输出尺寸公式

\[ H_{\text{out}} = \left\lfloor \frac{H_{\text{in}} + 2P - K}{S} \right\rfloor + 1 \]

其中 \(H_{\text{in}}\) 是输入尺寸,\(P\) 是 padding,\(K\) 是卷积核大小,\(S\) 是步长。

多通道卷积

实际图像有多个通道(RGB 3 通道),卷积核也必须有相同的通道数。一个 \(3 \times 3\) 的卷积核作用于 3 通道输入,实际参数量是 \(3 \times 3 \times 3 = 27\)(加上 1 个偏置 = 28)。

多个卷积核产生多个输出通道(特征图),每个特征图检测一种不同的模式:

输入: H × W × C_in  →  卷积核: K × K × C_in × C_out  →  输出: H' × W' × C_out

3. 池化层(Pooling)

池化层的作用是压缩空间尺寸,减少计算量,同时增强特征的平移不变性。

最大池化(Max Pooling)

在每个窗口内取最大值:

输入(4×4)              最大池化(2×2, stride=2)              输出(2×2)
 1  3  2  1                                                      6  4
 4  6  1  2              →                                       8  7
 2  8  3  4
 1  0  7  5

平均池化(Average Pooling)

取窗口内的平均值。常用于网络最后一层(Global Average Pooling),将整个特征图压缩为一个值。

池化方式 特点 使用场景
Max Pooling 保留最显著的特征 中间层,常见于经典 CNN
Average Pooling 保留整体信息 最后一层(GAP),替代全连接层
Global Average Pooling 整个特征图取均值 现代网络(ResNet 等)的分类头

4. CNN 的标准架构

一个典型的 CNN 由以下模块堆叠而成:

graph LR
    A[输入图像] --> B[卷积层+ReLU]
    B --> C[卷积层+ReLU]
    C --> D[池化层]
    D --> E[卷积层+ReLU]
    E --> F[卷积层+ReLU]
    F --> G[池化层]
    G --> H[全连接层]
    H --> I[Softmax 输出]

规律:

  • 空间尺寸逐渐减小(通过池化或 stride > 1 的卷积)
  • 通道数逐渐增加(越深的层提取越抽象的特征,需要更多通道)
  • 最后用全连接层或 GAP 做分类

5. 经典 CNN 架构演进

LeNet-5(1998)

CNN 的开山之作,由 Yann LeCun 提出,用于手写数字识别。

输入(32×32×1) → Conv(5×5)×6 → Pool → Conv(5×5)×16 → Pool → FC(120) → FC(84) → FC(10)
  • 只有 5 层,约 6 万参数
  • 证明了 CNN 在视觉任务上的有效性

AlexNet(2012)⭐

深度学习的"文艺复兴"——在 ImageNet 竞赛上以巨大优势夺冠,开启了深度学习时代。

关键创新:

  • 使用 ReLU 替代 Sigmoid(训练速度快 6 倍)
  • 使用 Dropout 防过拟合
  • 数据增强(翻转、裁剪、色彩抖动)
  • GPU 并行训练

VGGNet(2014)

核心理念:用多个 3×3 小卷积核堆叠代替大卷积核

为什么 3×3 更好?

两个 \(3 \times 3\) 卷积的感受野等于一个 \(5 \times 5\) 的卷积,但参数量只有 \(2 \times 3^2 = 18\) vs \(5^2 = 25\),而且中间多了一次非线性激活,表达能力更强。

VGG-16/19 结构清晰,但参数量巨大(1.38 亿),主要集中在全连接层。

GoogLeNet / Inception(2014)

引入了 Inception 模块:同时使用 \(1 \times 1\)\(3 \times 3\)\(5 \times 5\) 卷积和池化,再拼接输出。让网络自己学习应该用哪种尺度的卷积核

\(1 \times 1\) 卷积的妙用:

  • 跨通道信息融合
  • 降维:减少通道数,从而大幅减少后续层的计算量

ResNet(2015)⭐⭐

深度学习史上最重要的架构之一。解决了一个关键问题:网络越深,训练误差反而越高(退化问题)。

残差连接(Residual Connection / Skip Connection)

\[ \mathbf{y} = \mathcal{F}(\mathbf{x}, \{W_i\}) + \mathbf{x} \]
graph LR
    X[输入 x] --> F[卷积层 F]
    F --> ADD((+))
    X -->|跳跃连接| ADD
    ADD --> Y[输出 y = F<->x + x]

为什么残差连接有效?

  • 梯度高速公路:梯度可以通过跳跃连接直接回传,不经过中间层,缓解梯度消失
  • 学习残差更容易:网络只需要学 \(\mathcal{F}(\mathbf{x}) = \mathbf{y} - \mathbf{x}\)(差值),比直接学 \(\mathbf{y}\) 更简单
  • 恒等映射兜底:最差情况下 \(\mathcal{F} = 0\),输出就是输入,网络不会因为加深而变差

ResNet 成功训练了 152 层甚至 1000+ 层的网络,残差连接也成为了现代深度网络的标配。


6. 1×1 卷积的深入理解

\(1 \times 1\) 卷积看起来不直观(只看一个像素?),但它在现代 CNN 中非常重要:

作用 说明
跨通道信息融合 将不同通道的信息线性组合
升维 / 降维 改变通道数而不改变空间尺寸,控制计算量
增加非线性 后接 ReLU,相当于在通道维度增加了一层非线性变换

\(1 \times 1\) 卷积本质上等价于对每个空间位置做一次全连接:

\[ \text{对每个位置 } (i,j): \quad \mathbf{y}_{i,j} = \mathbf{W} \cdot \mathbf{x}_{i,j} + \mathbf{b} \]

7. CNN 可视化:网络到底学到了什么?

通过可视化不同层的特征图,可以直观理解 CNN 的层次化特征提取:

层级 学到的特征 类比
浅层(Conv1-2) 边缘、颜色、纹理 看到"线条"和"色块"
中层(Conv3-4) 局部形状、纹理组合 看到"眼睛"、"轮子"
深层(Conv5+) 高级语义、物体部件 看到"人脸"、"汽车"

迁移学习的基础

浅层特征(边缘、纹理)是通用的,不同任务都能复用;深层特征与具体任务相关。这就是为什么预训练模型可以迁移到新任务——冻结浅层,只微调深层即可。


8. 现代 CNN 的设计趋势

趋势 代表 说明
更深 ResNet、DenseNet 残差/密集连接让超深网络成为可能
更轻量 MobileNet、ShuffleNet 深度可分离卷积,适合移动端
自动搜索 NAS、EfficientNet 用算法自动搜索最优架构
与 Attention 融合 ViT、ConvNeXt CNN + Transformer 混合架构

深度可分离卷积(Depthwise Separable Convolution)

MobileNet 的核心:将标准卷积分解为两步,大幅降低计算量。

标准卷积 参数量:\(K \times K \times C_{\text{in}} \times C_{\text{out}}\)

深度可分离卷积

  1. 逐通道卷积(Depthwise):每个输入通道独立用一个 \(K \times K\) 卷积核 → 参数 \(K \times K \times C_{\text{in}}\)
  2. 逐点卷积(Pointwise):用 \(1 \times 1\) 卷积跨通道融合 → 参数 \(C_{\text{in}} \times C_{\text{out}}\)

计算量压缩比:\(\frac{1}{C_{\text{out}}} + \frac{1}{K^2}\),对于 \(K=3, C_{\text{out}}=256\),约为标准卷积的 1/8 ~ 1/9