Coursera 笔记

Module 01 · Foundations of Convolutional Neural Networks

Strided Convolutions步长卷积

Coursera ↗

步长卷积(Stride Convolutions)是卷积神经网络(CNN)中构建卷积操作的基本组件之一。让我们通过一个例子来解释它的工作原理。


1. 步长卷积示例

假设我们有一个 7x7 的图像,以及一个 3x3 的滤波器。通常,我们在做卷积时是逐步滑动滤波器,但在步长卷积中,我们会使用一个 步长为2 的操作。

卷积步骤

  1. 元素乘积:首先,我们在图像的左上角应用 3x3 滤波器,进行元素逐一相乘并相加,得到结果 91。
  2. 滑动滤波器:然后,我们不是像往常一样滑动一步,而是 跳过两步,将滤波器横向或纵向滑动两个位置。这意味着,滤波器的起始位置从左上角跳到右上角,跳过了一个位置。
  3. 继续卷积:继续执行相同的操作,每次跳过两个位置并进行元素乘积和求和,得到如下的结果:
  • 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) 上进行卷积。这将大大增强卷积操作的能力,使得卷积神经网络能够处理更复杂的输入数据。