第 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 — 架构演进与数学原理
📝 课后练习
检验你的理解——答对为止