Convolutional Neural Network 卷积神经网络

CNN 通过局部感受野、权重共享和空间下采样三大机制,从网格状数据(图像、音频)中高效地逐层提取空间层次特征。 是深度学习在计算机视觉领域取得突破的核心架构。

核心设计原则

CNN 的架构受三个生物视觉系统的启发:

  • 局部感受野 (Local Receptive Field):每个神经元只关注输入的一个局部区域,而非全部像素。对应卷积操作中的卷积核大小。
  • 权重共享 (Weight Sharing):同一卷积核在整个输入上滑动,所有位置共享相同参数。大幅减少参数量,同时赋予平移不变性。
  • 空间下采样 (Spatial Subsampling):通过池化操作逐步降低特征图的空间分辨率,增大感受野范围,提取更高层次的抽象特征。

核心层类型

卷积层 (Convolutional Layer)

卷积层是 CNN 的核心计算单元。对于输入特征图 和卷积核 ,卷积操作定义为:

对于多通道输入( 个通道),卷积核为 ,每个输出通道对所有输入通道求和:

输出尺寸计算:

其中 为填充 (padding), 为步长 (stride), 为卷积核高度。

参数量优势

对于 的输入图像,全连接层需要 个参数( 为输出维度),而一个 的卷积核只需要 个参数,减少了数个数量级。

池化层 (Pooling Layer)

池化层对特征图进行下采样,降低空间维度和计算量,同时增强特征的平移不变性。

最大池化 (Max Pooling):

平均池化 (Average Pooling):

其中 是以 为中心的池化窗口区域。

全连接层 (Fully Connected Layer)

将卷积/池化层提取的空间特征展平后,通过全连接层映射到最终的分类或回归输出。现代架构中常用全局平均池化 (Global Average Pooling) 替代全连接层以减少参数。

典型 CNN 架构

架构年份深度关键创新Top-5 错误率 (ImageNet)
LeNet-519985 层卷积 + 池化的基本范式-
AlexNet20128 层ReLU、Dropout、GPU 训练16.4%
VGGNet201416/19 层全部使用 小卷积核7.3%
GoogLeNet201422 层Inception 模块(多尺度并行卷积)6.7%
ResNet2015152 层残差连接 3.6%
DenseNet2017121 层密集连接(每层与之前所有层相连)-
EfficientNet2019-复合缩放(深度/宽度/分辨率)2.9%

残差连接 (Residual Connection)

ResNet 通过引入跳跃连接解决了深层网络的退化问题:

网络只需学习残差映射 ,而非完整映射 。当恒等映射已经最优时,将残差推向零比拟合恒等映射更容易。

特征层次化

CNN 逐层提取从低级到高级的特征:

层深度特征类型示例
浅层 (1-2)边缘、纹理水平线、颜色梯度
中层 (3-5)局部模式眼睛、轮子、纹理组合
深层 (6+)高级语义人脸、物体、场景

PyTorch 示例

import torch
import torch.nn as nn
 
class SimpleCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 32, kernel_size=3, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, 2),
 
            nn.Conv2d(32, 64, kernel_size=3, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, 2),
 
            nn.Conv2d(64, 128, kernel_size=3, padding=1),
            nn.BatchNorm2d(128),
            nn.ReLU(inplace=True),
            nn.AdaptiveAvgPool2d((1, 1)),
        )
        self.classifier = nn.Linear(128, num_classes)
 
    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), -1)
        return self.classifier(x)

超参数选择

超参数常用取值说明
卷积核大小(主流)VGG 证明多个小卷积核优于大卷积核
步长 (Stride)1 或 2stride=2 可替代池化层进行下采样
填充 (Padding)same / validsame 保持空间尺寸不变
通道数逐层递增(32→64→128→…)空间缩小时增加通道数以保持信息量
BatchNorm卷积后、激活前加速收敛,允许更高学习率
Dropout全连接层中使用防止过拟合

应用领域

  • 图像分类:ImageNet、CIFAR 等基准任务
  • 目标检测:YOLO、Faster R-CNN(CNN 作为骨干网络)
  • 语义分割:FCN、U-Net(全卷积 + 上采样)
  • 图像生成:作为 GAN 判别器 / DDPM 中 U-Net 的构建模块
  • 医学影像:病变检测、CT/MRI 分析
  • 自然语言处理:TextCNN 用于文本分类

神经网络 | 机器学习 | 深度学习 | RNN | ResNet