CNN的核心组成部分
一个典型的卷积神经网络由以下几种关键层构成 :
- 卷积层 (Convolution Layers): CNN的核心,用于提取局部特征。
- 激活函数 (Activation Function): 如ReLU,为网络引入非线性。
- 池化层 (Pooling Layers): 用于对特征图进行降采样,以减少计算量并增大感受野。
- 归一化层 (Normalization): 如批量归一化 (Batch Normalization),用于加速训练并提升模型稳定性。
- 全连接层 (Fully-Connected Layers): 通常位于网络的末端,用于根据提取到的特征进行分类或回归。
Convolution Layer
Filter / Kernel
- 卷积层通过滤波器(也称核)在输入数据上滑动来工作。
- 这个滤波器是一个小的权重矩阵,它会在输入图像的空间维度上(高度和宽度)滑动,并计算所覆盖区域的点积。
- 滤波器的深度必须与输入数据的深度相同。例如,对于一个
3x32x32
的输入图像,一个5x5
的滤波器的实际尺寸是3x5x5
。
Activation Map

- 滤波器与输入图像的一个小块(例如
3x5x5
)进行点积运算,再加上一个偏置项b
,从而产生一个单一的数值。这个运算的数学表达式为 。
- 当滤波器在整个输入图像上滑动后,所有这些点积结果就共同构成了一个二维的激活图。
- 通常,我们会使用多个滤波器(例如6个
3x5x5
的滤波器),每个滤波器都会生成一个独立的激活图。这些激活图最终会堆叠在一起,形成一个新的输出卷(例如6x28x28
。


Zero Padding
- 在进行卷积操作时,如果不进行任何处理,输出的特征图尺寸会比输入时小 。例如,一个
7x7
的输入经过一个3x3
的滤波器后,输出会变为5x5
。如果网络很深,这种“缩水”现象会非常严重,导致空间信息快速丢失 。
- 零填充 (Zero Padding),即在输入卷的边界周围添加值为零的像素 。

- 假设输入宽度为 W,滤波器尺寸为 K,填充宽度为 P,则输出宽度为:
- 一个非常普遍的设置是选择填充 ,这样可以确保输出的特征图与输入的尺寸完全相同。
Receptive Fields
- 感受野指的是在输出特征图上的一个像素点,其计算结果所依赖的 原始输入区域 的大小 。一个K×K 的卷积核,其输出的每个元素都对应了输入中一个 K×K 的感受野 。
- 感受野的增长:
- 每增加一个卷积层,感受野的大小会随之扩大。具体来说,每经过一个核大小为
- 对于一个由L 个卷积层(每个核大小都为 K)组成的网络,其最终的感受野大小为: 。
K 的卷积层,感受野的尺寸会增加 K−1 。

- 问题与解决方案:
- 问题: 对于非常大的图像,如果只依靠堆叠卷积层来扩大感受野,就需要非常多的层才能让输出“看到”整个图像,这会导致网络过深且效率低下 。
- 解决方案: 在网络内部进行 降采样 (Downsample) 。这可以通过带步长的卷积 (Strided Convolution) 或 池化层 (Pooling Layers))来实现,它们都能在减小特征图尺寸的同时,有效地扩大后续层的感受野。
Strided Convolution
- 默认情况下,卷积的步长为1,意味着滤波器在输入数据上逐个像素地滑动。当我们将步长设置为大于1的数值(例如2)时,滤波器会在每次移动时“跳过”指定数量的像素 。
- 效果与目的:
- 减小输出尺寸: 这是最直接的效果。更大的步长会产生更小的输出特征图。
- 扩大感受野: 与池化层类似,带步长的卷积也是一种在不增加网络深度的前提下,有效扩大感受野的方法。
- 假设输入宽度为 W,滤波器尺寸为 K,填充宽度为 P,步长为S,则输出宽度为:
Convolution Summary

PyTorch中的卷积层
在PyTorch中,你可以使用
torch.nn
模块轻松实现不同维度的卷积:- 2D 卷积
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0)
- 1D 卷积
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0)
- 3D 卷积
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0)
Pooling Layer
池化层是另一种实现降采样 的方法 。它通常被放置在连续的卷积层之间。
主要目的:
- 减小特征图的空间尺寸,从而减少后续层的参数和计算量。
- 增大感受野 (Receptive Field),让后续的卷积层能看到更广阔的原始输入区域。
- 提供一定程度的平移不变性 。
Max Pooling

Pooling Summary/

LeNet-5 示例

Layer | Output Size | Weight Size |
1x28x28 | ㅤ | |
) | 20x28x28 | 20x1x5x5 |
20x28x28 | ㅤ | |
20x14x14 | ㅤ | |
50x14x14 | 50x20x5x5 | |
50x14x14 | ㅤ | |
50x7x7 | ㅤ | |
2450 | ㅤ | |
500 | 2450x500 | |
500 | ㅤ | |
10 | 500x10 |
- 随着网络深度的增加,空间尺寸 (高度和宽度) 会逐渐减小 。
- 同时,通道数 (深度) 会逐渐增加 。
Normalization Layers
深度网络训练起来非常困难。归一化层,特别是批量归一化 (Batch Normalization, BN),极大地改善了深度网络的训练过程 。
Batch Normalization)
核心思想: BN对一整批 (batch) 数据在每个通道上的激活值进行归一化,使其具有零均值和单位方差 。
数学过程:
- 计算批数据在每个通道 上的均值 和方差
- 对每个激活值 进行归一化。
- 通过两个可学习的参数——缩放因子
和偏移因子 ,对归一化后的值进行线性变换,以恢复其表达能力。
Problem: Estimates depend on minibatch; can’t do this at test-time!

Batch Normalization for ConvNets

Layer Normalization
在单个样本的所有通道上进行归一化。在训练和测试时行为一致,常用于RNN和Transformer。

Instance Normalization

Companion
