CS231n(伍)——卷积神经网络
$\large\star$ 回顾:从线性分类器到神经网络
前四讲的核心脉络:
| 阶段 | 核心内容 |
|---|---|
| Lecture 2-3 | 线性分类器、损失函数(SVM/Softmax)、梯度下降、优化器 |
| Lecture 4 | 全连接神经网络 + 反向传播(计算图 + 链式法则) |
线性分类器的局限
线性分类器 f(x, W) = Wx + b 有两个根本问题:
- 视觉角度:每个类别只学一个模板——无法捕捉同一类别的多样外观
- 几何角度:只能画线性决策边界,不能处理非线性可分问题
全连接层的局限
2层神经网络 f = W2 ⋅ max (0, W1x) 可以学习非线性边界,但:
⚠️ 将图像展平成一维向量时,空间结构被破坏!32 × 32 × 3 的图像被拉成 3072 维向量,像素间的空间关系全部丢失。
$\large\star$ 一、卷积神经网络概述
1.1 核心思想
CNN 通过卷积和池化操作提取特征,同时保留图像的 2D 空间结构。 - 卷积层:提取局部特征 - 池化层:下采样,增大感受野 - 全连接层:在末端形成 MLP 输出分类分数 - 端到端训练:反向传播 + 梯度下降
1.2 历史里程碑
| 年份 | 工作 | 意义 |
|---|---|---|
| 1998 | LeNet (LeCun et al.) | 梯度学习应用于文档识别,开创 CNN |
| 2012 | AlexNet (Krizhevsky et al.) | ImageNet 深度学习时代开端 |
| 2012-2020 | CNN | 分类、检测、分割、图像描述、生成 |
| 2021-至今 | Transformer | ViT 等将 Transformer 引入视觉(Lecture 8) |
1.3 传统方法 vs CNN
传统流程:原始像素 → 手工特征提取(如 HoG、颜色直方图) → 线性分类器
CNN 流程:原始像素 → 卷积层(自动学习特征) → 全连接层 → 分类分数
CNN 的核心优势:特征提取和分类器联合端到端训练,不再需要手工设计特征。
$\large\star$ 二、卷积层
2.1 全连接 vs 卷积
全连接层: - 输入:3072 × 1(展平向量) - 每个输出神经元和所有输入连接 - 权重矩阵:10 × 3072
卷积层: - 输入:32 × 32 × 3(保持空间结构) - 滤波器(filter/kernel)在空间上滑动,每个位置计算局部点积 - 滤波器深度始终等于输入深度
2.2 卷积运算
一个 5 × 5 × 3 的滤波器在 32 × 32 × 3 的图像上滑动:
- 每个位置计算 5 × 5 × 3 = 75 维点积 + 偏置 → 得到 1 个激活值
- 遍历所有空间位置 → 得到 28 × 28 × 1 的激活图(activation map)
- 每个滤波器产生一张激活图,多层叠 → 输出 Cout × H′ × W′
💡 每个卷积滤波器学习一种局部图像模板(如边缘、颜色对比),且该模板在整张图像上共享权重。
2.3 一般形式
| 参数 | 符号 | 含义 |
|---|---|---|
| 输入 | N × Cin × H × W | 批量大小 × 通道数 × 高 × 宽 |
| 滤波器 | Cout × Cin × KH × KW | 输出通道数 × 输入通道数 × 核高 × 核宽 |
| 偏置 | Cout | 每个输出通道一个偏置 |
| 输出 | N × Cout × H′ × W′ | 批量大小 × 输出通道数 × 输出高 × 输出宽 |
2.4 空间维度公式
$$\boxed{H' = \frac{H - K + 2P}{S} + 1}, \quad \boxed{W' = \frac{W - K + 2P}{S} + 1}$$
其中: - H, W:输入尺寸 - K:卷积核大小 - P:填充(padding) - S:步长(stride)
2.5 Padding(填充)
问题:每次卷积后特征图会缩小 K − 1,多层后特征图消失。
解决:在输入周围补零。
输出尺寸 = W − K + 1 + 2P
常用设置:P = (K − 1)/2(“same” padding),输出尺寸与输入相同。
2.6 Stride(步长)
当需要下采样时,增大步长:
输出尺寸 = (W − K + 2P)/S + 1
2.7 感受野(Receptive Field)
- 对于核大小 K 的卷积,每个输出元素依赖于输入中 K × K 的感受野
- 每堆叠一层,感受野增加 K − 1
- L 层后感受野:1 + L × (K − 1)
问题:对于大图像,需要很多层才能让输出”看到”全图 → 解决方案:使用下采样(步长卷积或池化)
2.8 卷积层的滤波器学到什么?
| 层 | 学到的内容 |
|---|---|
| 第一层 | 局部图像模板:定向边缘、颜色对比(如 Gabor 滤波器般的模式) |
| 深层 | 更大结构:眼睛、文字、物体部件等(更难直接可视化) |
第一层滤波器与手工设计的传统特征非常相似——但 CNN 是从数据中学到的!
2.9 参数与计算量示例
输入 3 × 32 × 32,10 个 5 × 5 滤波器,stride=1,pad=2:
| 项目 | 数值 |
|---|---|
| 输出尺寸 | 10 × 32 × 32 (因为 32 = (32 − 5 + 4)/1 + 1) |
| 可学习参数 | 760(10 × (3 × 5 × 5 + 1)) |
| 乘加运算 | 768, 000(75 × 10 × 32 × 32) |
2.10 卷积常用配置
| 配置 | 超参数 | 用途 |
|---|---|---|
| 标准 3×3 | K = 3, P = 1, S = 1 | 保持空间尺寸,最常用 |
| 标准 5×5 | K = 5, P = 2, S = 1 | 更大感受野 |
| 1×1 卷积 | K = 1, P = 0, S = 1 | 通道变换/降维 |
| 下采样 | K = 3, P = 1, S = 2 | 空间尺寸减半 |
| 通道数 | Cin, Cout | 通常取 2 的幂:32, 64, 128, 256 |
2.11 1D / 2D / 3D 卷积
| 类型 | 输入形状 | 权重形状 | 应用 |
|---|---|---|---|
| 1D 卷积 | Cin × W | Cout × Cin × K | 序列/音频 |
| 2D 卷积 | Cin × H × W | Cout × Cin × K × K | 图像(最常见) |
| 3D 卷积 | Cin × D × H × W | Cout × Cin × K × K × K | 视频/医学影像 |
$\large\star$ 三、池化层
3.1 另一种下采样方式
池化层在每个深度切片上独立进行下采样,无可学习参数。
3.2 最大池化(Max Pooling)
最常见的池化方式。以 2 × 2、stride 2 为例:
$$\begin{bmatrix} 1 & 1 & 2 & 4 \\ 5 & 6 & 7 & 8 \\ 3 & 2 & 1 & 0 \\ 1 & 2 & 3 & 4 \end{bmatrix} \xrightarrow{\text{2×2 max pool}} \begin{bmatrix} 6 & 8 \\ 3 & 4 \end{bmatrix}$$
💡 最大池化提供小空间平移不变性——输入微小平移时,池化输出大致不变。
3.3 池化总结
| 参数 | 说明 |
|---|---|
| 输入 | C × H × W |
| 超参数 | 核大小 K,步长 S,池化函数(max / avg) |
| 输出尺寸 | C × H′ × W′,其中 H′ = (H − K)/S + 1 |
| 可学习参数 | 无 |
| 常用配置 | K = 2, S = 2(空间尺寸减半) |
$\large\star$ 四、平移等变性
卷积和池化都具有平移等变性(Translation Equivariance):
Conv(Translate(X)) = Translate(Conv(X))
直觉:图像特征不依赖于它们在图像中的位置——边缘就是边缘,无论在左上角还是右下角。卷积的权重共享自然赋予了这一性质。
$\large\star$ 五、CNN 架构总览
典型的 CNN 架构:
Input → [Conv → ReLU → Pool]N → [FC → ReLU]M → Softmax
其中: - 卷积层 + ReLU:提取特征,保持空间结构 - 池化层:逐步下采样,增大感受野 - 全连接层:在末端综合全局信息,输出分类分数
1 | # PyTorch 中的典型 CNN (简化) |
$\large\star$ 六、总结
| 概念 | 核心要点 |
|---|---|
| 卷积层 | 在空间上滑动滤波器计算点积,权重共享,保持 2D 结构 |
| 卷积核 | 局部模板,第一层学边缘/颜色,深层学更复杂结构 |
| Padding | 防止特征图缩小,常用 same padding P = (K − 1)/2 |
| Stride | 控制下采样速率 |
| 感受野 | 逐层累积,通过下采样加速扩大 |
| 池化层 | 无参数的下采样,提供平移不变性,常用 K = 2, S = 2 max pool |
| 平移等变性 | 卷积与池化的基本性质:先平移再操作 = 先操作再平移 |
| CNN 架构 | Conv + ReLU + Pool 堆叠 → FC → 分类 |
