👾 Day 7: 卷积神经网络
1️⃣【技术债与演进动机】The Technical Debt & Evolution
全连接网络处理图像时参数爆炸,无法捕捉空间局部性。CNN 通过卷积核共享参数,提取局部特征。
2️⃣【直觉建立】Visual Intuition
想象一个滤波器在图像上滑动,每个位置计算局部区域的加权和,提取边缘、纹理等特征。
🎬 B 站搜索:卷积神经网络 CNN 直观解释
3️⃣【符号解码字典】The Symbol Decoder
$X$ → input_tensor (输入特征图,shape: [C, H, W])
$W$ → self.weight (卷积核,shape: [C_out, C_in, k, k])
$b$ → self.bias (偏置,shape: [C_out])
$Y$ → output_tensor (输出特征图)
$s$ → stride (步长)
$p$ → padding (填充)
4️⃣【核心推导】The Math
### 卷积运算
$$(X * W)_{i,j} = \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} W_{m,n} \cdot X_{i+m, j+n}$$
### 输出尺寸计算
$$H_{out} = \left\lfloor \frac{H_{in} + 2p - k}{s} \right\rfloor + 1$$
$$W_{out} = \left\lfloor \frac{W_{in} + 2p - k}{s} \right\rfloor + 1$$
其中 $k$ 是卷积核尺寸,$p$ 是填充,$s$ 是步长。
### 梯度反向传播
$$\frac{\partial L}{\partial W} = X_{rotated} * \frac{\partial L}{\partial Y}$$
$$\frac{\partial L}{\partial X} = \frac{\partial L}{\partial Y} * W_{rotated}$$
其中 $rotated$ 表示 180 度旋转。
5️⃣【工程优化点】The Optimization Bottleneck
卷积运算复杂度 $O(C_{in} \cdot C_{out} \cdot k^2 \cdot H \cdot W)$。使用深度可分离卷积(Depthwise Separable)加速。
6️⃣【今日靶机】The OJ Mission
🎯 任务:cd exercises/ && python3 day7_task.py
实现 2D 卷积层的 forward 和 backward,在 MNIST 数据集上验证卷积特征提取效果。