在这些应用领域中,卷积通常作为一个过滤器执行,用于将信号和像素转换为更理想的值。
在高性能计算中,卷积模式通常被称为模板计算。卷积通常涉及对每个数据元素进行大量的算术运算。每个输出数据元素可以独立于其他元素计算,这是并行计算的理想特性。另一方面,输出数据元素之间存在大量的输入数据共享,边界条件有一定挑战性。这使得卷积成为复杂的平铺方法和输入数据预处理方法的重要用例。
卷积是一种数组操作,其中每个输出数据元素是邻近输入元素的加权和。加权和计算中使用的权重由输入掩码数组定义,通常称为卷积核。我们将这些掩码数组称为卷积掩码。通常,相同的卷积掩码用于数组的所有元素
下面显示了一个一维数据的卷积示例,其中应用了一个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))。
因此,单个 卷积层 是:
- 卷积(线性加权和)。
- 激活(非线性)。
这种组合使得CNN能够学习复杂的非线性映射。
6. 堆叠层 → 深度特征层次
一个完整的CNN只是许多层的:
- 卷积 → 激活(→ 有时池化)。
直觉:
- 早期层: 检测简单的东西(边缘,斑点)。
- 中间层: 将它们组合成纹理,形状。
- 后期层: 将形状组合成物体部件和物体。
所有这些仍然是建立在你理解的同一个基本元素之上: “对本地邻域进行加权求和。”
7. 连接到全连接(密集)层
一个 全连接层 也是仅仅是加权求和:
- 输入:一维向量。
- 输出单元 = (权重 × 输入)之和 + 偏差。
区别:
- 密集层:每个输出单元使用 所有 输入元素。
- 卷积层:每个输出单元仅使用 局部邻域 (稀疏连接)并 跨位置共享权重。
因此,你可以将CNN视为:
- 一种巧妙地使用卷积运算来获得:
- 局部性(附近像素更重要)。
- 权重共享(在所有位置使用相同的核)。
- 参数比全图像上的密集层少。
结论:从简单操作到强大的网络
"At each position, take neighbors and compute a weighted sum with a kernel,"那么你已经站在了CNNs背后的核心思想之上。
CNNs拿着那个简单的构建块并:
- 将其从1D数组扩展到2D/3D张量。
- 并行应用多个不同的核以产生丰富的特征图。
- 添加非线性以摆脱纯线性。
- 堆叠许多这样的层,以便每个阶段“看到”更抽象的结构。
CNNs的魔力不是一种新的数学——而是将许多小的、局部的卷积操作组合成一种深度架构,可以学习强大的视觉表示。