ML ML Learning Lab
12 / 14
第 12 步 · 看见网络"看"到了什么

卷积神经网络Convolutional Neural Network

卷积核滑动、特征图、池化 — 亲眼看到网络"看"到了什么

12 分钟
阅读 + 实操
1 个
交互演示
中级
难度

CNN 卷积可视化 · 交互演示

输入28×28
卷积核3×3
步长1
输入图像 28x28
卷积核 3x3
特征图 (Conv+ReLU)
MaxPool 2x2
输入图像
卷积核
步长

为什么学这步?

图像里相邻像素强相关,模式是局部的(一条边、一个角)。全连接网络参数爆炸且丢失空间结构。CNN 用卷积核滑动捕捉局部模式,参数共享大幅减少参数量。它是计算机视觉的基石,也是理解 ResNet、ViT 等现代视觉模型的前提。

📌 发生了什么

  • 3×3 卷积核在图像上滑动,每个位置做加权求和。
  • ReLU 把负数归零,只保留激活信号。
  • MaxPool 取 2×2 窗口最大值,降采样并扩大感受野。

⚠️ 常见陷阱

  • CNN 只能处理图像?不是,只要数据有局部相关性就适用。
  • 核越多越深越好?不一定,容易过拟合且可能梯度消失。
  • 池化只是缩小图片?不只是,还带来平移不变性。

本章小结

  • 卷积核:3×3 窗口滑动做加权求和。
  • ReLU + MaxPool:引入非线性 + 降采样。
  • 层级特征:浅层检测边/角,深层组合成形状/物体。

📐 卷积运算与参数共享

CNN 的核心是卷积运算:一个小的卷积核在图像上滑动,每个位置做加权求和,提取局部特征。

输出尺寸由输入大小 W、卷积核大小 K、填充 P、步长 S 决定:

参数共享:同一个卷积核在所有空间位置复用,参数量与图像大小无关:

感受野随层数增长。L 层 3×3 卷积的感受野为 2L+1,指数级覆盖整张图像:

🎛 卷积核数量对比

卷积核数量决定能检测多少种特征。太少漏检,太多则计算量大且易过拟合。

核数量 表现 结果
1 个核 只能检测单一特征(如竖直边缘) 欠拟合
8 个核 多方向边缘 + 纹理,平衡效率 推荐
32 个核 丰富特征检测,计算量增大 需正则化
128 个核 参数爆炸,训练慢,易过拟合 不推荐

💡 经验法则:浅层用少核(8-16),深层逐渐加倍(32→64→128),配合池化逐层压缩。

💻 卷积前向传播 + ReLU + MaxPool

单层卷积的前向传播:卷积 → ReLU → 最大池化(Python):

import numpy as np

# 2D 卷积:核在图像上滑动做加权求和
def conv2d(image, kernel, stride=1):
    k_size = kernel.shape[0]
    out_size = (image.shape[0] - k_size) // stride + 1
    out = np.zeros((out_size, out_size))
    for i in range(out_size):
        for j in range(out_size):
            s = 0.0
            for m in range(k_size):
                for n in range(k_size):
                    s += image[i * stride + m, j * stride + n] * kernel[m, n]
            out[i, j] = s
    return out

# ReLU:负数变 0
def relu(x):
    return np.maximum(0, x)

# 2x2 最大池化:取每个 2x2 窗口的最大值
def max_pool_2x2(image):
    h, w = image.shape
    out = np.zeros((h // 2, w // 2))
    for i in range(0, h, 2):
        for j in range(0, w, 2):
            out[i // 2, j // 2] = max(
                image[i, j], image[i, j + 1],
                image[i + 1, j], image[i + 1, j + 1]
            )
    return out

📚 参考文献与延伸阅读

  • LeCun, Y. et al. (1998). Gradient-Based Learning Applied to Document Recognition. Proceedings of the IEEE — LeNet-5 经典 CNN 架构
  • Krizhevsky, A. et al. (2012). ImageNet Classification with Deep CNNs. NeurIPS — AlexNet 开启深度学习时代
  • CS231n: Convolutional Networks — 斯坦福大学 CNN 教程
  • Wikipedia: Convolutional neural network — 架构演进与数学原理

📝 课后练习

检验你的理解——答对为止