mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
724 字
2 分钟
卷积
2025-11-09

直观理解卷积#

卷积本质上就是”加权求和”——用一个小的窗口(卷积核)在输入上滑动,每个位置都做一次对应元素相乘再求和。

通俗点说:你不是在单独看每个像素,而是在看它和周围邻居的”关系”。

数学定义#

一维离散卷积#

z(k)=i=0N1x(i)y(ki)z(k) = \sum_{i=0}^{N-1} x(i) \, y(k-i)

可以理解为:把序列 y 翻转,然后平移 k 位,与 x 对应位置相乘求和。

二维离散卷积(图像处理用的)#

z(i,j)=m=0M1n=0N1x(m,n)y(im,jn)z(i,j) = \sum_{m=0}^{M-1} \sum_{n=0}^{N-1} x(m,n) \, y(i-m, j-n)

图像处理里用到的是”互相关”(cross-correlation),因为卷积核通常是对称的,所以实际计算时直接就是卷积核与对应位置像素相乘求和,不需要翻转。深度学习框架(PyTorch、TensorFlow)里的 Conv2D 实际做的就是互相关运算。

图像处理中的应用#

不同的卷积核提取不同的特征,下面是几个常见的:

卷积核效果
平滑/模糊核(均值滤波)去噪,但边缘也会模糊
Sobel 算子(边缘检测)提取水平/垂直边缘
高斯核加权平滑,中心权重高,边缘权重低
锐化核增强边缘和细节

一个简单的边缘检测核(Sobel 水平方向):

-1 0 1
-2 0 2
-1 0 1

这个核能检测到图像中水平方向上的亮度变化。

在 CNN 中的角色#

传统图像处理中,卷积核的值是人为设定的(比如上面那个 Sobel 核)。而在深度学习的卷积神经网络(CNN)里,卷积核的值是通过反向传播自动学习出来的,网络自己决定要提取什么样的特征。

几个关键点:

  • 局部连接:每个神经元只看输入的一个局部区域(感受野),不像全连接层那样看全局,参数少了很多
  • 权值共享:同一个卷积核在整个输入图上滑动,参数是共享的,进一步减少参数量
  • 层次化特征:浅层卷积核学到的往往是边缘、纹理之类的低级特征,深层卷积核学到的是更抽象的高级特征(如人脸、物体部件)

代码示例#

用 PyTorch 实现一个简单的卷积操作:

import torch
import torch.nn.functional as F
# 模拟一张单通道 5x5 图像
image = torch.randn(1, 1, 5, 5)
# 定义一个 3x3 的卷积核(边缘检测)
kernel = torch.tensor([[[[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]]]], dtype=torch.float32)
# 做卷积,padding=1 保持输出尺寸不变
output = F.conv2d(image, kernel, padding=1)
print(output.shape) # torch.Size([1, 1, 5, 5])

小结#

卷积这个操作从传统的信号处理一路用到深度学习,核心思想没变——用一个局部窗口提取模式。区别只在于:传统方法里核是写死的,CNN 里核是学出来的。理解卷积的滑动窗口机制,对理解 CNN 的整体结构帮助很大。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

部分信息可能已经过时

目录