菜单

卷积神经网络 (CNN)

相关源文件

本文档全面概述了卷积神经网络 (CNN),这是一种专门的神经网络架构,彻底改变了计算机视觉领域。它涵盖了 CNN 的基本组成部分、操作机制以及 LeNet、AlexNet、VGGNet 和 GoogLeNet 等经典 CNN 架构的演进。有关循环神经网络的信息,请参阅 循环神经网络 (RNN),有关生成对抗网络的信息,请参阅 生成对抗网络 (GAN)

1. CNN 的基础知识

卷积神经网络是专门为处理网格状数据(如图像)而设计的深度学习模型。与传统神经网络不同,CNN 利用执行卷积运算的专用层来检测边缘、纹理和图案等特征,然后将这些特征组合起来识别更复杂的模式。

使 CNN 在图像处理方面强大的关键创新包括:

  • 局部连接:神经元仅连接到输入的很小一部分区域,从而减少了参数量
  • 参数共享:相同的权重应用于输入中的不同位置
  • 层次化特征学习:较低层检测简单特征,而较深层识别复杂模式

CNN 架构图

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md, 英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md

2. CNN 的核心组件

2.1 卷积层

卷积层是 CNN 的基本构建块。它执行卷积运算,该运算涉及将滤波器(或核)跨输入滑动并在每个位置计算点积。此运算会产生一个特征图,突出显示输入中特定特征的存在。

卷积计算

对于二维输入,卷积运算定义为:

$$A_{i,j} = f(\sum_{m=0}^{k-1} \sum_{n=0}^{k-1} w_{m,n} x_{i+m, j+n} + w_b)$$

其中

  • $A_{i,j}$ 是位置 $(i,j)$ 的输出
  • $f$ 是激活函数(通常是 ReLU)
  • $w_{m,n}$ 是滤波器中位置 $(m,n)$ 的权重
  • $x_{i+m, j+n}$ 是位置 $(i+m, j+n)$ 的输入值
  • $w_b$ 是偏置项
  • $k$ 是滤波器的尺寸

输入尺寸、滤波器尺寸、步长和填充之间的关系如下:

$$W_2 = \frac{W_1 - F + 2P}{S} + 1$$ $$H_2 = \frac{H_1 - F + 2P}{S} + 1$$

其中

  • $W_2$, $H_2$ 是输出的宽度和高度
  • $W_1$, $H_1$ 是输入的宽度和高度
  • $F$ 是滤波器尺寸
  • $P$ 是填充尺寸
  • $S$ 是步长

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:186-232

2.2 池化层

池化层减小了特征图的空间维度,降低了计算负载,并提供了一种平移不变性。最常见的两种类型是:

  • 最大池化:取特征图窗口中的最大值
  • 平均池化:取窗口中值的平均值

对于深度为 $D$ 的特征图,池化独立应用于每个深度切片,保持原始深度。

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:260-267

2.3 全连接层

全连接层将前一层的每个神经元连接到当前层的每个神经元。在 CNN 中,这些层通常出现在网络的末端,负责:

  • 组合来自卷积层和池化层的特征
  • 执行高级推理
  • 生成最终的分类输出

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md

2.4 激活函数

CNN 通常使用非线性激活函数在模型中引入非线性。流行的选择包括:

  • ReLU (Rectified Linear Unit):$f(x) = max(0, x)$
  • Leaky ReLU:$f(x) = \begin{cases} x, & \text{if}\ x > 0 \ \alpha x, & \text{otherwise} \end{cases}$
  • Sigmoid:$f(x) = \frac{1}{1 + e^{-x}}$
  • Tanh:$f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$

ReLU 因其计算效率和缓解梯度消失问题的能力而特别受 CNN 欢迎。

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:425-456

3. CNN 操作详解

3.1 卷积操作可视化

单个输出元素的卷积操作可以可视化为,取输入中与滤波器尺寸匹配的部分,与滤波器权重进行逐元素乘法,对结果求和,加上偏置项,然后应用激活函数。

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:186-243

3.2 池化操作

在步长为 2 的 2x2 最大池化操作中,特征图被划分为不重叠的 2x2 区域,并从每个区域中选择最大值以形成下采样特征图。

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:260-267

4. CNN 架构的演进

自推出以来,CNN 架构已取得显著发展,每个新架构都解决了先前设计的局限性或引入了新颖的概念。

4.1 CNN 架构时间线

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:1-290

4.2 LeNet-5 (1998)

LeNet-5 由 Yann LeCun 开发,是第一个成功的用于手写数字识别的 CNN 架构。其结构包括:

  • 2 个卷积层(带有 5x5 核)
  • 2 个子采样(池化)层
  • 3 个全连接层
  • 总共 7 层(不包括输入)

关键创新

  • 证明了共享权重和局部感受野的有效性
  • 结合了卷积、池化和非线性激活函数
  • 建立了交替卷积层和池化层的模式

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:4-47

4.3 AlexNet (2012)

Alex Krizhevsky 创建的 AlexNet 通过在 2012 年 ImageNet 竞赛中赢得冠军,并取得了比传统方法显著更好的准确率,从而彻底改变了计算机视觉。

结构

  • 5 个卷积层
  • 3 个最大池化层
  • 3 个全连接层
  • 用于在两块 GPU 上并行训练的分离式架构

