如是我闻: Parameter Sharing(参数共享)是卷积神经网络(CNN)的一个重要特性,帮助它高效地处理数据。参数共享的本质就是参数“本来也没有变过”。换句话说,在卷积层中,卷积核的参数(权重和偏置)是固定不变的,在整个输入上重复使用。
什么是参数共享(Parameter Sharing)?
参数共享 是指:
在卷积层中,同一个卷积核(filter)在整个输入图像上重复使用,计算所有局部区域的特征。
换句话说:
- 对于每一层的卷积操作,同一个卷积核的权重在图像的不同位置是相同的。
- 这样,模型在处理不同位置的局部区域时,使用的是相同的参数(权重)。
参数共享是如何实现的?
1. 卷积核在空间维度上的滑动:
- 假设输入是一个
32
×
32
32 \times 32
32×32的图像,卷积核大小为
3
×
3
3 \times 3
3×3:
- 卷积核会从左上角开始,逐步在图像上滑动(移动一个步长),对每个 3 × 3 3 \times 3 3×3 区域执行点积计算。
- 在滑动过程中,卷积核的参数(权重和偏置)保持不变。
- 这样,卷积核在整个图像上提取相同类型的特征(例如边缘、纹理等)。
2. 跨通道的参数共享:
- 如果输入图像有多个通道(例如 RGB 图像有 3 个通道),每个卷积核的深度与输入的通道数相同。
- 卷积核的权重在所有输入通道上共享,并综合每个通道的特征,生成一个输出值。
3. 多个卷积核产生多个特征图:
- 一层可以有多个卷积核(比如 64 个),每个卷积核学习不同的特征。
- 每个卷积核的参数是独立的,但它本身的参数在输入的不同位置是共享的。
为什么要使用参数共享?
1. 减少参数数量:
- 全连接层:
如果输入是 32 × 32 32 \times 32 32×32 的图像,假设有 1 个神经元连接整个图像,则需要 32 × 32 = 1024 32 \times 32 = 1024 32×32=1024 个参数。如果有 1000 个神经元,则需要 1024 × 1000 = 1 , 024 , 000 1024 \times 1000 = 1,024,000 1024×1000=1,024,000个参数。 - 卷积层:
使用一个大小为 3 × 3 3 \times 3 3×3的卷积核,它只有 3 × 3 = 9 3 \times 3 = 9 3×3=9 个参数(再加一个偏置,共 10 个参数),而它可以在整个图像上滑动重复使用。
因此,参数共享大幅减少了模型的参数数量,使模型更容易训练,并减少过拟合的风险。
2. 捕获空间不变性:
- 自然数据(如图像)中的某些特征是局部的和重复的。例如,边缘、角点或纹理可能出现在图像的不同位置。
- 参数共享允许卷积核在整个图像上“搜索”这些特征,而无需为每个位置单独训练一组参数。
3. 提高计算效率:
- 共享参数减少了计算量,因为在整个输入上重复使用相同的权重,而不是为每个位置训练独立的权重。
参数共享的一个具体示例
输入:
- 假设输入是一个 32 × 32 × 3 32 \times 32 \times 3 32×32×3的 RGB 图像。
卷积核:
- 使用一个大小为 3 × 3 × 3 3 \times 3 \times 3 3×3×3 的卷积核。
- 该卷积核有 3 × 3 × 3 = 27 3 \times 3 \times 3 = 27 3×3×3=27 个权重,加上 1 个偏置参数,总共有 28 个参数。
滑动操作:
- 卷积核会从左上角开始,在整个图像上滑动,逐步提取特征。
- 对于每个 3 × 3 × 3 3 \times 3 \times 3 3×3×3 的局部区域,卷积核会执行点积计算,并生成一个输出值。
- 卷积核的 28 个参数在整个 32 × 32 × 3 32 \times 32 \times 3 32×32×3 的输入上是共享的。
输出:
- 如果输出特征图的大小是 30 × 30 30 \times 30 30×30(假设没有填充),那么整个输出中包含 30 × 30 = 900 30 \times 30 = 900 30×30=900 个值,这 900 个值是由同一个卷积核生成的。
没有参数共享会怎样?
假如没有参数共享,每个位置的感受野都需要一个独立的卷积核参数:
- 如果输入是
32
×
32
×
3
32 \times 32 \times 3
32×32×3,卷积核大小为
3
×
3
×
3
3 \times 3 \times 3
3×3×3,输出大小是
30
×
30
×
1
30 \times 30 \times 1
30×30×1,那么:
- 每个位置需要独立的 3 × 3 × 3 = 27 3 \times 3 \times 3 = 27 3×3×3=27个参数。
- 总参数数目为 30 × 30 × 27 = 24 , 300 30 \times 30 \times 27 = 24,300 30×30×27=24,300。
相比之下,使用参数共享时,卷积核只需要 28 个参数(包含偏置),参数大幅减少。
卷积层的参数共享 vs 全连接层
特性 | 卷积层(参数共享) | 全连接层(无参数共享) |
---|---|---|
连接方式 | 每个卷积核只与局部区域相连,参数共享 | 每个神经元与输入的所有单元相连 |
参数数量 | 参数数量较少,参数共享 | 参数数量多,与输入规模成正比 |
特征提取能力 | 强调局部特征(如边缘、纹理),支持平移不变性 | 更适合全局特征,不支持局部模式提取 |
计算效率 | 更高,因为参数共享且局部连接 | 计算开销大,特别是高维输入 |
总的来说
-
参数共享的本质:
卷积核的权重在输入数据的不同区域共享,从而减少参数数量并提高计算效率。 -
带来的优势:
- 参数数量减少,更易训练。
- 特征共享,对输入的不同位置学习相同的模式。
- 提高模型的泛化能力,降低过拟合风险。
以上