1. 卷积运算的等效矩阵乘法表示
在 torch 等框架的底层实现中,为了利用高度优化的矩阵运算库(如BLAS),卷积或互相关运算通常被转换为等效的矩阵乘法。这种转换可以通过重塑输入张量或卷积核张量来实现。
为简化,我们分析一下2D互相关运算,其定义如下,其中输入为 ,核为 ,输出为 。
方法一:重塑输入张量 (im2col)
此方法的核心思想是将输入张量 变换为一个中间矩阵 ,使得互相关运算可以表示为一次矩阵乘法。
-
向量化卷积核: 将卷积核 按行优先(或列优先)的顺序展平为一个列向量 。
-
构建输入矩阵 : 对于输出 中的每一个元素 ,其值是由核 与输入 中一个大小为 的局部区域(感受野)进行点积得到的。我们将这个局部区域展平,使其成为 的一个行向量。
具体而言, 矩阵的维度为 。它的每一行对应于输出 的一个位置,每一列对应于卷积核的一个位置。矩阵的第 行,其中 ,是由输入张量 中以 为左上角(假设步长为1)的 子矩阵展平得到的向量。
-
等效矩阵乘法: 现在,输出张量 的向量化形式 可以通过一次矩阵乘法得到:
这种被称为
im2col
(image-to-column) 的技术,将问题转化为了通用矩阵乘法(GEMM),从而能够利用硬件和软件层面的高度优化。其代价是需要消耗额外的内存来存储中间矩阵 。
方法二:重塑卷积核张量 (Toeplitz 矩阵)
此方法保持输入张量 的向量化形式不变,而是将卷积核 扩展为一个巨大的、稀疏的结构化矩阵 。
-
向量化输入: 将整个输入张量 展平为一个列向量 。
-
构建卷积矩阵 : 是一个维度为 的矩阵。它的每一行对应于输出 的一个元素 。该行的非零元素是卷积核 的所有权重,它们被放置在特定的位置上,以便在与 相乘时,能够精确地选中输入 中对应的局部区域。
例如,要计算 , 的第一行会将核的权重 放置在与输入 相对应的列上,而所有其他位置均为0。这种结构使得该矩阵成为一个多重分块托普利茨矩阵 (multiply blocked Toeplitz matrix)。
-
等效矩阵乘法: 输出张量的向量化形式由下式给出:
虽然这种方法在理论上很优雅,但在实践中很少使用,因为构建和存储巨大且稀疏的 矩阵在计算和内存上都非常低效。
2. 手动设计卷积核
卷积核本质上是用于特征提取的模板。在数字图像处理中,可以通过手动设计核函数来实现特定的图像滤波效果,如边缘检测、模糊、锐化等。这些核的设计通常基于有限差分的思想,即用离散的像素值差异来近似连续的导数运算。
二阶导数的核
二阶导数用于衡量信号的曲率,在图像中对应于强度变化的剧烈程度,常用于边缘检测。拉普拉斯算子(Laplacian Operator)是二维二阶导数的一种常用形式,其定义为 。
我们可以用中心差分来近似二阶偏导数:
若令像素间距 ,则其离散形式的权重为 [1, -2, 1]
。同理, 的权重在垂直方向上也是 [1, -2, 1]
。
将两者相加,便得到了拉普拉斯算子的卷积核:
有时也会使用包含对角线方向的近似,得到另一种常见的核:
积分的核
积分运算在离散信号上对应于求和。一个卷积核可以用来计算一个局部区域的加权和。最简单的积分形式是计算一个邻域内所有像素值的总和,这可以通过一个所有元素都为1的核来实现。
将此核与图像进行卷积,输出的每个像素值等于其输入邻域(大小为 )的总和。如果将核的所有元素除以其总和(在此例中为9),则该运算变为均值滤波或盒状模糊(Box Blur),这是一种低通滤波器。
需要注意的是,标准的卷积运算计算的是一个局部积分(或移动平均)。要实现一个真正的、从起点开始的累积积分(Cumulative Sum),需要使用递归公式,这不属于标准的前馈卷积操作范畴,而更接近于无限冲激响应(IIR)滤波器的概念。
3. d次导数的最小核尺寸
我们可以通过归纳法来确定计算d次导数的最小卷积核尺寸。
-
基础:
- d=1 (一阶导数): 其中心差分近似为 ,对应的最小非对称核为 (前向差分)或 (后向差分)。为覆盖一个完整的差分操作,需要的最少点数为2。因此,最小核尺寸为 2。
- d=2 (二阶导数): 其中心差分近似为 。这需要覆盖3个相邻的点。因此,最小核尺寸为 3。其核为
[1, -2, 1]
。
-
归纳步骤: 注意到,一个 阶导数的差分算子,可以通过一个 阶导数的差分算子与一个1阶导数的差分算子进行卷积得到。例如:
这里为了方便理解,使用了非对称的一阶导数核。
假设计算d次导数所需的最小核尺寸为 。则计算 次导数,相当于对d次导数的结果再进行一次一阶导数运算。根据卷积的性质,两个尺寸分别为 和 的核进行卷积后,得到的核尺寸为 。
我们已知 。所以:
这是一个首项为 ,公差为1的等差数列。因此,其通项公式为:
-
结论: 在离散信号上,使用有限差分来近似d次导数,所需的最小卷积核尺寸为 d+1。