一文看懂填充与步幅
博客标题:卷积神经网络的“尺子”与“画框”:一文看懂填充与步幅
发布日期: 2026年3月6日
标签: 人工智能, 深度学习, 卷积神经网络, 计算机视觉
在构建卷积神经网络(CNN)时,我们经常面临两个看似矛盾的需求:有时候我们希望图像经过处理后尺寸不变,保留所有细节;有时候我们又希望快速缩小图像尺寸,以减少计算量。如何实现这种灵活的控制?答案就在于两个关键的超参数——填充(Padding)和步幅(Stride)。
如果你觉得这两个词听起来很学术,没关系。我们可以把它们想象成处理图像时的“画框”和“尺子”。接下来,让我们通过通俗的比喻和实例,深入浅出地解析它们的工作原理。
一、 为什么要关注尺寸?(问题的由来)
在正式介绍填充和步幅之前,我们需要先了解一个基础公式。
假设你有一张 $240 \times 240$ 像素的照片(输入),你用一个 $5 \times 5$ 的“小窗口”(卷积核)在照片上滑动进行计算。你会发现,算出来的结果(输出)尺寸会变成 $236 \times 236$。虽然只少了4个像素,但如果你连续进行10层这样的计算,图像就会缩小到 $200 \times 200$。
这就好比用一把比原图稍短的尺子去量布,量一次就短一截。连续的卷积操作会导致图像迅速缩小,甚至丢失边缘的重要信息。
为了解决这个问题,我们需要引入“填充”和“步幅”这两个工具。
二、 填充(Padding):给图像加个“画框”
1. 什么是填充?
想象一下,你有一幅珍贵的画(输入图像),但画框太小,导致画的边缘被遮挡了。为了保护边缘并让画能放进标准尺寸的框里,你决定在画的四周贴上一圈白纸(通常是0值),然后再装框。
在深度学习中,**填充(Padding)**就是这个在图像边缘添加额外像素(通常是0)的过程。
2. 填充的作用
- 保留边缘信息:不加填充时,图像角落的像素只被计算一次,而中心像素被计算多次。加了填充后,边缘像素也能作为“中心”参与运算,防止信息丢失。
- 控制尺寸:通过巧妙地添加边框,我们可以让输出的图像尺寸和输入完全一样。
3. 一个简单的例子
- 场景:输入图像 $8 \times 8$,卷积核 $3 \times 3$。
- 如果不填充:输出会变成 $6 \times 6$(变小了)。
- 如果填充:我们在图像四周各加1圈像素(Padding=1),图像变成 $10 \times 10$。经过卷积后,输出神奇地回到了 $8 \times 8$。
- 结论:只要设置
padding = (kernel_size - 1) / 2(通常核大小是奇数),就能做到“进多少出多少”。
三、 步幅(Stride):调整“尺子”的跨度
1. 什么是步幅?
在前面的例子中,我们默认“小窗口”每次只移动1个像素。但如果这个窗口每次移动2个、3个甚至更多像素呢?
**步幅(Stride)**就是指卷积核在图像上滑动时,每次移动的像素数。
2. 步幅的作用
- 快速降维:如果步幅设为2,窗口每次跳两格,扫过的区域就少了一半。这能大幅降低图像的宽度和高度。
- 提高效率:当图像分辨率过高(比如4K照片)时,我们不需要那么精细的像素,利用大步幅可以快速提取特征,减少计算量。
3. 一个直观的例子
- 场景:同样是一张大图,步幅为1时,我们需要计算100次;如果步幅设为2,我们只需要计算约25次(因为长宽都减半了)。
- 效果:输出尺寸直接从 $100 \times 100$ 变成了 $50 \times 50$。
四、 总结:一张表看懂参数搭配
为了方便记忆,我们可以将这两个概念总结如下:
| 概念 | 俗称 | 核心功能 | 对图像尺寸的影响 | 典型设置 |
|---|---|---|---|---|
| 填充 (Padding) | 加边框 | 保护边缘,防丢失 | 增大或保持尺寸 | same (保持原尺寸) |
| 步幅 (Stride) | 跨大步 | 压缩数据,提效率 | 减小尺寸 | 2 (尺寸减半) |
五、 结语
在现代深度学习框架(如PyTorch、TensorFlow)中,我们只需要在代码里简单设置 padding=1 或 stride=2,就能轻松控制网络的结构。
理解了填充和步幅,你就掌握了卷积神经网络中调整数据维度的“秘籍”。它们就像建筑中的地基和梁柱,决定了整个网络的结构稳定性与计算效率。下次在构建模型时,不妨多留意一下这两个参数的设置,看看它们是如何塑造你的特征图的。