什么是感受野(Receptive Field)?怎么扩大感受野?
简化版
感受野(Receptive Field) 指某一层特征图上的一个神经元,对应回原始输入图像上的区域大小——也就是「这个神经元的输出,是看了原图多大一块区域算出来的」。浅层神经元感受野小(只看到原图一小块,抓局部细节如边缘),深层神经元感受野大(能看到原图一大片,抓全局语义如物体整体)。感受野随着网络加深、卷积和池化的堆叠而逐层扩大。扩大感受野的方法:加深网络、增大卷积核、加池化/步长下采样、用空洞卷积(dilated conv 不增参数就扩大感受野)。感受野要足够大才能「看全」目标物体,是设计 CNN 的关键考量。
详细版
感受野定义: 特征图上一个神经元能「看到」的原始输入区域大小。
浅层:感受野小(如 3×3)→ 看到原图一小块 → 抓局部特征(边缘)
深层:感受野大(如覆盖大半张图)→ 看到大片区域 → 抓全局特征(物体)
感受野怎么逐层扩大(简化递推):
每经过一个卷积/池化层,感受野扩大:
RF_l = RF_{l-1} + (kernel_size - 1) × 累积步长
- 更深的层、更大的核、更大的步长/池化 → 感受野更大
扩大感受野的方法:
| 方法 | 效果 | 代价 |
|---|---|---|
| 加深网络(堆卷积) | 逐层累积扩大 | 计算/参数增加 |
| 增大卷积核 | 单层扩大 | 参数按核面积增加 |
| 池化 / 步长卷积 | 下采样快速扩大 | 损失分辨率 |
| 空洞卷积(dilated) | 不增参数扩大 | 可能网格效应 |
完整版教学
一、感受野是什么——神经元「看多大」
在 CNN 里,深层特征图上的一个神经元,它的值是由前一层的一个局部区域算出来的,而前一层那块区域又是由更前一层更大的区域算出来的……层层往回追溯到原始输入图像,这个神经元最终对应的原图区域,就是它的感受野。
通俗说,感受野回答:「这个神经元的输出,是综合了原图上多大一块区域的信息?」
- 感受野小:神经元只「看到」原图一小块,能感知的是局部细节。
- 感受野大:神经元能「看到」原图一大片,能感知的是全局、大范围的模式。
某层一个特征点的理论感受野,是结构上可能影响该点的输入区域。它取决于此前所有层的核、stride 和 dilation,而不只是当前卷积核大小。理论覆盖范围不等于每个像素贡献相同,训练后的有效感受野通常更集中在中心区域。
二、为什么感受野随深度增大——层次特征的基础
CNN 的感受野随网络加深而逐层扩大,这是层次特征学习的基础:
输入图 → 第1层卷积(3×3):每个神经元看原图 3×3 区域(感受野小)
→ 第2层卷积(3×3):每个神经元看第1层的 3×3,
相当于看原图 5×5 区域(感受野变大)
→ 越深的层,累积看到的原图区域越大
→ 加上池化下采样,感受野扩大更快
- 浅层神经元感受野小 → 只能看到局部,学到的是低级局部特征(边缘、颜色、纹理)。
- 深层神经元感受野大 → 能看到原图大片甚至整张 → 学到的是高级全局特征(物体部件、整体物体)。
这解释了为什么 CNN 浅层学边缘、深层学物体——感受野的大小决定了这一层「能看多大范围」,从而决定它能学多抽象的特征。
三、感受野的大致计算
感受野随层数、卷积核大小、步长而变化。简化的递推思想:
每经过一层,感受野在前一层基础上扩大:
新感受野 = 旧感受野 + (kernel_size - 1) × 之前所有层的累积步长
- 网络越深(层越多):感受野累积越大。
- 卷积核越大:单层扩大得越多。
- 步长/池化越大:因为下采样,感受野扩大得更快(累积步长增大)。
关键结论:感受野通常要覆盖任务所需的目标与上下文,但并非越大越好。如果目标物体很大、而感受野太小,深层神经元「看不全」整个物体,就难以做出正确判断。所以设计 CNN 时通常让最终感受野与目标尺度和所需上下文匹配。
四、扩大感受野的方法
1. 加深网络(堆叠卷积)。 每多一层卷积,感受野就累积扩大一点。用多个小卷积核堆叠(如两个 3×3 ≈ 一个 5×5 的感受野)既能扩大感受野,又比大核参数更少、非线性更多——这是 VGG 用堆叠 3×3 小核的思想。
2. 增大卷积核。 直接用更大的核(如 5×5、7×7)单层就能有更大感受野,但参数量按核面积增加(5×5 是 3×3 的近 3 倍参数),现代架构更倾向用小核堆叠。
3. 池化 / 步长卷积(下采样)。 池化和步长卷积缩小特征图,能快速扩大感受野(因为下采样后每个神经元对应原图更大范围),但代价是损失空间分辨率(细节丢失),对分割等需要精细定位的任务不利。
4. 空洞卷积(Dilated / Atrous Convolution)。 在卷积核的元素之间插入间隔(空洞),让核在不增加参数、不下采样的情况下覆盖更大范围:
普通 3×3 核:连续覆盖 3×3
空洞率 2 的 3×3 核:跳着覆盖 5×5 的范围(但仍只有 9 个参数)
- 好处:不增加参数、不损失分辨率就扩大感受野,非常适合语义分割(需要大感受野又要保持分辨率)。
- 代价:可能有「网格效应」(覆盖不连续,漏掉一些像素信息)。
五、感受野在实践中的意义
- 目标检测/分割:要让感受野适配不同尺度的目标;多尺度特征融合(FPN)、空洞卷积都是为了平衡感受野和分辨率。
- 小核堆叠 vs 大核:现代设计偏爱多个小核堆叠(VGG、ResNet),感受野够大、参数少、非线性强。
- 有效感受野:研究发现实际起作用的「有效感受野」比理论感受野小,且中心权重更大(近似高斯分布)——理论感受野是上界。
六、用 jump 递推三层感受野
感受野递推必须同时记录相邻特征点在输入上的间隔 jump。初始化 r₀=1,j₀=1;每层先算有效核 k_eff=d(k-1)+1,再用 r_l=r_{l-1}+(k_eff-1)j_{l-1}、j_l=j_{l-1}s_l。三层均为 3×3,stride 依次 1、2、1 时,感受野依次为 3、5、9,jump 依次为 1、2、2。
| 层 | k | s | r | j |
|---|---|---|---|---|
| 输入 | - | - | 1 | 1 |
| Conv1 | 3 | 1 | 3 | 1 |
| Conv2 | 3 | 2 | 5 | 2 |
| Conv3 | 3 | 1 | 9 | 2 |
理论感受野描述结构上可能依赖的区域,有效感受野描述梯度或贡献实际集中的区域,后者通常更小且呈中心集中。两层 3×3 比一层 5×5 省参数的结论还假设中间通道宽度相同。
只累加核大小会在出现 stride、dilation 时算错;必须同步维护 jump。
七、常见误区与追问
- 误区:三个 3×3 卷积的感受野就是 9×9。 stride 全为 1 时依次是 3、5、7,不是简单相加。
- 误区:理论感受野内所有像素贡献相同。 有效贡献往往集中在中心,训练后还受权重与非线性影响。
- 追问:stride 为什么会加速后续感受野增长? 它增大 jump,后续一个核步长覆盖到输入上的间隔更大。
- 追问:dilation 如何进入递推? 先把核替换为
d(k-1)+1的有效尺寸,再套同一公式。 - 追问:感受野越大越好吗? 过大可能增加无关上下文和计算,关键是匹配任务尺度。
八、加强记忆
感受野 = 特征图上一个神经元对应回原始输入图像的区域大小(它「看了原图多大一块」)。浅层感受野小→看局部→学低级特征(边缘);深层感受野大→看全局→学高级特征(物体),感受野随卷积/池化逐层累积扩大——这是层次特征学习的基础,并让感受野与识别所需的目标和上下文尺度匹配。扩大方法:加深网络(小核堆叠,如两个 3×3≈一个 5×5 但参数更少)、增大卷积核(参数按面积增)、池化/步长下采样(快但损失分辨率)、空洞卷积(不增参数不降分辨率就扩大,适合分割,但有网格效应)。注意实际「有效感受野」比理论值小。