7.2 卷积运算的数学直觉
7.2.1 卷积核到底在做什么
卷积核本质上是一个模式检测器。想象你有一个3x3的小窗口,里面装着9个数字(权重),你把这个窗口在图片上滑动,每一步计算窗口和图片局部区域的点积。不同的权重组合,检测不同的模式。
边缘检测:最经典的卷积核是Sobel算子。垂直边缘检测核 [[-1,0,1],[-2,0,2],[-1,0,1]] —— 左边是负数,右边是正数,中间是零。当它滑到图片中”左边暗、右边亮”的区域时,点积结果很大(正数),说明这里有一条垂直边缘。水平边缘检测核 [[-1,-2,-1],[0,0,0],[1,2,1]] 检测上下方向的亮度变化。
模糊/平滑:一个3x3的均值滤波器 [[1/9,1/9,1/9],[1/9,1/9,1/9],[1/9,1/9,1/9]] —— 每个像素被它自己和周围邻居的平均值替代。结果就是图片变模糊了,噪点被平滑掉。高斯模糊用的是加权平均(中间权重大,边缘权重小),比均值滤波更自然。
锐化:锐化核 [[0,-1,0],[-1,5,-1],[0,-1,0]] —— 中心权重很大(5),周围是负数(-1)。如果一个像素和周围邻居一样,结果不变;如果不一样(比如边缘处),差异被放大。锐化就是”增强边缘”。
关键洞察:卷积核的权重不是人手工设计的——是训练出来的。CNN 的第一层卷积核通常会学到类似边缘检测器的东西(检测各种方向的线条、颜色变化),第二层学到”由边缘组成的形状”(圆形、方形、角),第三层学到”由形状组成的物体部件”(眼睛、轮子、窗户),更深层学到完整物体(脸、车、建筑)。这就是 CNN 的层级特征学习——从简单到复杂,从局部到全局。
7.2.2 卷积 vs 互相关:数学上差一个翻转
在数学上,“卷积”(Convolution)和”互相关”(Cross-correlation)差一个操作:卷积会先把卷积核旋转180度,再滑动做点积;互相关不旋转,直接滑动做点积。
在深度学习里,我们用的其实都是互相关——因为卷积核的权重是训练出来的,翻不翻转都一样(反正最终学到的权重会自动适应)。但大家习惯上还是叫它”卷积”。这就是为什么 PyTorch 里的 Conv2d 实际上做的是互相关运算。
7.2.3 手算一个 3x3 卷积的例子
假设输入是一个 5x5 的灰度图(每个数字代表像素亮度,0=黑,255=白):
输入图片 (5x5):
[ 10, 20, 30, 40, 50]
[ 60, 70, 80, 90, 100]
[110, 120, 130, 140, 150]
[160, 170, 180, 190, 200]
[210, 220, 230, 240, 250]
卷积核(3x3 垂直边缘检测):
[-1, 0, 1]
[-1, 0, 1]
[-1, 0, 1]
第一步:把卷积核放在图片左上角 3x3 区域:
[ 10, 20, 30] [-1, 0, 1]
[ 60, 70, 80] · [-1, 0, 1] = (-1×10)+(0×20)+(1×30)+(-1×60)+(0×70)+(1×80)+(-1×110)+(0×120)+(1×130)
[110, 120, 130] [-1, 0, 1] = -10+0+30-60+0+80-110+0+130 = 60
第二步:向右滑动一格(stride=1),计算下一个位置:
[ 20, 30, 40] [-1, 0, 1]
[ 70, 80, 90] · [-1, 0, 1] = 60 (同样计算结果,因为每列递增10)
[120, 130, 140] [-1, 0, 1]
第三步:继续滑动,直到覆盖整个图片。最终输出一个 3x3 的特征图(因为 5x5 输入,3x3 核,valid padding,输出尺寸 = 5-3+1 = 3):
特征图 (3x3):
[60, 60, 60]
[60, 60, 60]
[60, 60, 60]
这个例子中特征图所有值都是60,因为输入的每一列都是均匀递增的(每列差异固定),垂直边缘检测核检测到的是”每列都有固定的垂直亮度变化”。如果是真实图片,特征图上不同的位置会有不同的值,亮点对应”这里有垂直边缘”的区域。
7.2.4 为什么卷积对图像特别有效
平移不变性(Translation Equivariance):如果一个特征(比如猫的耳朵)在图片中移动了位置,卷积核仍然能检测到它——输出特征图上的响应也会跟着移动。这是卷积的数学性质决定的:f(shift(x)) = shift(f(x))。池化层进一步增强了这种不变性——即使猫稍微移动了一点,池化后的特征仍然在差不多相同的位置。
局部性(Locality):图片中的像素和它附近的像素关系最紧密,和远处的像素几乎无关。卷积核的3x3或5x5感受野天然匹配这个特性——每个神经元只关注一小块区域,而不是整张图。这比全连接层高效得多。
参数效率(Parameter Efficiency):一个3x3卷积核只有9个参数,但它在整张224x224的图片上滑动,每个位置都用这9个参数。全连接层要做同样的事,需要为每个位置单独学习参数。这种参数共享是CNN在图像上碾压全连接层的核心原因。
层次化特征学习(Hierarchical Feature Learning):浅层卷积核学边缘和纹理,中层卷积核学形状和部件,深层卷积核学完整物体。这种从简单到复杂的层级结构与人类视觉皮层(V1→V2→V4→IT)的处理方式惊人地相似。
← 上一节:7.1 卷积:滑动窗口看局部 | 下一节:7.3 池化:缩小特征图 →
关联5
知识图谱局部图谱 · 点节点跳转