Published · 5 min read

从数组运算到CNNs:卷积

在这些应用领域中,卷积通常作为一个过滤器执行,用于将信号和像素转换为更理想的值。

在高性能计算中,卷积模式通常被称为模板计算。卷积通常涉及对每个数据元素进行大量的算术运算。每个输出数据元素可以独立于其他元素计算,这是并行计算的理想特性。另一方面,输出数据元素之间存在大量的输入数据共享,边界条件有一定挑战性。这使得卷积成为复杂的平铺方法和输入数据预处理方法的重要用例。

卷积是一种数组操作,其中每个输出数据元素是邻近输入元素的加权和。加权和计算中使用的权重由输入掩码数组定义,通常称为卷积核。我们将这些掩码数组称为卷积掩码。通常,相同的卷积掩码用于数组的所有元素

下面显示了一个一维数据的卷积示例,其中应用了一个5元素的卷积掩码数组M到一个7元素的输入数组N。

对于图像处理和计算机视觉,输入数据通常是二维数组,具有x-y空间中的像素。图像卷积因此是二维卷积。掩码不必是正方形数组。


1. 从一维到二维卷积

您知道一维卷积:

  • 输入: 一维数组(例如 [x0, x1, x2, ...])
  • 核: 小的一维数组(例如 [w0, w1, w2])
  • 操作: 滑动核并取加权和。

对于 图像,输入是二维(高度 × 宽度),因此:

  • 输入: 像素矩阵,形状 H × W
  • 核: 小矩阵,例如 3 × 3 或 5 × 5
  • 操作: 将核放在图像的每个 3 × 3 区块上,逐元素乘积,求和 → 一个输出像素。

这只是你已经知道的相同想法,但:

  • 数组 → 2D 数组(矩阵)。
  • 邻近的“元素” → 2D 中的邻近像素。

2. 多个通道(例如,RGB)

真实图像不仅仅是 2D,它们通常具有 通道:

  • 形状:H × W × C(例如,C = 3 代表 R、G、B)。
  • 然后 核 也具有深度 C:
    • 形状:kH × kW × C。

卷积步骤:

  • 对于一个位置,取一个小立方体:kH × kW × C。
  • 将其与核kH × kW × C进行元素-wise 乘法。
  • 将所有值相加 → 1 个数字(一个输出通道值在该位置)。

因此,概念上:3D 卷积运算在空间和通道上,但仍然只是“邻居的加权和”。


3. 滤波器(核)和特征图

在 CNN 中,你不仅使用一个核;你使用 多个:

  • 假设你使用 F 个不同的核。
  • 每个核的形状为 kH × kW × C_in。
  • 每个核产生 一个输出通道,称为 特征图。

因此,如果输入形状为:

  • H × W × C_in,

如果使用 F 核函数,输出形状变为:

  • H_out × W_out × F。

每个输出通道 F 捕获不同的模式类型:

  • 一个核函数可能学习检测 边缘,另一个检测 角落,另一个检测 纹理 等。

思考: “一个 CNN 层 = 应用多个不同的卷积(滤波器)到输入。”


4. 步长和填充

两个与数组相关的细节:

  • 步长: 每一步移动核函数的距离。
    • 步长 1:每次移动 1 个像素 → 密集输出。
    • 步长 2:每次跳过一个像素 → 输出变小。
  • 填充: 在图像边界周围添加零。
    • 没有填充,输出会变小。
    • 有填充,可以保持相同的高度/宽度。

从数学上讲,它仍然只是滑动窗口和点积,但具有对以下的控制:

  • 你滑动的距离(步长)。
  • 是否丢失边界信息(填充)。

5. 非线性:添加激活函数

到目前为止,所有都是 线性 的:加权和。一个 CNN 层添加 非线性:

  • 卷积后,逐元素应用激活函数
    (例如,ReLU(x) = max(0, x))。

因此,单个 卷积层 是:

  1. 卷积(线性加权和)。
  2. 激活(非线性)。

这种组合使得CNN能够学习复杂的非线性映射。


6. 堆叠层 → 深度特征层次

一个完整的CNN只是许多层的:

  • 卷积 → 激活(→ 有时池化)。

直觉:

  • 早期层: 检测简单的东西(边缘,斑点)。
  • 中间层: 将它们组合成纹理,形状。
  • 后期层: 将形状组合成物体部件和物体。

所有这些仍然是建立在你理解的同一个基本元素之上: “对本地邻域进行加权求和。”


7. 连接到全连接(密集)层

一个 全连接层 也是仅仅是加权求和:

  • 输入:一维向量。
  • 输出单元 = (权重 × 输入)之和 + 偏差。

区别:

  • 密集层:每个输出单元使用 所有 输入元素。
  • 卷积层:每个输出单元仅使用 局部邻域 (稀疏连接)并 跨位置共享权重。

因此,你可以将CNN视为:

  • 一种巧妙地使用卷积运算来获得:
    • 局部性(附近像素更重要)。
    • 权重共享(在所有位置使用相同的核)。
    • 参数比全图像上的密集层少。

结论:从简单操作到强大的网络

"At each position, take neighbors and compute a weighted sum with a kernel,"

那么你已经站在了CNNs背后的核心思想之上。

CNNs拿着那个简单的构建块并:

  • 将其从1D数组扩展到2D/3D张量。
  • 并行应用多个不同的核以产生丰富的特征图。
  • 添加非线性以摆脱纯线性。
  • 堆叠许多这样的层,以便每个阶段“看到”更抽象的结构。

CNNs的魔力不是一种新的数学——而是将许多小的、局部的卷积操作组合成一种深度架构,可以学习强大的视觉表示。

准备好精准招聘了吗?

免费开始,邀请整个团队,15 分钟内看到第一位已评分的候选人。

zh