关键创新

  • 首次在 CNN 中使用 ReLU 激活函数
  • 实现了 Dropout 正则化
  • 数据增强技术
  • GPU 加速训练
  • 局部响应归一化 (LRN)

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:48-93

4.4 ZFNet (2013)

ZFNet 由 Matthew Zeiler 和 Rob Fergus 开发,改进了 AlexNet 的架构,并通过可视化技术深入了解了 CNN 的工作原理。

与 AlexNet 的主要区别

  • 第一层的滤波器尺寸更小(7x7 而不是 11x11)
  • 步长更小(2 而不是 4)
  • 早期层中更多的中间频率特征

贡献

  • 使用反卷积网络可视化 CNN 特征图
  • 对不同层中特征表示的更好理解
  • 展示了如何诊断和改进 CNN 模型

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:96-143

4.5 Network in Network (NiN) (2013)

Network in Network 由 Min Lin 提出,通过用更强大的微型神经网络替换线性卷积,引入了一种新的 CNN 设计方法。

关键创新

  • MLPConv 层:使用多层感知机处理每个局部块
  • 全局平均池化:替换了末尾的全连接层
  • 1x1 卷积:执行跨通道的特征变换

影响

  • 用更少的参数提高了表示能力
  • 影响了 GoogLeNet 等后续架构

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:144-175

4.6 VGGNet (2014)

VGGNet 由牛津大学视觉几何小组开发,强调简洁和深度,表明更深层次、结构更简单的网络可以获得更好的性能。

主要特性

  • 在整个网络中使用小型 3x3 滤波器的统一架构
  • 16-19 层(VGG16 和 VGG19 变体)
  • 堆叠 3x3 卷积而不是更大的滤波器
  • 具有一致滤波器尺寸的简单设计

优点

  • 证明了网络深度的重要性
  • 多个小型滤波器比单个大型滤波器更有效
  • 通过迁移学习更容易训练

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:176-222

4.7 GoogLeNet/Inception (2014)

GoogLeNet 由 Google 研究人员开发,引入了 Inception 模块,可以在保持计算效率的同时实现更宽更深的网络。

Inception 模块特性

  • 具有不同滤波器尺寸(1x1、3x3、5x5)的并行卷积路径
  • 1x1 卷积用于降维
  • 并行路径输出的拼接

关键创新

  • 高效的多尺度特征提取
  • 用于降维的网络内网络方法
  • 用于更深网络训练的辅助分类器
  • 全局平均池化以最小化参数

通过多次迭代(v1-v4),Inception 架构不断发展,性能和效率不断提高。

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md:223-261

5. CNN 架构比较

下表比较了经典 CNN 架构的关键方面:

架构深度关键创新参数数量Top-5 错误率 (ImageNet)
LeNet-519987首个成功的 CNN约 60K不适用(未在 ImageNet 上测试)
AlexNet20128ReLU、Dropout、GPU 训练约 60M15.3%
ZFNet20138可视化、更好的参数调整约 60M11.2%
NiN2013可变MLPConv、1x1 卷积、全局平均池化约 7.5M不适用
VGG16201416统一的 3x3 滤波器、更深的架构约 138M7.3%
GoogLeNet201422Inception 模块、1x1 降维约 6.8M6.7%

来源:英文版/ch04_ClassicNetwork/ChapterIV_ClassicNetwork.md

6. CNN 实现的实际考虑

6.1 CNN 中常用的激活函数

虽然存在许多激活函数,但 CNN 通常使用:

  • ReLU:由于计算效率高且梯度消失问题减轻,最常用
  • Leaky ReLU:通过允许负输入有微小梯度来解决“死亡 ReLU”问题
  • ELU/SELU:ReLU 的更平滑替代品,具有更好的收敛性
  • Sigmoid/Tanh:在旧架构中使用,但在现代 CNN 中通常避免使用

选择激活函数时:

  1. 如果不确定,请从 ReLU 开始
  2. 如果遇到死神经元,请尝试 Leaky ReLU
  3. 仅在二元分类输出层中使用 sigmoid

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:495-503

6.2 批量归一化和正则化

批量归一化通过对层输入进行归一化来帮助稳定和加速 CNN 训练。CNN 还采用各种正则化技术:

  • Dropout:在训练期间随机禁用神经元
  • 权重衰减:L1/L2 正则化以防止过拟合
  • 数据增强:通过转换人工扩充训练数据

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:715-740

6.3 CNN 训练中的常见挑战

  • 梯度消失/爆炸:通过适当的初始化、归一化和激活函数来解决
  • 过拟合:通过正则化、数据增强和适当的模型容量来应对
  • 计算需求:通过高效的架构和硬件加速来管理

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md:103-121

7. CNN 框架关系

下图展示了 CNN 组件在典型深度学习框架中的交互方式。

来源:英文版/ch03_DeepLearningFoundation/ChapterIII_DeepLearningFoundation.md

8. 总结

卷积神经网络通过其自动从数据中学习层次化特征的能力,革新了计算机视觉及相关领域。从 LeNet-5 到 GoogLeNet 等复杂架构的演进,说明了 CNN 设计的快速进步,每一代都解决了先前模型的局限性。

现代 CNN 研究继续探索更高效的架构、迁移学习技术以及超越图像分类的应用,例如对象检测、分割和生成建模。理解本文档提供的 CNN 基础知识,为探索这些高级主题奠定了基础。