Module 01 · Foundations of Convolutional Neural Networks
Strided Convolutions步长卷积
步长卷积(Stride Convolutions)是卷积神经网络(CNN)中构建卷积操作的基本组件之一。让我们通过一个例子来解释它的工作原理。
1. 步长卷积示例
假设我们有一个 7x7 的图像,以及一个 3x3 的滤波器。通常,我们在做卷积时是逐步滑动滤波器,但在步长卷积中,我们会使用一个 步长为2 的操作。
卷积步骤
- 元素乘积:首先,我们在图像的左上角应用 3x3 滤波器,进行元素逐一相乘并相加,得到结果 91。
- 滑动滤波器:然后,我们不是像往常一样滑动一步,而是 跳过两步,将滤波器横向或纵向滑动两个位置。这意味着,滤波器的起始位置从左上角跳到右上角,跳过了一个位置。
- 继续卷积:继续执行相同的操作,每次跳过两个位置并进行元素乘积和求和,得到如下的结果:
- 91 ➡ 滤波器在左上角,得到 91
- 100 ➡ 滤波器向右跳过两步,得到 100
- 83 ➡ 滤波器继续跳过两步,得到 83
- 继续按此方式对图像进行卷积,直到整个图像处理完。
最终,我们得到一个 3x3 的输出矩阵。
2. 步长卷积的数学公式
给定一个 n x n 的图像,与一个 f x f 的滤波器 进行卷积,并且使用 填充 p 和 步长 s,输出的尺寸计算公式为:
示例计算
在本例中,假设图像为 7x7,滤波器为 3x3,填充为 0,步长为 2,则输出的尺寸为:
因此,输出尺寸为 3x3。
3. 结果四舍五入的处理
当步长卷积的计算结果出现 非整数 时,我们需要对其进行下取整处理。这个过程通常被称为 地板函数(Floor Function),即将计算结果向下取整,得到最近的整数。
地板函数例子
例如,如果计算得到的输出尺寸为 2.5,则我们会将其 下取整 为 2。
4. 仅计算完全包含的区域
在进行步长卷积时,滤波器的每一次滑动都必须确保其完全位于图像或填充区域内。如果滤波器的一部分超出图像的边界,则不执行该次卷积计算。
总结
- 每次卷积操作时,滤波器必须完全位于图像内,不能部分超出边界。
- 这种约定确保了卷积操作的一致性,避免了计算错误。
5. 步长卷积的维度总结
当我们有一个 n x n 的图像,与一个 f x f 的滤波器,并使用 填充 p 和 步长 s 时,输出的尺寸为:
对于不同的 n、f、p 和 s,你可以根据此公式计算输出的尺寸,确保卷积操作的正确性。
6. 跨相关与卷积的技术细节
卷积与跨相关的差异
虽然在深度学习中,我们通常将这种操作称为 卷积,但从严格的数学定义来看,这实际上是 跨相关(Cross-correlation) 操作。
传统卷积的定义
在传统的卷积操作中,滤波器会 先进行水平和垂直翻转,然后再与图像进行元素逐一相乘并求和。这个翻转步骤在深度学习中通常被忽略,而直接使用 跨相关。
为什么忽略翻转?
- 在 深度学习文献 中,我们通常不进行翻转操作,而是直接称其为卷积。这是因为在神经网络中,翻转操作对最终结果并没有显著影响。
- 在 信号处理 或某些数学领域中,翻转操作有助于保持卷积的 结合性(Associativity),但在深度学习中并不重要。
小结与展望
- 步长卷积 是卷积操作的一个重要变种,能够通过设置步长来控制滤波器滑动的步伐,从而影响输出尺寸。
- 我们通过 公式 计算步长卷积的输出尺寸,并了解了 地板函数 如何处理非整数的情况。
- 在深度学习中,通常使用 跨相关 操作代替传统的卷积操作,尽管它在数学上是有区别的,但这不会影响实际应用中的结果。
下一步:卷积在体积上的应用
在下一个视频中,我们将讨论如何在 体积(Volumes) 上进行卷积。这将大大增强卷积操作的能力,使得卷积神经网络能够处理更复杂的输入数据。