面试官:给我讲一下卷积吧!

推荐直接网站在线阅读:aicoting.cn

卷积(Convolution)是深度学习中最核心、最常用的运算之一,尤其在图像处理、语音识别和自然语言处理中扮演着关键角色。它通过滑动窗口的方式提取局部特征,能够有效捕捉数据中的空间或时间结构,是卷积神经网络(CNN)的基础。

所有相关文档、源码示例、流程图与面试八股,我也将持续更新在AIHub,欢迎关注收藏!

卷积

卷积(Convolution)是深度学习中最核心、最常用的运算之一,尤其在图像处理、语音识别和自然语言处理中扮演着关键角色。它通过滑动窗口的方式提取局部特征,能够有效捕捉数据中的空间或时间结构,是卷积神经网络(CNN)的基础。

卷积的数学定义

在数学上,卷积是一种积分或求和运算,用于衡量一个函数在另一个函数上的重叠程度。

  • 连续形式: ( f ∗ g ) ( t ) = ∫ − ∞ + ∞ f ( τ ) g ( t − τ )   d τ (f * g)(t) = \int_{-\infty}^{+\infty} f(\tau) g(t - \tau) \, d\tau (f∗g)(t)=∫−∞+∞f(τ)g(t−τ)dτ
  • 离散形式(用于深度学习中的数值计算): ( f ∗ g ) n = ∑ m = − ∞ + ∞ f m   g n − m (f * g)n = \sum_{m=-\infty}^{+\infty} fm \, gn-m (f∗g)n=∑m=−∞+∞fmgn−m

其中, f f f 表示输入信号, g g g 表示卷积核(或滤波器), n n n 表示位置。

在图像处理中,卷积一般是二维的: ( F ∗ K ) ( i , j ) = ∑ m ∑ n F ( i + m , j + n )   K ( m , n ) (F * K)(i,j) = \sum_m \sum_n F(i+m, j+n) \, K(m,n) (F∗K)(i,j)=∑m∑nF(i+m,j+n)K(m,n)

其中 F F F 是输入图像, K K K 是卷积核。

卷积的核心思想

  1. 局部感受野:卷积核只关注输入数据的一小部分区域(例如图像的一个小块),类似人眼视觉系统的局部观察。
  2. 权值共享:同一个卷积核在不同位置滑动时使用相同的参数,极大减少了模型参数数量。
  3. 平移不变性:卷积能在不同位置检测相同的模式,例如边缘、角点、纹理等特征。

卷积在图像中的操作

  • 卷积核 (Kernel/Filter):一个小矩阵,例如 3 × 3 3\times3 3×3 或 5 × 5 5\times5 5×5,用来提取特定特征。
  • 步幅 (Stride):卷积核每次移动的步长。步幅越大,输出特征图越小。
  • 填充 (Padding):为了不丢失边界信息,可以在输入周围补零。

例如,一个 5 × 5 5\times5 5×5 的图像与一个 3 × 3 3\times3 3×3 卷积核做卷积,如果步幅为 1 且无填充,输出结果是一个 3 × 3 3\times3 3×3 特征图。

卷积的作用

  • 低级特征提取:浅层卷积层通常检测边缘、纹理等简单特征。
  • 高级特征组合:深层卷积层将低级特征组合成复杂模式,如物体的局部结构甚至完整物体。
  • 降维与压缩:通过池化层结合卷积,可逐步减少数据维度,保留重要信息。

卷积的应用举例

边缘检测(Sobel 卷积核)

用于提取图像中的边缘:

  • 水平边缘检测核: K x = − 1 0 1 − 2 0 2 − 1 0 1 K_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Kx= −1−2−1000121
  • 垂直边缘检测核: K y = − 1 − 2 − 1 0 0 0 1 2 1 K_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} Ky= −101−202−101

把这些卷积核应用到图像上,就能突出水平或垂直方向的边缘。

模糊(均值卷积核)

K = 1 9 1 1 1 1 1 1 1 1 1 K = \frac{1}{9} \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} K=91 111111111

对每个像素取邻域的平均值,实现平滑效果。

锐化(高通滤波器)

K = 0 − 1 0 − 1 5 − 1 0 − 1 0 K = \begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix} K= 0−10−15−10−10

能增强图像细节,使边缘更加清晰。

下面我们用 PyTorch 实现卷积操作:

python 复制代码
I_xray = imread('image/xray_image.png')[::4,::4]
# make sure to copy, otherwise they reference the same memory (same variable)
I_xray_sharp = I_xray.copy()

im_size = I_xray.shape

#### your code starts ####
## step 1. create the kernel matrix
# kernel = np.array([[-1, -1, -1],
#                    [-1, 7, -1],
#                    [-1, -1, -1]])
kernel = np.array([[0, -1, 0],
                   [-1, 5, -1],
                   [0, -1, 0]])
## step 2 & 3. modify the median filter code for filtering
# 卷积核大小
psz_h = 1

# 使用块级操作进行锐化滤波
for row in range(psz_h, im_size[0] - psz_h):
    for col in range(psz_h, im_size[1] - psz_h):
        # 提取 3x3 的图像块
        patch = I_xray[row - psz_h: row + psz_h + 1, col - psz_h: col + psz_h + 1]
        # 进行卷积操作:元素乘积并求和
        I_xray_sharp[row, col] = np.sum(patch * kernel)

# 将值限制在 0 到 255 之间,防止溢出
I_xray_sharp = np.clip(I_xray_sharp, 0, 255).astype(np.uint8)

#### your code starts ####

plt.subplot(121)
plt.imshow(I_xray, cmap='gray');plt.axis('off');plt.title('original')
plt.subplot(122)
plt.imshow(I_xray_sharp, cmap='gray');plt.axis('off');plt.title('sharp')

运行结果如下,可以看到锐化效果还是很明显的

卷积的优势在于参数量远小于全连接网络,自然具备特征提取能力,适合处理高维数据(如图像、视频),但是卷积对全局依赖建模较弱,并且卷积核大小和设计需要人工选择,所以在 NLP 等任务中逐渐被 Transformer 替代。

卷积作为深度学习的基石,极大推动了神经网络在计算机视觉、语音识别和 NLP 中的成功。它以局部感知、权值共享和平移不变性为特征,使得神经网络能够高效处理高维结构化数据。虽然新的架构(如 Transformer)在部分领域崛起,但卷积依然是深度学习的重要基础算子。

📚推荐阅读

一文搞懂卷积神经网络!

面试官:正则化都有哪些经典的方法?

面试官:你在训模型的时候经常使用的学习率策略有哪些?

面试官:深度学习中经典的优化算法都有哪些?

一文搞懂深度学习中的通用逼近定理!

一文搞懂深度学习中的表征学习理论!

一文搞懂深度学习中的信息论!

一文搞懂深度学习的反向传播与优化理论!

最新的文章都在公众号aicoting更新,别忘记关注哦!

作者:aicoting

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!

相关推荐
Hello:CodeWorld29 分钟前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi82 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
mONESY3 小时前
JavaScript 栈、队列、数组与链表核心知识点总结
javascript·面试
贺国亚3 小时前
电商AI辅助交易场景
面试
youngerwang3 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
chase_my_dream3 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
想要成为糕糕手3 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
KaMeidebaby3 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
手写码匠4 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
swipe4 小时前
做多轮对话 Agent,为什么我建议把短期记忆放到 Redis
后端·面试·llm